Tôi đang xem xét chuyển API REST nguyên khối sang kiến trúc microservice và tôi cảm thấy hơi bối rối về việc lưu trữ dữ liệu. Theo tôi thấy, một số lợi ích của microservice sẽ là:
- Có thể mở rộng theo chiều ngang - Tôi có thể chạy nhiều bản sao dự phòng của microservice để đối phó với tải và / hoặc máy chủ bị hỏng.
- Kết hợp lỏng lẻo - Tôi có thể thay đổi triển khai nội bộ của microservice mà không phải thay đổi các dịch vụ khác và tôi có thể độc lập triển khai và thay đổi chúng, v.v ...
Vấn đề của tôi là với lưu trữ dữ liệu. Theo tôi thấy có một số tùy chọn:
- Một dịch vụ cơ sở dữ liệu duy nhất được chia sẻ bởi tất cả các dịch vụ siêu nhỏ - điều này dường như sẽ loại bỏ hoàn toàn bất kỳ lợi ích nào của khớp nối lỏng lẻo.
- Một phiên bản cơ sở dữ liệu được cài đặt cục bộ trên mỗi microservice - Tôi không thể thấy một cách mở rộng theo chiều ngang này, vì vậy tôi không nghĩ rằng nó sẽ là một tùy chọn.
- Mỗi microservice đều có dịch vụ cơ sở dữ liệu riêng - điều này có vẻ hứa hẹn nhất, vì nó bảo tồn các lợi ích của khớp nối lỏng lẻo và chia tỷ lệ theo chiều ngang (sử dụng các bản sao cơ sở dữ liệu dự phòng và / hoặc chuyển qua nhiều lần)
Đối với tôi, lựa chọn thứ ba dường như là lựa chọn duy nhất, nhưng nó dường như vô cùng nặng nề đối với tôi, và là một giải pháp rất áp đảo. Nếu tôi hiểu đúng, thì đối với một ứng dụng đơn giản với 4-5 microservice tôi sẽ phải chạy 16-20 máy chủ - hai trường hợp microservice thực tế cho mỗi microservice (trong trường hợp máy chủ bị lỗi và để triển khai mà không có thời gian chết) và hai trường hợp dịch vụ cơ sở dữ liệu cho mỗi microservice (trong trường hợp máy chủ bị lỗi, v.v ...).
Điều này, khá thẳng thắn, có vẻ hơi vô lý. 16-20 máy chủ để chạy API đơn giản, lưu ý rằng một dự án thực tế có thể sẽ có nhiều hơn 4-5 dịch vụ? Có một số khái niệm cơ bản mà tôi đang thiếu sẽ giải thích điều này?
Một số điều có thể giúp trong khi trả lời:
- Tôi là nhà phát triển duy nhất trong dự án này và sẽ trong tương lai gần.
- Tôi đang sử dụng Node.js và MongoDB, nhưng tôi quan tâm đến câu trả lời không biết ngôn ngữ - một câu trả lời thậm chí có thể là tôi chỉ sử dụng sai công nghệ!