Pengantar Perjanjian Lama

Arsitektur Kepemilikan Kepemilikan telah menjadi pola dominan untuk membangun sistem perangkat lunak yang dapat digalakkan, mandiri, dan mandiri. Namun, pergeseran dari aplikasi monolitik ke layanan yang didistribusikan memperkenalkan kompleksitas baru ⁇ kesulitan yang ketat antara layanan, batas yang tidak jelas, dan kesulitan dalam pengujian dan penyebaran. Menerapkan prinsip SOLID ke mikroservices desain alamat tantangan ini head-on. Lima panduan desain berorientasi objek ini, ketika disesuaikan dengan batas layanan dan komunikasi antar layanan, menghasilkan layanan yang lebih mudah untuk dipertahankan, skala, dan berkembang. Artikel ini mengeksplorasi setiap prinsip, aplikasi praktisnya dalam layanan mikro, dan organisasi yang konkret dapat mencapai manfaat.

Apa Prinsip - Prinsip SOLID Itu?

Akronim dari Akronim yang diperkenalkan oleh Robert C. Martin (Paman Bob) mewakili lima prinsip desain yang mendorong kode berorientasi objek yang dapat dipertahankan dan dapat diekstensifkan.Dalam konteks layanan mikro, prinsip-prinsip ini diterjemahkan ke decoupled, layanan terfokus dan kontrak yang jelas di antara mereka.

Prinsip Tanggung Jawab Tunggal (SRP)

Kelas atau modul ole harus memiliki satu, dan hanya satu, alasan untuk berubah. Dalam layanan mikro, ini berarti setiap layanan harus memiliki kapabilitas bisnis tunggal atau subdomain. Sebagai contoh, layanan manajemen pesanan harus menangani hanya memesan acara daur hidup, bukan pemrosesan pembayaran atau pelacakan inventaris. Hal ini mengurangi radius ledakan perubahan dan membuat layanan secara independen dapat disebar.

Prinsip Terbuka/Tutup (OCP)

Entitas perangkat lunak ouffle harus terbuka untuk ekstensi tetapi ditutup untuk modifikasi. Disediakan untuk layanan mikro, layanan harus membuka antarmuka stabil (APIs atau kontrak acara) yang dapat diperpanjang dengan fitur baru tanpa memodifikasi kode yang ada. Hal ini sering dicapai melalui API versi, evolusi skema peristiwa, atau arsitektur plugin.

Prinsip Substitusi (LSP)

Objek-objek dalam kelas super harus dapat diganti dengan objek dari subkelas tanpa mempengaruhi keabsahan program. Untuk layanan mikro, LSP memastikan bahwa implementasi yang berbeda dari antarmuka layanan (misalnya, sebuah gateway pembayaran yang dapat beralih dari Stripe ke PayPal) berperilaku konsisten dan dapat ditukar tanpa melanggar konsumen.

Prinsip Penggolongan Antarmuka (IPP)

Banyak antarmuka spesifik klien lebih baik daripada satu antarmuka umum. Dalam layanan mikro, ini diterjemahkan ke API kecil, terfokus atau definisi peristiwa yang disesuaikan dengan kebutuhan setiap konsumen. Sebagai contoh, layanan pelanggan mungkin akan mengungkap titik akhir yang terpisah untuk profil penerimaan, manajemen alamat, dan status loyalitas bukan rute \"pengganti\" monolitik.

Kebergantungan Bergantung Kebergantungan Bergantungan Bergantung Pada Prinsip (DIP)

Ketergantungan pada abstraksi, bukan konkresi. Dalam layanan mikro, layanan harus bergantung pada antarmuka abstrak seperti perantara pesan, API gateway, atau meshe layanan daripada referensi terkode keras ke layanan lain. Ini memungkinkan implementasi swapping, memperkenalkan pemutus sirkuit, atau menambahkan lapisan caching tanpa mengubah logika bisnis.

Mengapa Prinsip - Prinsip SOLID Kritis dalam Pelayanan Mikro

Secara inheren, layanan mikro secara inheren membutuhkan batasan yang jelas, coupling longgar, dan kohesi tinggi. Prinsip SOLID menyediakan kerangka kerja yang terbukti untuk mencapai kualitas ini. Tanpa mereka, tim sering jatuh ke dalam anti-pattern seperti \"monolith yang terdistribusi,\" di mana layanan disatukan erat melalui basis data bersama atau chatty API. Menerapkan SOLID mencegah hal ini dengan memberlakukan pemisahan kekhawatiran di tingkat arsitektur.

Selain itu, seiring dengan bertambahnya jumlah layanan, biaya perubahan meningkat secara eksponensial jika dependensi tidak dikelola. Prinsip SOLID menjaga ketergantungan eksplisit dan tidak dapat diververtible, memungkinkan tim untuk mengembangkan layanan secara independen.Hal ini menyelaraskan langsung dengan tujuan layanan mikro: penyebaran independen, skala, dan ketahanan.

Manfaat Menerapkan Prinsip - Prinsip SOLID dalam Pelayanan Mikro

Ketahanan Dipertingkat

Pada saat freidosis setiap layanan memiliki tanggung jawab tunggal, memodifikasi satu layanan jarang berdampak pada yang lain. Sebagai contoh, penambahan langkah verifikasi pengguna baru ke layanan autentikasi tidak memerlukan perubahan pada layanan profil pengguna. Isolasi ini secara drastis mengurangi regresi pengujian ruang lingkup dan risiko penyebaran. Tim dapat merilis pembaruan ke layanan individu pada kekaderan mereka sendiri, mempercepat siklus pengiriman.

Kestabilan yang Lebih Murah

Layanan avaisoba yang dirancang dengan SRP dan ISP secara alami lebih granular. Keanularitasan ini memungkinkan organisasi hanya untuk skala komponen yang mengalami permintaan yang lebih tinggi. Sebagai contoh, sebuah platform streaming video mungkin skala layanan transcodingnya secara independen dari layanan pencarian metadatanya. Karena ketergantungan terbalik (DIP), skala sebuah layanan tidak memerlukan skala mitra hulu atau hilirnya.

Keanekagunaan dan Kemudahan yang Lebih Besar Kefanaan dan Kemudahan Kembali yang Lebih Besar

Segregasi antarmuka ugricane memastikan bahwa layanan hanya mengungkap apa yang dibutuhkan konsumen. Hal ini meminimalkan coupling dan membuat antarmuka tersebut dapat digunakan kembali di seluruh konsumen multiple. Sebagai contoh, layanan pemberitahuan dengan antarmuka terpisah untuk email, SMS, dan pemberitahuan push dapat digunakan kembali dengan tertib, penagihan, dan layanan akun tanpa memerlukan perubahan. Prinsip terbuka/tertutup lebih lanjut memungkinkan penambahan saluran pemberitahuan baru (misalnya, WebSocket) tanpa mengubah antarmuka yang ada.

Kemampuan Menguji Lebih Baik

Layanan terisolasi dengan antarmuka yang didefinisikan dengan baik jauh lebih mudah diuji.Unit menguji suatu layanan yang bergantung pada abstraksi (DIP) daripada layanan beton memungkinkan pengembang untuk menggunakan mock atau stub.Pengujian integrasi menjadi lebih sederhana karena setiap layanan dapat dijalankan dalam isolasi terhadap suatu pemanfaatan tes.Penutupan tes yang lebih tinggi mengarah pada insiden produksi yang lebih sedikit dan loop umpan balik yang lebih cepat.

Keterlibatan dan Ketahanan yang Memuakkan

Dengan melakukan adhering ke DIP, layanan mengandalkan saluran komunikasi abstrak seperti antrian pesan atau proksi mesh layanan. Abstraksi ini dapat mengimplementasikan retries, timeout, circuit breakers, dan mashheads tanpa mengubah logika layanan. Sebagai contoh, layanan pesanan yang mengirimkan acara pembayaran melalui broker pesan (DIP) akan terus berfungsi walaupun layanan pembayaran sementara tidak tersedia, sebagai acara diantri untuk pemrosesan nanti.

PASAR Ukraina Lanjut Naik Kapal dan Otonomi Tim

Bila layanan mengikuti SRP dan ISP, tanggung jawab mereka jelas dan terbatas.Pembangun baru dapat memahami tujuan layanan dengan cepat.Tim dapat memiliki satu set layanan terkait tanpa membutuhkan pengetahuan mendalam tentang orang lain. hal ini memungkinkan jenis tim otonom, lintas fungsi yang menjanjikan layanan mikro.

Aplikasi Praktis SOLID dalam Pelayanan Mikro

PALIK Defining Batasan Layanan dengan SRP

Mulailah dengan mendekomposisikan domain Anda ke dalam konteks yang terikat. Setiap konteks menjadi layanan. Misalnya, dalam sistem e-commerce, buat layanan terpisah untuk katalog, cart, perintah, pembayaran, pengiriman, dan ulasan. Setiap layanan memiliki aturan data dan bisnisnya. Hindari menciptakan \"layanan utilitas\" yang mencampurkan tanggung jawab.

Perekabentukan Antarmuka yang Boleh Direkasi dengan OCP dan ISP

Buat definisi antarmuka (kontrak) menggunakan protobuf, OpenAPI, atau AsyncAPI. Pastikan antarmuka ini dapat diversi dan dapat diekstensi. Sebagai contoh, sebuah acara \"order yang diciptakan\" harus menyertakan bidang yang Anda yakini, tetapi memungkinkan untuk bidang di masa depan melalui sifat opsional. Hindari pemecahan perubahan dengan menambahkan titik akhir baru atau jenis pesan daripada memodifikasi yang ada.

Mengmanfaatkan Substitusiabilitas dengan LSP

Ketika layanan multiplesion menerapkan antarmuka yang sama (misalnya, adaptor gateway pembayaran berganda), standardisasi kontrak. Tuliskan tes integrasi yang memverifikasi implementasi apapun yang melekat pada perilaku yang diharapkan (misalnya, menerima pembayaran mengembalikan sukses atau kegagalan dengan kode error yang konsisten). Ini membuat swapping gateway aman.

Songsangkan Ketergantungan dengan Pesanan dan Menyalah Dinas

Ketimbang layanan A membuat panggilan HTTP langsung ke layanan B, memiliki layanan A menerbitkan sebuah acara ke pialang pesan (Kafka, RabbitMQ) atau menggunakan layanan mesh (Istio, Linkerd).Mesh layanan dapat menangani retry, timeout, dan kebijakan pemecahan sirkuit. Logika bisnis di dalam layanan A tetap agnostik ke jaringan yang mendasari.

Tantangan dan Pertimbangan

Prinsip-prinsip SOLID yang diterapkan oleh FALD dalam layanan mikro tidak tanpa tantangan. Over-segmentation (ISP yang diterapkan terlalu agresif) dapat mengarah ke antarmuka yang cerewet dan terlalu banyak layanan, meningkatkan overhead operasional. Demikian pula, ketat SRP dapat menyebabkan tim untuk membuat layanan mikro untuk setiap unit kecil pekerjaan, sehingga menghasilkan \"nanoservices.\" Keseimbangan adalah kunci.

Tantangan lain adalah memversi dan mengkeserasian mundur. Mengikuti OCP membutuhkan kebijakan deprekasi yang cermat.Alat seperti registri skema (Confluent Schema Registry, Apikurio) dapat membantu mengelola tingkat keserasian.

Terakhir, budaya tim dan materi jajaran organisasi.Tanpa kepemilikan dan komunikasi yang jelas, layanan SOLID yang didefinisikan dengan baik pun dapat menjadi erat disatukan melalui kebiasaan organisasi (misalnya, basis data bersama atau perpustakaan bersama).Integrasi berkelanjutan dan praktik DevOps harus mendukung penyebaran independen.

Kekecualian Kesimpulan

Prinsip-prinsip SOLID yang tertadbir dalam arsitektur layanan mikro bukanlah peluru perak, tetapi merupakan panduan yang kuat untuk sistem bangunan yang dapat dipertahankan, dapat ditadbir, dan dapat disusutkan kembali. Dengan berfokus pada tanggung jawab yang jelas, kontrak yang stabil, substitubilitas, antarmuka yang bergrain baik, dan ketergantungan terbalik, tim dapat menghindari banyak pitfall umum sistem terdistribusi. Investasi dalam desain upfront membayar off sebagai sistem tumbuh dan berkembang. Untuk pembacaan lebih lanjut, menjelajahi Design [[TFL]] yang digunakan oleh para mikro[TFL:1], [[TFL2:2]] Prinsip-prinsip di atas [TOLID][TFL3] dan pola-pola seperti:FL]] dan [[TFL]] ini, seperti:FL]]