Microservice REST hoặc AMQP, trường hợp nào


15

Tôi đã đọc nhiều bài viết liên quan đến kiến ​​trúc microservice và tôi đã tự hỏi khi nào nên sử dụng AMQP hoặc REST.

Tôi đã đọc rằng khớp nối lỏng lẻo giữa các dịch vụ là một điều tốt và AMQP dường như là một lựa chọn tốt trong trường hợp đó. Nhưng nếu chúng ta sử dụng AMQP, điều này có nghĩa là chúng ta không cần các điểm cuối REST nữa (nhưng điều đó có nghĩa là chúng ta mất khái niệm HATEOAS).

Nhưng REST có thực sự là một cách tốt để xây dựng dịch vụ của tôi không? Vì tôi sẽ không sử dụng bất kỳ điểm cuối nào ... Trong trường hợp nào thì tốt hơn điểm cuối khác?

Khi nào tôi nên sử dụng cái này hay cái kia?

Câu trả lời:


9

Bằng cách loại bỏ REST, bạn sẽ mất nhiều hơn là chỉ HATEOAS. Nếu các dịch vụ siêu nhỏ của bạn là công khai (và đó là một ý tưởng tốt để chúng được công khai hoặc ít nhất là có xu hướng công khai một ngày nào đó), thì việc sử dụng bất cứ thứ gì khác ngoài REST và SOAP sẽ là vấn đề:

  • Một số nhà phát triển không bao giờ sử dụng AMQP,

  • Một số người đã sử dụng AMQP, nhưng thường quen thuộc hơn với REST và SOAP,

  • Thư viện AMQP cho một số ngôn ngữ không đặc biệt đơn giản,

  • Thử nghiệm thủ công với dịch vụ rất hạn chế: Tôi có thể sử dụng CURL để thực hiện bất kỳ yêu cầu nào đối với Amazon S3; Tôi nên cài đặt gì trên máy nếu muốn chơi với biến thể AMQP của S3?

  • Gỡ lỗi REST và SOAP rất dễ dàng. Tôi chỉ theo dõi các trao đổi HTTP và phân tích chúng. Không chắc chắn những công cụ nào tôi nên sử dụng để xem để gỡ lỗi trao đổi AMQP.

AMQP là tuyệt vời, nhưng nó được thực hiện cho một mục đích trao đổi dựa trên các sự kiện rất cụ thể. Mặc dù về mặt kỹ thuật có thể thực hiện RPC với AMQP, nhưng đó không phải là mục đích chính của nó.

Các khía cạnh không đồng bộ cũng quan trọng. Đôi khi, đó là một lợi ích: Tôi không muốn chặn giao diện người dùng của ứng dụng trong khi yêu cầu máy chủ. Đôi khi, điều đó chỉ khiến mọi thứ trở nên khó khăn hơn mức cần thiết: nếu tôi cần khôi phục bản sao lưu tệp từ Amazon S3 vì tệp cục bộ bị hỏng, sau đó khôi phục bản sao lưu, tệp bó của tôi nhất thiết cần phải hoàn thành công việc trước khi tiếp tục, và một hoạt động đồng bộ (với thời gian chờ cụ thể) có ý nghĩa hoàn hảo.

Giữ REST cho các hoạt động chính:

  • Lấy một sản phẩm,

  • Lưu trữ hóa đơn,

và sử dụng AMQP cho các tác vụ trong đó nhắn tin thực sự có ý nghĩa:

  • Xử lý tất cả các hóa đơn từ tháng 9 và thông báo cho ứng dụng khi báo cáo đã sẵn sàng để hiển thị (với điều kiện là hoạt động thường mất từ ​​hai đến mười phút),

    Lợi ích của AMQP ở đây là khía cạnh không đồng bộ của nó. Một yêu cầu HTTP đang chờ xử lý trong mười phút có khả năng gây ra thời gian chờ và các vấn đề khác.

  • Gửi thông tin rằng các bản sao lưu bị hỏng cho mọi người có thể quan tâm, chẳng hạn như người hỗ trợ, quản trị viên cơ sở dữ liệu, nhóm giám sát, nhà phát triển ứng dụng sử dụng cơ sở dữ liệu này, v.v.

    Lợi ích của AMQP ở đây là, trong số những người khác, khả năng thêm người đăng ký mà không thay đổi ứng dụng theo dõi các bản sao lưu và kích hoạt cảnh báo khi phát hiện thấy lỗi.


Dịch vụ web công cộng không nhất thiết phải được sử dụng bởi người dùng bên ngoài công ty. Trong các công ty lớn hoặc vừa, dịch vụ của bạn thường được sử dụng bởi các bộ phận khác trong cùng công ty và có các yêu cầu giống như yêu cầu của bất kỳ bên thứ ba nào: nó sẽ không tin tưởng bất kỳ cuộc gọi nào (thực tế là một số người bạn không bao giờ nghe nói ai gọi dịch vụ của bạn làm việc trong cùng một công ty bạn không có nghĩa là anh ta sẽ không khai thác các vấn đề bảo mật của nó), nó nên được ghi lại đúng cách (vì cùng một người Ấn Độ không nhất thiết phải biết số điện thoại của bạn và không nhất thiết phải biết biết tiếng anh)


Điều gì về tải tùy thuộc vào các đối tượng sử dụng AMQP? Giống như người dùng liên quan đến một dịch vụ thanh toán (trong một kiến ​​trúc microservice khổng lồ), quyền truy cập không thường xuyên của VS REST ghét (synchroneous)?
Thomas thomas

5

Sử dụng cả hai.

Các dịch vụ web JSON kiểu REST rất phù hợp với khả năng tương tác với javascript, ios, v.v.

AMQP rất tốt cho các quy trình, sự kiện và điều phối các dịch vụ siêu nhỏ.

Nhưng cả hai chỉ là trình bao bọc truyền thông cho dịch vụ thực tế, bạn có thể hiển thị cùng một dịch vụ theo nhiều cách và có lẽ nên.

AMPQ có thể hoạt động tốt trên các Websockets, có thể trông khá giống điểm cuối REST nếu bạn nheo mắt nhìn nó.


1
"Nếu bạn nheo mắt nhìn nó" lol, thật tuyệt.
Iain Duncan

0

REST là một công nghệ tiêu chuẩn đặc biệt phù hợp với khả năng tương tác giữa các thành phần - đây là phần quan trọng, tuyệt vời để tạo ra một dịch vụ web mà người khác có thể sử dụng. Tuy nhiên, nó bị các vấn đề thông thường về khả năng tương tác như vậy ở chỗ nó kém hiệu quả hơn một giao thức tùy chỉnh.

Nếu bạn đang viết một kiến ​​trúc back-end trong đó các dịch vụ chỉ được sử dụng bởi chính bạn, thì bạn có thể sử dụng bất kỳ giao thức nào bạn thích - bạn không còn bị hạn chế bởi việc sử dụng một giao thức tương thích. Bạn có thể sử dụng MQ hoặc một cái gì đó kết hợp chặt chẽ hơn và biểu diễn. Cái nào bạn sử dụng phụ thuộc vào trường hợp sử dụng của bạn, bus tin nhắn rất tốt cho bộ dịch vụ phân tán xử lý dữ liệu mà khách hàng không quan tâm ai nhận được tin nhắn mà nó gửi đi.


2
Tôi không đồng ý, theo tôi nghĩ họ có mục đích chéo; bạn (nói chung) không nên phơi bày AMQP qua internet công cộng; nó có ít tiện ích xác thực hơn cho một thứ và thông thường người dùng internet công cộng muốn phản hồi từ các hoạt động của họ. REST là lý tưởng phù hợp với việc sử dụng internet công cộng vì lý do này. Sự khác biệt lớn nhất là AMQP không đồng bộ ( có thể có các hành vi giống như đồng bộ , nhưng đó không phải là MQ dành cho) và REST là đồng bộ (có trả lại 202là ra lệnh không đồng bộ, nhưng tại sao bạn lại sử dụng REST?
Jimmy Hoffa

Mặt khác, việc phơi bày AMQP cho việc sử dụng websocket để người dùng có được những cú hích trực tiếp thay vì phải thăm dò ý kiến ​​thực sự là một lý do để thực hiện AMQP công khai; nhưng một lần nữa: Mục đích chéo, bạn không làm REST để người tiêu dùng có thể nhận được sự thúc đẩy, đây là một trường hợp khác mà bạn sử dụng AMQP cho những điều mà REST không thể làm.
Jimmy Hoffa

@JimmyHoffa Tôi hình dung anh ấy đang hỏi nên dùng cái gì để kết nối máy chủ web hoặc máy khách của anh ấy hoặc bất cứ thứ gì với dịch vụ vi mô của anh ấy trên mạng LAN nội bộ, không phải trên web - vì vậy quan điểm của tôi là REST phù hợp với điều đó, nhưng nếu mọi thứ bạn đang sử dụng đều nằm dưới bạn kiểm soát, bạn có thể sử dụng bất cứ điều gì bạn thích.
gbjbaanb

Vâng, điều đó có ý nghĩa chắc chắn; Tôi đã đọc câu hỏi của anh ấy một cách khác biệt: Có vẻ như anh ấy đã đọc về ý tưởng của microservice và không hiểu lý do có liên quan để chọn AMQP vs REST. Trong nội bộ bạn có thể sử dụng bất cứ điều gì bạn muốn, nhưng vẫn có những lý do cụ thể để sử dụng AMQP so với REST ngay cả trong nội bộ; các dịch vụ muốn không đồng bộ nên sử dụng AMQP trong nội bộ, các dịch vụ đồng bộ (nghĩ rằng dịch vụ xử lý thuần túy: Dữ liệu thô trong -> Dữ liệu đã xử lý) phải là REST. Có những lợi thế và bất lợi riêng biệt cho cả công nghệ IPC, bạn biết chúng và nên liệt kê chúng trong câu trả lời của bạn! :)
Jimmy Hoffa

0

AMQP cũng hỗ trợ giao tiếp điểm-điểm (ví dụ, xem python-qpid-protonhướng dẫn). Bạn có thể thực hiện giao diện RESTful bằng cách sử dụng giao thức đó, vì REST !=HTTP.

AMQP cũng thực hiện tốt hơn rất nhiều so với HTTP.

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.