Layanan microser dengan Spring Boot. Bagian 1. Memulai

Ini adalah bagian pertama dari serangkaian artikel tentang dasar-dasar arsitektur layanan mikro.

Di dalamnya, Anda akan membiasakan diri dengan konsep layanan microser dan belajar bagaimana membuat layanan microser menggunakan Spring Boot dan Spring Cloud.

Panduan ini akan membantu Anda mempelajari dasar-dasar arsitektur layanan mikro. Kami juga akan mulai melihat implementasi microservice dasar dengan Spring Boot.

Kami akan membuat sepasang layanan microser dan membuatnya berkomunikasi satu sama lain menggunakan Eureka (Server Penamaan Eureka) dan server nama Ribbon untuk menyeimbangkan beban di sisi klien.

Artikel ini adalah bagian dari seri Spring Boot Microservices:


Kamu akan belajar


  • Apa itu monolit?
  • Apa itu layanan mikro?
  • Apa masalah dengan layanan microser?
  • Bagaimana Spring Boot dan Spring Cloud membuat layanan microser lebih mudah untuk dikembangkan?
  • Bagaimana cara menerapkan keseimbangan beban sisi klien menggunakan Ribbon?
  • Bagaimana cara mengimplementasikan server nama (Server Penamaan Eureka)?
  • Bagaimana cara menghubungkan microservices dengan server nama dan Ribbon?

Tinjauan Sumberdaya


Dalam tutorial ini, kami akan membuat sumber daya untuk siswa yang menyediakan tiga layanan menggunakan metode URI dan HTTP yang sesuai:

  • Dapatkan daftar semua siswa - @GetMapping ("/ siswa")
  • Dapatkan informasi tentang siswa tertentu - @GetMapping ("/ students / {id}")
  • Hapus informasi siswa - @DeleteMapping ("/ students / {id}")
  • Buat entri siswa baru - @PostMapping ("/ siswa")
  • Perbarui Informasi Siswa - @PutMapping ("/ students / {id}")

Ikhtisar layanan microser - gambaran besarnya


Dalam seri artikel ini, kami akan membuat dua layanan microser:

  • Layanan Forex - singkatnya FS
  • Layanan Konversi Mata Uang - singkatnya CCS

Jangan khawatir jika beberapa hal tidak jelas bagi Anda. Idenya adalah memberi Anda gambaran besar sebelum kami memulai pengembangan dan membuat layanan microsoft langkah demi langkah.

Layanan Forex


Layanan Forex (FS, Layanan Forex) adalah penyedia layanan. Ini memberikan nilai tukar mata uang untuk berbagai mata uang. Mari kita asumsikan bahwa ia berkomunikasi dengan Forex Exchange dan memberikan nilai tukar saat ini antar mata uang. Contoh permintaan dan respons ditunjukkan di bawah ini:

GET to http://localhost:8000/currency-exchange/from/EUR/to/INR 

 { id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, port: 8000, } 

Respons terhadap permintaan di atas adalah nilai tukar Euro ke INR. Jawaban ConversionMultiple adalah 75.
Kami akan berbicara tentang bidang porta sedikit kemudian.

Layanan konversi mata uang


Layanan Konversi Mata Uang (CCS) dapat mengkonversi banyak mata uang ke mata uang lain. Ini menggunakan layanan Forex untuk mendapatkan nilai tukar mata uang saat ini. CCS adalah konsumen layanan. Contoh permintaan dan respons ditunjukkan di bawah ini:

 GET to http://localhost:8100/currency-converter/from/EUR/to/INR/quantity/10000 

 { id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, quantity: 10000, totalCalculatedAmount: 750000, port: 8000, } 

Permintaan di atas memungkinkan Anda untuk menentukan nilai 10.000 euro dalam rupee India.
TotalCalculatedAmount adalah 750.000 INR. Diagram di bawah ini menunjukkan hubungan antara CCS dan FS.



Server dan Pita Penamaan Eureka


Bergantung pada bebannya, kami mungkin memiliki beberapa salinan Layanan Konversi Mata Uang dan Layanan Forex.



Dan jumlah instance untuk setiap layanan dapat berubah seiring waktu. Gambar di bawah ini menunjukkan contoh spesifik di mana 5 contoh layanan Forex dibuat.



Apa yang harus terjadi dalam situasi di atas adalah bahwa beban harus didistribusikan secara merata antara 5 kejadian ini.



Dalam seri artikel ini, kami akan menggunakan Ribbon untuk load balancing dan server nama Eureka untuk mendaftarkan semua layanan Microsoft.



Apa itu aplikasi monolitik?


Pernahkah Anda bekerja dalam sebuah proyek ...

  • Yang diproduksi (dimasukkan ke dalam produksi) setiap beberapa bulan sekali
  • Yang memiliki beragam fitur dan kemampuan.
  • Di mana tim lebih dari 50 orang bekerja
  • Di mana masalah debugging adalah masalah besar
  • Di mana memperkenalkan teknologi baru dan proses baru hampir tidak mungkin

Ini adalah karakteristik khas aplikasi monolitik.

Aplikasi monolitik biasanya besar - lebih dari 100.000 baris kode. Dalam beberapa kasus, bahkan lebih dari satu juta baris kode.

Monolit dikarakterisasi sebagai berikut:

  • Ukuran aplikasi besar
  • Siklus rilis panjang
  • Tim besar

Masalah umum meliputi:

  • Masalah skalabilitas
  • Adopsi teknologi baru
  • Proses Baru - Agile?
  • Sulit mengotomatisasi tes
  • Sulit untuk beradaptasi dengan praktik pembangunan saat ini
  • Sulit untuk beradaptasi dengan pertumbuhan cepat suatu proyek

Layanan microser


Arsitektur microservice telah berevolusi untuk mengatasi tantangan skalabilitas dan inovasi dengan arsitektur monolitik. Ada sejumlah definisi yang disarankan untuk layanan microser.
Layanan kecil, berdiri sendiri yang bekerja bersama - Sam Newman
Pengembangan aplikasi terpisah dalam bentuk serangkaian layanan kecil, yang masing-masing bekerja dalam prosesnya sendiri dan berinteraksi dengan mekanisme ringan, seringkali API sumber daya HTTP. Layanan ini dibangun di atas peluang bisnis dan dapat digunakan secara independen menggunakan mekanisme penyebaran yang sepenuhnya otomatis. Ada tingkat minimum pengelolaan terpusat dari layanan ini, yang dapat ditulis dalam berbagai bahasa pemrograman dan menggunakan teknologi penyimpanan yang berbeda - James Lewis (James Lewis) dan Martin Fowler (Martin Fowler)

Meskipun tidak ada definisi tunggal yang dapat diterima untuk layanan microser, ada beberapa karakteristik penting:

  • REST - dibangun di sekitar sumber daya RESTful. Komunikasi antar layanan dapat didasarkan pada peristiwa atau protokol HTTP.
  • Blok Kecil yang Dapat Digunakan dengan Baik - Konteks Terbatas
  • Fitur Cloud - Penskalaan Dinamis

Seperti apa arsitektur microservice?


Inilah yang akan terlihat seperti monolith. Satu aplikasi untuk semuanya.



Ini akan terlihat seperti aplikasi yang sama ketika mengembangkan menggunakan Arsitektur Layanan Microsoft.



Arsitektur microservice mencakup beberapa komponen pesan kecil yang dirancang dengan baik.



Manfaat Layanan Mikro


Keuntungan:

  • Menggunakan teknologi baru dan proses adaptasi menjadi lebih mudah. Anda dapat mencoba teknologi baru dengan layanan microser baru yang akan kami buat.
  • Siklus Rilis Lebih Cepat
  • Cloud Scaling

Masalah Arsitektur Layanan Mikro


Meskipun mengembangkan beberapa komponen kecil mungkin tampak mudah, ada sejumlah kesulitan yang melekat terkait dengan arsitektur layanan mikro.

Mari kita lihat beberapa masalah:

  • Diperlukan pengaturan cepat : Anda tidak dapat menghabiskan waktu satu bulan untuk mengatur setiap layanan Microsoft. Anda harus dapat dengan cepat membuat layanan microser.
  • Otomasi : karena alih-alih monolit ada sejumlah komponen yang lebih kecil, Anda perlu mengotomatisasi semuanya - rakitan, penyebaran, pemantauan, dll.
  • Visibilitas : Anda sekarang memiliki beberapa komponen kecil untuk penempatan dan pemeliharaan. Mungkin 100 atau 1000 komponen. Anda harus dapat melacak dan mengidentifikasi masalah secara otomatis. Anda membutuhkan visibilitas yang sangat baik di sekitar semua komponen.
  • Konteks terbatas : mendefinisikan batas-batas layanan mikro bukanlah tugas yang mudah. Konteks terbatas dari desain domain adalah titik awal yang baik. Pemahaman Anda tentang domain berkembang selama periode waktu tertentu. Anda perlu memastikan bahwa batas-batas layanan mikro berkembang.
  • Manajemen Konfigurasi : Anda perlu mempertahankan konfigurasi untuk ratusan komponen di lingkungan yang berbeda. Anda akan memerlukan solusi manajemen konfigurasi
  • Peningkatan dan penurunan dinamis : manfaat layanan microser hanya akan terwujud jika aplikasi Anda dapat dengan mudah meningkatkan skala di cloud.
  • Setumpuk kartu : Jika layanan microser di bagian bawah rantai panggilan gagal, ini dapat mempengaruhi semua layanan microser lainnya. Layanan Microsoft harus toleran terhadap kesalahan.
  • Debugging : Ketika masalah muncul yang perlu ditangani, Anda mungkin perlu memeriksa beberapa layanan dalam komponen yang berbeda. Logging dan dashboard terpusat diperlukan untuk memfasilitasi masalah debugging.
  • Konsistensi : Anda tidak dapat memiliki berbagai alat yang menyelesaikan masalah yang sama. Meskipun penting untuk mendorong inovasi, penting juga untuk memiliki desentralisasi manajemen bahasa, platform, teknologi, dan alat yang digunakan untuk mengimplementasikan / menggunakan / memonitor layanan-layanan mikro.

Solusi Arsitektur Layanan Mikro


Boot musim semi


Spring Boot memungkinkan Anda membuat aplikasi siap pakai dengan cepat dan menyediakan fitur non-fungsional berikut:

  • server tertanam (kemudahan penyebaran menggunakan wadah)
  • pemantauan metrik
  • pemantauan kesehatan
  • konfigurasi eksternal

Awan musim semi


Spring Cloud menyediakan solusi aktivasi cloud untuk layanan microser Anda. Ini menggunakan dan membangun beberapa solusi cloud yang dibuat oleh Netflix (Netflix OSS).

Modul Pegas Awan Penting


  • Penskalaan dinamis ke atas dan ke bawah. Menggunakan kombinasi dari:

- Server nama Eureka
- Ribbon (load balancing di sisi klien)
- Feign (menyederhanakan pengembangan klien REST)

  • Visibilitas dan pemantauan dengan:

- Zipkin Trace Terdistribusi
- Netflix API Gateway

  • Manajemen Konfigurasi dengan Spring Cloud Config Server
  • Toleransi kesalahan dengan Hystrix

Dalam seri artikel ini, kami akan membuat dua layanan microser:
Catatan perev. Penulis selanjutnya mengulangi sebagian apa yang telah dikatakan. Edisi asli tersimpan (tanpa menghapus replay)

  • Layanan Forex - singkatnya FS
  • Layanan Konversi Mata Uang - singkatnya CCS

Diagram di bawah ini menunjukkan hubungan antara CCS dan FS. Kami akan membuat koneksi antara dua komponen ini.



Kami ingin dapat secara dinamis meningkatkan dan mengurangi jumlah instance dari masing-masing layanan ini.



Dan jumlah instance untuk setiap layanan dapat berubah seiring waktu. Gambar di bawah ini menunjukkan contoh spesifik di mana 5 contoh layanan Forex dibuat.



Menerapkan solusi untuk meningkatkan dan menurunkan secara dinamis membutuhkan menjawab dua pertanyaan:

  • Bagaimana Layanan Konversi Mata Uang (CCS) mengetahui berapa banyak instance Layanan Forex (FS) yang aktif?
  • Bagaimana Layanan Konversi Mata Uang (CCS) mendistribusikan beban di antara mesin virtual yang aktif?

Karena kami ingin ini dinamis, kami tidak dapat mengubah kode URL dalam layanan FS ke CCS. Inilah sebabnya kami memperkenalkan server nama.

Semua instance komponen (CCS dan FS) terdaftar di server nama Eureka. Ketika FS perlu menghubungi CCS, ia akan meminta Server Penamaan Eureka tentang instance aktif. Kami akan menggunakan Ribbon untuk menyeimbangkan beban di sisi klien antara berbagai instance FS.

Di bawah ini adalah diagram urutan tingkat tinggi tentang apa yang akan terjadi ketika meminta dari CCS ke FS.



Lebih lanjut dalam seri artikel ini:


  • Membuat microservice Forex. Kami akan membuat layanan REST sederhana berdasarkan pada Spring Boot Starter Web dan Spring Boot Started JPA. Kami akan menggunakan Hibernate untuk mengimplementasikan JPA dan terhubung ke database H2.
  • Pembuatan layanan konversi mata uang CCS. Kami akan membuat layanan REST sederhana menggunakan Feign untuk memanggil layanan mikro Forex.
  • Gunakan Ribbon untuk menyeimbangkan beban.
  • Terapkan Layanan Penamaan Eureka dan hubungkan FS dan CCS melalui Eureka.

Source: https://habr.com/ru/post/id484130/


All Articles