Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bài 2/2: Microservices hay Monolith?

    Bài 2/2: Microservices hay Monolith? Các tính chất của Microservice mà DevOps cần biết.


    Có một thực tế thú vị trong ngành CNTT: rất nhiều hệ thống khởi đầu bằng một ứng dụng đơn giản, nhưng khi số lượng người dùng tăng lên hàng nghìn hoặc hàng triệu, kiến trúc ban đầu bắt đầu trở thành rào cản cho việc mở rộng và đổi mới. Đây là lý do kiến trúc Microservices xuất hiện và nhanh chóng trở thành nền tảng cho nhiều hệ thống hiện đại.

    Monolith và Microservices khác nhau như thế nào?


    Trong kiến trúc Monolithic, toàn bộ chức năng của ứng dụng được triển khai như một khối thống nhất. Các thành phần thường chạy trên cùng một máy chủ hoặc một nhóm nhỏ tiến trình và có mức độ phụ thuộc rất cao vào nhau. Khi cần cập nhật một phần nhỏ của hệ thống, nhiều trường hợp phải triển khai lại toàn bộ ứng dụng.
    Ngược lại, Microservices chia ứng dụng thành nhiều dịch vụ nhỏ, độc lập. Mỗi dịch vụ có thể được phát triển, triển khai và mở rộng riêng biệt. Các dịch vụ giao tiếp với nhau thông qua các giao thức mạng rất phổ biến như REST API.
    Sau đây, chúng ta hãy cùng xem xét một ví dụ trong một hệ thống thương mại điện tử:
    • Chức năng Search Service có thể viết bằng Python.
    • Chức năng Payment Service có thể viết bằng Java.
    • Recommendation Engine có thể viết bằng C#.
    • Front-end có thể sử dụng NodeJS.
    Tất cả cùng hoạt động như một hệ thống hoàn chỉnh thông qua các API tiêu chuẩn.

    Những đặc điểm nổi bật của Microservices


    Microservices được xây dựng dựa trên triết lý tính độc lập:
    • Triển khai độc lập.
    • Nâng cấp độc lập.
    • Mở rộng độc lập.
    • Sử dụng công nghệ độc lập.
    • Duy trì tính mô-đun của hệ thống.
    Nếu Search Service chịu tải cao, chúng ta chỉ cần scale riêng Search Service thay vì phải mở rộng toàn bộ hệ thống. Điều này giúp tối ưu chi phí và tài nguyên hạ tầng.

    Tính sẵn sàng cao hơn


    Một trong những ưu điểm lớn nhất của Microservices là khả năng chịu lỗi. Bạn hãy tưởng tượng Payment Service gặp sự cố. Trong mô hình Monolith, toàn bộ ứng dụng có thể ngừng hoạt động. Nhưng trong mô hình Microservices, người dùng vẫn có thể duyệt sản phẩm, thực hiện tìm kiếm, thêm hàng vào giỏ.... Chỉ có chức năng thanh toán của ứng dụng thì bị ảnh hưởng. Khi kết hợp với container và các nền tảng orchestration như Kubernetes, các dịch vụ có thể được nhân bản trên nhiều node khác nhau để tăng khả năng chịu lỗi và tính sẵn sàng.

    Vì sao DevOps trở nên quan trọng?


    Microservices mang lại sự linh hoạt nhưng đồng thời làm tăng đáng kể độ phức tạp vận hành. Thay vì quản lý một ứng dụng lớn, giờ đây doanh nghiệp (là các anh DevOps) phải quản lý:
    • Hàng chục hoặc hàng trăm service.
    • Hàng trăm container.
    • Nhiều môi trường Development, Test, Staging và Production.
    • Hệ thống giám sát phân tán.
    • Load balancing.
    • Logging và tracing xuyên suốt hệ thống.
    Chính vì vậy, tự động hóa Automation không còn là lựa chọn mà trở thành yêu cầu bắt buộc. Dẫn đến các xu thế công nghệ như Docker, Kubernete, CI/CD, Infrastructure as Code (Terraform, OpenTofu), GitOps, Observability Platform...được sinh ra để giải quyết những thách thức này.

    Microservices không phải lúc nào cũng là lựa chọn tốt nhất


    Đây là điểm mà nhiều kỹ sư mới thường bỏ qua. Microservices không phải "viên đạn bạc" cho mọi bài toán. Nếu ứng dụng còn nhỏ, đội ngũ phát triển ít người và yêu cầu mở rộng chưa cao, một kiến trúc Monolith được thiết kế tốt có thể là lựa chọn hợp lý hơn. Thậm chí nhiều chuyên gia khuyến nghị nên bắt đầu bằng Monolith, sau đó tách dần thành Microservices khi nhu cầu thực sự xuất hiện (ý này đã đề cập trong bài 1).

    Góc nhìn dành cho DevOps và Automation Engineer


    Khi doanh nghiệp chuyển sang Microservices, vai trò của DevOps thay đổi hoàn toàn. Trọng tâm không còn là "triển khai server" mà là tự động hóa provisioning hạ tầng, tự động hóa triển khai deployment, tự động scale ứng dụng, theo dõi sức khỏe dịch vụ, thu thập log, metrics và traces, đảm bảo tính sẵn sàng và khả năng phục hồi của toàn bộ nền tảng. Nói hơi cường điệu một chút, Microservices chính là một trong những động lực lớn nhất thúc đẩy sự phát triển của DevOps, Cloud Native và Infrastructure as Code trong thập kỷ vừa qua. Đó cũng là lý do vì sao khi học Kubernetes, Terraform, GitOps hay Platform Engineering, chúng ta thực chất đang học cách vận hành thế giới Microservices ở quy mô lớn.​
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X