Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure Service Fabric menyederhanakan penulisan dan pengelolaan layanan stateless dan stateful. Topik ini mencakup:
- Model pemrograman Reliable Services untuk layanan stateless dan stateful.
- Pilihan yang harus Anda buat saat menulis Reliable Service.
- Beberapa skenario dan contoh kapan harus menggunakan Reliable Services dan bagaimana skenario ditulis.
Reliable Services adalah salah satu model pemrograman yang tersedia di Service Fabric. Lainnya adalah model pemrograman Reliable Actor , yang menyediakan kerangka kerja aplikasi Aktor Virtual di atas model Reliable Services. Untuk informasi selengkapnya tentang Reliable Actor, lihat Pengenalan Service Fabric Reliable Actor.
Service Fabric mengelola masa pakai layanan, dari provisi dan penyebaran melalui peningkatan dan penghapusan, melalui manajemen aplikasi Service Fabric.
Apa itu Reliable Services
Reliable Services memberi Anda model pemrograman tingkat atas yang sederhana, kuat, untuk membantu Anda mengekspresikan apa yang penting bagi aplikasi Anda. Dengan model pemrograman Reliable Services, Anda mendapatkan:
- Akses ke API Service Fabric. Tidak seperti layanan Service Fabric yang dimodelkan sebagai Guest Executable, Reliable Services dapat menggunakan API Service Fabric secara langsung. Hal ini memungkinkan layanan untuk:
- Melakukan permintaan ke sistem
- Melaporkan status kesehatan entitas dalam kluster
- Menerima pemberitahuan tentang konfigurasi dan perubahan kode
- Menemukan dan berkomunikasi dengan layanan lain,
- Menggunakan Reliable Collections
- Akses banyak kemampuan lain, semuanya dari model pemrograman kelas satu dalam beberapa bahasa pemrograman.
- Model sederhana untuk menjalankan kode Anda sendiri yang terasa seperti model pemrograman lain yang sudah dikenal. Kode Anda memiliki titik masuk yang terdefinisi dengan baik dan siklus hidup yang dikelola dengan mudah.
- Model komunikasi yang dapat dicolokkan. Gunakan transportasi pilihan Anda, seperti HTTP dengan API Web, WebSocket, protokol TCP kustom, atau apa pun. Reliable Services menyediakan beberapa opsi siap pakai yang hebat yang dapat Anda gunakan, atau Anda bisa menyiapkan opsi Anda sendiri.
- Untuk layanan stateful, model pemrograman Reliable Services memungkinkan Anda untuk menyimpan status Anda secara konsisten dan andal tepat di dalam layanan Anda dengan menggunakan Reliable Collections. Reliable Collections adalah sekumpulan kelas koleksi yang memiliki ketersediaan tinggi dan dapat diandalkan, yang akan dikenal oleh siapa saja yang telah menggunakan koleksi C#. Secara tradisional, layanan membutuhkan sistem eksternal untuk manajemen status secara andal. Dengan Reliable Collections, Anda dapat menyimpan status Anda dekat dengan sumber daya komputasi Anda dengan ketersediaan dan keandalan tinggi yang sama seperti yang Anda harapkan dari penyimpanan eksternal yang sangat andal. Model ini juga meningkatkan latensi karena Anda menggabungkan komputasi dan keadaan yang diperlukan untuk berfungsi.
Apa yang membuat Reliable Services berbeda
Reliable Services berbeda dari layanan yang mungkin telah Anda tulis sebelumnya, karena Service Fabric menyediakan:
- Keandalan - Layanan Anda tetap aktif bahkan di lingkungan yang tidak dapat diandalkan di mana komputer Anda gagal atau mengalami masalah jaringan, atau jika layanan itu sendiri mengalami kesalahan dan crash atau gagal. Untuk layanan stateful, status Anda dipertahankan meskipun terjadi kegagalan jaringan atau lainnya.
- Ketersediaan - Layanan Anda dapat dijangkau dan responsif. Service Fabric mempertahankan jumlah salinan aktif yang Anda inginkan.
- Skalabilitas - Layanan dipisahkan dari perangkat keras tertentu, dan dapat tumbuh atau menyusut seperlunya melalui penambahan atau penghapusan perangkat keras atau sumber daya lainnya. Layanan mudah dipartisi (terutama dalam kasus stateful) untuk memastikan bahwa layanan dapat menskalakan dan menangani kegagalan parsial. Layanan dapat dibuat dan dihapus secara dinamis melalui kode, memungkinkan lebih banyak instans dibuat seperlunya, misalnya sebagai respons terhadap permintaan pelanggan. Akhirnya, Service Fabric mendorong layanan menjadi ringan. Service Fabric memungkinkan ribuan layanan untuk disediakan dalam satu proses, daripada memerlukan atau mendedikasikan seluruh instans atau proses OS ke satu instans layanan.
- Konsistensi - Informasi apa pun yang disimpan dalam Reliable Service dapat dijamin konsisten. Ini berlaku bahkan di beberapa Reliable Collections dalam layanan. Perubahan pada seluruh koleksi dalam layanan dapat dilakukan dengan cara yang bersifat atom secara transaksional.
Siklus hidup layanan
Terlepas dari apakah layanan Anda bersifat stateful atau stateless, Reliable Services menyediakan daur hidup yang sederhana, memungkinkan Anda dengan cepat memasukkan kode Anda dan memulai. Memulai dan menjalankan layanan baru mengharuskan Anda menerapkan dua metode:
- CreateServiceReplicaListeners/CreateServiceInstanceListeners - Metode ini adalah tempat layanan menentukan tumpukan komunikasi yang ingin digunakan. Tumpukan komunikasi, seperti Web API, adalah apa yang menentukan titik akhir mendengarkan atau titik akhir untuk layanan (bagaimana klien menjangkau layanan). Ini juga menentukan bagaimana pesan yang muncul berinteraksi dengan sisa kode layanan.
- RunAsync - Metode ini adalah tempat layanan Anda menjalankan logika bisnisnya, dan di mana layanan akan memulai tugas latar belakang apa pun yang harus berjalan selama masa pakai layanan. Token pembatalan yang disediakan adalah sinyal kapan pekerjaan tersebut harus berhenti. Misalnya, jika layanan perlu menarik pesan dari Reliable Queue dan memprosesnya, di sinilah pekerjaan tersebut terjadi.
Jika Anda mempelajari tentang layanan andal untuk pertama kalinya, baca terus! Jika Anda mencari panduan terperinci tentang siklus hidup layanan yang andal, lihat gambaran umum siklus hidup Reliable Services.
Contoh layanan
Mari kita lihat lebih dekat bagaimana cara kerja model Reliable Services, yaitu dengan layanan stateless dan stateful.
Layanan Andal Tanpa Status
Layanan stateless adalah layanan di mana tidak ada status yang dipertahankan dalam layanan di seluruh panggilan. Status apa pun yang ada sepenuhnya sekali pakai dan tidak memerlukan sinkronisasi, replikasi, persistensi, atau ketersediaan tinggi.
Misalnya, pertimbangkan kalkulator yang tidak memiliki memori dan menerima semua istilah dan operasi untuk dilakukan sekaligus.
Dalam hal ini, RunAsync()
(C#) atau runAsync()
(Java) layanan dapat kosong, karena tidak ada pemrosesan tugas latar belakang yang perlu dilakukan layanan. Saat layanan kalkulator dibuat, layanan tersebut mengembalikan ICommunicationListener
(C#) atau CommunicationListener
(Java) (misalnya WEB API) yang membuka titik akhir mendengarkan di beberapa port. Titik akhir mendengarkan ini terhubung ke metode perhitungan yang berbeda (misalnya: "Tambahkan(n1, n2)") yang menentukan API publik kalkulator.
Ketika panggilan dilakukan dari klien, metode yang sesuai dipanggil, dan layanan kalkulator melakukan operasi pada data yang disediakan dan mengembalikan hasilnya. Ini tidak menyimpan status apa pun.
Tidak menyimpan status internal membuat contoh kalkulator ini sederhana. Tetapi sebagian besar layanan sebenarnya tidak bersifat stateless. Sebaliknya, mereka eksternalisasi status mereka ke beberapa penyimpanan lain. (Misalnya, aplikasi web apa pun yang bergantung pada menjaga status sesi di penyimpanan pendukung atau cache tidak bersifat stateless.)
Contoh umum tentang bagaimana layanan stateless digunakan dalam Service Fabric adalah sebagai front-end yang mengekspos API yang berinteraksi dengan publik untuk aplikasi web. Layanan front-end kemudian berbicara dengan layanan stateful untuk menyelesaikan permintaan pengguna. Dalam hal ini, panggilan dari klien diarahkan ke port yang sudah diketahui, seperti 80, di mana layanan "stateless" mendengarkan. Layanan stateless ini menerima panggilan dan menentukan apakah panggilan berasal dari pihak tepercaya dan untuk layanan mana panggilan itu ditujukan. Kemudian, layanan tak berstatus meneruskan panggilan ke partisi layanan berstatus yang benar dan menunggu respons. Ketika layanan tanpa status menerima respons, layanan itu akan membalas kepada klien awal. Contoh layanan tersebut adalah sampel Memulai Service Fabric (C# / Java), di antara sampel Service Fabric lainnya dalam repositori tersebut.
Layanan Andal Stateful
Layanan stateful adalah layanan yang harus memiliki beberapa bagian status yang tetap konsisten dan ada agar layanan berfungsi. Pertimbangkan sebuah layanan yang secara terus-menerus menghitung rata-rata bergulir dari nilai tertentu berdasarkan pembaruan yang diterima. Untuk melakukan ini, ia harus memiliki serangkaian permintaan masuk saat ini yang perlu diproses dan rata-rata saat ini. Layanan apa pun yang mengambil, memproses, dan menyimpan informasi di penyimpanan eksternal (seperti blob Azure atau penyimpanan tabel saat ini) bersifat stateful (memiliki status). Ini hanya menyimpan statusnya di penyimpanan status eksternal.
Sebagian besar layanan saat ini menyimpan statusnya secara eksternal, karena penyimpanan eksternal adalah yang memberikan keandalan, ketersediaan, skalabilitas, dan konsistensi untuk status tersebut. Di Service Fabric, layanan tidak diperlukan untuk menyimpan statusnya secara eksternal. Service Fabric mengurus persyaratan ini untuk kode layanan dan status layanan.
Katakanlah kita ingin menulis layanan yang memproses gambar. Untuk melakukan ini, layanan mengambil gambar dan serangkaian konversi untuk dilakukan pada gambar tersebut. Layanan ini mengembalikan listener komunikasi (misalkan WebAPI) yang mengekspos API seperti ConvertImage(Image i, IList<Conversion> conversions)
. Ketika menerima permintaan, layanan menyimpannya dalam IReliableQueue
, dan mengembalikan beberapa ID kepada klien sehingga dapat melacak permintaan.
Dalam layanan ini, RunAsync()
bisa lebih kompleks. Layanan ini memiliki perulangan di dalam RunAsync()
yang menarik permintaan dari IReliableQueue
dan melakukan konversi yang diminta. Hasilnya disimpan dalam IReliableDictionary
sehingga ketika klien kembali, mereka bisa mendapatkan gambar yang telah dikonversi. Untuk memastikan bahwa gambar tidak hilang bahkan jika terjadi kegagalan, Reliable Service ini akan mengeluarkannya dari antrean, melakukan konversi, dan menyimpan hasilnya, semuanya dalam satu transaksi. Dalam hal ini, pesan dihapus dari antrean dan hasilnya disimpan dalam kamus hasil hanya ketika konversi selesai. Atau, layanan dapat menarik gambar keluar dari antrean dan segera menyimpannya di toko jarak jauh. Ini mengurangi jumlah status yang harus dikelola layanan, tetapi meningkatkan kompleksitas karena layanan harus menyimpan metadata yang diperlukan untuk mengelola penyimpanan jarak jauh. Dengan salah satu pendekatan, jika sesuatu gagal di tengah-tengah proses, permintaan akan tetap berada dalam antrean yang menunggu untuk diproses.
Meskipun layanan ini terdengar seperti layanan .NET biasa, perbedaannya adalah bahwa struktur data yang digunakan (IReliableQueue
dan IReliableDictionary
) disediakan oleh Service Fabric, dan sangat andal, tersedia, dan konsisten.
Kapan menggunakan API Reliable Services
Pertimbangkan RELIABLE Services API jika:
- Anda ingin kode layanan Anda (dan status opsional) sangat tersedia dan dapat diandalkan.
- Anda memerlukan jaminan transaksi di beberapa unit status (misalnya, pesanan dan item baris pesanan).
- Status aplikasi Anda dapat dimodelkan secara alami sebagai Kamus Terpercaya dan Antrean.
- Kode atau status aplikasi Anda perlu sangat tersedia dengan pembacaan dan penulisan berlatensi rendah.
- Aplikasi Anda perlu mengontrol konkurensi atau granularitas operasi yang ditransaksikan pada satu atau beberapa Reliable Collections.
- Anda ingin mengelola komunikasi atau mengontrol skema partisi untuk layanan Anda.
- Kode Anda memerlukan lingkungan runtime bebas utas.
- Aplikasi Anda perlu membuat atau menghancurkan Reliable Dictionaries atau Antrean secara dinamis atau seluruh layanan pada waktu runtime.
- Anda perlu mengontrol fitur pencadangan dan pemulihan yang disediakan Service Fabric secara terprogram untuk status layanan Anda.
- Aplikasi Anda perlu mempertahankan riwayat perubahan untuk unit statusnya.
- Anda ingin mengembangkan atau mengonsumsi penyedia status kustom yang dibuat oleh pihak ketiga.