Đôi nét về Microservice architecture và Monolithic architecture

1416
06-06-2018
Đôi nét về Microservice architecture và Monolithic architecture

Hôm nay Bizfly Cloud sẽ cùng tìm hiểu về software architecture và cùng đánh giá chút về mô hình đang khá nổi thời gian gần đây đó là microservice.

Sofware architecture là tổ chức hệ thống bao gồm rất nhiều các thành phần như Web Server, cơ sở dữ liệu, bộ nhớ các lớp layer thực hiện việc giao tiếp. Chúng liên kết với nhau hoặc với một môi trường nhất định. Mục tiêu cuối cùng của thiết kế hệ thống (system architecture) là giải quyết vấn đề của doanh nghiệp.

Ở thời điểm hiện tại, có 2 mô hình pattern của software architecture đang được phổ biến là:

- Monolithic architecture 

- Mircoservice architecture 

Monolithic architecture

1. Lợi ích

Monolithic có xu hướng phù hợp với những dự án có quy mô nhỏ. Với việc áp dụng mô hình monolithic, những lợi ích đem lại có thể kể đến là:

- Quá trình development đơn giản và trực tiếp, centralized managenment và những bước phát triển cơ bản thì sẽ không được lặp lại. 

- Effort dành cho việc development được giảm thiểu: tất cả mọi quá trình development đều nằm trên 1 project. Development flow đơn giản chỉ là submit change, review, merge code và continue.

2. Hạn chế

Đôi nét về Microservice architecture và Monolithic architecture - Ảnh 1.

Tuy nhiên hạn chế mà mô hình này đem lại cũng khá lớn:

- Khó khăn trong việc bảo trì: vấn đề về coupling code, các khối code dính chặt lại với nhau, vấn đề cho member mới sẽ khó để biết nên bắt đầu từ đâu trong 1 khối lớn. 

- Quá trình development sẽ mất đi tính linh hoạt: thời gian để build feature sẽ bị dài lên, bị block lẫn nhau. Bất kì một sự thay đổi dù nhỏ nào cũng cần build lại toàn bộ dự án => tốn khá nhiều thời gian.  

- Tính ổn định không cao. Bất kì một lỗi nào có thể khiến toàn bộ application bị crush. 

- Tính scalibility khó được đáp ứng trong trường hợp phải đáp ứng một lượng truy cập lớn từ phía yêu cầu của bussiness.

Microservice architecture

Ngoài mô hình monolithic kể trên, hiện nay có 1 arichtecture khác đang nhận được nhiều sự quan tâm, đó là microservice. Microservice đề cập đến quá trình phát triển độc lập, tương đối nhỏ theo hướng chia hệ thống ra thành các service. Mỗi service này đều có một logic riêng, một trách nhiệm riêng và có thể được deploy riêng biệt. 

Khái niệm mircoservice đồng thời đề cập đến xu hướng tách biệt architecture ra thành các loose coupling service, tức là các service này sẽ có một mối liên hệ lỏng lẻo với nhau và mối service sẽ được nằm trong 1 context nhất định.

So sánh với monolithicSOA (service-oriented architecture), những điểm khác biệt của mô hình microservicecomponentization (thành phần hóa), loose coupling (khớp nối lỏng lẻo), autonomy ( tính tự quản lí) và decentralization (phân cấp), được phản ánh cụ thể qua những khía cạnh sau:

- Tập hợp một nhóm nhỏ các service: mức độ chi tiết của một service là nhỏ và mỗi service này sẽ chịu một trách nhiệm cụ thể (single responsiblity) và chỉ tập trung vào nhiệm vụ đó. Ví dụ: storage service sẽ chịu riêng trách nhiệm về storage.  

- Việc phát triển và mở rông một service là hoàn toàn độc lập. Điều này mang lại tính linh hoạt cho hệ thống. Quá trình deliver feature, release version sẽ dễ dàng và nhanh chóng. Hơn nữa sẽ không còn tình trạng bị block như ở mô hình monolithic

- Giảm tải được các mối quan ngại về công nghệ sử dụng. Chọn một công nghệ phù hợp với vấn đề của doanh nghiệp có thể được giải quyết dễ dàng. Các service giap tiếp với nhau thông qua API, do vậy mỗi service có thể dùng một ngôn ngữ riêng biệt. Serivce A dùng Java, Service B dùng Javascript, điều này hoàn toàn không vấn đề gì cả! 

- Đối với team, microservice đem lại tính độc lập và tự quản lí cho team. Một team sẽ có trách nhiệm toàn bộ với life-cycle của một hay nhiều service. Họ làm việc trong việc context biệt lập, có thể tự quản lý các quyết định của mình.

Chúng ta có thể thấy rõ toàn bộ ý tưởng của mô hình microservice rất giống cách mà chúng ta chia nhỏ thông tin và kiến thức. Bằng việc tách rời, chia nhỏ và quản lí chúng ta có thể giảm tải sự phức tạp của hệ thống, làm cho việc quản lí trở nên nhanh chóng và dễ dàng, phản ánh sự thay đổi chính xác.

Vậy tại sao chúng ta nên dùng microservice?

Ở thế kỷ trước, một số lightweight development methods như eXtreme Programming (XP) hay Scrum nổi lên; Đến năm 2001, tuyên ngôn Agile ra đời và một số phương pháp quản lý mới như Lean hay Kanban được nổi lên. Nếu những phương pháp quản lý trên được coi là giải pháp cho việc quản lý tiến độ phát triển phần mềm và việc thực hiện sớm nhất có thể khi có sự thay đổi thì microservice architecture là hướng tiếp cận được nói đến trong công nghệ phần mềm và ở tầng kiến trúc (architecture level). Dưới đây là một biểu đồ so sánh giữa monolithic và microservice:

Đôi nét về Microservice architecture và Monolithic architecture - Ảnh 3.

Các thuộc tính của mô hình microservice

1. Autonomous (tính tự trị)

Mỗi 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.

2. Isolated (tính biệt lập)

Mỗi 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.

3. Elastic

Một service là phi trạng thái (stateless), vì vậy nó có thể scale tùy ý khi cần thiết.

4. Resilient

Một 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.

5. Responsive

Respond cho các request trong khoảng thời gian hợp lý.

6. 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í.

7. 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.

8. Programmable

Cung cấp API's cho phép truy cập bởi developer và administrator.

9. Composable

Bao gồm nhiều microservices.

10. Automated

Lifecycle của Microservice được quản lý thông qua automation bao gồm development, build, test, staging, production và distribution.)

Ưu điểm của Microservice

- 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 ....

- Một new member có thể dễ dàng và nhanh chóng đóng góp cho dự án

- Một service 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 công sức cho việc configuration.

- Dễ dàng tích hợp bên thức ba.

- Mỗi service có dung lượng lưu trữ riêng và có thể có cơ sở dữ liệu riêng.

Nhược điểm của Microservice

- 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.

- Nỗ lực của team có thể sẽ phải nhân đôi.

- 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ề quản lí phức hợp (management complexity) cũng tăng theo.

Tham khảo: https://www.cnblogs.com/wintersun/p/6219259.html

>> Có thể bạn quan tâm: Hội chứng cuồng Microservices năm 2018

Theo viblo.asia

SHARE