Vai trò của Service Mesh và API Gateway trong Microservices

Nếu bạn yêu thích microservices, thì bạn có thể đã nghe nói về hai thuật ngữ này nhiều lần. Thường thì mọi người bị nhầm lẫn giữa hai điều này. Trong bài viết này, tôi sẽ nói chi tiết về Service Mesh (lưới dịch vụ), API Gateway và thảo luận khi nào thì sử dụng cái gì.

Các lớp mạng

Trước khi đi sâu vào Service Mesh (lưới dịch vụ) và API Gateway, chúng ta hãy tìm hiểu các lớp mạng (Network Layers). Sau đây là mô hình lớp mạng OSI:

Network Layers

Lý do để có bản cập nhật này là chúng ta sẽ nói về một số lớp mạng trong các phần tiếp theo.

Service Mesh

Một lưới dịch vụ (Service Mesh) là một công nghệ quản lý giao tiếp service-to-service trong một hệ thống phần mềm phân tán (distributed system). Các mắt lưới dịch vụ quản lý kiểu giao tiếp mạng đông-tây. Lưu lượng theo hướng Đông-Tây cho biết luồng di chuyển bên trong trung tâm dữ liệu, cụm Kubernetes hoặc hệ thống phân tán (distributed system).

Lưới dịch vụ (Service Mesh) bao gồm hai thành phần quan trọng:

  • Control plane
  • Data plane

Các proxy nằm bên cạnh ứng dụng được gọi là data plane, trong khi các thành phần quản lý điều phối hành vi của proxy được gọi là control plane.

Service Mesh


Lưới dịch vụ (Service Mesh) cho phép bạn tách các logic nghiệp vụ của ứng dụng giúp nâng cao độ tin cậy, bảo mật và khả năng quan sát.

Quản lý mạng và lưu lượng

Lưới dịch vụ (Service Mesh) cho phép bạn thực hiện khám phá dịch vụ động. Một proxy sidecar có thể giúp bạn cân bằng tải (load balancing) và giới hạn tốc độ (rate limiting). Nó có thể giúp bạn phân chia lưu lượng để thực hiện A/B testing, có thể hữu ích cho các bản phát hành canary.

Khả năng quan sát và độ tin cậy

Lưới dịch vụ (Service Mesh) hỗ trợ theo dõi phân tán, giúp bạn giám sát nâng cao (số lượng yêu cầu, tỷ lệ thành công và độ trễ phản hồi) và gỡ lỗi. Nó thậm chí còn có khả năng khai thác giao tiếp dịch vụ với dịch vụ để hiểu rõ hơn về giao tiếp.

Vì lưới dịch vụ cung cấp kiểm tra tình trạng (health checks), thử lại (retries), hết thời gian chờ (timeouts) và ngắt mạch (circuit breaking), nên nó cải thiện độ tin cậy cơ bản của ứng dụng của bạn.

Bảo mật

Lưới dịch vụ cho phép TLS lẫn nhau giữa các dịch vụ, giúp tăng tính bảo mật của giao tiếp giữa dịch vụ và dịch vụ. Bạn cũng có thể triển khai danh sách kiểm soát truy cập (ACL) làm chính sách bảo mật.

Một proxy service mesh / sidecar thực sự hỗ trợ nhiều loại dịch vụ và thực hiện các chính sách lưu lượng L4 / L7.

Có rất nhiều lưới dịch vụ có sẵn trên thị trường. Sau đây là một vài trong số chúng:

Bạn có thể tìm thấy một số bài báo trên internet so sánh các lưới dịch vụ được liệt kê ở trên.

API Gateway

API Gateway hoạt động như một điểm truy cập duy nhất vào một cụm, một trung tâm dữ liệu hoặc một nhóm các dịch vụ phân tán. Trong cấu trúc liên kết mạng, nó thường được gọi là lưu lượng truy cập bắc-nam. Thông thường, các thiết bị di động rơi vào loại lưu lượng mạng này.

Cũng có thể mọi người sẽ sử dụng API Gateway để giao tiếp giữa hai sản phẩm được triển khai trong cùng một trung tâm dữ liệu. Trong trường hợp đó, loại giao tiếp mạng có thể là đông tây.

Một API Gateway nhận các cuộc gọi từ các client và định tuyến chúng đến các dịch vụ thích hợp. Trong khi làm như vậy, nó cũng có thể phiên dịch các giao thức.

API Gateway

Có nhiều lợi ích khác nhau khi sử dụng API Gateway:

  • Trừu tượng: Một API Gateway có thể che dấu sự phức tạp của các microservices bên dưới và tạo ra trải nghiệm đồng nhất cho khách hàng.
  • Xác thực: API Gateway có thể đảm nhận việc xác thực và chuyển thông tin token cho các dịch vụ.
  • Kiểm soát lưu lượng: API Gateway có thể điều chỉnh lưu lượng gửi đi và gửi đến các API.
  • Giám sát các API: Nếu bạn muốn giám sát các API, API Gateway có thể giúp bạn làm điều đó bằng cách cung cấp khả năng giám sát các yêu cầu / phản hồi API của khách hàng.
  • Chuyển đổi: Cổng API có thể giúp phiên dịch / chuyển đổi các yêu cầu / phản hồi API. Nó cũng có thể trợ giúp với các bản dịch giao thức.
  • Tổng hợp phản hồi: API Gateway có thể giúp tổng hợp các phản hồi riêng lẻ từ nhiều API thành một phản hồi duy nhất rồi trả về cho khách hàng.

API Gateway thường chỉ tập trung vào các chính sách L7.

Các loại API Gateway

Từ quan điểm triển khai, có hai cách mà các API Gateway có thể được sử dụng:

  • API Gateway nội bộ: Hoạt động như một cổng cho một nhóm dịch vụ hoặc cho một phạm vi sản phẩm nội bộ.
  • API Gateway Edge: Hoạt động như một cổng cho người tiêu dùng hoặc khách hàng di động của tổ chức bên ngoài.

Có một số API Gateway có sẵn trên thị trường. Sau đây là một vài trong số chúng:

Sử dụng khi nào?

Bây giờ bạn đã biết lưới dịch vụ (Service Mesh) và API Gateway là gì, hãy cố gắng tìm hiểu khi nào thì sử dụng chúng.

Khi nào sử dụng Service Mesh

  • Khi bạn cần đạt được giao tiếp dịch vụ L4 / L7 với bảo mật và giám sát trong cùng một phạm vi sản phẩm.
  • Khi bạn có thể triển khai proxy sidecar cho mọi phiên bản dịch vụ đơn lẻ và các bản sao của nó.
  • Khi các dịch vụ có thể chia sẻ cùng một chứng chỉ CA để thiết lập giao tiếp an toàn (điều này có thể không thực hiện được trên các sản phẩm khác nhau).

Khi nào sử dụng API Gateway

  • Khi bạn cần đạt được giao tiếp dịch vụ L7 với bảo mật và giám sát trên các sản phẩm khác nhau.
  • Khi bạn muốn hiển thị API như một sản phẩm có / không có tính năng kiếm tiền
  • Khi bạn muốn cung cấp quản lý toàn bộ vòng đời API cho các nhà phát triển.
  • Khi bạn cần dịch các giao thức giao tiếp dịch vụ.

Kết hợp Service Mesh và API Gateway

Rất có thể lưới dịch vụ (Service Mesh) và API Gateway có thể cùng tồn tại. Sơ đồ sau đây trình bày các kịch bản lưới dịch vụ (Service Mesh) và API Gateway cùng tồn tại:

Kết hợp Service Mesh và API Gateway

Sơ đồ trên cho thấy rằng đối với một phạm vi sản phẩm, bạn có thể triển khai lưới dịch vụ (lưu lượng truy cập đông-tây). Khi cần giao tiếp giữa các sản phẩm, có thể sử dụng API Gateway nội bộ (giao thông đông tây). Khi các client ở bên ngoài cần giao tiếp với các dịch vụ, một Edge API Gateway có thể được sử dụng (lưu lượng truy cập bắc-nam).

Microservices
Bài Viết Liên Quan:
Xây dựng Microservices bằng ASP.NET Core - Transaction Outbox với RabbitMQ
Trung Nguyen 16/05/2021
Xây dựng Microservices bằng ASP.NET Core - Transaction Outbox với RabbitMQ

Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng outbox pattern để triển khai distributed transaction trong kiến trúc microservices.

Xây dựng Microservices bằng ASP.NET Core - Giao tiếp máy chủ thời gian thực với SignalR và RabbitMQ
Trung Nguyen 16/05/2021
Xây dựng Microservices bằng ASP.NET Core - Giao tiếp máy chủ thời gian thực với SignalR và RabbitMQ

Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách bạn có thể kết hợp SignalR và RabbitMQ để xây dựng giao tiếp máy chủ-máy khách thời gian thực.

Xây dựng Microservices bằng ASP.NET Core - Thao tác với database bằng Marten
Trung Nguyen 16/05/2021
Xây dựng Microservices bằng ASP.NET Core - Thao tác với database bằng Marten

Trong bài viết này, chúng ta sẽ tìm hiểu về truy cập dữ liệu và cách lưu trữ dữ liệu một cách hiệu quả trong microservices sử dụng Marten và PostgreSQL.

Xây dựng Microservices bằng ASP.NET Core - Xây dựng API Gateway với Ocelot
Trung Nguyen 09/05/2021
Xây dựng Microservices bằng ASP.NET Core - Xây dựng API Gateway với Ocelot

Trong bài viết này, chúng ta sẽ tìm hiểu về API Gateway trong kiến ​​trúc microservices và cách xây dựng API Gateway bằng Ocelot.