Nó thực sự phụ thuộc vào các yêu cầu về khả năng mở rộng của bạn và làm thế nào / nếu các trường hợp microservice của bạn cần hợp tác để cung cấp một kết quả duy nhất. Nó giúp biết được sự đánh đổi là gì:
Giữ tất cả trong một cơ sở dữ liệu
- Cấu hình dễ dàng hơn
- Không cần phối hợp hoặc liên lạc với các phiên bản khác của dịch vụ của bạn
- Dễ dàng hơn để khám phá dữ liệu đầy đủ của bạn
- Hiệu năng hệ thống bị giới hạn bởi hiệu suất cơ sở dữ liệu
Giữ cơ sở dữ liệu riêng biệt
- Câu trả lời đầy đủ cho một yêu cầu có thể được trải rộng trên các phiên bản microservice
- Trong trường hợp đó, bạn đã tăng cường giao tiếp và đàm phán để giải quyết yêu cầu
- Xử lý dữ liệu khi bạn mất nút microservice đó (ngay cả khi cơ sở dữ liệu vẫn hoạt động, bạn không thể truy cập vào đó cho đến khi một nút mới có cấu hình phù hợp được sao lưu)
- Độ phức tạp cấu hình tăng
Vấn đề bạn đang giải quyết là gì?
Trong một số trường hợp, bạn chỉ lo lắng về dữ liệu phù du. Nếu cơ sở dữ liệu đi xuống, đó không phải là vấn đề lớn. Trong những trường hợp đó, bạn thậm chí có thể không cần cơ sở dữ liệu để bắt đầu. Chỉ cần giữ tất cả trong bộ nhớ và làm cho mọi thứ nhanh chóng rực rỡ. Đây là giải pháp dễ nhất để làm việc.
Trong các trường hợp khác, bạn cần tính toàn vẹn dữ liệu, nhưng cơ sở dữ liệu của bạn có khả năng mở rộng khả năng của nó dựa trên số lượng nút mà nó có. Trong trường hợp này, một cơ sở dữ liệu có lẽ là quá đủ và quản lý độc lập khả năng đáp ứng của nó là câu trả lời đúng.
Có một số trường hợp ở giữa. Ví dụ: bạn có thể có các cơ sở dữ liệu cụ thể theo vùng, do đó, đối với mỗi phiên bản dịch vụ của bạn ở một khu vực khác, bạn có một cơ sở dữ liệu riêng. Thông thường, việc bảo vệ cơ sở dữ liệu không hoạt động tốt giữa các khu vực, vì vậy đây là cách để bản địa hóa dữ liệu một chút và tự kiểm soát sự phối hợp.
Học thuyết và thực tế
Tôi đã đọc một số bài viết về microservice và cách chúng nên được mô đun hóa. Các đề xuất bao gồm giữ toàn bộ mặt trước, microservice và tầng dữ liệu dưới dạng toàn bộ đơn vị đến chia sẻ cơ sở dữ liệu và / hoặc mã mặt trước cho tất cả các trường hợp. Thông thường, sự cô lập nhiều hơn cung cấp khả năng mở rộng lớn nhất, nhưng nó đi kèm với chi phí tăng độ phức tạp.
Nếu microservice của bạn nặng tính toán, sẽ rất hợp lý khi cho phép số lượng thang đo microservice đó khi cần - chia sẻ cơ sở dữ liệu hoặc thậm chí mã giao diện người dùng không làm tổn thương hoặc cản trở phương pháp này.
Thực tế là các nhu cầu cụ thể của dự án của bạn sẽ cần một bộ thỏa hiệp khác để hoàn thành công việc kịp thời và xử lý tải hệ thống mà bạn đang đo (cộng thêm một chút nữa). Xem xét bộ ba mặt trước, microsrervice và tầng dữ liệu bị cô lập hoàn toàn là mục tiêu cao cả. Càng nhiều nhu cầu trên hệ thống của bạn, bạn càng cần đến mục tiêu đó. Chúng ta không phải là tất cả [insert name of highly successful web entity here]
, và họ đã không bắt đầu từ nơi họ đang ở. Đôi khi bạn chỉ cần bắt đầu với một tình huống không hoàn hảo, và hài lòng với điều đó.