Những cách nào là dịch vụ hạ lưu và ngược dòng?


45

Đối với một hệ thống bao gồm nhiều dịch vụ gọi nhau (ví dụ: Front End -> Backend -> Storage), tôi thường nghe thấy mọi người sử dụng thuật ngữ như dịch vụ "xuôi dòng" hoặc "ngược dòng". Tôi không rõ những hướng này có nghĩa là gì. Dữ liệu chảy theo cả hai hướng. Yêu cầu chuyển từ nhiều người dùng hơn sang dịch vụ phụ trợ hơn, nhưng phản hồi chảy theo hướng ngược lại, do đó, dường như một trong hai cách có thể được tranh luận


3
Điều thú vị là đặc điểm kỹ thuật HTTP RFC 7230 xảy ra để bao gồm các định nghĩa của các thuật ngữ "ngược dòng" và "hạ lưu" tại mục 2.3: tools.ietf.org/html/rfc7230#section-2.3
Jack

Câu trả lời:


56

Các dịch vụ hạ nguồn là những dịch vụ tiêu thụ dịch vụ ngược dòng. Đặc biệt, họ phụ thuộc vào dịch vụ thượng nguồn. Vì vậy, front-end là hạ lưu đến back-end bởi vì nó phụ thuộc vào back-end. Back-end có thể tồn tại một cách có ý nghĩa mà không có front-end, nhưng front-end không có ý nghĩa nếu không có back-end.

Sự phụ thuộc không cần phải mạnh mẽ như tôi đã nêu ở đoạn trước. Nói chung, các dịch vụ ngược dòng không cần biết hoặc quan tâm đến sự tồn tại của các dịch vụ hạ nguồn. Các dịch vụ hạ nguồn quan tâm đến sự tồn tại của các dịch vụ ngược dòng, ngay cả khi chúng chỉ tùy ý tiêu thụ chúng.


Tôi nghĩ rằng nó nên là "dịch vụ hạ nguồn" thay cho "dịch vụ hạ nguồn" .
Nawaz

8

Thật không may, có sự khác biệt trong quan điểm về ý nghĩa của thượng nguồn / hạ lưu. Khi nói về kiến ​​trúc hệ thống, tôi định nghĩa nó như sau:

Với một hệ thống quan tâm, các hệ thống khởi tạo trao đổi thông điệp / dữ liệu cho hệ thống quan tâm là các hệ thống ngược dòng và các hệ thống mà hệ thống quan tâm phụ thuộc vào (tức là các hệ thống mà hệ thống của tôi khởi tạo trao đổi dữ liệu) là các hệ thống hạ nguồn.

Liên kết này từ ibm mô tả các tương tác với một trong các sản phẩm của họ chứng thực cho quan điểm này: Tích hợp với các hệ thống ngược dòng và hạ lưu https://www.ibm.com/support/ledgeledgecenter/en/SSWSR9_11.3.0/com.ibm.pim.dev.doc /integration/pim_con_dev_creatingjobsforintegrationcontainer.html

Một hệ thống ngược dòng là bất kỳ hệ thống nào gửi dữ liệu đến hệ thống Máy chủ Cộng tác. Hệ thống hạ nguồn là hệ thống nhận dữ liệu từ hệ thống Máy chủ Cộng tác.

Với thuật ngữ 'ngược dòng' và 'hạ lưu', nó có thể giúp tạo ra sự tương đồng với một dòng sông. Nếu bạn thả một thông điệp (dữ liệu) trong dòng sông, nó sẽ chảy từ thượng nguồn (người khởi tạo) đến hạ lưu (người nhận).

Thông thường, tôi đã thấy rằng các kiến ​​trúc sư và nhà phát triển phần mềm trung gian sử dụng định nghĩa này và các nhà phát triển web thì ngược lại (có thể do 'tải lên).

Với các mốc thời gian Sự kiện, một sự kiện sẽ ngược dòng khi nó xảy ra trước một điểm trên dòng thời gian (nghĩa là kích hoạt một sự kiện khác) và hạ lưu khi nó xảy ra sau đó (tức là đã nhận sự kiện). Do đó, thượng nguồn là gì và hạ lưu trong chuỗi các sự kiện, do đó, phụ thuộc vào vị trí của bạn trong dòng thời gian. Một sự kiện có thể là cả hạ lưu và ngược dòng, tùy thuộc vào điểm bắt đầu của bạn là trước hay sau nó.

Như @Jack lưu ý RFC7230 tools.ietf.org/html/rfc7230#section-2.3 có điều này:

Các thuật ngữ "ngược dòng" và "xuôi dòng" được sử dụng để mô tả
các yêu cầu định hướng liên quan đến luồng thông điệp: tất cả các
thông điệp chảy từ thượng nguồn đến hạ lưu

Tôi rất muốn xem trên phiếu bầu, mà cách sử dụng phổ biến nhất là!


1
Điều này chỉ gây nhầm lẫn bởi vì bạn đang bối rối về vấn đề này. Không có sự khác biệt, chỉ là một sự khác biệt trong quan điểm.
Martin Maat

@MartinMaat Tôi không đồng ý với câu đầu tiên của bạn và đồng ý với câu thứ hai của bạn.
roj

3

Cách tốt nhất để nghĩ về điều này là nghĩ về một dòng sông.

Phần hạ lưu của sông không thể lấy được nước trừ khi nó đến từ thượng nguồn tức là hạ lưu phụ thuộc vào thượng nguồn đối với nước.

Nếu ai đó phá hủy phần hạ lưu của dòng sông, điều này sẽ không có tác động đến thượng nguồn. Nếu ai đó phá hủy phần thượng nguồn của dòng sông, điều này sẽ tác động đến hạ lưu tức là nó sẽ không lấy được nước.

Vì vậy, dịch vụ hạ nguồn phụ thuộc vào dịch vụ thượng nguồn. Nếu các dịch vụ ngược dòng bị loại bỏ, các dịch vụ xuôi dòng sẽ không hoạt động đúng.


Và cho thêm một chút rõ ràng; trong mối quan hệ máy khách-máy chủ CRUD tiêu chuẩn, cả hai đầu đều ngược dòng và ngược dòng với nhau. Máy khách không thể nhận được bất kỳ dữ liệu hoặc cập nhật nào nếu máy chủ ngừng hoạt động và máy chủ không có bất kỳ hướng dẫn nào để thực hiện nếu không có máy khách.
Delioth

1
@Delioth không đồng ý. Phần cuối có thể có nhiều khách hàng, nhưng không phụ thuộc vào bất kỳ một trong số họ. Nếu bạn loại bỏ một khách hàng, phụ trợ vẫn sẽ hoạt động. Máy khách có thể có nhiều phụ trợ mà nó có thể sử dụng. Nếu một phụ trợ bị xóa mà khách hàng không biết, khách hàng không thể hoạt động bình thường. Khách hàng là hạ lưu. Cuối cùng là thượng nguồn.
Gaz_Edge

1

Đây có thể là một vấn đề ngôn ngữ và địa lý hơn là một vấn đề kỹ thuật.

  • Yêu cầu thông tin đi ngược dòng. Nó đến từ một hệ thống hạ lưu.

  • Phản hồi về yêu cầu thông tin (thông tin được yêu cầu) đi xuống và được gửi bởi một hệ thống ngược dòng.

Không có sự khác biệt giữa quan điểm cổ điển của IBM và việc sử dụng các thuật ngữ của cộng đồng web ngày nay.

  • Một nhà cung cấp dịch vụ (máy chủ) sẽ được đặt ở thượng nguồn so với người tiêu dùng dịch vụ và gửi thông tin xuống dòng cho người tiêu dùng.

  • Một người tiêu dùng dịch vụ (khách hàng) sẽ được đặt ở hạ lưu so với nhà cung cấp dịch vụ và gửi yêu cầu ngược dòng đến nhà cung cấp.

Vai trò lý thuyết của các hệ thống vật lý có thể thay đổi ngay lập tức và hướng của luồng giữa các hệ thống đó cũng vậy. Trong một mạng ngang hàng, đây có thể là trường hợp.

Các điều khoản tải lên và tải xuống là các điều khoản tập trung vào khách hàng. Từ quan điểm của khách hàng, một yêu cầu được tải lên và phản hồi được tải xuống, phù hợp với phép ẩn dụ của luồ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.