Terjemahan dan adaptasi Java Microservices: Panduan Praktis . Tautan ke bagian pertama panduan ini . Program 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.
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?
- 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 berdarahhingga 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:- 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.
- Anda dapat menyalin pengaturan Docker Swarm atau Kubernetes secara lokal.
- 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.
GO TO FULL VERSION