2015-10-28 17 views
11

Xây dựng kiến ​​trúc microservice Tôi gặp vấn đề chia sẻ dữ liệu giữa các cá thể của cùng một dịch vụ microservice.Microservices: datasource per instance hoặc microservice?

Tôi có microservice, sử dụng ồ ạt nguồn dữ liệu của nó - mọi yêu cầu dịch vụ gây ra yêu cầu cơ sở dữ liệu (thường là chèn). Dịch vụ này sẽ được sử dụng rất nhiều và tôi có kế hoạch để ẩn nhiều trường hợp đằng sau Load Balancer. Và ở đây nêu lên một câu hỏi: những trường hợp này sẽ sử dụng ONE cơ sở dữ liệu (cơ sở dữ liệu sẽ là một nút cổ chai?) Hoặc MULTIPLE (nguồn dữ liệu cho mỗi trường hợp) có?

Trả lời

6

Theo kinh nghiệm của tôi với kiến ​​trúc MSOA, tôi chưa bao giờ thấy

NHIỀU (nguồn dữ liệu mỗi trường hợp)

được sử dụng. Ngay cả khi bạn dự định tải nó nặng nề, các DB phổ biến nhất theo bản chất sẽ hỗ trợ truy cập đa luồng. Thông thường nút cổ chai (hoặc phần chậm nhất) của hệ thống DB là đĩa. Chúng tôi đã phải mở rộng quy mô cụm của mình vài lần (tương đối rẻ nếu bạn ở trên đám mây, nhưng khả năng mở rộng cũng có thể trở thành một vấn đề, vì nhiều chủ đề hơn sẽ được yêu cầu để quản lý và thực thi hệ thống DB được chia tỷ lệ). Hãy nhớ rằng một số RDBMS sử dụng một DB tạm thời (tempdb) được sử dụng bởi tất cả các DB trên cá thể đó để phân loại, băm, biến tạm thời, vv. Đa luồng và chia nhỏ các tệp tempdb này có thể được sử dụng để cải thiện thông lượng của tempdb , do đó cải thiện hiệu suất máy chủ tổng thể.

Kể từ bây giờ tôi làm việc với Orchard, tôi phải nói rằng có một số trường hợp góc, khi hành động của bạn trên một trường hợp không hoàn toàn (và kịp thời) đồng bộ hóa. Điều này khiến quyền truy cập tài nguyên bị từ chối (ngay sau khi đăng ký sự kiện) ngay cả sau khi xác thực chính xác.

tôi có kế hoạch để ẩn nhiều trường hợp sau cân bằng tải

Đây là một thiết kế thích hợp cho các máy chủ ứng dụng của bạn, vì vậy sử dụng một cụm DB nên phù hợp là tốt. Hướng tới câu trả lời đầy đủ - bạn có thể xem xét DWH, trong trường hợp bạn có nhiều dịch vụ và bạn muốn có thể thực hiện một số khai phá và phân tích dữ liệu từ tất cả các DB của họ.

1

Rất nhiều phụ thuộc vào trường hợp sử dụng thực tế của bạn nhưng tôi cho rằng viết sau hoặc ghi lại có thể là một trong các giải pháp của bạn. This cuộc đàm phán liên kết về kỹ thuật với EhCache, tôi nghĩ rằng cần có bộ đệm khác hỗ trợ tính năng này, bạn có thể muốn google một chút về điều đó.

5

Có một cá thể cơ sở dữ liệu cho mỗi cá thể dịch vụ microservice là một kiến ​​trúc rất khác thường. Nếu bạn quan tâm về tải trên cơ sở dữ liệu, bạn có thể cụm nó cho thông lượng cao hơn, tuy nhiên, chèn không gây ra nhiều tải.

Tôi khuyên bạn nên xem xét cơ sở dữ liệu NoSQL nếu bạn quan tâm đến cơ sở dữ liệu là một nút cổ chai. Các cơ sở dữ liệu NoSQL được thiết kế để mở rộng tốt hơn cho thông lượng cao và xử lý một lượng lớn dữ liệu tốt. Tất nhiên, nhược điểm là họ không xử lý tốt các mô hình dữ liệu phức tạp.

Các vấn đề liên quan