Cách Microsoft Dapr đơn giản hoá triển khai và phát triển Microservice

cloudFun

Các ứng dụng xây dựng trên 2 kỹ thuật “thuần” cloud (cloud native) và microservices đang là xu hướng “thời thượng” trong giới công nghệ hiện nay. Mỗi dịch vụ phải được triển khai một kho dữ liệu với các cơ sở dữ liệu quan hệ (SQL) – phi quan hệ (NoSQL), các khóa – giá trị và các biểu đồ cơ sở dữ liệu tương ứng với chức năng. Microservice cần phải có một cơ chế khám phá service mạnh mẽ để kết nối động. Chúng cần phải trở nên ít phụ thuộc vào nhau để có thể mở rộng một cách tự chủ và độc lập. Microservice là polyglot, nơi mà mỗi service được triển khai theo ngôn ngữ, framework và runtime phù hợp nhất.

639688d3-dapr.png


Mặc dù việc hệ thống điều phối container như Kubernetes đã giải quyết các khó khăn trong việc đóng gói, triển khai và thay đổi quy mô thì quá trình phát triển vẫn còn khá phức tạp.
Vào cuối năm 2019, Microsoft đã công bố một cách tiếp cận mới cho việc phát triển các ứng dụng hiện đại dựa trên Distributed Application Runtime (Dapr). Đây là nền tảng và ngôn ngữ lập trình runtime cho các ứng dụng dựa trên nền tảng microservice và cloud native.

Kiến trúc của Dapr rất hấp dẫn đối với các developer, đặc biệt đối với những người đã sử dụng Component Object Model (COM)hoặc Enterprise Java Beans (EJB) của những năm 1990. Tương tự như cách COM/ Distributed Component Object Model và EJB cung cấp hệ thống pipeline cho các ứng dụng phân tán chạy trên Microsoft Windows và Java, Dapr thực hiện các công việc nặng nề được yêu cầu bởi các ứng dụng “chứa đựng” (containerized applications), các cloud native apps hay như các ứng dụng xây dựng trên nền tảng của kỹ thuật microservices.


Tìm hiểu kỹ hơn về Dapr
Dapr có 3 thành phần: runtime, service building block, native library và SDKs.
c890c1f3-dapr-arch-1024x478.png


Dapr Runtime
Dapr runtime có thể được cài đặt các máy có cấu hình phù hợp để chạy Docker Engine. Các core runtime có thể được triển khai trên các bộ xử lý x86 / ARM chạy các hệ điều hành Linux, Windows hoặc Mac. Nó có thể được cài đặt trong Kubernetes cluster hoặc trên thiết bị hạn chế tài nguyên như Raspberry Pi Zero. Yêu cầu duy nhất là môi trường máy chủ phải có khả năng chạy Docker. Kiểm tra các phiên bản và nền tảng được hỗ trợ trong Bản phát hành Dapr.

Dapr Building Blocks
Dapr đơn giản hoá tối đa việc sử dụng các microservice khác đang chạy trong cùng một máy chủ, dịch vụ dữ liệu nội bộ hoặc bên ngoài và dịch vụ nhắn tin dựa vào pub/sub pattern. Các tác nhân (actor), ràng buộc tài nguyên theo hướng sự kiện (event – driven) và theo dõi phân tán là các building block có sẵn trong bản phát hành ban đầu. Dapr building block tách rời người tiêu dùng nội bộ khỏi các dịch vụ bên ngoài. Ví dụ, khi không thay đổi code, có thể chuyển từ sử dụng Amazon DyanamoDB sang Azure ComosDB. Các building block được hiển thị thông qua các chuẩn REST hoặc gRPC.

Do Dapr sử dụng sidecar pattern, nên dễ dàng tích hợp các microservice chạy trên Kubernetes để tận dụng các building block. Khi một pod được chú thích với các label cụ thể của Dapr, bộ thực thi sẽ tự động chèn sidecar. Thông tin chi tiết về các building block sễ được giải thích ở phần sau.


Native Libraries and SDKs
Đối với các ngôn ngữ lập trình khác nhau, để việc sử dụng Dapr được thuận tiện hơn, Dapr đã bao gồm các SDKs cho các ngôn ngữ cụ thể cho Go, Java, Javacsript, .NET và Python. Các SDK này hiển thị chức năng trong các Dapr building block, chẳng hạn như lưu trạng thái, tạo event hoặc tạo một actor, thông qua API, thay vì gọi API http/gRPC. Điều này cho phép các developer viết kết hợp giữa các chức stateful và stateless cũng như các actor bằng tất cả bằng ngôn ngữ họ chọn. Tất nhiên, chức năng được cung cấp bởi SDK cũng có sẵn thông qua chuẩn REST và gRPC endpoints.

Dapr Building Blocks
Các building block của Dapr hoạt động như một lớp trung gian giữa các nhà cung cấp dịch vụ nội bộ/bên ngoài được định cấu hình là các thành phần và người dùng nội bộ. Mỗi người dùng luôn kết nối với một endpoint phổ biến, Dapr chỉ cần chuyển hướng gọi đến thành phần hiện được cấu hình.

Các thành phần đóng gói việc thực hiện building block API. Ví dụ: các triển khai cho state building block có thể bao gồm Redis, etcd, MongoDB, Amazon DynamoDB và Azure CosmosDB. Nhiều thành phần trong đó có khả năng pluggable để việc thực hiện có thể dễ dàng hoán đổi cho một thành phần khác.
d662b761-dapr-state-1024x486.png


Hiện tại, trong bản phát hành alpha của Dapr, các dịch vụ building block bên dưới đã được hỗ trợ. Danh sách này sẽ phát triển cùng với sự hoàn thiện của Dapr.

Service Invocation
Những yêu cầu service-to-service có khả năng cho phép gọi các phương thức (bao gồm cả thử lại) trên các dịch vụ từ xa bất cứ nơi nào chúng nằm trong môi trường lưu trữ được hỗ trợ. Điều này giống với chức năng của các triển khai lưới dịch vụ phổ biến như Istio và Linkerd.

State Management
Việc quản lý trạng thái để lưu trữ các cặp khóa – giá trị, các dịch vụ stateful lâu dài, có tính sẵn sàng cao có thể dễ dàng được viết cùng với các dịch vụ stateless trong ứng dụng. Kho lưu trữ trạng thái có thể pluggable và bao gồm Azure CosmosDB, AWS DynamoDB hoặc Redis...

Pub/Sub Messaging
Tạo các event và đăng ký các chủ đề giữa các dịch vụ cho phép các kiến trúc event-driven đơn giản hóa khả năng mở rộng theo chiều ngang (horizontal scalability) và làm cho chúng trở nên linh hoạt trước các lỗi có thể gặp phải. Dapr cung cấp ít nhất một lần đảm bảo gửi tin nhắn. Building block này tóm tắt các dịch vụ như Redis, RabbitMQ, Azure Service Bus và NATS.

Event-driven Resource Bindings
Resource bindings với các trigger mở rộng các kiến trúc event-driven về quy mô và khả năng phục hồi bằng cách nhận và gửi các event đến và từ bất kỳ tài nguyên bên ngoài nào như database, queue và file systerm. Resource binding cung cấp một cơ chế khai báo để gửi và nhận các event trong một đặc tả kỹ thuật của Cloud Events tiêu chuẩn.



Distributed Tracing
Dapr hỗ trợ theo dõi phân tán để dễ dàng chẩn đoán và quan sát các dịch vụ gọi trong sản phẩm bằng cách sử dụng tiêu chuẩn theo dõi bối cảnh W3C (w3c trace context standard ). Do Dapr có khả năng hiển thị trong chuỗi nên nó hoàn toàn có thể cung cấp thông tin theo dõi và được xuất ở định dạng OpenTelemetry.



Actor
Các actor là một mô hình đơn giản hoá tính đồng thời với phương thức và đóng gói state (state encapsulation) dành cho các đối tượng stateful và stateless. Dapr cung cấp nhiều khả năng trong actor runtime của mình bao gồm quản lý đồng thời, trạng thái và vòng đời để kích hoạt hoặc hủy kích hoạt actor, hẹn giờ, nhắc nhở actor. Các developer có thể dễ dàng triển khai mô hình actor cho các micrservice chạy trên Dapr.

Tổng kết
Dapr mang lại một số kỹ thuật đã được chứng minh để phát triển microservice. Nó thực hiện những gì ODBC và JDBC đã làm với các ứng dụng client/server điều khiển dữ liệu của thập niên 90 thông qua mô hình plug-and-play để tiêu thụ hầu hết các dịch vụ phổ biến cần thiết cho các cloud native app hiện đại.

nguồn: https://thenewstack.io/
 
Sửa lần cuối:
Top