JavaRush /Java Blog /Random-ID /Panduan untuk Layanan Mikro Java. Bagian 2: Penerapan dan...

Panduan untuk Layanan Mikro Java. Bagian 2: Penerapan dan Pengujian

Dipublikasikan di grup Random-ID
Terjemahan dan adaptasi Java Microservices: Panduan Praktis . Tautan ke bagian pertama panduan ini . Panduan untuk Layanan Mikro Java.  Bagian 2: Penerapan dan Pengujian - 1Program Java sisi server apa pun, dan layanan mikro apa pun, hanyalah file dengan ekstensi .jar atau .war. Ada satu hal hebat tentang ekosistem Java, atau lebih tepatnya JVM: Anda hanya perlu menulis kode Java satu kali dan kode tersebut dapat berjalan di hampir semua sistem operasi, selama Anda belum mengkompilasi kode Anda dengan versi Java yang lebih baru dari versi Anda. versi JVM target. Hal ini penting untuk dipahami, terutama jika menyangkut topik seperti Docker, Kubernetes, atau (drum roll!) The Cloud. Mengapa? Mari kita lihat skenario penerapan yang berbeda.

Contoh Penerapan Layanan Mikro Java Minimalis

Mari kita lanjutkan dengan contoh bank. Jadi kami memiliki file monobank.jar (monolit) dan riskengine.jar yang baru kami ekstrak (layanan mikro pengecekan risiko pertama). Mari kita asumsikan juga bahwa kedua aplikasi, seperti aplikasi lain di dunia, memerlukan file .properties. Dalam kasus kami, ini hanya akan berisi URL database dan kredensial. Penerapan minimal mungkin terdiri dari dua direktori yang terlihat seperti ini: Pertama:

-r-r------ 1 ubuntu ubuntu     2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar

ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Kedua:

-r-r------ 1 ubuntu ubuntu     2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar

ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Hal ini menyisakan pertanyaan terbuka: bagaimana file .properties dan .jar akan sampai ke server? Sayangnya, mungkin ada banyak jawaban.

Cara Menggunakan Alat Bangun, SSH, dan Kemungkinan untuk Menyebarkan Layanan Mikro Java

Membosankan, tapi tidak kalah bagusnya saran tentang cara menerapkan layanan mikro Java... Sebenarnya, persis seperti yang dilakukan administrator sistem dalam menerapkan program server Java di perusahaan selama 20 tahun terakhir. Ini campurannya:
  • alat pembuatan favorit Anda (Maven, Gradle)
  • SSH/SCP lama yang bagus untuk menyalin .jars ke server
  • Skrip Bash untuk mengelola skrip penerapan dan server
  • atau bahkan lebih baik: beberapa skrip yang mungkin.
Tentu saja, hal ini tidak cocok untuk inovator yang membutuhkan cloud yang “bernafas”, server dengan penyeimbangan beban otomatis, dan sebagainya. Ini sekolah tua yang sangat membosankan. Namun itu berhasil!

Cara Menggunakan Docker untuk Menyebarkan Layanan Mikro Java

Mari kita kembali ke penderitaan manis karena pilihan. Beberapa tahun yang lalu Docker muncul, dan bersamaan dengan itu juga dilakukan containerisasi. Jika Anda belum pernah menggunakannya, berikut deskripsi singkat yang ditujukan untuk pengguna akhir dan pengembang:
  • Sebuah container (yang disederhanakan) mirip dengan mesin virtual lama yang bagus, tetapi “lebih ringan”. Jika Anda tidak jelas tentang apa yang dimaksud dengan "lebih mudah" dalam konteks ini, silakan lihat jawaban ini di Stackoverflow .
  • Kontainer menjamin portabilitasnya sendiri. Artinya, ini berfungsi di mana saja. Kedengarannya familiar, bukan?
Panduan untuk Layanan Mikro Java.  Bagian 2: Penerapan dan Pengujian - 2Lucunya, mengingat portabilitas dan kompatibilitas mundur JVM, fitur ini sepertinya tidak memberikan keuntungan. Anda cukup mengunduh JVM.zip di Raspberry Pi (atau bahkan ponsel apa pun), mengekstraknya, dan menjalankan file .jar apa pun. Situasinya berubah dalam bahasa seperti PHP atau Python, di mana ketidakcocokan versi atau pengaturan penerapan menjadi lebih kompleks. Atau jika aplikasi Java Anda bergantung pada banyak layanan terinstal lainnya (dengan nomor versi yang benar): misalnya, database Postgres, atau penyimpanan nilai kunci Redis. Jadi, keuntungan utama layanan mikro Docker untuk Java, atau lebih tepatnya untuk aplikasi Java, adalah: kemampuan untuk menyiapkan lingkungan pengujian atau integrasi yang dihomogenisasi menggunakan alat seperti Testcontainers . Perkembangan yang kompleks lebih mudah dipasang. Ambil perangkat lunak forum Wacana . Anda dapat menginstalnya dengan satu image Docker, dan image tersebut berisi semua yang Anda perlukan, mulai dari perangkat lunak Discourse yang ditulis dalam Ruby, hingga database Postgres, hingga Redis, hingga kitchen sink. Jika penerapan Anda serupa atau Anda ingin menjalankan database Oracle kecil yang bagus, cobalah Docker. Ringkasnya, alih-alih hanya melihat file .jar, Anda sekarang:
  • bundel file jar Anda ke dalam image Docker
  • dorong gambar ini ke registri Docker pribadi
  • tarik dan jalankan gambar ini di platform target Anda
  • atau salin image Docker langsung ke sistem produksi Anda dan jalankan.

Cara Menggunakan Docker Swarm atau Kubernetes untuk Menerapkan Layanan Mikro Java

Katakanlah Anda memutuskan untuk mencoba Docker. Setiap kali Anda menerapkan layanan mikro Java, Anda membuat image Docker yang menggabungkan file .jar Anda. Katakanlah Anda memiliki beberapa layanan mikro Java ini, dan Anda ingin menerapkan layanan ini di beberapa mesin (dalam sebuah cluster). Timbul pertanyaan: bagaimana cara mengelola cluster ini? Jalankan wadah Docker, periksa kinerja, terapkan pembaruan, skalakan sistem (brrr)? Dua kemungkinan jawaban untuk pertanyaan ini adalah Docker Swarm dan Kubernetes. Mendalami kedua opsi secara mendetail akan membuat tutorial yang sudah panjang ini menjadi terlalu panjang, namun menurut kami penting untuk menyebutkan bahwa kedua opsi pada akhirnya bergantung pada Anda menulis file YAML (lihat cerita indentasi Yaml ) untuk mengelola cluster Anda. Jika Anda ingin mengetahui perasaan apa yang ditimbulkan dalam praktiknya, cukup ketikkan pertanyaan serupa ke dalam pencarian Twitter. Jadi proses penerapan layanan mikro Java Anda sekarang terlihat seperti ini:
  • Mengonfigurasi dan mengelola Docker Swarm/Kubernetes
  • Semua langkah untuk Docker (lihat di atas)
  • Tulis dan jalankan YAML hingga mata Anda berdarah hingga semuanya berfungsi.

Cara Menguji Layanan Mikro Java

Katakanlah Anda memutuskan untuk menerapkan layanan mikro dalam produksi. Bagaimana kita bisa menguji integrasi n-layanan mikro selama pengembangan sekarang? Bagaimana Anda bisa melihat apakah seluruh alur kerja berfungsi, dan bukan hanya sebagian saja? Dalam praktiknya, Anda dapat menggunakan salah satu dari tiga metode:
  1. Dengan sedikit usaha (jika Anda menggunakan kerangka kerja seperti Spring Boot), Anda dapat menggabungkan semua layanan mikro ke dalam satu kelas peluncur dan memuat semua layanan mikro menggunakan satu kelas Wrapper.java - bergantung pada apakah Anda memiliki cukup memori di mesin Anda untuk jalankan semua layanan mikro Anda.
  2. Anda dapat menyalin pengaturan Docker Swarm atau Kubernetes secara lokal.
  3. Hanya saja, jangan lagi menjalankan pengujian integrasi secara lokal. Sebagai gantinya, terapkan lingkungan DEV/TEST khusus. Ini adalah sesuatu yang sebenarnya dilakukan oleh beberapa tim ketika mereka menyerah pada kesulitan pengaturan layanan mikro lokal.
Selain itu, selain layanan mikro Java, Anda mungkin juga memerlukan perantara pesan yang sedang berjalan (seperti ActiveMQ atau RabbitMQ) atau mungkin server email atau komponen perpesanan lainnya yang diperlukan layanan mikro Java Anda untuk berkomunikasi satu sama lain. Hal ini menyebabkan terlalu rendahnya perkiraan kompleksitas di sisi DevOps. Lihatlah Perpustakaan Pengujian Microservice, mereka dapat meringankan rasa sakit ini. Bagaimanapun, kompleksitas ini membawa kita pada masalah umum layanan mikro, yang akan kita bahas sekarang. Di bagian terakhir , kami akan membahas pertanyaan umum tentang layanan mikro Java.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION