Chia tỷ lệ nguyên khối so với quy mô microservice


15

Một trong những đối số phổ biến để sử dụng microservice là khả năng mở rộng tốt hơn. Nhưng tôi tự hỏi liệu lập luận này có thực sự hợp lệ hay không.

Hãy nói rằng chúng tôi đã có một ứng dụng bao gồm 10 microservice với 9 trong số đó có hai trường hợp (để dự phòng) và một trong số đó có 4 trường hợp để xử lý tải (khả năng mở rộng). Đối số pro-microservice sau đó là bạn có thể mở rộng quy mô miroservice này một cách độc lập khỏi các dịch vụ khác.

Tuy nhiên, giả sử tất cả 10 microservice là các mô-đun trong một khối đơn và một số trường hợp (ví dụ 22 như tổng từ trên) của khối nguyên khối này đã được triển khai. Hệ thống sẽ có thể xử lý tải cho một phần quan trọng, bởi vì có đủ trường hợp để làm như vậy. Nếu các trường hợp chứa logic chương trình không cần thiết, nhược điểm duy nhất là, nhị phân và dung lượng RAM cần thiết sẽ lớn hơn một chút. Nhưng một lần nữa, sự khác biệt không nên quá lớn trong hầu hết các trường hợp - ít nhất là không so với phần còn lại của ngăn xếp (nghĩ về Spring Boot). Mặt trái của một khối nguyên khối sẽ là một hệ thống đơn giản hơn mà không có (hầu hết) các ngụy biện của một hệ thống phân tán.

Tui bỏ lỡ điều gì vậy?


3
Làm thế nào lớn của một tảng đá bạn đang nói chuyện? Bởi vì tôi nghĩ rằng nó có thể nhiều hơn một lượng RAM "lớn hơn một chút". Chưa kể thời gian triển khai - sửa lỗi có thể mất 22 lần triển khai thay vì 4. Nhưng có thể khối nguyên khối của bạn nhỏ và việc triển khai không mất nhiều thời gian, việc di chuyển cơ sở dữ liệu không mất nhiều thời gian, v.v.
Thomas Owens

Tôi chưa đếm được các dòng mã, nhưng khối nguyên khối sẽ có vài nghìn dòng mã (không phải là một hệ thống khổng lồ). Điểm khởi đầu của sự cân nhắc của tôi là kích thước của mã ứng dụng thực tế rất nhỏ so với các khung lớn như Spring và Hibernate. Số lượng triển khai thực sự có thể ít hơn sau đó với microservice, bởi vì nếu bạn có 2 trường hợp, bạn sẽ có dự phòng cơ bản và nhiều trường hợp sẽ dành cho khả năng mở rộng.
deamon

@deamon Xin lưu ý rằng với cách tiếp cận nguyên khối, không có phần nào của mã hoàn toàn bị chết trên mỗi trường hợp, chỉ là mã hiếm khi được sử dụng. Bây giờ, bản thân mã chỉ có thể tiêu thụ một lượng nhỏ bộ nhớ, nhưng nếu nó sử dụng nhiều đối tượng được nhét trong bộ nhớ thì số lượng đó có thể tăng lên đáng kể.
Frank Hopkins

Lưu ý rằng tổng chi phí cơ bản của "lấy mã chạy" không nhất thiết phải lớn như bạn có thể biết từ các ứng dụng Java của mình, nơi thường toàn bộ jvm là một phần của hình ảnh dịch vụ.
Frank Hopkins

Câu trả lời:


22

Quan điểm của microservice là không giảm tải bộ xử lý. Trong thực tế, do chi phí truyền thông và lặp lại các chức năng từng là mã tiện ích toàn cầu, nó thường làm tăng tải bộ xử lý lên một chút.

Mục đích của bãi bỏ một khối nhiều hơn nữa để có thể duy trì, triển khai và điều hành một hệ thống phức tạp các chức năng ở tất cả . Khi hệ thống của bạn đạt đến một kích thước nhất định, biên dịch, thử nghiệm, triển khai, v.v., một khối nguyên khối trở nên quá đắt để có thể khả thi trong khi duy trì thời gian hoạt động tốt. Với microservice, bạn có thể nâng cấp, khởi động lại hoặc khôi phục hệ thống từng phần.

Đừng nhầm lẫn, chúng tôi không viết microservice bởi vì đó vốn dĩ là một giải pháp tốt hơn để kết nối mọi thứ một cách lỏng lẻo trên các giao diện từ xa. Trong thực tế, việc mất loại mạnh và kiểm tra tính nhất quán mà một khối nguyên khối có thể cung cấp thường là một nhược điểm lớn. Chúng tôi làm điều đó bởi vì chúng tôi phải làm vì sự phức tạp đã giúp chúng tôi trở nên tốt hơn và đang làm cho tình huống dưới mức tối ưu.


2
Đã đồng ý. Lý do để chuyển sang kiến ​​trúc microservice chủ yếu là chính trị. Tải phân tán, tách rời là hậu quả, không phải nguyên nhân. Lợi ích thực sự của microservice là tại SDLC và Quản trị. Trên hết, kiến ​​trúc này là phản ứng hợp lý cho một nhu cầu mà trong hầu hết các trường hợp xuất phát từ chiến lược thị trường của công ty. Thời gian tiếp thị ngắn hơn kiến ​​trúc nguyên khối nên công ty được phép áp dụng các chiến lược mới, chuyển đổi từ cái này sang cái khác một cách suôn sẻ và nhanh chóng
Laiv

6
Đó là lý do tại sao ai đó không nên đi thẳng vào microservice cho các ứng dụng vừa và nhỏ. Chi phí hoạt động và sự phức tạp thêm vào hệ thống rất có thể sẽ tốn nhiều thời gian, tiền bạc và chất lượng hơn so với một hệ thống nguyên khối, trên các quy mô đó.
T. Sar - Tái lập Monica

»Chúng tôi làm điều đó bởi vì chúng tôi phải làm vì sự phức tạp đã giúp chúng tôi trở nên tốt hơn và đang tận dụng tốt nhất tình huống dưới mức tối ưu.« Vâng. Đối với tôi, móng tay đó!
Thomas Junk

Tôi phải không đồng ý với phần cuối của câu trả lời. các dịch vụ vi mô vốn đã tốt hơn một khối, vì chúng sử dụng nhiều hơn một máy tính
Ewan

1
@ewan Bạn cũng có thể sử dụng nhiều máy tính với các khối nguyên khối.
deamon

3

Bạn chủ yếu là chính xác. Nếu bạn có các dịch vụ nhanh được tải như nhau, bạn cũng có thể cài đặt tất cả chúng trên tất cả các hộp. Nó không phải là "tốt đẹp" như có một hộp cho mỗi dịch vụ, nhưng nó tiết kiệm tiền.

Tuy nhiên. Ngay khi bạn mất cân bằng, giả sử dịch vụ 5 chiếm 100% số lõi trong 2 phút, bạn muốn chuyển dịch vụ đó sang hộp riêng để nó không chặn tất cả các dịch vụ khác nếu nó chạy.

Nếu cuộc gọi đến dịch vụ hết 5 lần do tải, chỉ một số chức năng của ứng dụng của bạn sẽ thất bại thay vì tất cả.

Bây giờ bạn có thể làm điều tương tự với một khối nguyên khối được mô đun hóa tốt. Cài đặt tất cả các dịch vụ, nhưng chỉ định tuyến 5 dịch vụ lưu lượng đến một trong số chúng. Trong khi không định tuyến dịch vụ 5 lưu lượng đến các hộp khác.

Nhưng thông thường, nguyên khối bởi bản chất của chúng không phải là một bộ sưu tập các dịch vụ lỏng lẻo được cài đặt trên cùng một hộp. Sẽ có các cuộc gọi bộ nhớ giữa các mô-đun sẽ gây ra lỗi cho ứng dụng.


1

Điểm của các dịch vụ vi mô là 1) phân tách mối quan tâm và 2) phân phối tải. Về cơ bản, điều này giải phóng chúng tôi để tạo ra dịch vụ hộp đen tốt nhất có thể với các công nghệ dành riêng cho nhiệm vụ đó. Các dịch vụ của chúng tôi có thể là polyglot - được viết bằng các ngôn ngữ lập trình khác nhau trên các ngăn xếp khác nhau. Các nhóm khác nhau có thể làm việc trên mỗi dịch vụ mà không có kiến ​​thức về cách những người khác làm việc ngoài hợp đồng api của họ. Điều này, nói chung, cho phép cơ sở mã đơn giản hơn nhiều cho mỗi dịch vụ, dễ gỡ lỗi, hiểu và điều chỉnh hiệu năng hơn.


Tôi đồng ý một phần. Quan điểm của tôi không phải là về các đối số cho microservice nói chung, mà là về khả năng mở rộng. Trong trường hợp cụ thể của tôi, tất cả các dịch vụ đều được viết trong cùng một công nghệ. Vì vậy, trong khi có thể sử dụng một công nghệ khác nhau cho mỗi công nghệ, thì đơn giản là không phải vậy. Tôi muốn xác minh rằng tôi không bỏ lỡ một điểm quan trọng về khả năng mở rộng.
deamon
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.