Bốn lớp trong kiến trúc ứng dụng Microservice

(VINADATA – Cung cấp dịch vụ CDN chuyên nghiệp) Nhiều người bối rối và không thực sự cảm thấy rõ ràng về cái được gọi là microservice

  • vinadata.vn – cung cấp dịch vụ cloud server, CDN, tape pickup chuyên nghiệp.

Giới thiệu

Nhiều hiểu lầm hay thất vọng về kiến trúc microservice đến từ sự thiếu hiểu biết rõ ràng xoay quanh kiến trúc này. Ví dụ, nếu ai đó nghĩ rằng việc “container hoá” (containerizing) ứng dụng của họ là có ngay các microservice – điều này không đúng: việc đặt ứng dụng chạy trong Docker container không đồng nghĩa là bạn đang sử dụng kiến trúc microservice. Một số thì nghĩ rằng mỗi microservice nên được đối xử như một ứng dụng hoàn toàn độc lập và tách biệt với một nền tảng hạ tầng được dành riêng và cá nhân hoá cho riêng nó – điều này cũng không đúng (sẽ được giải thích thêm ở phần sau của bài này). Những người khác thì bối rối vì không thực sự cảm thấy rõ ràng về cái được gọi là microservice.

Bất cứ khi nào chúng ta rơi vào trường hợp nhầm lẫn và bối rối như trên trong lĩnh vực khoa học máy tính và kỹ nghệ phần mềm, nó thường chỉ ra rằng không có bất cứ sự rõ ràng nào về hệ thống mà chúng ta đang làm việc. Trong hầu hết các trường hợp thì có một cách để đạt được sự rõ ràng là đưa ra một khái niệm trừu tượng (abstraction) giúp nắm bắt tất cả các cấu trúc và những điểm quan trọng về hệ thống đó mà không cần đi sâu vào từng chi tiết hay triển khai cụ thể. Bài này là một nỗ lực nhằm tạo ra một vài sự rõ ràng xoay quanh kiến trúc microservice thông qua việc chia kiến trúc này ra thành bốn lớp như hình dưới đây:

1482093118922

The four-layer model of microservice architecture. Image from page 12 of “Production-Ready Microservices” book.

 

Lớp 1: Phần cứng (Hardware)

Đây là lớp dưới cùng trong hệ sinh thái (ecosystem) microservice, được tạo nên bởi các máy thật mà các lớp còn lại sẽ chạy trên đó. Đó có thể là các máy tính nằm trong datacenter nội bộ của công ty hoặc là các máy ảo thuê từ các nhà cung cấp cloud (như AWS, GCP hay Vinadata). Lớp này cũng bao gồm database (dedicated hoặc shared). Chúng ta cũng xếp hệ điều hành (như Linux) vào lớp này. Chạy trên đỉnh của phần cứng máy tính và hệ điều hành thì bắt gặp các hệ thống quản lý tài nguyên (resource isolation and abstraction) như Docker, Kubernetes hay Mesos. Bên cạnh đó là hệ thống host-level monitoringhost-level logging nhằm giám sát hoạt động của các thành phần ở lớp này. Cuối cùng là các công cụ quản lý configuration (như Puppet hay Ansible) giúp đảm bảo các ứng dụng chạy trên đúng host đựoc chỉ định và cấu hình của ứng dụng đó là đúng theo yêu cầu.

Lớp 2: Truyền thông (Communication)

Nằm ở ngay trên lớp phần cứng, đây là một lớp đặc biệt và dễ bị nhầm lẫn bởi vì nó hiện diện trong tất cả các lớp còn lại trong hệ sinh thái. Nó chứa mọi thứ liên quan tới việc truyền thông giữa các ứng dụng, các hệ thống và các dịch vụ. Đầu tiên cần kể đến là mạng và DNS. Lớp này cũng chứa các cơ chế RPC (remote procedure call) hoặc messaging được các microservice sử dụng để giao tiếp với nhau. Tất cả các API endpoint của các microservice cũng được xét nằm trong lớp này bởi vì để có thể truyền thông với nhau thì chúng cần sử dụng chung loại giao thức (protocol, ví dụ HTTP) và kiểu dữ liệu (data format, ví dụ JSON). Các cơ chế định tuyến và phân phối lưu lượng (traffic routing and distribution) cũng thuộc lớp này, điều đó có nghĩa là có bao gồm cả các cơ chế service discovery, service registry, và load balancing.

Lớp 3: Nền tảng ứng dụng (Application platform)

Lớp thứ ba này là nơi chứa tất cả các công cụ, hệ thống, dịch vụ và nền tảng nội bộ (internal tools, systems, services and platforms) mà các microservice dựa vào đó để hoạt động. Mọi thứ ở lớp này (từ tools cho tới services) đều được xây dựng theo hướng quản lý tập trung và chia sẻ cho nhiều microservice có thể dùng chung. Một nền tảng ứng dụng tốt là thứ giúp các đội phát triển microservice chỉ phải nghĩ về microservice mà họ đang làm, mà không cần quan tâm tới bất cứ thứ gì chạy bên dưới nó. Lớp này cần có các công cụ nội bộ tốt giúp hỗ trợ phát triển phần mềm mà người dùng có thể tự phục vụ được (self-service tools) và mang tính đặc thù tuỳ vào nhu cầu của công ty. Nó cũng cần chứa một quy trình phát triển ứng dụng được chuẩn hoá, bao gồm ít nhất là: một hệ thống source/version control tốt, một công cụ cộng tác (collaboration, ví dụ github hay phabricator) tốt, và một môi trường phát triển ổn định (development environment). Chúng ta cũng sẽ thấy các công cụ phục vụ test, build, package, release nằm trong phần này và tốt hơn hết chúng cần được tự động hoá. Deployment pipeline – cách thức mà code mới được triển khai ra server cũng nằm ở đây. Cuối cùng, nằm trong lớp này còn có microservice-level monitoringlogging (lý do chúng nên nằm ở đây, thay vì lớp 4, là vì trong kiến trúc microservice thì hai thành phần này nên được tập trung hoá, được chuẩn hoá, và độc lập với bản thân các microservice).

Lớp 4: Microservice

Nằm trên đỉnh của hệ sinh thái mà chúng ta đang khảo sát chính là lớp microservice. Lớp này chứa tất cả các microservice và mọi thứ đặc thù gắn liền với từng microservice (ví dụ như các configuration). Lớp này hoàn toàn độc lập với các lớp bên dưới, và đây là lớp duy nhất mà tất cả các đội phát triển phần mềm làm việc trên đó – mọi thứ còn lại đều được trừu tượng hoá (abstracted) và do các lớp bên dưới đảm nhiệm.

Tổng kết

Dưới đây là tóm tắt lại bốn lớp trong hệ sinh thái microservice và mọi thứ được chứa trong từng lớp.

Layer 1: Hardware
  • Configuration management tools
  • Databases
  • Servers
  • Host-level logging and monitoring
  • Operating Systems
  • Resource isolation
  • Resource abstraction
Layer 2: Communication
  • DNS
  • Endpoints
  • Load balancing
  • Messaging
  • Network
  • Remote procedure calls
  • Service discovery
  • Service registry
Layer 3: Application platform
  • Deployment pipeline
  • Development environment
  • Microservice-level logging and monitoring
  • Self-service internal development tools
  • Test, package, build, and release tools
Layer 4: Microservice
  • All microservice-specific configurations
  • The microservices

—–

Bài viết trên được trích từ trang blog của Susan J. Fowler, hiện là Site Reliability Engineer tại Uber, nhóm của cô chịu trách nhiệm chính việc chuẩn hoá cho hầu hết trong tổng số hơn một ngàn microservice hiện có của Uber. Mới đây cô cũng xuất bản một cuốn sách mang tên “Production-Ready Microservices” nhằm định hướng cách thức xây dựng ứng dụng theo hướng microservice đảm bảo các tiêu chí chạy cho môi trường thực tế.

Tham khảo:
https://www.susanjfowler.com/blog/2016/12/18/the-four-layers-of-microservice-architecture

@VINADATA – cung cấp dịch vụ Cloud server, CDN, Tape Backup chuyên nghiệp.