Micro services là gì?

Theo em hiểu thì micro services là mô hình triển khai hệ thống cho phía server (gọi chung là backend) lúc này backend không còn là một máy chủ vật lý nữa mà là nhiều server, mỗi server sẽ có một database riêng. Mỗi server giao tiếp với nhau bằng REST API hoặc grpc. Sẽ có 1 cái gì đó là nơi quản lý tất cả server này: gateway, eureka (spring boot), … để giao tiếp với hệ thống khác hoặc cung cấp API cho app và web.

Vậy cho em hỏi trường hợp này có được gọi là micro services không?

  • database: thuê db của azure (số lượng 1)
  • lưu ảnh: thuê ở AWS S3
  • CDN, cache (HTML,CSS,JS): thuê ở cloudflare.
  • server chính VD: viết bằng spring, asp, node, …
  • giao diện lại deploy lên một server khác: VD: nextjs (reactjs), angular, …

hệ thống toàn thuê cloud, các thành phần nằm rải rác khắp nơi trên thế giới, vậy có được tính là micro service không?
Em cảm ơn

Không. Việc các thành phần nằm ở đâu trên khắp thế giới không phải là yếu tố xác định e có phải microservice hay không. Mà phải xác định dựa vào việc bussiness logic có được tổ chức thành nhiều services con hay là gộp chung vào thành 1 service lớn

8 Likes

bạn đã tìm hiểu ở đâu để ra được thông tin như này?

4 Likes

Dạ em mới tìm hiểu chỉ biết được như vậy thôi ạ, không biết em đã hiểu sai chỗ nào, mong được giải đáp. Cảm ơn

hình mà bạn gửi, đúng là nó cũng là mô hình microservice
nhưng không có nghĩa rằng, một cái gì đó khác với hình đó thì không phải là microservice
hay nói một cách khác, khẳng định “một cái gì đó phải giống như vậy mới được gọi là microservice” là không đúng

bạn là sinh viên, bạn 20 tuổi
thì không thể nói là ai 20 tuổi cũng là sinh viên, hoặc ai không phải 20 tuổi thì không phải sinh viên

đó là lấy 1 mẫu rồi quy chụp cho tất cả, lấy đó làm chân lý

và mình lặp lại câu hỏi ở trên, nguồn nào khiến bạn đưa ra nhận định như đoạn quote mình đã comment ở phía trên

5 Likes

Câu trả lời cho câu hỏi ở #1 là câu trả lời mà @qloved cung cấp rồi.

Cơ mà, cậu đang hiểu sai về microservice rồi.

Theo em hiểu thì micro services là mô hình triển khai hệ thống cho phía server (gọi chung là backend) lúc này backend không còn là một máy chủ vật lý nữa mà là nhiều server, mỗi server sẽ có một database riêng.

Tớ không nghĩ đó là cách giải thích tốt cho micro service, dù nó không sai. Để phân biệt microservice với monolithic, cậu cần phải phân biệt nó dựa trên cách triển khai của business functionality, thay vì chỉ triển khai trên 1 ứng dụng, cậu chia nhỏ nó thành cách service, mỗi service có trách nhiệm riêng về business functionality.
Cậu có thể thấy ở ví dụ của cậu, cậu đang cố chia các layer của 1 ứng dụng monolithic thành 1 service. Điều đó không đúng, vì:

  • Database, S3, CDN, cloud… không có bất cứ business functionality nào gắn với nó.
    Cậu hoàn toàn có thể có 1 ứng dụng monolithic dùng tất cả các thành phần đó.
    Sử dụng cloud cũng không phải là dấu hiệu cho microservice. Cậu hoàn toàn có thể có 1 ứng dụng monolithic được deploy trên nhiều instance rải rác khắp thế giới.
  • Một khi business logic của cậu chỉ ở 1 app, đó không phải là microservice.

Để tớ lấy 1 ví dụ đơn giản cho microservice. Cậu biết E-commerce domain (cậu chỉ có thể chia microservice trên từng domain) có thể được chia thành các microservice như thế này:

  • Order service: quản lý order life cycle.
  • Shipping service: quản lý shipping life cycle.
  • Item/product service: quản lý các item/item variant/product.
  • Inventory service: quản lý inventory cho từng item.
  • Campaign service: quản lý campaign.
  • Shopper service: quản lý người mua.
  • Merchant service: quản lý người bán.
  • Etc…

Cậu có thể thấy, tất cả các service đều có nhiệm vụ rõ ràng và không trùng lặp về business. Các service cũng có dữ liệu riêng, được lưu vào DB riêng, và có thể hoạt động độc lập với service khác. Khi 1 merchant (người bán) muốn tạo 1 sản phẩm, cậu sẽ cần gọi merchant service, Item/Product service, Inventory service để lần lượt lấy thông tin người bán, tạo item và tạo inventory cho item đó.

Mỗi server giao tiếp với nhau bằng REST API hoặc grpc.

Còn nhiều giao thức khác để giao tiếp giữa các server đó :smile: Tớ để cho cậu tự tìm hiểu thêm nha! :smile:

Sẽ có 1 cái gì đó là nơi quản lý tất cả server này: gateway, eureka (spring boot), … để giao tiếp với hệ thống khác hoặc cung cấp API cho app và web.

API Gateway và Eureka (service discovery) không phải là nơi quản lý các server (với “quản lý” được hiểu là cậu có thể xem được performance của từng instance, tăng, giảm số lượng instance, hardware của từng service).
API Gateway là entry point của toàn bộ hệ thống, nơi nhận request từ bên ngoài hệ thống, gọi tới các downstream API để lấy dữ liệu và tích hợp với nhau trước khi trả về client. Security cũng được cài đặt chính ở đây.
Eureka là service discovery framework, thứ giúp các instance cùng thuộc 1 service nhận ra nhau. Eureka thường dùng để làm mid-tier server load balancer cho 1 service cụ thể, không phải để quản lý instance thuộc service đó.

Hi vọng câu trả lời trên giúp cậu.

6 Likes

có giải thích dễ hiểu này

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?