Dịch vụ vi mô trong triển khai Docker


9

Chúng tôi đang viết các dịch vụ vi mô đầu tiên bằng cách sử dụng các container Docker bằng cách sử dụng Amazon fargate. Chúng tôi có nhiều nghi ngờ về mức độ triển khai bằng Spring Boot

Chúng tôi sẽ có nhiều dịch vụ vi mô trong dự án, đó là một thực tiễn tốt, chúng tôi đang viết tất cả các dịch vụ vi mô trong một container hoặc tôi phải tạo container Docker riêng cho các dịch vụ vi mô riêng biệt. Theo cách hiệu quả về chi phí, chúng tôi sử dụng một container nhưng điều đó có gây ra vấn đề gì cho cấu trúc dự án của chúng tôi trong tương lai không?

Chúng tôi đang lên kế hoạch triển khai ứng dụng trong AWS fargate và ứng dụng của chúng tôi sẽ có tùy chọn lớn để mở rộng trong tương lai và mong đợi khoảng 100 đến 150 dịch vụ vi mô khác nhau. Trong trường hợp này có hiệu quả về chi phí không nếu chúng tôi cũng tải lên tất cả các dịch vụ siêu nhỏ này trong các thùng chứa khác nhau?


Đó là tất cả phụ thuộc vào cấu trúc của bạn. Bạn phải chia sẻ cách chi tiết hơn để những người khác có thể giúp bạn
Nico Haase

6
Hầu như luôn có ý nghĩa hơn khi triển khai một dịch vụ trên mỗi container, bởi vì điều này mang đến cho bạn khả năng mở rộng quy mô dịch vụ một cách độc lập và thay thế các dịch vụ riêng lẻ bằng các phiên bản nâng cấp hoặc triển khai thay thế.
larsks

Trao đổi là với bạn giữa các dịch vụ nhóm và chạy chúng riêng lẻ. Thực hiện cắt giảm tên miền của ứng dụng hiện tại của bạn, dịch vụ nhóm cho mỗi tên miền, vì chúng có thể chia sẻ cùng một kho lưu trữ dữ liệu. Điều này sẽ giúp bạn quản lý các dịch vụ được nhóm tốt hơn.
Srini M

Câu trả lời:


21

Đ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.


1
Đây là Giải thích tuyệt vời và chúng tôi có thể xác định nơi chúng tôi phải sử dụng các docker và dịch vụ vi mô trên cơ sở cấu trúc dự án và nhóm. Cảm ơn bạn.
anoop

2

Không có vấn đề gì nếu bạn đang sử dụng một container cho microservice của mình, nhưng mục tiêu chính của microservice là duy trì từng dịch vụ riêng biệt, mỗi dịch vụ nên được kết nối lỏng lẻo và mỗi dịch vụ nên có cơ sở dữ liệu riêng (nếu bạn muốn đạt được cơ sở dữ liệu theo kiến ​​trúc dịch vụ). Vì vậy, hãy cố gắng đạt được điều này chạy các dịch vụ của bạn trong thùng chứa riêng biệt và sắp xếp các dịch vụ đó với docker swarm hoặc Kubernetes. Tôi biết vấn đề chi phí nhưng nếu bạn làm điều đó đúng cách thì bạn sẽ thấy sức mạnh của kiến ​​trúc microservice sau đó.


Có lợi về chi phí không nếu chúng ta đang sử dụng các container khác nhau cho các dịch vụ vi mô khác nhau. Vì chúng tôi đang mong đợi khoảng 100 đến 150 dịch vụ vi mô trong dự án
anoop

Không, nó không có lợi cho chi phí khôn ngoan nhưng vận hành mỗi dịch vụ riêng biệt sẽ có lợi về mặt kỹ thuật.
mỏng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.