#
0 kết quả
#

Menu

Kiến trúc Microservices
#
Microservices
Microservices hiện được quan tâm trong giới phần mềm, công nghệ với nhiều bài viết, blog, thảo luận, truyền thông, hội thảo. Kỳ vọng về khả năng của Microservices đang lên đỉnh giống như một xu hướng thời trang đang lan rộng.

Mỗi microservices là một đơn vị độc lập, cùng nhiều đơn vị khác tạo nên một ứng dụng lớn. Bằng cách chia ứng dụng thành các đơn vị nhỏ, mỗi phần của nó được triển khai độc lập và có thể mở rộng, có thể được viết bởi các nhóm khác nhau bằng các ngôn ngữ lập trình khác nhau và được kiểm tra riêng lẻ.
So sánh kiến trúc Microservices và Monolitich
Microservices
Monolitich
Khái niệm
Với kiến trúc Microservices mỗi dịch vụ sẽ được chia nhỏ thành nhiều thành phần khác nhau, mỗi thành phần sẽ hoạt động độc lập, được phát triển độc lập và chỉ xử lý các nghiệp vụ chức năng của nó. Mỗi thành phần cũng sẽ không lệ thuộc vào công nghệ phát triển với các thành phần khác.

Với cách triển khai truyền thống, sẽ sử dụng kiến trúc monolitich, mỗi dịch vụ sẽ hoạt động độc lập và đầy đủ các chức năng từ Xác thực, Định danh người dùng, Logging các request cho đến xử lý nghiệp vụ của dịch vụ. Mỗi dịch vụ được mở rộng bằng cách tạo thêm một node dịch vụ mới và phân tải request vào các node dịch vụ.

Mô hình
Ưu điểm
  • Kiến trúc phù hợp cho các dịch vụ lớn. Chia nhỏ các chức năng thành các thành phần, lập trình viên thuận lợi hơn trong việc phát triển, vận hành mỗi thành phần độc lập với nhau.

  • Thuận lợi trong việc phát triển lâu dài cho dịch vụ. Vì mỗi thành phần chỉ thực hiện đúng một chức năng, nên việc cải tiến sẽ dễ dàng thực hiện và không gây gián đoạn tới các thành phần khác. Mỗi thành phần sẽ giao tiếp với nhau qua giao diện riêng.

  • Việc phát triển mỗi thành phần của dịch vụ cũng được chia nhỏ, và đưa tới các team phát triển, khối lượng việc xử lý của mỗi team sẽ nhỏ và nhanh chóng hơn.

  • Mỗi thành phần sẽ không phụ thuộc vào công nghệ với các thành phần khác.

  • Với kiến trúc Monolitich khi một chức năng trong dịch vụ gặp lỗi, sẽ dẫn đến toàn bộ dịch vụ bị gián đoạn. Với kiến trúc Microservices, khi một thành phần gặp lỗi, các thành phần khác sẽ không bị gián đoạn.

  • Phát triển các dịch vụ quy mô nhỏ nhanh chóng và đơn giản. Mỗi ứng dụng độc lập bao gồm đẩy đủ các chức năng sử dụng chung ngôn ngữ lập trình.

  • Thuận tiện trong việc kiểm thử cho mỗi dịch vụ.

  • IDEs cho lập trình viên phát triển ứng dụng sẽ hỗ trợ đầy đủ cho việc phát triển một dịch vụ. Ví dụ với dịch vụ Support phát triển bằng .Net, có thể sử dụng Visual Studio.
Nhược điểm
  • Dịch vụ sẽ có nhiều thành phần phải quản lý.

  • Các yêu cầu về hạ tầng để đáp ứng cho các thành phần của dịch vụ cũng sẽ phức tạp hơn.

  • Dịch vụ sẽ được phát triển bởi nhiều công nghệ, ngôn ngữ lập trình.

  • Việc kiểm thử toàn bộ hệ thống sẽ phức tạp hơn.
  • Kiến trúc này sẽ không lý tưởng cho việc phát triển các ứng dụng quy mô lớn, cần phát triển bằng nhiều công nghệ, ngôn ngữ lập trình...

  • Về lâu dài, rất nhiều tính năng mới của dịch vụ được phát triển thêm, rất nhiều code được viết thêm, lượng code của dịch vụ sẽ phòng to, sẽ rất khó để theo dõi một lượng lớn code trong cùng 1 chỗ. Việc tương tác, làm việc của team phát triển dịch vụ sẽ chậm đi nhiều khi phải quản lý một lượng code lớn.

  • Việc sửa lỗi, nâng cấp, bổ sung thêm các tính năng mới khi hệ thống lớn cũng sẽ khó và phức tạp hơn.

  • Mỗi dịch vụ đều có các chức năng về xác thực, định danh, phân quyền, logging... riêng dẫn tới việc quản lý khi hệ thống lớn hơn cũng sẽ rất phức tạp.
Microservices
Khái niệm
Với kiến trúc Microservices mỗi dịch vụ sẽ được chia nhỏ thành nhiều thành phần khác nhau, mỗi thành phần sẽ hoạt động độc lập, được phát triển độc lập và chỉ xử lý các nghiệp vụ chức năng của nó. Mỗi thành phần cũng sẽ không lệ thuộc vào công nghệ phát triển với các thành phần khác.

Mô hình
Ưu điểm
  • Kiến trúc phù hợp cho các dịch vụ lớn. Chia nhỏ các chức năng thành các thành phần, lập trình viên thuận lợi hơn trong việc phát triển, vận hành mỗi thành phần độc lập với nhau.

  • Thuận lợi trong việc phát triển lâu dài cho dịch vụ. Vì mỗi thành phần chỉ thực hiện đúng một chức năng, nên việc cải tiến sẽ dễ dàng thực hiện và không gây gián đoạn tới các thành phần khác. Mỗi thành phần sẽ giao tiếp với nhau qua giao diện riêng.

  • Việc phát triển mỗi thành phần của dịch vụ cũng được chia nhỏ, và đưa tới các team phát triển, khối lượng việc xử lý của mỗi team sẽ nhỏ và nhanh chóng hơn.

  • Mỗi thành phần sẽ không phụ thuộc vào công nghệ với các thành phần khác.

  • Với kiến trúc Monolitich khi một chức năng trong dịch vụ gặp lỗi, sẽ dẫn đến toàn bộ dịch vụ bị gián đoạn. Với kiến trúc Microservices, khi một thành phần gặp lỗi, các thành phần khác sẽ không bị gián đoạn.

Nhược điểm
  • Dịch vụ sẽ có nhiều thành phần phải quản lý.

  • Các yêu cầu về hạ tầng để đáp ứng cho các thành phần của dịch vụ cũng sẽ phức tạp hơn.

  • Dịch vụ sẽ được phát triển bởi nhiều công nghệ, ngôn ngữ lập trình.

  • Việc kiểm thử toàn bộ hệ thống sẽ phức tạp hơn.
Monolitich
Khái niệm
Với cách triển khai truyền thống, sẽ sử dụng kiến trúc monolitich, mỗi dịch vụ sẽ hoạt động độc lập và đầy đủ các chức năng từ Xác thực, Định danh người dùng, Logging các request cho đến xử lý nghiệp vụ của dịch vụ. Mỗi dịch vụ được mở rộng bằng cách tạo thêm một node dịch vụ mới và phân tải request vào các node dịch vụ.

Mô hình
Ưu điểm
  • Phát triển các dịch vụ quy mô nhỏ nhanh chóng và đơn giản. Mỗi ứng dụng độc lập bao gồm đẩy đủ các chức năng sử dụng chung ngôn ngữ lập trình.

  • Thuận tiện trong việc kiểm thử cho mỗi dịch vụ.

  • IDEs cho lập trình viên phát triển ứng dụng sẽ hỗ trợ đầy đủ cho việc phát triển một dịch vụ. Ví dụ với dịch vụ Support phát triển bằng .Net, có thể sử dụng Visual Studio.

Nhược điểm
  • Kiến trúc này sẽ không lý tưởng cho việc phát triển các ứng dụng quy mô lớn, cần phát triển bằng nhiều công nghệ, ngôn ngữ lập trình...

  • Về lâu dài, rất nhiều tính năng mới của dịch vụ được phát triển thêm, rất nhiều code được viết thêm, lượng code của dịch vụ sẽ phòng to, sẽ rất khó để theo dõi một lượng lớn code trong cùng 1 chỗ. Việc tương tác, làm việc của team phát triển dịch vụ sẽ chậm đi nhiều khi phải quản lý một lượng code lớn.

  • Việc sửa lỗi, nâng cấp, bổ sung thêm các tính năng mới khi hệ thống lớn cũng sẽ khó và phức tạp hơn.

  • Mỗi dịch vụ đều có các chức năng về xác thực, định danh, phân quyền, logging... riêng dẫn tới việc quản lý khi hệ thống lớn hơn cũng sẽ rất phức tạp.
Kiến trúc Microservices cùng API Gateway
#
API Gateway là phương pháp tiếp cận tối ưu cho kiến trúc microservices. Một cổng kết nối API là một máy chủ truy xuất duy nhất vào hệ thống. Nó cũng tương tự như mẫu thiết kế Facade dựa trên thiết kế hướng đối tượng. Cổng kết nối API che giấu đi thông tin kiến trúc hệ thống nội bộ và nó cung cấp các API tùy chỉnh cho mỗi Client. Cổng kết nối API còn có trách nhiệm xác thực, giám sát, cân bằng tải, caching, định hình yêu cầu và quản lí thông tin, xử lí phản hồi tĩnh.

Cổng kết nối API làm nhiệm vụ định tuyến các yêu cầu, kết hợp và chuyển đổi các giao thức. Tất cả yêu cầu từ Client đều đi qua cổng kết nối API. Sau đó cổng kết nối API định tuyến các yêu cầu này tới microservices phù hợp. Cổng kết nối API Gateway sẽ xử lý một yêu cầu người dùng bằng cách gọi đến một loạt microservices rồi tổng hợp các kết quả. Nó có thể chuyển đổi giữa các giao thức web như HTTP, WebSocket và các giao thức nội bộ không thân thiện với web.
Tính năng API Gateway
Tối ưu đầu cuối
Khi một request của Client tới dịch vụ yêu cầu thông tin của nhiều thành phần trong hệ thống, ví dụ: Customer, Order, Invoices... API Gateway sẽ thực hiện request đồng thời tới các thành phần, lấy về các thông tin từ từng thành phần, ghép lại và phản hồi lại kết quả mong muốn cho Client.
Ngắt kết nối API
Khi mỗi thành phần trong hệ thống dừng hoạt động, hoặc trả về số lượng lớn lỗi đạt đến ngưỡng đã được quy định, API Gateway có thể tự động thực hiện dừng gửi request tới thành phần gặp lỗi. Việc này sẽ cho đội vận hành có thời gian để phân tích log, xử lý lỗi và update lại thành phần.
Thuận tiện nâng cấp các thành phần
Khi các thành phần trong dịch vụ được nâng cấp, phát triển thêm tính năng API Gateway có các hình thức để có thể điều phối tỉ lệ các request giữa phiên bản hiện tại và phiên bản mới.
Kết nối tập trung
Client sử dụng API sẽ kết nối tập trung qua API Gateway, API Gateway sẽ thực hiện các việc xác thực request của client, log các request, giám sát các Microservices, báo cáo/phân tích log...
Cân bằng tải
API Gateway có thể phối hợp cùng Service-discovery tool để thực hiện cân bằng tải, phân phối request tới các cụm API.
Kong - API Gateway phổ biến, đáng tin cậy
#
Kong là giải pháp API Gateway mã nguồn mở phổ biến nhất hiện nay. Kong sẽ đứng trước hệ thống API của bạn, giúp bạn nhanh chóng, thuận tiện và bảo mật trong triển khai mô hình Microservices, cũng như quản lý và triển khai các giải pháp API. Với các plugins, Kong sẽ cung cấp thêm nhiều chức năng và dịch vụ mở rộng dựa trên nền tảng lõi.

Kong được xây dựng trên # và hoạt động thông qua các RESTful API đơn giản, dễ sử dụng. Hiện tại, CMC Cloud là đối tác cung cấp API Gateway của Kong tại thị trường Việt Nam.
Tính năng
#

Authentication

Bảo vệ các dịch vụ của bạn qua tầng xác thực.

#

Traffic Control

Quản lý, điều chỉnh và chặn các lưu lượng API vào ra.

#

Analytics

Trình diễn, kiểm tra và giám sát các lưu lượng vào API

#

Transformations

Chuyển đổi trực tiếp các yêu cầu và phản hồi API trong khi xử lý.

#

Logging

Bắt luồng yêu cầu và phản hồi dữ liệu vào hệ thống ghi log.

#

Serverless

Thực hiện các chức năng serverless qua các API.

Tính năng
#

Authentication

Bảo vệ các dịch vụ của bạn qua tầng xác thực.

#

Traffic Control

Quản lý, điều chỉnh và chặn các lưu lượng API vào ra.

#

Analytics

Trình diễn, kiểm tra và giám sát các lưu lượng vào API

#

Transformations

Chuyển đổi trực tiếp các yêu cầu và phản hồi API trong khi xử lý.

#

Logging

Bắt luồng yêu cầu và phản hồi dữ liệu vào hệ thống ghi log.

#

Serverless

Thực hiện các chức năng serverless qua các API.

Ưu điểm
#
Scalable
Kong có thể dễ dàng mở rộng theo chiều ngang bằng cách thêm nhiều nodes mới. Kong có thể xử lý khối lượng lớn các công việc với độ trễ thấp.
#
Modular
Bổ sung thêm các tính năng vào Kong bằng các plugin mà được cài đặt và cấu hình thông qua RESTful Admin API.
#
Hoạt động trên mọi hạ tầng
Triển khai Kong trên môi trường cloud, on-premises hoặc hybird.