Điều quan trọng nhất cần nhớ với microservice là họ không chủ yếu giải quyết các vấn đề kỹ thuật mà là các vấn đề tổ chức. Vì vậy, khi chúng ta xem xét liệu một tổ chức có nên sử dụng microservice hay không và cách thức các dịch vụ đó được triển khai, chúng ta cần xem liệu org có các vấn đề mà phong cách microservice giải quyết hay không.
Câu trả lời cho câu hỏi của bạn về kiến trúc của bạn, sau đó, chủ yếu sẽ phụ thuộc vào quy mô của nhóm công nghệ, cơ cấu tổ chức, tuổi của sản phẩm, thực tiễn triển khai hiện tại của bạn và cách chúng có thể thay đổi trong trung hạn.
Ví dụ: nếu tổ chức của bạn:
- có ít hơn 25 nhân viên công nghệ,
- tổ chức thành 1 hoặc 2 đội,
- mỗi cái hoạt động trên bất kỳ phần nào của sản phẩm,
- chưa đầy 12 tháng tuổi
- và được triển khai tất cả cùng một lúc một cách thường xuyên (ví dụ hàng ngày, hàng tuần, hàng tháng),
- và org không phát triển nhanh chóng,
sau đó bạn gần như chắc chắn muốn quên đi microservice bây giờ. Trong tình huống như vậy, nhóm vẫn còn mới trong việc tìm hiểu về tên miền, vì vậy có thể không biết mọi thứ họ cần biết để thực sự hiểu cách nào sẽ là một cách tuyệt vời để chia hệ thống thành một kiến trúc phân tán. Điều đó có nghĩa là nếu họ tách nó ra ngay bây giờ, họ có thể sẽ muốn thay đổi các ranh giới sau đó và điều đó trở nên rất tốn kém khi bạn đã có một hệ thống phân tán, trong khi đơn giản hơn rất nhiều. Hơn nữa, chỉ với một nhóm nhỏ có thể làm việc (và hỗ trợ) bất kỳ phần nào của hệ thống, có rất ít lý do để đầu tư xây dựng một nền tảng nơi các nhóm riêng lẻ có thể triển khai và duy trì các dịch vụ riêng lẻ. Một tổ chức trong giai đoạn này thường sẽ quan tâm nhiều hơn đến việc tìm kiếm khách hàng và lặp lại sản phẩm một cách nhanh chóng, thậm chí có thể xoay vòng sản phẩm, trái ngược với việc làm cho các nhóm tự chủ và xây dựng một kiến trúc có khả năng phục hồi cao. Một kiến trúc nguyên khối có ý nghĩa ở điểm này, nhưng mộtnguyên khối được thiết kế tốt , với các ranh giới thành phần rõ ràng được thực thi bởi các API và truy cập dữ liệu được đóng gói, giúp dễ dàng rút các dịch vụ vào các quy trình riêng biệt sau này.
Hãy nhìn xa hơn một chút và xem xét một tổ chức ...
- hơn 50 nhân viên công nghệ,
- tổ chức thành 7 đội,
- mỗi trong số đó chỉ hoạt động trên các lĩnh vực cụ thể của sản phẩm,
- đó là 3 tuổi
- và có các đội muốn triển khai công việc của họ một cách độc lập với những gì các đội khác đang làm.
Một tổ chức như vậy chắc chắn nên xây dựng một kiến trúc phân tán. Nếu họ không và thay vào đó, tất cả các nhóm này hoạt động trong một khối nguyên khối, họ sẽ gặp phải tất cả các vấn đề tổ chức, với các nhóm cần điều phối công việc của họ, các bản phát hành bị trì hoãn trong khi một nhóm hoàn thành QA về tính năng mới của họ, vá triển khai là một rắc rối lớn cho nhân viên và khách hàng. Hơn nữa, với một sản phẩm trưởng thành, tổ chức nên biết đủ về miền để có thể phân chia hợp lý cả miền và các nhóm (theo thứ tự đó; xem Luật Conway) thành các đơn vị tự trị, hợp lý có thể đạt được tiến bộ trong khi giảm thiểu phối hợp.
Có vẻ như bạn đã chọn microservice rồi. Tùy thuộc vào nơi bạn ngồi trên chiếc cân ở trên, có thể bạn muốn xem lại quyết định đó.
Nếu bạn muốn tiếp tục phát triển với microservice nhưng triển khai tất cả chúng trong một container, hãy biết rằng không có gì sai với điều đónếu nó phù hợp với cách tổ chức của bạn làm việc tại thời điểm này. Nó sẽ làm cho vấn đề cho cấu trúc dự án của bạn trong tương lai? Chà, nếu bạn thành công và tổ chức của bạn phát triển, có lẽ sẽ đến lúc triển khai container đơn này không còn phù hợp nhất, đặc biệt là khi các nhóm bắt đầu sở hữu dịch vụ và chỉ muốn triển khai dịch vụ của mình mà không triển khai toàn bộ ứng dụng . Nhưng sự tự chủ đó sẽ phải trả giá bằng việc làm thêm và phức tạp, và nó có thể không mang lại lợi ích gì cho bạn vào thời điểm này. Chỉ vì nó sẽ không phải là phương pháp phù hợp cho hệ thống của bạn trong tương lai không có nghĩa là nó không phải là phương pháp phù hợp cho ngày hôm nay. Bí quyết là để mắt đến nó và biết khi nào nên đầu tư thêm.