Điều phối dịch vụ trên Google Cloud

Tháng Mười 13, 2021
Nga Pham

Việc thay đổi từ kiến trúc nguyên khối (monolithic) sang microservices đem lại những lợi ích vô cùng rõ ràng, bao gồm khả năng tái sử dụng, khả năng mở rộng và khiến việc điều chỉnh, thay đổi trở nên dễ dàng hơn. Trong hầu hết mọi trường hợp, các vấn đề kinh doanh đều được giải quyết bằng cách phối hợp nhiều dịch vụ nhỏ. Sự phối hợp này dựa trên các kiến trúc hướng sự kiện, có thể được thực hiện thông qua hai cách tiếp cập: choreography – biên đạo và orchestration – điều phối.

Service Choreography và Service Orchestration

Theo hướng Service Choreography, mỗi dịch vụ hoạt động độc lập và tương tác với các dịch vụ khác bằng cách kết hợp lỏng lẻo qua các sự kiện. Các sự kiện được kết hợp lỏng lẻo này có thể được thay đổi và mở rộng quy mô một cách độc lập, có nghĩa là sẽ không có một điểm lỗi duy nhất nào. Tuy nhiên, việc có quá nhiều sự kiện ở giữa các dịch vụ khiến việc theo dõi chúng trở nên khó khăn hơn. Logic nghiệp vụ được phân phối và trải dài trên nhiều dịch vụ, chính vì vậy không thể tập trung vào một nơi duy nhất nào để xử lý sự cố. Không có một “trung tâm sự thật” nào cung cấp hiểu biết về hệ thống. Tất cả việc hiểu, cập nhật và khắc phục sự cố đều có tính phân tán.

Theo hướng Service Orchestration, để xử lý các thách thức giám sát của Choreography, nhà phát triển cần xây dựng một cấu trúc cho luồng sự kiện, song vẫn giữ được bản chất kết hợp lỏng lẻo của các dịch vụ hướng sự kiện. Bằng cách điều phối dịch vụ, các dịch vụ tương tác với nhau thông qua một bộ điều phối trung tâm – nơi điều khiển tất cả các tương tác giữa các dịch vụ. Bộ điều phối này cung cấp chế độ xem cấp cao về các quy trình nghiệp vụ để theo dõi việc thực thi và khắc phục sự cố. Trong Google Cloud, Workflows xử lý công việc điều phối dịch vụ này.

Khi đưa ra quyết định lựa chọn giữa hai cách tiếp cận này để sử dụng cho ứng dụng của mình, bạn cần cân nhắc đến đặc điểm của các dịch vụ và trường hợp sử dụng của mình. Bạn nên lựa chọn orchestration trong bối cảnh chỉ có một microservice, và lựa chọn choreography khi có bối cảnh sử dụng phức tạp. Có nghĩa là, bạn có thể sử dụng choreography ở mức độ cao cấp hơn, kết hợp với orchestration ở mức độ thấp hơn trong cùng một hệ thống.

Google Cloud cung cấp các dịch vụ hỗ trợ cả hai phương pháp trên. Pub/Sub và Eventarc đều phù hợp với việc điều bối các dịch vụ theo hướng choreography, còn Workflows thích hợp với các dịch vụ được điều phối tập trung theo phương pháp orchestration.

Workflows

Workflows là một dịch vụ được sử dụng để sắp xếp và tự động hóa Google Cloud và các dịch vụ API dựa trên HTTP với các quy trình làm việc không máy chủ. Đây là một phương pháp được quản lý hoàn toàn (fully managed) bởi Google, có thể mở rộng và có thể được quan sát để xác định một quy trình kinh doanh và điều phối các lệnh gọi đến dịch vụ. Workflows gọi các dịch vụ đó là các API web đơn giản. Sử dụng Workflows, bạn có thể xác định luồng logic nghiệp vụ của mình bằng ngôn ngữ định nghĩa workflow dựa trên YAML và sử dụng giao điện người dùng hoặc API để kích hoạt quy trình làm việc. Bạn cũng có thể sử dụng Workflows để tự động hóa các quy trình phức tạp, bao gồm các công việc hướng sự kiện và hàng loạt, các logic xử lý lỗi, chuỗi hoạt động và hơn thế nữa. Workflows đặc biệt hữu ích với các dịch vụ Google Cloud thực hiện các hoạt động tốn nhiều thời gian, vì Workflows sẽ đợi đến khi chúng được hoàn thành, ngay cả khi mất đến hàng giờ đồng hồ. Bằng các lệnh gọi lại (callbacks), Workflows có thể đợi các sự kiện bên ngoài trong nhiều ngày hoặc thậm chí là nhiều tháng.

Pub/Sub

Pub/Sub cho phép các dịch vụ giao tiếp không đồng bộ với nhau, với độ trễ khoảng 100 mili giây. Pub/Sub được sử dụng cho phần mềm trung gian hướng thông điệp (messaging-oriented middleware) để tích hợp các dịch vụ hoặc như một hàng đợi để song song hóa các tác vụ. Nhà xuất bản (publisher) có thể gửi sự kiện đến dịch vụ Pub/Sub mà không cần quan tâm đến cách thực hoặc thời gian các sự kiện này được xử lý. Sau đó, Pub/Sub sẽ cung cấp sự kiện cho tất cả các dịch vụ cần phản hồi với chúng (subcribers). Pub/Sub cũng được sử dụng để phân tích các luồng phát trực tuyến và đường ống tích hợp dữ liệu để nhập và phân phối dữ liệu.

Eventarc

Eventarc cho phép bạn xây dựng các kiến ​​trúc hướng sự kiện mà không cần phải triển khai, tùy chỉnh hoặc duy trì cơ sở hạ tầng bên dưới. Nó cung cấp một giải pháp được tiêu chuẩn hóa để quản lý luồng thay đổi trạng thái – hay còn được gọi là các sự kiện – giữa các microservice tách rời nhau. Eventarc định tuyến các sự kiện này đến Cloud Run, đồng thời quản lý phân phối, bảo mật, ủy quyền, khả năng quan sát và xử lý lỗi cho bạn. Nó cũng cung cấp một cách dễ dàng để nhận các sự kiện, không chỉ từ Pub/Sub topic mà còn từ một số nguồn Google Cloud nhờ tích hợp Audit Log và Pub/Sub. Bất kỳ dịch vụ nào có tích hợp Audit Log hoặc bất kỳ ứng dụng nào có thể gửi thông điệp đến Pub/Sub topic đều có thể là một nguồn sự kiện cho Eventarc.

Các dịch vụ bổ sung hỗ trợ cả choreography và orchestration

Cloud Tasks

Cloud Tasks cho phép bạn phân tách các phần công việc có thể thực hiện độc lập bên ngoài luồng ứng dụng chính và gửi chúng đi để xử lý không đồng bộ bằng các trình xử lý bạn tạo ra. Những phần công việc độc lập này được gọi là các tác vụ (tasks). Cloud Tasks hỗ trợ tăng tốc thời gian phản hồi người dùng bằng cách ủy quyền các hoạt động nền có khả năng làm chậm dịch vụ như cập nhật cơ sở dữ liệu cho nhân viên. Bên cạnh đó, nó cũng có thể giúp giảm thiểu lưu lượng truy cập tăng đột biến bằng cách loại bỏ các tác vụ không phải của người dùng trực tiếp ra khoải luồng người dùng chính.

Phân biệt Pub/Sub và Cloud Tasks: Mục đích của Pub/Sub là hỗ trợ lệnh gọi ngầm – một nhà xuất bản (publisher) ngầm khiến người đăng ký (subscribers) thực thi hành động bằng cách xuất bản một sự kiện. Còn mục đích của Cloud Tasks là gọi hàm một cách rõ ràng – nhà xuất bản giữ toàn quyền kiểm soát công đoạn thực thi, bao gồm việc chỉ định điểm cuối nơi mỗi thông điệp được gửi. Không giống như Pub/Sub, Cloud Tasks cung cấp các công cụ để quản lý hàng đợi và tác vụ, bao gồm lập lịch phân phối cụ thể, kiểm soát tốc độ, thử lại và loại bỏ trùng lắp.

Cloud Scheduler

Với Cloud Scheduler, bạn có thể thiết lập để các đơn vị công việc đã được lên lịch thực hiện vào các thời điểm nhất định hoặc các khoảng thời gian đều đặn, thường được gọi là cron jobs. Cloud Scheduler có thể kích hoạt một workflow (orchestration) hoặc tạo ra một thông điệp Pub/Sub (choreography). Các trường hợp sử dụng điển hình của Cloud Scheduler bao gồm gửi email báo cáo hằng ngày, cập nhật một số dữ liệu đã lưu trong bộ nhớ cache sau mỗi X phút, hoặc cập nhật thông tin tóm tắt mỗi giờ một lần.

Theo Google Cloud Blog