Di mana layanan hilir dan hulu?

45

Untuk sistem yang terdiri dari beberapa layanan yang saling memanggil satu sama lain (misalnya Front End -> Backend -> Storage), saya sering mendengar orang menggunakan terminologi seperti layanan "downstream" atau "upstream". Saya tidak jelas ke arah mana artinya ini. Data mengalir di kedua arah. Permintaan mengalir dari yang lebih menghadap pengguna ke layanan backend yang lebih banyak, tetapi tanggapan mengalir dalam arah yang berlawanan, sehingga menurut saya salah satu cara dapat diperdebatkan

pengguna69715
sumber
3
Yang menarik, spesifikasi HTTP RFC 7230 kebetulan memasukkan definisi istilah "hulu" dan "hilir" di Bagian 2.3: tools.ietf.org/html/rfc7230#section-2.3
Jack

Jawaban:

56

Layanan hilir adalah orang yang mengkonsumsi layanan hulu. Secara khusus, mereka bergantung pada layanan hulu. Jadi front-end hilir ke back-end karena tergantung pada back-end. Back-end dapat ada secara berarti tanpa front-end, tetapi front-end tidak masuk akal tanpa back-end.

Ketergantungan tidak harus sekuat yang saya dapat pada paragraf sebelumnya. Secara umum, layanan hulu tidak perlu tahu atau peduli tentang keberadaan layanan hilir. Layanan hilir peduli tentang keberadaan layanan hulu, bahkan jika mereka hanya mengkonsumsinya secara opsional.

Derek Elkins
sumber
Saya pikir itu harus "layanan hilir" di tempat "layanan hilir" .
Nawaz
8

Sayangnya ada perbedaan pendapat tentang arti hulu / hilir. Ketika berbicara tentang arsitektur sistem, saya mendefinisikannya sebagai berikut:

Dengan adanya sistem yang memprihatinkan, sistem yang memulai pertukaran pesan / data ke sistem yang menjadi perhatian adalah sistem hulu, dan sistem yang bergantung pada sistem yang menjadi perhatian (yaitu sistem yang digunakan oleh saya untuk memulai pertukaran data) adalah sistem hilir.

Tautan dari ibm yang menjelaskan interaksi dengan salah satu produk ini menguatkan pandangan ini: Mengintegrasikan dengan sistem hulu dan hilir https://www.ibm.com/support/knowledgecenter/en/SSWSR9_11.3.0/com.ibm.pim.dev.doc /integration/pim_con_dev_creatingjobsforintegrationcontainer.html

Sistem upstream adalah sistem apa pun yang mengirim data ke sistem Server Kolaborasi. Sistem hilir adalah sistem yang menerima data dari sistem Server Kolaborasi.

Mengingat terminologi 'hulu' dan 'hilir' mungkin membantu untuk membuat analogi dengan sungai. Jika Anda menjatuhkan pesan (data) di sungai itu mengalir dari hulu (inisiator) ke hilir (penerima).

Secara anekdot, saya menemukan bahwa arsitek dan pengembang middleware menggunakan definisi ini dan pengembang web sebaliknya (mungkin karena 'unggah').

Dengan jadwal acara, acara adalah hulu ketika terjadi sebelum titik pada timeline (yaitu memicu acara lain) dan hilir ketika itu terjadi sesudahnya (yaitu menerima acara). Apa yang hulu dan apa yang hilir dalam urutan peristiwa, oleh karena itu, tergantung di mana Anda berada di timeline. Suatu peristiwa dapat bersifat downstream dan upstream, tergantung pada apakah titik awal Anda sebelum atau sesudahnya.

Seperti @Jack mencatat RFC7230 tools.ietf.org/html/rfc7230#section-2.3 memiliki ini:

Istilah "hulu" dan "hilir" digunakan untuk menggambarkan
persyaratan arah sehubungan dengan aliran pesan: semua
pesan mengalir dari hulu ke hilir

Saya akan tertarik untuk melihat suara, yang penggunaan paling umum adalah!

roj
sumber
1
Ini hanya membingungkan karena Anda bingung sendiri tentang masalah ini. Tidak ada perbedaan, hanya perbedaan sudut pandang.
Martin Maat
@ MartinMaat saya tidak setuju dengan kalimat pertama Anda, dan setuju dengan yang kedua.
roj
3

Cara terbaik untuk memikirkan hal ini adalah dengan memikirkan sungai.

Bagian hilir sungai tidak bisa mendapatkan air kecuali berasal dari hulu yaitu hilir tergantung pada hulu untuk airnya.

Jika seseorang menghancurkan bagian hilir sungai, ini tidak akan berdampak ke hulu. Jika seseorang menghancurkan bagian hulu sungai, ini akan berdampak ke hilir yaitu tidak mendapatkan air.

Jadi layanan hilir tergantung pada layanan hulu. Jika layanan hulu dihapus, layanan hilir tidak akan berfungsi dengan baik.

Gaz_Edge
sumber
Dan untuk kejelasan ekstra; dalam hubungan CRUD client-server standar, kedua ujungnya hulu dan hilir satu sama lain. Klien tidak bisa mendapatkan data atau pembaruan apa pun jika server sedang down, dan server tidak memiliki instruksi untuk dijalankan jika tidak ada klien.
Delioth
1
@Delioth tidak setuju. Backend dapat memiliki banyak klien, tetapi tidak bergantung pada satu pun dari mereka. Jika Anda menghapus klien, backend akan tetap berfungsi. Klien dapat memiliki banyak backend yang bisa digunakan. Jika satu backend dihapus tanpa sepengetahuan klien, klien tidak dapat bekerja dengan baik. Klien hilir. Backend hulu.
Gaz_Edge
1

Ini mungkin lebih merupakan masalah linguistik dan geografis daripada masalah teknis.

  • Permintaan informasi berjalan ke hulu. Itu berasal dari sistem hilir.

  • Respons terhadap permintaan informasi (informasi yang diminta) turun dan dikirim oleh sistem upstream.

Tidak ada perbedaan antara tampilan IBM klasik dan penggunaan istilah komunitas web saat ini.

  • Penyedia layanan (server) akan berlokasi di hulu dibandingkan dengan konsumen layanan dan mengirimkan informasi ke konsumen.

  • Konsumen layanan (klien) akan berlokasi di hilir dibandingkan dengan penyedia layanan dan mengirimkan permintaan ke penyedia.

Secara teoritis peran sistem fisik dapat berubah secara instan dan demikian pula arah aliran antara sistem tersebut. Dalam jaringan peer-to-peer ini mungkin terjadi.

Istilah mengunggah dan mengunduh adalah istilah yang berpusat pada klien. Dari perspektif klien, permintaan diunggah dan tanggapan diunduh, yang konsisten dengan metafora aliran.

Martin Maat
sumber