Tại sao chúng ta thậm chí cần nó?
Lợi ích to lớn của microservice, và phần lớn, SOA, là mức độ trừu tượng hóa cao của các bộ phận nội bộ không chỉ triển khai mà còn cả các công nghệ đang được sử dụng. Chẳng hạn, nếu một hệ thống được phát triển dưới dạng năm microservice bởi năm nhóm, một nhóm có thể quyết định chuyển sang ngăn xếp công nghệ hoàn toàn khác (ví dụ từ Microsoft stack sang LAMP) mà không cần hỏi ý kiến của các nhóm khác.
Nhìn vào Amazon AWS hoặc Twilio. Bạn có biết dịch vụ của họ được triển khai bằng Java hay Ruby không? Họ có sử dụng Oracle hoặc PostgreSQL hoặc Cassandra hoặc MongoDB không? Họ sử dụng bao nhiêu máy? Bạn có quan tâm đến điều đó không; nói cách khác, những lựa chọn công nghệ đó có ảnh hưởng đến cách bạn sử dụng các dịch vụ đó không? ... Và quan trọng hơn, nếu chúng chuyển sang cơ sở dữ liệu khác, bạn có phải thay đổi ứng dụng khách của mình cho phù hợp không?
Bây giờ, điều gì xảy ra nếu hai dịch vụ sử dụng cùng một cơ sở dữ liệu? Đây là một phần nhỏ của các vấn đề có thể phát sinh:
Nhóm phát triển dịch vụ 1 muốn chuyển từ SQL Server 2012 sang SQL Server 2016. Tuy nhiên, nhóm 2 phụ thuộc vào một tính năng không dùng nữa đã bị xóa trong SQL Server 2016.
Dịch vụ 1 là một thành công lớn. Lưu trữ cơ sở dữ liệu trên hai máy (chính và chuyển đổi dự phòng) không còn là một tùy chọn nữa. Nhưng việc nhân rộng cụm cho nhiều máy đòi hỏi các chiến lược như shending. Trong khi đó, đội 2 hài lòng với quy mô hiện tại và không thấy lý do gì để chuyển sang bất cứ điều gì khác.
Dịch vụ 1 sẽ chuyển sang UTF-8 làm mã hóa mặc định. Dịch vụ 2, tuy nhiên, rất vui khi sử dụng Mã Trang 1252 Windows Latin 1.
Dịch vụ 1 quyết định thêm người dùng có tên cụ thể. Tuy nhiên, người dùng này đã tồn tại, được tạo bởi một vài tháng trước bởi nhóm thứ hai.
Dịch vụ 1 cần rất nhiều tính năng khác nhau. Dịch vụ 2 là một thành phần rất quan trọng và cần giữ các tính năng cơ sở dữ liệu ở mức tối thiểu để giảm nguy cơ bị tấn công.
Dịch vụ 1 yêu cầu 15 TB không gian đĩa; tốc độ không quan trọng, vì vậy các đĩa cứng thông thường hoàn toàn ổn. Dịch vụ 2 yêu cầu tối đa 50 GB, nhưng cần truy cập nhanh nhất có thể, nghĩa là dữ liệu phải được lưu trữ trên ổ SSD.
...
Mỗi sự lựa chọn nhỏ ảnh hưởng đến tất cả mọi người. Mọi quyết định cần phải được cộng tác, bởi mọi người từ mọi đội. Thỏa hiệp phải được thực hiện. So sánh điều đó với một sự tự do hoàn toàn để làm bất cứ điều gì bạn muốn trong bối cảnh của SOA.
nó quá [...] không thể quản lý được.
Sau đó, bạn đang làm sai. Tôi cho rằng bạn đang triển khai thủ công .
Đây không phải là cách mọi thứ nên được thực hiện. Bạn cần tự động hóa việc triển khai các máy ảo (hoặc Docker container) chạy cơ sở dữ liệu. Khi bạn tự động hóa chúng, việc triển khai hai máy chủ hoặc hai mươi máy chủ hoặc hai nghìn máy chủ không khác nhau lắm.
Điều kỳ diệu về cơ sở dữ liệu bị cô lập là nó cực kỳ dễ quản lý . Bạn đã thử quản lý một cơ sở dữ liệu khổng lồ được sử dụng bởi hàng tá đội chưa? Nó là một cơn ác mộng. Mỗi đội đều có những yêu cầu cụ thể và ngay khi bạn chạm vào thứ gì đó, nó sẽ ảnh hưởng đến ai đó. Với một cơ sở dữ liệu được ghép nối với một ứng dụng, phạm vi trở nên rất hẹp, có nghĩa là có rất ít điều để suy nghĩ.
Nếu một cơ sở dữ liệu khổng lồ yêu cầu quản trị viên hệ thống chuyên biệt, cơ sở dữ liệu chỉ được sử dụng bởi một nhóm về cơ bản có thể được quản lý bởi nhóm này (DevOps cũng nói về điều đó), giải phóng thời gian của quản trị viên hệ thống.
nó quá tốn kém
Xác định chi phí.
Chi phí cấp phép phụ thuộc vào cơ sở dữ liệu. Trong kỷ nguyên của điện toán đám mây, tôi khá chắc chắn rằng tất cả những người chơi lớn đã thiết kế lại giấy phép của họ để phù hợp với bối cảnh thay vì một cơ sở dữ liệu khổng lồ, có rất nhiều cơ sở nhỏ. Nếu không, bạn có thể xem xét chuyển sang cơ sở dữ liệu khác. Nhân tiện, có rất nhiều mã nguồn mở.
Nếu bạn đang nói về sức mạnh xử lý, cả máy ảo và thùng chứa đều thân thiện với CPU và tôi sẽ không khẳng định rằng một cơ sở dữ liệu khổng lồ sẽ tiêu thụ ít CPU hơn rất nhiều máy nhỏ làm cùng một công việc.
Nếu vấn đề của bạn là bộ nhớ, thì máy ảo không phải là lựa chọn tốt cho bạn. Container là. Bạn sẽ có thể mở rộng bao nhiêu tùy ý, biết rằng chúng sẽ không tiêu tốn nhiều RAM hơn mức cần thiết. Mặc dù tổng mức tiêu thụ bộ nhớ sẽ cao hơn đối với nhiều cơ sở dữ liệu nhỏ so với một cơ sở dữ liệu lớn, tôi cho rằng sự khác biệt sẽ không quá quan trọng. YMMV.