Giới thiệu về mô hình kiến trúc Microservice

Thắng Trần
Coding For Fun
Published in
5 min readJul 14, 2019

Microservices hiện nay được đề cập tới trong thế giới phần mềm, công nghệ được kỳ vọng cao và đánh giá như một xu hướng cho tương lai (Open API, service provider, …). Một số ý kiến cho rằng, microservices không có gì mới lạ, chẳng qua nó là SOA (kiến trúc hướng dịch vụ) được đánh bóng, đổi tên mà thôi.

Mặc cho kỳ vọng cao, hay đánh giá bảo thủ, kiến trúc microservices vẫn đem lại lợi ích khi nó giúp phương pháp agile thực sự hiệu quả và xây dựng được giải pháp phần mềm doanh nghiệp rất phức tạp.

I. Microsevice là gì?

Hiểu theo một cách đơn giản thì microsevice đúng như cái tên của nó nghĩa là việc chia nhỏ ứng dụng lớn thành các ứng dụng nhỏ, mỗi ứng dụng đảm nhiệm một chức năng riêng biệt và được kết nối với nhau một cách hài hòa để đáp ứng yêu cầu nghiệp vụ của sản phẩm.

Nó cho phép việc phát triển một ứng dụng lớn qua nhiều giai đoạn và nhiều nhóm có thể làm việc độc lập với nhau về ngôn ngữ, con nguời, tiêu chuẩn kết nối. Điều này là cần thiết với việc thị trường đang thay đổi từng ngày một cách nhanh chóng và sản phẩm phải liên tục được sửa đổi và nâng cấp để đáp ứng. Trong khi kiến trúc nguyên khối qua một thời gian cập nhật và sửa đổi bắt đầu để lộ ra những khó khăn về thời gian, con nguời, … vì việc nâng cấp đòi hỏi người phát triển phải hiểu toàn bộ hệ thống hiện tại, thì kiến trúc microservices được ra đời để giải quyết những khó khăn này. Với microservices thì việc nâng cấp và phát triển thêm tính năng cho sản phẩm đang sử dụng chỉ cần phát triển modun mới cho tính năng cần cập nhật và giao tiếp với các ứng dụng lõi khác đã có thông qua các interface được thiết kế bởi các dịch vụ đã tồn tại trước đó. Cách những dịch vụ nhỏ kết nối với nhau như sau:

  1. Cơ chế kết nối:
  • Xử lý đồng bộ (Synchronous): Gửi yêu cầu và chờ đợi trả lời rồi mới tiếp tục xử lý.
  • Bất đồng bộ (Asynchronous): Gửi yêu cầu và tiếp tục xử lý ngay, khi có câu trả lời sẽ được thông báo để xử lý kết quả.

2. Về chuẩn giao tiếp:

  • HTTP (RESTFUL API, SOAP)
  • RPC (remote procedure call -lệnh gọi từ xa)
  • MQ (message queue)

II. Thuộc tính

  • Autonomous: 1 service sẽ là 1 đơn vị chức năng, cung cấp API để thực hiện việc trao đổi, giao tiếp với các service khác.
  • Isolated: 1 serivce sẽ là 1 đơn vị triển khai. Nó có thể được chỉnh sửa, test và deployed như 1 đơn vị mà không ảnh hưởng đến những khía cạnh khác.
  • Elastic: 1 service là phi trạng thái (stateless) vì vậy nó có thể scale tùy ý khi cần thiết.
  • Resilient: 1 microservice sẽ được thiết kế để chấp nhận các lỗi, các rủi ro có thể xảy ra, các lỗi này là các lỗi có thể chấp nhận được.
  • Responsive: respond cho các request trong khoảng thời gian hợp lý.
  • Intelligent: tính thông minh ở đây tức là muốn nhắc đến việc hệ thống có thể tìm thấy các endpoint của các microservice đã được đăng kí.
  • Message Oriented: mô hình micro-service hoạt động dựa trên giao thức HTTP hoặc message bus để tạo nên sự giao tiếp giữa các service. Điều này đảm bảo tính loose coupling, tính biệt lập và có thể cung cấp lỗi dưới dạng message.
  • Programmable: cung cấp API’s cho phép truy cập bởi developer và administrator.
  • Composable: bao gồm nhiều microservices.
  • Automated: Lifecycle của Microservice được quản lý thông qua automation bao gồm development, build, test, staging, production và distribution.)

III. Ưu điểm

  • Mỗi microservice sẽ được chia nhỏ để tập trung vào một business function cụ thể hoặc business requirement.
  • Microservices có thể phát triển độc lập bởi một team nhỏ có thể chỉ từ 2 đến 5 developers.
  • Micro-service đem lại tính loose-coupling và context riêng cho mỗi service, sẽ dễ dàng trong quá trình development cũng như deploy một cách độc lập..
  • Microservices có thể phát triển với nhiều ngôn ngữ khác nhau.
  • Quá trình phát triển một service sẽ trở nên dễ dàng và linh động thông qua việc sử dụng CI/CD như Travis, Jenskin, Circle CI ….
  • 1 new member có thể dễ dàng và nhanh chóng đóng góp cho dự án
  • 1 serive trong mô hình micro serivce là tương đối nhỏ, dễ hiểu và được quản lí bởi các thành viên của 1 team nhỏ. Do đó, họ sẽ dễ dàng tập trung vào công việc, nâng cao được hiệu năng.
  • Microservices cho phép tận dụng việc áp dụng những công nghệ mới vào dự án.
  • Microservices chỉ gồm business logic code và không bao gồm HTML, CSS.
  • Việc deploy sẽ mất ít effort cho việc configuraton.
  • Dễ dàng tích hợp 3rd-party.
  • Mỗi service có dung lượng lưu trữ riêng và có thể có cơ sở dữ liệu riêng.

IV. Nhược điểm

  • Microservice architecture có thể dẫn tới việc sử dụng quá nhiều operations.
  • Cần thêm kiến thức về DevOps (http://en.wikipedia.org/wiki/DevOps).
  • Effort của team có thể sẽ phải x2.
  • Distributed systems (hệ thống phân tán) phức tạp và khó quản lý.
  • Số lượng service càng lớn thì vấn đề về management complexity cũng tăng theo.
  • Thiết kế mỗi liên hệ giữa các service không tốt sẽ khiến việc quản lý và thay đổi và nâng cấp còn tồi tệ hơn kiến trúc nguyên khối.
  • Vấn đề quản lý kết nối giữa các service cần được quan tâm nhiều hơn.
  • Việc thiết kế ra những service quá nhỏ (vụn) sẽ khiến việc vận hành gặp khó khăn rất nhiều.

V. Tổng kết

  • Việc áp dụng mô hình kiến trúc microservice cần một kiến trúc sư có cái nhìn thật sự tốt về những dịch vụ mình sẽ cung cấp trong hiện tại, tương lai.
  • Việc lựa chọn microservice hay monolithic cần phải được đánh giá thông qua mục đích, mục tiêu của dự án.

Trên đây là một số ý kiến chủ quan của tôi về kiến trúc microsevice có thể đúng hoặc sai xong rất cảm ơn các bạn đã đọc nó.

Trân trọng.

--

--