Transfer file / data besar dalam Arsitektur Layanan Mikro

22

Perusahaan saya saat ini sedang bekerja untuk mengadopsi arsitektur layanan mikro tetapi kami menghadapi beberapa rasa sakit yang meningkat (kejutan!) Di sepanjang jalan. Salah satu poin pertentangan utama yang kami hadapi adalah bagaimana mengkomunikasikan data dalam jumlah besar antara berbagai layanan kami.

Sebagai sedikit latar belakang, kami memiliki penyimpanan dokumen yang berfungsi sebagai repositori untuk dokumen apa pun yang mungkin perlu kami tangani di seluruh perusahaan. Berinteraksi dengan toko tersebut dilakukan melalui layanan yang menyediakan klien dengan ID unik dan lokasi untuk melakukan streaming dokumen. Lokasi dokumen nanti dapat diakses melalui pencarian dengan ID yang diberikan.

Masalahnya adalah ini - Apakah masuk akal bagi semua layanan microser kami untuk menerima ID unik ini sebagai bagian dari API mereka untuk keperluan berinteraksi dengan dokumen atau tidak? Bagi saya ini terasa salah - layanan tidak lagi independen dan bergantung pada layanan toko dokumen. Meskipun saya mengakui ini mungkin menyederhanakan desain API dan mungkin bahkan memiliki beberapa peningkatan kinerja yang dihasilkan lebih dari mengimbangi manfaatnya.

Adakah yang tahu bagaimana pelangi unicorn (Netflix, Amazon, Google, dll.) Menangani pertukaran file / data besar di antara layanan mereka?

PremiumTier
sumber
Apa yang Anda gunakan untuk penyimpanan dokumen / file yang sangat tersedia?
Terence Johnson
@TerenceJohnson Kami menggunakan solusi buatan sendiri untuk saat ini. Kami bermigrasi ke solusi yang memanfaatkan RESTful Api yang hanya mempertahankan id dokumen unik dan lokasinya (yang disediakan untuk klien daripada streaming untuk mencegah beban jaringan internal yang tidak perlu). Kegigihan yang sebenarnya akan dilakukan melalui AWS.
PremiumTier

Jawaban:

7

Adakah yang tahu bagaimana pelangi unicorn (Netflix, Amazon, Google, dll.) Menangani pertukaran file / data besar di antara layanan mereka?

Sayangnya saya tidak tahu bagaimana mereka menghadapi masalah seperti itu.

Masalahnya adalah ini - Apakah masuk akal bagi semua layanan microser kami untuk menerima ID unik ini sebagai bagian dari API mereka untuk keperluan berinteraksi dengan dokumen atau tidak?

Itu melanggar Prinsip Tanggung Jawab Tunggal, yang seharusnya melekat dalam arsitektur layanan mikro Anda. Satu microservice - satu logis , secara fisik banyak contoh mewakili satu - harus berurusan dengan satu topik .

Dalam hal penyimpanan dokumen Anda, Anda memiliki satu titik, di mana semua pertanyaan untuk dokumen pergi (tentu saja Anda dapat membagi unit logis ini menjadi beberapa penyimpanan dokumen untuk beberapa jenis dokumen).

  • Jika "aplikasi" Anda perlu mengerjakan suatu dokumen, ia akan menanyakan masing-masing layanan mikro dan memproses hasilnya.

  • Jika layanan lain memerlukan dokumen aktual atau bagian dari itu, ia harus meminta layanan dokumen.

Salah satu poin pertentangan utama yang kami hadapi adalah bagaimana mengkomunikasikan data dalam jumlah besar antara berbagai layanan kami.

Ini adalah masalah arsitektur:

  1. Kurangi kebutuhan untuk mentransfer sejumlah besar data

    Idealnya, setiap layanan memiliki semua data dan tidak perlu transfer untuk hanya melayani permintaan. Sebagai perpanjangan dari ide ini - jika Anda memiliki kebutuhan untuk mentransfer data, pikirkan redundansi (* dengan cara yang positif_): Apakah masuk akal untuk memiliki data yang berlebihan di banyak tempat (di mana mereka diperlukan)? Pikirkan bagaimana inkonsistensi yang mungkin dapat membahayakan proses Anda. Tidak ada transfer yang lebih cepat karena sebenarnya tidak ada .

  2. Kurangi ukuran data itu sendiri

    Pikirkan bagaimana Anda bisa mengompres data Anda: Mulai dengan algortihms kompresi aktual hingga struktur data pintar . Semakin sedikit melewati kawat, semakin cepat Anda.

Thomas Junk
sumber
2

Jika ID dikembalikan oleh toko dokumen Anda dengan cara untuk dokumen referensi di seluruh sistem, maka masuk akal untuk semua layanan untuk menerima bahwa 'Dokumen ID' pada API mereka ketika kebutuhan layanan untuk mengetahui dokumen itu perlu bekerja dengan.

Ini tidak serta merta menciptakan ikatan yang lebih erat antara layanan daripada yang dibutuhkan. Layanan yang perlu mengakses dokumen harus tetap mengakses layanan penyimpanan dokumen dan mereka membutuhkan ID tersebut untuk memberi tahu toko dokumen mana yang akan diakses.
Layanan yang tidak mengakses dokumen secara langsung mungkin perlu meneruskan ID Dokumen, tetapi untuk layanan itu hanya string sewenang-wenang yang tidak membuat ketergantungan.

Bart van Ingen Schenau
sumber
Terimakasih atas balasan anda. Saya harus menambahkan bahwa kita berpotensi mendapatkan manfaat dari mengekspos layanan microsoft kami kepada konsumen eksternal yang mungkin tidak ingin juga memanfaatkan penyimpanan dokumen internal kami. Dengan pemikiran itu apakah Anda masih merasa ini adalah pendekatan terbaik?
PremiumTier
@PremiumTier: Ya. Tetapi pelanggan eksternal tersebut harus menyediakan toko mereka sendiri yang mendukung API yang sama dengan toko internal Anda, sehingga layanan Anda dapat bekerja sama dengannya.
Bart van Ingen Schenau
Itu masuk akal tetapi masih terasa lebih rumit daripada memiliki layanan menerima stream, byte array, atau json blob daripada referensi dokumen. Dalam hal ini layanan 'adaptor' dapat dengan mudah dipanggil terlebih dahulu untuk mendapatkan aliran file jika diperlukan sebelum memanggil layanan berikutnya. Ngomong-ngomong, saya tidak mencoba untuk menjadi argumentatif melainkan hanya mencoba memahami manfaat dari pendekatan ini :)
PremiumTier
2

Secara pribadi, saya lebih suka tidak menggunakan layanan penyimpanan dokumen dan id dokumen terpisah, tetapi URL untuk mengakses dokumen (dengan otentikasi header yang tepat). Dengan pendekatan ini Anda tidak akan memerlukan layanan lain untuk mengandalkan layanan dokumen, alih-alih hanya menggunakan URL lengkap untuk mengakses dokumen. ketika penyimpanan tumbuh dan memberikan URL.

Namun Anda mungkin perlu layanan untuk mengunggah dokumen dan mendapatkan URL-nya.

Pelican Terbang Rendah
sumber
1

Adakah yang tahu bagaimana pelangi unicorn (Netflix, Amazon, Google, dll.) Menangani pertukaran file / data besar di antara layanan mereka?

Cek spesifikasi Amazon S3 REST API, tampaknya mereka mengembalikan objek penuh dalam byte. Tampaknya tidak banyak pilihan jika Anda mendesain sebuah layanan mikro. Tautan format respons Amazon S3

Suresh
sumber