Mengapa menggunakan layanan (REST / SOAP) alih-alih perpustakaan?
22
Katakanlah Anda ingin memecah aplikasi Anda menjadi layanan. Apakah ada alasan bagus untuk mengadopsi pendekatan SOA vs. hanya membuat API perpustakaan yang dapat dimuat oleh aplikasi yang membutuhkannya.
Hai Nate, baca Steant's Google Platforms Rant , ini memberikan wawasan hebat pada platform (layanan) vs. pertanyaan produk (perpustakaan) ...
yannis
Jawaban:
11
Perbedaannya mungkin halus di antara keduanya. Sebagai contoh di dunia .NET, Anda mungkin memiliki aplikasi yang akan terasa seperti monolitik bagi pengguna akhir dan yang akan bekerja pada mesin yang sama, tetapi di dalam, akan dipisahkan menjadi sekelompok layanan WCF. Anda mungkin juga memiliki arsitektur di mana perpustakaan tidak sangat terkait (addins / plugins) dan hanya mengikuti protokol ketika berbicara satu sama lain.
Jika kami menghindari membicarakan tentang kasus perantara tersebut, dan hanya berurusan dengan pustaka API yang tertaut kuat vs layanan REST terpisah, maka Anda mungkin ingin mempertimbangkan hal-hal berikut:
API perpustakaan dipanggil pada mesin yang sama. Layanan dapat di-host di mana saja dan dipanggil dari mana saja. Jika Anda menghitung hosting aplikasi pada beberapa mesin untuk alasan kinerja / skalabilitas / keamanan, kemungkinan Anda harus menggunakan layanan.
Situasinya mirip ketika menggunakan satu layanan oleh aplikasi yang digunakan pada beberapa mesin. Misalnya, jika Anda melakukan aplikasi untuk bank yang melakukan perhitungan finansial, salah satu caranya adalah dengan menyebarkan seluruh aplikasi besar ke setiap desktop, dan dipaksa untuk melakukan pembaruan ukuran besar untuk setiap klien setiap saat; pendekatan lain akan menjadi tuan rumah bagian komputasi pada server, dan menyebarkan ke desktop hanya aplikasi ringan hanya dengan UI dan banyak panggilan ke server tersebut.
Jika Anda meng-hosting layanan REST, siapa pun dapat menggunakannya: pengguna Mac, orang yang menggunakan Linux, dll. Jika Anda telah membuat pustaka C # dengan Visual Studio dan Anda mendistribusikannya sebagai DLL, lupakan pengguna (pelanggan) ?) yang tidak memiliki Windows.
Keuntungan lain dari layanan adalah bahwa ketika Anda memperbarui layanan, itu segera digunakan untuk semua konsumen layanan. Jadi, jika Anda memperbaiki bug, atau masalah kinerja, semua orang mendapat manfaat segera setelah layanan yang diperbarui ditayangkan, alih-alih harus mendistribusikan pembaruan yang orang mungkin memilih untuk mengabaikannya.
Benar, tetapi ini juga bisa merugikan. Ketika Anda membuat perubahan pada layanan yang bergantung pada banyak aplikasi, Anda dapat secara tak terduga merusak fungsionalitas dalam satu atau banyak aplikasi tersebut. Ini bukan untuk menakut-nakuti siapa pun dari layanan, hanya perlu diketahui bahwa Anda perlu memastikan semua konsumen layanan tetap bekerja setiap kali Anda mengubah layanan. Yang lebih baik adalah meninggalkan metode layanan lawas begitu mereka telah dikerahkan dan membuat metode baru ketika Anda perlu mengubah implementasi.
Lews Therin
8
Keuntungan Perpustakaan:
Overhead per panggilan yang lebih rendah (hanya melompat atau bahkan inline) ) = dapat meningkatkan kinerja
"kode asli" tidak benar-benar masuk akal di sini: a) suatu layanan dapat menggunakan "kode asli" juga, dan b) kompilasi tepat waktu sering kali memberikan kinerja yang sama dengan kode asli.
sleske
Poin yang diambil. Yang saya maksud ketika saya mengatakan "kode asli" adalah bahwa perpustakaan adalah panggilan "dalam proses". Tidak ada overhead lapisan layanan (mis. HTTP jika melakukan panggilan Web API)
Cory House
Ya, overhead panggilan memang harus lebih rendah. Saya mengambil kebebasan untuk mengedit jawaban Anda, untuk menggantikan penyebutan "kode asli" dengan "overhead panggilan rendah". Silakan mengedit ulang jika Anda tidak setuju :-).
sleske
Yang ingin saya tambahkan adalah penggunaan transaksi . Biasanya jauh lebih sulit untuk membuat pekerjaan transaksional melintasi batas-batas layanan, daripada di perpustakaan bersama.
c_mart
2
Pendekatan SOA memungkinkan berbagai layanan untuk di-host dan dikelola secara terpisah. Selain kode, menggunakan layanan tertentu mungkin memerlukan banyak konfigurasi khusus (kata sandi, port, sertifikat, dll). Mengkonsumsi layanan REST memiliki kompleksitas yang terbatas yang dapat didokumentasikan dengan jelas dan mudah dipahami. Ini juga lebih aman karena itu berarti Anda tidak perlu memberikan akses ke DB atau sumber daya lainnya kepada klien.
Jika ada perubahan pada layanan SOA, maka layanan SOA itu harus dibangun kembali, diuji ulang dan dipekerjakan kembali. Semua aplikasi yang menggunakan layanan itu dapat terus melakukannya. Perubahan ke perpustakaan dalam DLL akan berarti semua konsumen perpustakaan itu harus dibangun kembali untuk referensi DLL itu, mereka semua harus diuji ulang dan mereka semua harus dipekerjakan kembali. Ada juga bahaya ini mungkin tidak terjadi dengan benar, dan aplikasi yang berbeda akan memiliki versi DLL yang berbeda. Kadang-kadang ini mungkin tidak menjadi masalah - mungkin setiap sistem harus memiliki versi perpustakaan yang hadir pada waktu penyebaran (Anda mungkin telah memperbarui sistem logging Anda untuk memiliki fitur-fitur baru yang bermanfaat - apakah Anda benar-benarperlu memperbarui setiap sistem dengan itu?) dalam hal ini perpustakaan baik-baik saja. Tetapi katakanlah Anda memiliki layanan untuk menghitung tarif pajak, dan undang-undang pajak berubah. Anda tidak ingin harus memperbarui setiap sistem untuk memasukkan perubahan ini, akan lebih baik melakukannya di satu tempat. Dalam hal ini layanan adalah pilihan yang lebih baik.
Ada beberapa jawaban yang baik tetapi saya ingin menambahkan lebih banyak hal ke jawaban yang diberikan:
Metode pustaka API sangat berguna ketika Anda ingin berinteraksi dengan hal-hal dengan sesedikit mungkin overhead. Konsekuensinya adalah bahwa ada sambungan yang lebih tinggi antara API dan aplikasi yang menggunakannya. Kadang-kadang, ini tidak apa-apa untuk aplikasi dan bahkan perlu, namun jika Anda memiliki sistem yang sangat terdistribusi atau Anda berpikir interoperabilitas adalah masalah besar, Anda mungkin perlu naik satu langkah abstraksi yang terakhir dan menggunakan cara komunikasi lainnya. Terutama, jika Anda ingin memiliki sistem terdistribusi, SOAP adalah jenis langkah selanjutnya dalam SOA, tetapi Anda akan tetap dibiarkan bergantung pada unit-unit tersebut, karena mereka harus mengetahui prosedur satu sama lain. REST membawanya ke tingkat yang baru, dengan memungkinkan mesin mempelajari sesuatu tentang konten di layanan lain dengan cara terpadu.
Dalam kasus Anda, jika aplikasi Anda tidak didistribusikan, saya tidak melihat alasan untuk mengubah aplikasi Anda menjadi SOA.
Jawaban:
Perbedaannya mungkin halus di antara keduanya. Sebagai contoh di dunia .NET, Anda mungkin memiliki aplikasi yang akan terasa seperti monolitik bagi pengguna akhir dan yang akan bekerja pada mesin yang sama, tetapi di dalam, akan dipisahkan menjadi sekelompok layanan WCF. Anda mungkin juga memiliki arsitektur di mana perpustakaan tidak sangat terkait (addins / plugins) dan hanya mengikuti protokol ketika berbicara satu sama lain.
Jika kami menghindari membicarakan tentang kasus perantara tersebut, dan hanya berurusan dengan pustaka API yang tertaut kuat vs layanan REST terpisah, maka Anda mungkin ingin mempertimbangkan hal-hal berikut:
API perpustakaan dipanggil pada mesin yang sama. Layanan dapat di-host di mana saja dan dipanggil dari mana saja. Jika Anda menghitung hosting aplikasi pada beberapa mesin untuk alasan kinerja / skalabilitas / keamanan, kemungkinan Anda harus menggunakan layanan.
Situasinya mirip ketika menggunakan satu layanan oleh aplikasi yang digunakan pada beberapa mesin. Misalnya, jika Anda melakukan aplikasi untuk bank yang melakukan perhitungan finansial, salah satu caranya adalah dengan menyebarkan seluruh aplikasi besar ke setiap desktop, dan dipaksa untuk melakukan pembaruan ukuran besar untuk setiap klien setiap saat; pendekatan lain akan menjadi tuan rumah bagian komputasi pada server, dan menyebarkan ke desktop hanya aplikasi ringan hanya dengan UI dan banyak panggilan ke server tersebut.
Jika Anda meng-hosting layanan REST, siapa pun dapat menggunakannya: pengguna Mac, orang yang menggunakan Linux, dll. Jika Anda telah membuat pustaka C # dengan Visual Studio dan Anda mendistribusikannya sebagai DLL, lupakan pengguna (pelanggan) ?) yang tidak memiliki Windows.
sumber
Keuntungan lain dari layanan adalah bahwa ketika Anda memperbarui layanan, itu segera digunakan untuk semua konsumen layanan. Jadi, jika Anda memperbaiki bug, atau masalah kinerja, semua orang mendapat manfaat segera setelah layanan yang diperbarui ditayangkan, alih-alih harus mendistribusikan pembaruan yang orang mungkin memilih untuk mengabaikannya.
sumber
Keuntungan Perpustakaan:
Keuntungan Layanan:
sumber
Pendekatan SOA memungkinkan berbagai layanan untuk di-host dan dikelola secara terpisah. Selain kode, menggunakan layanan tertentu mungkin memerlukan banyak konfigurasi khusus (kata sandi, port, sertifikat, dll). Mengkonsumsi layanan REST memiliki kompleksitas yang terbatas yang dapat didokumentasikan dengan jelas dan mudah dipahami. Ini juga lebih aman karena itu berarti Anda tidak perlu memberikan akses ke DB atau sumber daya lainnya kepada klien.
sumber
Jika ada perubahan pada layanan SOA, maka layanan SOA itu harus dibangun kembali, diuji ulang dan dipekerjakan kembali. Semua aplikasi yang menggunakan layanan itu dapat terus melakukannya. Perubahan ke perpustakaan dalam DLL akan berarti semua konsumen perpustakaan itu harus dibangun kembali untuk referensi DLL itu, mereka semua harus diuji ulang dan mereka semua harus dipekerjakan kembali. Ada juga bahaya ini mungkin tidak terjadi dengan benar, dan aplikasi yang berbeda akan memiliki versi DLL yang berbeda. Kadang-kadang ini mungkin tidak menjadi masalah - mungkin setiap sistem harus memiliki versi perpustakaan yang hadir pada waktu penyebaran (Anda mungkin telah memperbarui sistem logging Anda untuk memiliki fitur-fitur baru yang bermanfaat - apakah Anda benar-benarperlu memperbarui setiap sistem dengan itu?) dalam hal ini perpustakaan baik-baik saja. Tetapi katakanlah Anda memiliki layanan untuk menghitung tarif pajak, dan undang-undang pajak berubah. Anda tidak ingin harus memperbarui setiap sistem untuk memasukkan perubahan ini, akan lebih baik melakukannya di satu tempat. Dalam hal ini layanan adalah pilihan yang lebih baik.
sumber
Ada beberapa jawaban yang baik tetapi saya ingin menambahkan lebih banyak hal ke jawaban yang diberikan:
Metode pustaka API sangat berguna ketika Anda ingin berinteraksi dengan hal-hal dengan sesedikit mungkin overhead. Konsekuensinya adalah bahwa ada sambungan yang lebih tinggi antara API dan aplikasi yang menggunakannya. Kadang-kadang, ini tidak apa-apa untuk aplikasi dan bahkan perlu, namun jika Anda memiliki sistem yang sangat terdistribusi atau Anda berpikir interoperabilitas adalah masalah besar, Anda mungkin perlu naik satu langkah abstraksi yang terakhir dan menggunakan cara komunikasi lainnya. Terutama, jika Anda ingin memiliki sistem terdistribusi, SOAP adalah jenis langkah selanjutnya dalam SOA, tetapi Anda akan tetap dibiarkan bergantung pada unit-unit tersebut, karena mereka harus mengetahui prosedur satu sama lain. REST membawanya ke tingkat yang baru, dengan memungkinkan mesin mempelajari sesuatu tentang konten di layanan lain dengan cara terpadu.
Dalam kasus Anda, jika aplikasi Anda tidak didistribusikan, saya tidak melihat alasan untuk mengubah aplikasi Anda menjadi SOA.
sumber