Pip.Services Toolkit - sebagai "kunci master" untuk pengembangan layanan mikro





Saat ini, ada banyak framework yang siap pakai untuk mengembangkan aplikasi menggunakan arsitektur microservice. Biasanya, kerangka kerja dibagi menjadi dua jenis - untuk bahasa yang dapat bekerja dengan platform berbeda, tetapi pengembangan dilakukan dalam satu bahasa - contoh SpringBoot, Nancy, dll. Dan jenis kedua - untuk platform - mampu bekerja dengan bahasa pemrograman yang berbeda, tetapi kodenya hanya dapat dijalankan pada platform yang dipilih - contoh ServiceFabric, AWS Lambda. Tetapi praktis tidak ada kerangka kerja multibahasa yang mampu bekerja pada platform yang berbeda.



Tim kami mengembangkan sistem perusahaan berdasarkan layanan mikro, yang berisi komponen yang ditulis dalam bahasa berbeda dan seringkali perlu bekerja pada platform berbeda, sehingga masalah yang dijelaskan di atas lebih dari relevan bagi kami. Karena kami tidak dapat menemukan solusi siap pakai yang memenuhi persyaratan tersebut, kami mengembangkan solusi kami sendiri - Pip.Services Toolkit . Alat ini memungkinkan kami mengembangkan layanan mikro dalam banyak bahasa pemrograman dan tidak terlalu mengkhawatirkan di mana aplikasi ini akan berjalan - di cloud atau di lokasi.



Tujuan artikel ini adalah untuk membiasakan pembaca dengan kapabilitas proyek tanpa membahas detail implementasinya. Jika Anda tertarik untuk mempelajari lebih lanjut tentang alat ini, silakan, under cat ...



Apa itu Pip.Services?



Selama pengembangan, kami mencoba membuat alat yang cukup serbaguna yang mampu mencakup banyak tugas. Selama proses perancangan, ditentukan prinsip-prinsip dasar, yang menjadi fondasi produk:



  • komponen sistem harus sedikit terhubung agar mudah memodifikasinya dan menambahkan fungsionalitas baru
  • siklus hidup yang sangat panjang - tujuannya adalah untuk membuat alat yang memungkinkannya didukung dalam berbagai bahasa untuk waktu semaksimal mungkin.
  • kemampuan untuk mengembangkan aplikasi untuk arsitektur layanan mikro dan monolitik
  • aplikasi yang dikembangkan harus dapat diterapkan pada platform apa pun, baik itu di lokasi atau solusi cloud, dan cloud juga tidak harus bergantung pada operator
  • dukungan untuk jumlah maksimum bahasa pemrograman yang digunakan dalam pengembangan dengan tetap mempertahankan prinsip alat itu sendiri, serta kompatibilitas layanan yang ditulis dalam bahasa berbeda satu sama lain selama komunikasi


Pip.Services Toolkit mewakili seperangkat alat ekstensif yang memungkinkan Anda mengembangkan layanan mikro dan aplikasi monolitik menggunakan bahasa pemrograman populer. Pip.Services Toolkit telah mengembangkan alat untuk bekerja dengan semua fungsi dan struktur data yang diperlukan, kebutuhan yang mungkin timbul dari pengembang, jika tidak ada hal yang diperlukan, Anda dapat dengan mudah menambahkannya sendiri.



The Pip.Services Toolkit adalah poliglot sejati, dengan tetap berpegang pada konsep berikut:



Implementasi simetris dalam kode



  • , , . ,






  • — ,
  • — ,


Untuk representasi struktur yang lebih visual, mari beralih ke diagram struktural toolkit.







Seperti yang disebutkan di awal artikel, toolkit ini multibahasa. Saat ini, ada implementasi dalam 6 bahasa pemrograman, di antaranya ada yang populer (Java, Node.js, Python, .Net Core) dan berkembang (Go, Dart) - ini adalah lapisan abu-abu pada diagram.

Seperti yang Anda lihat, ini didasarkan pada satu set paket dengan primitif lintas bahasa dan templat umum yang dimaksudkan untuk pengembangan cepat komponen Anda sendiri - lapisan hijau pada diagram. Atas dasar mereka, pustaka komponen utama toolkit diimplementasikan.

Sudah atas dasar komponen dasar, komponen pengguna dan sistem diimplementasikan - ini adalah lapisan hijau kedua.



Lapisan biru diagram adalah sekumpulan pustaka dasar untuk bekerja dalam arah tertentu - implementasi kontainer (IoC), bekerja dengan data, pertukaran sinkron (RPC) dan pertukaran asinkron (Pesan). Mereka mampu bekerja sebagai komponen yang berdiri sendiri, tetapi mereka juga menyediakan antarmuka dan prinsip dasar untuk membangun implementasi khusus dari komponen tambahan untuk bekerja dengan teknologi tertentu. Seperti yang diperlihatkan dalam diagram di bagian atas tumpukan, sebagai contoh, mengimplementasikan kontainer untuk AWS dan Azure, mengimplementasikan manipulasi data di MongoDb, dan mendistribusikan cache dan mengunci di Memcached dan Redis.



Microservices di Pip.Services toolkit - tampilan ke dalam



Praktik pengembangan menunjukkan bahwa di antara banyak jenis desain yang berbeda, membangun layanan mikro dari komponen yang digabungkan secara longgar lebih disukai. Pip.Services Toolkit tidak memaksakan batasan pada struktur layanan mikro pada pengembang.



Setiap pengembang bebas memilih jalannya sendiri. Tetapi desain komponen memiliki dukungan kuat di Pip.Services Toolkit. Berkat pendekatan ini, sejumlah tugas diselesaikan:



  • Pengembangan dan pengujian komponen individu disederhanakan.
  • Setiap komponen dapat diisolasi dari kode lainnya dan dependensinya dalam pengujian dapat diganti dengan tiruan sederhana.
  • Menjadi mungkin untuk mengkonfigurasi ulang layanan mikro ke platform tertentu, mengganti layanan infrastruktur, komunikasi atau database hanya dengan mengubah komposisi komponen layanan mikro dalam file konfigurasi tanpa perubahan kode apa pun.
  • . . , .
  • , , :



  • . :
  • , ( ).
  • , , ( ).
  • Komponen tambahan untuk caching, pemantauan, konfigurasi, sinkronisasi, dll. Biasanya, komponen ini ditambahkan dari set standar, yang memberikan banyak pilihan untuk integrasi dengan berbagai layanan infrastruktur dan platform (abu-abu).
  • Pustaka klien dapat diimplementasikan untuk menyederhanakan penggunaan layanan mikro. Ini menyediakan antarmuka yang ramah pengguna untuk bekerja dengan layanan mikro dan menyembunyikan detail komunikasi tingkat rendah (biru).


Pip.Services Toolkit menggunakan file konfigurasi untuk membuat layanan mikro dan mengkonfigurasi komponen. Berikut adalah contoh konfigurasi seperti itu:



config.yml



---
# Container descriptor
- descriptor: "pip-services:context-info:default:default:1.0"
 name: "hello-world"
 description: "HelloWorld microservice"
# Console logger
- descriptor: "pip-services:logger:console:default:1.0"
 level: "trace"
# Performance counter that post values to log
- descriptor: "pip-services:counters:log:default:1.0"
# Controller
- descriptor: "hello-world:controller:default:default:1.0"
 default_name: "World"
# Shared HTTP Endpoint
- descriptor: "pip-services:endpoint:http:default:1.0"
 connection:
   protocol: http
   host: 0.0.0.0
   port: 8080
# HTTP Service V1
- descriptor: "hello-world:service:http:default:1.0"
# Heartbeat service
- descriptor: "pip-services:heartbeat-service:http:default:1.0"
# Status service
- descriptor: "pip-services:status-service:http:default:1.0"

      
      





Penampung tempat layanan mikro dibungkus membaca konfigurasi seperti itu, berdasarkan deskriptor, menggunakan pabrik, membuat komponen yang diperlukan, meneruskan parameter konfigurasi kepadanya, mengikat komponen satu sama lain, dan memulai proses aktif.



Pendekatan ini memungkinkan Anda merancang layanan terpadu dan melakukan penyetelan "fine" untuk tugas tertentu menggunakan variabel lingkungan langsung di lingkungan yang dapat dieksekusi.



Berpindah dari monolit ke layanan mikro tanpa mengubah kode



Secara terpisah, perlu dicatat kemungkinan mengubah arsitektur yang digunakan oleh aplikasi tanpa membuat perubahan pada kode sumber. Mari pertimbangkan kesempatan ini dengan sebuah contoh.



Misalkan ada fasad yang digunakan klien untuk bekerja dengan layanan. Misalnya, dengan layanan yang menerapkan logika bekerja dengan suar bluetooth (suar). Saat diluncurkan dalam mode aplikasi monolitik, file konfigurasi akan berisi bagian berikut dengan deskriptor komponen:



# Beacons components
- descriptor: "pip-services-beacons:persistence:mongodb:default:*"
- descriptor: "pip-services-beacons:controller:default:default:*"
- descriptor: "pip-services-beacons:client:direct:default:*"

      
      





Konfigurasi ini sebenarnya membuat layanan beacon sebagai bagian dari fasad dalam bentuk kode monolitik, dan interaksi di antara keduanya dilakukan melalui klien langsung, tetapi dalam satu wadah, seperti yang Anda lihat dari diagram di bawah ini.







Tetapi jika Anda mengubah sedikit teks konfigurasi, layanan beacon akan menjadi layanan mikro terpisah dan fasad akan bekerja dengannya melalui klien http. Untuk melakukannya, hapus bagian dengan pengontrol dan ketekunan dalam konfigurasi fasad, dan ubah jenis klien dari langsung ke http: Untuk pengoperasian yang benar, Anda harus menentukan alamat dan port dari beacon layanan mikro yang sekarang berjalan secara terpisah dan memulai ulang fasad sehingga dapat membaca konfigurasi baru. Anda juga perlu menjalankan layanan mikro terpisah dengan beacon, untuk ini Anda dapat menggunakan konfigurasi berikut:



# Beacons components

- descriptor: "pip-services-beacons:client:http:default:*"

connection:

protocol: "http"

host: "any.where.com"

port: 8086













# Http Endpoint 
- descriptor: "pip-services:endpoint:http:default:*"
  root_path: ""
  connection:
    protocol: "http"
    host: "0.0.0.0"
    port: 8086

# Beacons API V1
- descriptor: "pip-services-beacons:service:http:default:1.0"

# Hearbeat service
- descriptor: "pip-services:heartbeat-service:http:default:1.0"

# Status service
- descriptor: "pip-services:status-service:http:default:1.0"

      
      





Dari sudut pandang arsitektural, sekarang akan terlihat seperti ini:







Seperti yang Anda lihat, dengan cara ini dimungkinkan untuk membuat aplikasi terlebih dahulu dalam bentuk monolit, sementara tidak menghabiskan banyak sumber daya untuk penerapan, tetapi segera setelah Anda perlu menskalakan, Anda hanya perlu mengubah konfigurasi dan dengan mudah beralih ke layanan mikro adalah salah satu manfaat utama dari Perangkat Pip.Services.



Alat tambahan dari proyek Pip.Services



Pip.Services tidak hanya menyertakan Pip.Services Toolkit. Dalam pekerjaan kami, kami telah mengembangkan sejumlah alat tambahan untuk kenyamanan pengembangan layanan mikro:

- Perpustakaan layanan mikro siap pakai - berisi katalog layanan mikro siap pakai yang dibagi menjadi enam kategori :



  • – . , , , ..
  • – , , ,
  • – ,
  • – , , .
  • – , ,
  • — , , ;
  • Tolok ukur adalah sekumpulan utilitas untuk menguji kinerja aplikasi dan layanan mikro yang dikembangkan.


- Perpustakaan Template - mencakup beberapa kategori dengan template, termasuk template untuk pengembangan layanan mikro, kustomisasi ruang kerja, template CI / CD, dan template fasad.

- PowerShell Selenium WebDriver - driver yang dikembangkan untuk bekerja dengan Selenium dari PowerShell.

Semua alat ini tersedia di situs web Pip.Services.



Kesimpulan



Di akhir artikel, saya ingin menambahkan bahwa Pip.Services Toolkit adalah sekumpulan pola dan komponen yang menyederhanakan pengembangan sistem layanan mikro menggunakan berbagai bahasa pemrograman dan menyediakan penerapan di berbagai platform lokal dan cloud. Himpunan tersebut mencakup pola yang memfasilitasi pembuatan layanan mikro yang sangat dapat disesuaikan menggunakan komponen yang digabungkan secara longgar yang menerapkan fungsi khas dalam transmisi dan pemrosesan data, bekerja dengan database, transfer informasi menggunakan berbagai protokol sinkron dan asinkron, fungsi pemantauan, penanganan kesalahan, dan banyak lagi. Pada saat yang sama, Pip.Services Toolkit mudah dikembangkan dan dapat digunakan bersama dengan library dan framework lain karena desainnya berdasarkan komposisi, bukan turunan.



Prinsip dan struktur umum, serta kesimetrisan implementasinya, memungkinkan pengembang untuk dengan mudah beralih dari satu bahasa ke bahasa lain dalam waktu sesingkat mungkin. Dan interoperabilitas menyediakan kompatibilitas penuh layanan mikro yang ditulis dalam bahasa berbeda langsung dari kotaknya.



Semua layanan mikro di perpustakaan kami diuji dan digunakan pada sistem nyata. Berkat penggunaan Library Pip.Services dalam proyek kami, kami dapat mengurangi waktu untuk pengembangan backend hingga 30%.



Pip.Services secara aktif berkembang, hampir setiap bulan alat dan layanan mikro baru ditambahkan atau diperluas.



Sebagian besar informasi yang diperlukan sudah ada di situs, tetapi kami masih secara aktif melengkapinya dengan materi baru dan terus mengerjakannya.



Mulai November 2020, berdasarkan toolkit ini, lebih dari seribu layanan mikro telah diimplementasikan dengan tingkat keandalan yang tinggi, kecepatan pengembangan yang tinggi, dan kemudahan integrasi. Akibatnya, para pemimpin perusahaan membuat keputusan untuk sepenuhnya mentransfer produk ke status Open Source untuk berbagi dengan masyarakat solusi sukses dalam arsitektur, serta untuk memastikan pengembangan proyek lebih lanjut dengan upaya dari sejumlah besar pengembang berpengalaman.



Artikel tersebut hanya dimaksudkan sebagai gambaran umum, tanpa contoh implementasi yang rinci, jadi mohon jangan terlalu banyak menendang. Dalam publikasi berikut, kami akan mencoba mencari cara untuk menerapkan layanan mikro yang berfungsi menggunakan toolkit ini.



Jika Anda memiliki pertanyaan tentang toolkit ini, tanyakan di komentar atau melalui saluran komunikasi yang ditunjukkan di situs web kami dan kami pasti akan menjawabnya.



Tautan: www.pipservices.org



All Articles