JavaRush /Blog Java /Random-MS /Panduan untuk Perkhidmatan Mikro Java. Bahagian 2: Penyer...

Panduan untuk Perkhidmatan Mikro Java. Bahagian 2: Penyerahan dan Pengujian

Diterbitkan dalam kumpulan
Terjemahan dan penyesuaian Java Microservices: A Practical Guide . Pautan ke bahagian pertama panduan . Panduan untuk Perkhidmatan Mikro Java.  Bahagian 2: Penggunaan dan Ujian - 1Sebarang program Java sebelah pelayan, dan oleh itu sebarang perkhidmatan mikro, hanyalah fail dengan sambungan .jar atau .war. Terdapat satu perkara yang hebat tentang ekosistem Java, atau lebih tepatnya JVM: anda hanya perlu menulis kod Java sekali dan ia boleh dijalankan pada hampir mana-mana sistem pengendalian, selagi anda belum menyusun kod anda dengan versi Java yang lebih baharu daripada anda. sasaran versi JVM . Ini penting untuk difahami, terutamanya apabila ia berkaitan dengan topik seperti Docker, Kubernetes atau (drum roll!) The Cloud. kenapa? Mari kita lihat senario penggunaan yang berbeza.

Contoh Penerapan Perkhidmatan Mikro Java Minimalis

Mari kita teruskan dengan contoh bank. Jadi kami mempunyai fail monobank.jar (monolit) dan riskengine.jar kami yang baru diekstrak (perkhidmatan mikro semakan risiko pertama). Mari kita anggap juga bahawa kedua-dua aplikasi, seperti setiap aplikasi lain di dunia, memerlukan fail .properties. Dalam kes kami, ia hanya akan mengandungi URL pangkalan data dan bukti kelayakan. Penggunaan minimum mungkin terdiri daripada dua direktori yang kelihatan 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

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Ini meninggalkan soalan terbuka: bagaimana fail .properties dan .jar akan sampai ke pelayan? Malangnya, mungkin terdapat banyak jawapan.

Cara Menggunakan Alat Binaan, SSH dan Ansible untuk Menggunakan Perkhidmatan Mikro Java

Nasihat yang membosankan, tetapi tidak kurang hebatnya tentang cara menggunakan perkhidmatan mikro Java... Sebenarnya, cara pentadbir sistem telah menggunakan mana-mana program pelayan Java dalam syarikat sejak 20 tahun yang lalu. Ini campurannya:
  • alat bina kegemaran anda (Maven, Gradle)
  • SSH/SCP lama yang bagus untuk menyalin .jars ke pelayan
  • Skrip Bash untuk mengurus skrip dan pelayan penggunaan
  • atau lebih baik lagi: beberapa skrip Ansible.
Sudah tentu, ini tidak sesuai untuk inovator yang memerlukan awan "bernafas", pelayan dengan pengimbangan beban automatik, dan sebagainya. Ini adalah sekolah lama yang membosankan. Walau bagaimanapun ia berfungsi!

Cara Menggunakan Docker untuk Menggunakan Perkhidmatan Mikro Java

Mari kembali kepada penderitaan manis pilihan. Beberapa tahun yang lalu Docker datang ke tempat kejadian, dan dengan itu kontena. Jika anda tidak pernah menggunakannya, berikut ialah penerangan ringkas yang ditujukan kepada pengguna akhir dan pembangun:
  • Bekas (dipermudahkan) adalah serupa dengan mesin maya lama yang baik, tetapi "lebih ringan". Jika anda tidak jelas tentang maksud "lebih mudah" dalam konteks ini, sila lihat jawapan ini di Stackoverflow .
  • Bekas itu menjamin mudah alihnya sendiri. Iaitu, ia berfungsi di mana-mana sahaja. Kedengaran biasa, bukan?
Panduan untuk Perkhidmatan Mikro Java.  Bahagian 2: Penggunaan dan Ujian - 2Sungguh melucukan memandangkan kemudahalihan JVM dan keserasian ke belakang, ciri ini tidak kelihatan seperti kelebihan sedemikian. Anda hanya boleh memuat turun JVM.zip pada mana-mana Raspberry Pi (atau telefon mudah alih), ekstrak dan jalankan sebarang fail .jar. Keadaan berubah dalam bahasa seperti PHP atau Python, di mana ketidakserasian versi atau tetapan penggunaan lebih kompleks. Atau jika aplikasi Java anda bergantung pada banyak perkhidmatan lain yang dipasang (dengan nombor versi yang betul): contohnya, pangkalan data Postgres atau stor nilai kunci Redis. Jadi, kelebihan utama Docker untuk perkhidmatan mikro Java, atau lebih tepat lagi untuk aplikasi Java, ialah ini: keupayaan untuk menyediakan persekitaran ujian atau penyepaduan homogen menggunakan alat seperti Testcontainers . Pembangunan kompleks lebih mudah dipasang. Ambil perisian forum Wacana . Anda boleh memasangnya dengan satu imej Docker, dan imej itu mengandungi semua yang anda perlukan, daripada perisian Discourse yang ditulis dalam Ruby, kepada pangkalan data Postgres, kepada Redis dan sinki dapur. Jika penempatan anda serupa atau anda ingin menjalankan pangkalan data Oracle kecil yang bagus, cuba Docker. Jadi untuk meringkaskan, bukannya hanya melihat fail .jar, anda sekarang:
  • ikat fail balang anda ke dalam imej Docker
  • tolak imej ini ke pendaftaran Docker peribadi
  • tarik dan jalankan imej ini pada platform sasaran anda
  • atau salin imej Docker terus ke sistem pengeluaran anda dan jalankannya.

Cara Menggunakan Docker Swarm atau Kubernetes untuk Menggunakan Perkhidmatan Mikro Java

Katakan anda memutuskan untuk mencuba Docker. Setiap kali anda menggunakan perkhidmatan mikro Java, anda mencipta imej Docker yang menggabungkan fail .jar anda. Katakan anda mempunyai beberapa perkhidmatan mikro Java ini dan anda mahu menggunakan perkhidmatan ini pada beberapa mesin (dalam kelompok). Timbul persoalan: bagaimana untuk menguruskan kluster ini? Jalankan bekas Docker, semak prestasi, gunakan kemas kini, skala sistem (brrr)? Dua kemungkinan jawapan untuk soalan ini ialah Docker Swarm dan Kubernetes. Menjelaskan secara terperinci tentang kedua-dua pilihan akan menjadikan tutorial yang sudah panjang ini terlalu panjang, tetapi kami fikir adalah penting untuk menyatakan bahawa kedua-dua pilihan akhirnya bergantung pada anda menulis fail YAML (lihat cerita lekukan Yaml ) untuk mengurus kelompok anda. Jika anda ingin mengetahui perasaan yang ditimbulkan ini dalam amalan, hanya taip pertanyaan serupa ke dalam carian Twitter. Jadi proses penempatan untuk perkhidmatan mikro Java anda kini kelihatan seperti ini:
  • Mengkonfigurasi dan mengurus Docker Swarm/Kubernetes
  • Semua langkah untuk Docker (lihat di atas)
  • Tulis dan laksanakan YAML sehingga mata anda berdarah sehingga semuanya berfungsi.

Cara Menguji Perkhidmatan Mikro Java

Katakan anda memutuskan untuk melaksanakan perkhidmatan mikro dalam pengeluaran. Bagaimanakah kita boleh menguji integrasi n-perkhidmatan mikro semasa pembangunan sekarang? Bagaimanakah anda boleh melihat sama ada keseluruhan aliran kerja berfungsi, dan bukan hanya sebahagian daripadanya? Dalam amalan, anda boleh menggunakan salah satu daripada tiga kaedah:
  1. Dengan sedikit kerja (jika anda menggunakan rangka kerja seperti Spring Boot), anda boleh menggabungkan semua perkhidmatan mikro anda ke dalam satu kelas pelancaran dan memuatkan semua perkhidmatan mikro menggunakan satu kelas Wrapper.java - bergantung pada sama ada anda mempunyai memori yang mencukupi pada mesin anda untuk jalankan semua perkhidmatan mikro anda.
  2. Anda boleh menyalin tetapan Docker Swarm atau Kubernetes secara setempat.
  3. Cuma jangan jalankan ujian integrasi secara setempat lagi. Sebaliknya, gunakan persekitaran DEV/TEST khusus. Ini adalah sesuatu yang sebenarnya dilakukan oleh segelintir pasukan apabila mereka tunduk kepada kesakitan persediaan perkhidmatan mikro tempatan.
Selain itu, sebagai tambahan kepada perkhidmatan mikro Java anda, anda mungkin juga memerlukan broker mesej yang sedang berjalan (seperti ActiveMQ atau RabbitMQ) atau mungkin pelayan e-mel atau mana-mana komponen pemesejan lain yang perkhidmatan mikro Java anda perlu berkomunikasi antara satu sama lain. Ini membawa kepada pengurangan kerumitan yang ketara di bahagian DevOps. Lihatlah Perpustakaan Pengujian Perkhidmatan Mikro, mereka boleh mengurangkan kesakitan ini. Walau apa pun, kerumitan ini membawa kita kepada masalah umum perkhidmatan mikro, yang akan kita bincangkan sekarang. Di bahagian akhir , kami akan membincangkan soalan umum tentang perkhidmatan mikro Java.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION