Vì sao tôi chọn Echo để thay thế cho Gin framework?


  • Giám sát viên

    Trước đây khi mới bắt đầu với golang, tôi cũng tìm trên mạng và nghe bà con các nơi khuyến khích sử dụng Gin và nó khá phổ biến, dễ sử dụng lại hỗ trợ nhiều tính năng. Và tôi đã dùng Gin để hoàn thành xong project của mình, nhưng đến khi deploy thì tôi gặp một vấn đề lớn về RAM.
    Tôi đã chọn con VPS 1G để tiết kiệm trong đó có các dịch vụ khác: Docker, Elasticsearch, Postgres và Go. Riêng Elasticsearch đã chiếm ít nhất 512MB rồi, còn cả nùi dẻ kia nữa thì... tôi nhận ngay sự cố tràn RAM đầu tiên trong đời... 😑 😒 😓 😔 😖
    Sau một hồi ngâm cứu và bình tĩnh lại, tôi đã thử viết lại project với Echo Framework, vì thấy một số anh em dev nước ngoài cho thông tin về Echo nhanh và nhẹ hơn Gin, code cũng ngắn gọn hơn.
    Tôi đã làm lại toàn bộ project và deploy lại thì... nó đã chạy được. Tất nhiên cũng phải trên 90% RAM.
    Đây cũng là một kinh nghiệm thực tế tôi muốn chia sẽ với anh em để lựa chọn hướng đi cho mình:

    • Nên xác định quy mô của project và cả cấu hình VPS trước khi bắt đầu.
    • Chọn framework phù hợp với nhu cầu sử dụng để tối ưu nhất.
    • Định hướng scale sẵn cho project trường hợp quá tải.
    Một số ưu điểm về Echo Framework mà tôi thích:
    • Có document khá chi tiết và rõ ràng, tiện cho anh em tra cứu.
    • Nhanh, gọn, nhẹ
    • Có đầy đủ các middleware cần thiết được thiết kế sẵn, cần thì gọi và sử dụng.
    • Handler có tham số error trả về rất tiện
    func(c echo.Context) (err error) {
      u := new(User)
      if err = c.Bind(u); err != nil {
        return
      }
      return c.JSON(http.StatusOK, u)
    }
    

    Nếu là gin thì mình phải viết khác chút:

    ...
    c.JSON(http.StatusOK, u)
     return
    ...
    
    • Hỗ trợ custom Context giúp bạn tiện lợi rất nhiều thao tác
    type CustomContext struct {
    	echo.Context
    }
    
    func (c *CustomContext) Foo() {
    	println("foo")
    }
    
    func (c *CustomContext) Bar() {
    	println("bar")
    }
    
    e.Use(func(h echo.HandlerFunc) echo.HandlerFunc {
    	return func(c echo.Context) error {
    		cc := &CustomContext{c}
    		return h(cc)
    	}
    })
    

    Ngoài ra còn nhiều ưu điểm khác nữa, bạn tự cảm nhận khi sử dụng nhé.

    Trên là các kinh nghiệm thực tế mình đã gặp, và tất nhiên chỉ là ý kiến của cá nhân thôi, project cũng không lớn lắm nên việc viết lại chỉ tốn vài ngày. Mong một kinh nghiệm trên sẽ có ích với anh em.
    Thân chào !


  • Trùm cuối

    @lyquocnam bài viết hay quá, mà vps có dùng swap ram không bác? 😁


  • Giám sát viên

    @admin Swap Ram là gì vậy ad ?


  • Trùm cuối

    @lyquocnam đã nói trong Vì sao tôi chọn Echo để thay thế cho Gin framework?:

    @admin Swap Ram là gì vậy ad ?

    Swap Ram là để cứu cánh cho những trường hợp memory leak như này, với những VPS sử dụng SSD thì có thể sử dụng 1 phần ổ cứng để chia sẻ gánh nặng cho Ram, tuy sẽ không thể bằng Ram thật nhưng vì là SSD nên nó cũng khá ổn. VPS hiện tại em của em 1GB và đang sử dụng thêm 10GB Swap Ram nên cũng hiếm khi bị memory leak 😁


  • Giám sát viên

    @admin Là Swap File bên linux đúng ko ad ? Mình mới tìm hiểu thêm về phần này. Cảm ơn ad đã gợi ý


Hãy đăng nhập để trả lời
 

Có thể bạn cũng quan tâm

.
DMCA.com Protection Status