Enterprise Distributed Application Service (EDAS) mendukung Apache Dubbo untuk membangun aplikasi microservice. Panduan ini mencakup sistem ekstensi Service Provider Interface (SPI) Dubbo, internal framework, serta prinsip desainnya.
Cara kerja sistem ekstensi SPI
Dubbo menggunakan mekanisme SPI ringan untuk menjaga modularitas intinya. Setiap komponen utama—protokol, load balancer, router, dan registri—didefinisikan sebagai titik ekstensi yang dapat dipasang. Artinya, Anda dapat:
Mengganti implementasi bawaan hanya dengan mengubah satu properti konfigurasi, tanpa perlu memodifikasi kode framework.
Menambahkan implementasi kustom dengan mengimplementasikan antarmuka Java dan mendaftarkannya melalui file SPI.
Memperluas perilaku secara transparan—Dubbo memperlakukan ekstensi pihak ketiga dan implementasi bawaan secara setara.
Untuk memahami arsitektur dasarnya, mulailah dengan topik mengenai desain framework dan pemuatan SPI berikut ini.
Implementasi ekstensi SPI
Dubbo mendefinisikan lebih dari 20 titik ekstensi, dikelompokkan berdasarkan fungsinya di sini. Setiap titik ekstensi merupakan antarmuka Java yang mendukung implementasi kustom.
RPC dan manajemen traffic
| Titik ekstensi | Apa yang Dikendalikan |
|---|---|
| Protocol | Protokol jaringan untuk panggilan remote |
| Filter | Rantai filter request dan response untuk kebutuhan lintas potong seperti logging atau autentikasi |
| Cluster | Strategi toleransi kesalahan saat panggilan gagal (misalnya, failover, failfast, forking) |
| Router | Aturan routing yang menentukan penyedia mana yang menerima traffic |
| LoadBalance | Strategi distribusi request di antara beberapa penyedia |
| Merger | Logika penggabungan hasil untuk pemanggilan yang difork |
Service discovery dan konfigurasi
| Titik ekstensi | Fungsinya |
|---|---|
| Registry | Integrasi registri layanan |
| Monitor | Pengumpulan metrik dan pelaporan data pemantauan |
Transport dan serialisasi
| Titik ekstensi | Apa yang Dikendalikan |
|---|---|
| Transporter | Lapisan transport jaringan |
| Exchanger | Pola pertukaran request-response di atas lapisan transport |
| Networker | Manajemen topologi jaringan untuk skenario multi-registri |
| Serialization | Format serialisasi data |
Siklus hidup dan proxying
| Titik ekstensi | Apa yang Dikendalikan |
|---|---|
| InvokerListener | Callback yang dipicu pada event pemanggilan layanan |
| ExporterListener | Callback yang dipicu pada event ekspor layanan |
| ExtensionFactory | Factory untuk membuat dan mengelola instans ekstensi |
| ProxyFactory | Factory untuk membuat proxy layanan |
| Compiler | Kompilasi dinamis kode sumber Java |
| Dispatcher | Strategi penugasan thread untuk pesan masuk |
| ThreadPool | Strategi pool thread untuk eksekusi layanan |
Diagnostik dan utilitas
| Titik ekstensi | Yang Dikendalikan |
|---|---|
| TelnetHandler | Handler untuk perintah manajemen runtime berbasis telnet |
| StatusChecker | Logika health check untuk pelaporan status layanan |
| PageHandler | Rendering halaman status untuk server HTTP bawaan |
| Container | Manajemen siklus hidup container layanan |
| Cache | Strategi caching hasil untuk pemanggilan berulang |
| Validation | Validasi parameter sebelum pemanggilan |
| LoggerAdapter | Adapter untuk mengintegrasikan berbagai framework logging |
Mekanisme Internal Framework
Topik-topik berikut menjelaskan cara Dubbo dibangun dan bagaimana mekanisme SPI bekerja di balik layar.
| Topik | Cakupannya |
|---|---|
| Build kode sumber | Membangun kode sumber Dubbo dari repositori |
| Desain framework | Arsitektur keseluruhan, desain berlapis, dan dependensi modul |
| Pemuatan SPI | Cara Dubbo menemukan, memuat, dan menginisialisasi ekstensi SPI |
| Detail implementasi | Implementasi internal komponen inti |
| Pusat konfigurasi | Manajemen konfigurasi terpusat untuk layanan terdistribusi |
| Perjanjian publik | Konvensi dan kontrak protokol publik yang digunakan bersama oleh komponen-komponen Dubbo |
Prinsip desain
Framework Dubbo mengikuti serangkaian prinsip desain yang didokumentasikan dalam topik-topik berikut. Gunakan sebagai referensi saat berkontribusi pada framework atau mengembangkan ekstensi kustom.
| Topik | Cakupannya |
|---|---|
| Perhatian terhadap detail | Mengapa kasus pinggiran dan keputusan desain halus penting dalam kode framework |
| Pola desain dasar | Pola dan konvensi desain inti yang digunakan di seluruh basis kode |
| Ekstensibilitas dan ekstensi inkremental | Cara merancang ekstensi yang kompatibel mundur dan dapat dikomposisi |
| Desain konfigurasi | Panduan untuk merancang parameter konfigurasi dan nilai default |
| Ketangguhan | Penanganan error, pola ketahanan, dan coding defensif dalam framework |
| Desain anti-salah | Mencegah penyalahgunaan melalui API yang jelas, nilai default yang masuk akal, dan validasi input |
| Refaktorisasi titik ekstensi | Kapan dan bagaimana merefaktorisasi antarmuka titik ekstensi |
Standar kualitas kode
| Topik | Cakupannya |
|---|---|
| Pemberian Versi | Konvensi penomoran versi dan jaminan kompatibilitas |
| Daftar periksa | Daftar periksa verifikasi pra-rilis untuk perubahan framework |
| Code smells | Anti-pola umum yang harus dihindari dalam kode framework Dubbo |
| Konvensi coding | Gaya kode, penamaan, dan standar format |
| Pengujian kompatibilitas | Strategi pengujian untuk kompatibilitas mundur dan maju |