Hãy nói về những mặt tích cực và tiêu cực của phương pháp microservice.
Tiêu cực đầu tiên. Khi bạn tạo microservice, bạn đang thêm độ phức tạp vốn có trong mã của mình. Bạn đang thêm chi phí. Bạn đang làm cho việc tái tạo môi trường trở nên khó khăn hơn (ví dụ: đối với các nhà phát triển). Bạn đang làm cho việc gỡ lỗi các vấn đề không liên tục trở nên khó khăn hơn.
Hãy để tôi minh họa một nhược điểm thực sự. Hãy xem xét giả thuyết về trường hợp bạn có 100 microservice được gọi trong khi tạo một trang, mỗi trang sẽ thực hiện đúng 99,9% thời gian. Nhưng 0,05% thời gian họ tạo ra kết quả sai. Và 0,05% thời gian có yêu cầu kết nối chậm, trong đó, thời gian chờ TCP / IP là cần thiết để kết nối và mất 5 giây. Khoảng 90,5% thời gian yêu cầu của bạn hoạt động hoàn hảo. Nhưng khoảng 5% thời gian bạn có kết quả sai và khoảng 5% thời gian trang của bạn chậm. Và mỗi thất bại không thể tái sản xuất có một nguyên nhân khác nhau.
Trừ khi bạn đặt nhiều suy nghĩ xung quanh công cụ để theo dõi, tái tạo, v.v., điều này sẽ biến thành một mớ hỗn độn. Đặc biệt khi một microservice gọi một cái khác gọi một cái khác sâu vài lớp. Và một khi bạn gặp vấn đề, nó sẽ chỉ trở nên tồi tệ hơn theo thời gian.
OK, điều này nghe có vẻ như một cơn ác mộng (và hơn một công ty đã tạo ra những vấn đề lớn cho chính họ bằng cách đi theo con đường này). Thành công chỉ có thể là bạn nhận thức rõ ràng về nhược điểm tiềm năng và luôn nỗ lực để giải quyết nó.
Vậy còn cách tiếp cận nguyên khối đó thì sao?
Nó chỉ ra rằng một ứng dụng nguyên khối cũng dễ dàng mô đun hóa như microservice. Và một cuộc gọi chức năng vừa rẻ hơn và đáng tin cậy hơn trong thực tế so với cuộc gọi RPC. Vì vậy, bạn có thể phát triển điều tương tự ngoại trừ việc nó đáng tin cậy hơn, chạy nhanh hơn và liên quan đến ít mã hơn.
OK, vậy tại sao các công ty đi đến phương pháp microservice?
Câu trả lời là bởi vì khi bạn mở rộng quy mô, có giới hạn cho những gì bạn có thể làm với một ứng dụng nguyên khối. Sau rất nhiều người dùng, rất nhiều yêu cầu, v.v., bạn đạt đến điểm mà cơ sở dữ liệu không mở rộng được, máy chủ web không thể giữ mã của bạn trong bộ nhớ, v.v. Hơn nữa, các phương pháp tiếp cận microservice cho phép nâng cấp độc lập và gia tăng ứng dụng của bạn. Do đó, kiến trúc microservice là một giải pháp để nhân rộng ứng dụng của bạn.
Nguyên tắc cá nhân của tôi là đi từ mã bằng ngôn ngữ kịch bản (ví dụ Python) sang C ++ được tối ưu hóa nói chung có thể cải thiện 1-2 bậc độ lớn về cả hiệu suất và mức sử dụng bộ nhớ. Đi theo con đường khác đến một kiến trúc phân tán sẽ tăng thêm độ lớn cho các yêu cầu tài nguyên nhưng cho phép bạn mở rộng quy mô vô thời hạn. Bạn có thể làm cho một công trình kiến trúc phân tán, nhưng làm như vậy thì khó hơn.
Vì vậy, tôi sẽ nói rằng nếu bạn đang bắt đầu một dự án cá nhân, hãy đi nguyên khối. Học cách làm tốt điều đó. Không được phân phối vì (Google | eBay | Amazon | vv). Nếu bạn đặt chân đến một công ty lớn được phân phối, hãy chú ý đến cách họ làm cho nó hoạt động và đừng làm hỏng nó. Và nếu bạn buộc phải thực hiện quá trình chuyển đổi, hãy hết sức cẩn thận vì bạn đang làm một việc gì đó rất khó để có được rất, rất sai.
Tiết lộ, tôi có gần 20 năm kinh nghiệm trong các công ty thuộc mọi quy mô. Và vâng, tôi đã thấy các kiến trúc nguyên khối và phân tán gần gũi và cá nhân. Dựa trên kinh nghiệm mà tôi nói với bạn rằng kiến trúc microservice phân tán thực sự là thứ bạn làm vì bạn cần chứ không phải vì nó sạch hơn và tốt hơn.