Microservices Architecture (P1)

GettyImages-533208865.jpg

Giả sử bạn là một kỹ sư phần mềm tài ba đang xây dựng một ứng dụng server mang tính chiến lược cho một công ty startup năng động. Bạn muốn nó phải thật hoàn hảo, đáp ứng được vô số các thể loại client khác nhau, từ trình duyệt desktop cho tới mobile hay cả ứng dụng native trên mobile.

Ứng dụng này còn có thể public ra một API cho bên đối tác nữa chứ. Chưa dừng lại ở đó, ứng dụng tuyệt vời này còn cần phải được tích hợp với các ứng dụng khác thông qua dịch vụ web hay qua message. Nó sẽ xử lý các request thông qua xử lý nghiệp vụ, truy cập cơ sở dữ liệu, trao đổi các thông điệp với các hệ thống khác, và gửi trả phản hồi dưới định dạng HTML/JSON/XML.

Ứng dụng của bạn dựa theo kiến trúc phân lớp hay lục giác và bao gồm các thành phần khác nhau, chẳng hạn như:

– Tầng biểu diễn: nhiệm vụ của tầng này là nhận các yêu cầu ở dạng HTTP và biểu diễn kết quả dưới dạng HTML hoặc JSON/XML (cho mấy thằng API)
– Tầng xử lý nghiệp vụ: xử lý các nghiệp vụ ở mức logic cho ứng dụng
– Tầng truy nhập dữ liệu: bao gồm các thực thể truy cập đến cơ sở dữ liệu
– Tầng tích hợp ứng dụng: còn gọi là tầng thông điệp

Như vậy là các thành phần khác nhau sẽ đảm nhiệm các chức năng khác nhau trong ứng dụng.

Câu hỏi đặt ra là:

Bạn sẽ dùng kiến trúc nào cho việc triển khai ứng dụng?

Yêu cầu:

Sẽ có một team dev phát triển ứng dụng này.
Các member mới cần phải nhanh chóng làm quen với công việc
Ứng dụng phải thật dễ hiểu và dễ dàng chỉnh sửa
Bạn muốn áp dụng quá trình phát triển liên tục
Bạn bắt buộc phải chạy các bản sao của ứng dụng trên nhiều máy khác nhau để đảm bảo đươc tính mở rộng và sẵn sàng.
Bạn muốn tận dụng được các công nghệ “đỉnh” hot nhất hiện nay (framework, ngôn ngữ lập trình, vân vân)

Giải pháp

Áp dụng Scale Cube (cụ thể là mở rộng theo trục y) và chia nhỏ ứng dụng thành một tập các dịch vụ theo chức năng. Mỗi dịch vụ sẽ thực hiện một số lượng nhỏ các chức năng liên quan với nhau. Chẳng hạn, một ứng dụng có thể bao gồm các dịch vụ như dịch vụ quản lý đơn hàng, dịch vụ quản lý khách hàng…

Các dịch vụ liên lạc với nhau có thể thông qua giao thức đồng bộ như HTTP/REST hay giao thức không đồng bộ như AMQP.

Các dịch vụ được phát triển và triển khai độc lập với nhau.

Mỗi dịch vụ có một cơ sở dữ liệu riêng để có thể tách biệt với các dịch vụ khác. Nếu cần thiết, có thể đảm bảo tính thống nhất của dữ liệu bằng các cơ chế lặp của cơ sở dữ liệu hay dựa vào các sự kiện ở mức ứng dụng.

Phần tiếp theo tôi sẽ đưa ra một ví dụ minh họa cho kiến trúc này.

Dammecode via microservices.io

Leave a comment