Bagaimana spesifik bekerja dengan server aplikasi berubah menggunakan contoh OpenLiberty



Halo, Habr!

Pidato oleh Sebastian Dashner pada pertemuan java di kantor IBM di Moskow (menemukan catatan kinerja yang serupa) mendorong saya untuk mulai berkenalan dengan server aplikasi yang ringan, khususnya, dengan OpenLiberty. Dan kemudian saya berpikir:

  1. Apa manfaat server aplikasi yang ringan?
  2. Bagaimana kekhususan pekerjaan berubah saat menggunakannya?
  3. Mengapa mengemas server aplikasi dalam sebuah wadah?

Menjawab pertanyaan-pertanyaan ini, saya perhatikan bahwa tidak ada banyak informasi publik tentang topik ini, jadi saya memutuskan untuk mengumpulkan dan membuat sistematis di sini.

Saya memposting hasilnya di bawah potongan.

Apa manfaat server aplikasi yang ringan?


Sebelumnya, server aplikasi Java EE perusahaan (seperti JBoss AS, Oracle WebLogic, IBM WebSphere AS) dianggap sebagai desain kelas berat dan rumit, terutama ketika menyangkut waktu startup dan penyebaran. Tetapi teknologi cloud menangkap bagian yang semakin besar dari industri dan persyaratan server aplikasi berubah.

Dan sekarang, sebagai pengganti server aplikasi perusahaan berfitur lengkap, datang dengan cepat, modular, server aplikasi kecil yang berfokus pada tugas tertentu: Thorntail , Payara Micro - adik-adik WildFly dan Payara; Meecrowave adalah server JAX-RS + CDI + JSON yang ringan , KumuluzEE adalah server yang memungkinkan Anda untuk memperluas Java EE menggunakan Node.js, Go, dan lainnya.

Daftar ini juga termasuk OpenLiberty - server aplikasi sumber terbuka (didistribusikan sesuai dengan EPL-1.0) yang mendukung standar Java EE / Microprofile terbaru, yang dijalankan oleh WebSphere Liberty.

Sekilas tentang Fitur EPL-1.0 (Eclipse Public License Version 1.0)
EPL 1.0 didasarkan pada CPL dan tidak kompatibel dengan GPL, memungkinkan Anda untuk mematuhi lisensi dan paten lain yang digunakan dalam pekerjaan, dan memberikan hak untuk melisensikan produk di bawah lisensi lainnya, salinan lisensi harus disertakan dalam semua salinan program.

Penambahan produk utama dapat dilisensikan secara terpisah dan bahkan di bawah lisensi komersial. Namun, perubahan dan penambahan yang merupakan karya turunan harus dilisensikan di bawah lisensi EPL yang sama, yang mengharuskan Anda untuk membuat kode sumber terbuka.

Mengaitkan proyek perangkat lunak dengan kode yang dilindungi oleh lisensi EPL (misalnya, menggunakan kode ini sebagai perpustakaan), secara umum, tidak menjadikan proyek ini sebagai karya turunan dan tidak memaksakan kewajiban yang sesuai.

Anggota yang memasukkan Program dalam kutipan harus melakukannya untuk menghindari kemungkinan pertanggungjawaban bagi Anggota lainnya. (secara tegas melepaskan jaminan atau tanggung jawab atas nama semua penulis)

Sebagai contoh: Peserta dapat menyertakan Program dalam kutipan, produk X. Kemudian peserta ini adalah peserta Komersial. Jika Pedagang ini kemudian membuat klaim tentang kecepatan atau menawarkan jaminan produk untuk X, klaim dan penawaran ini adalah tanggung jawab pribadi Pedagang. Di bawah bagian ini, Anggota Komersial harus melindungi Anggota lain dari klaim yang berkaitan dengan kinerja dan jaminan, dan jika pengadilan meminta Anggota lain untuk membayar kerusakan yang terjadi, Anggota Komersial harus membayar kerugian ini.

Mari kita lihat manfaat apa yang bisa kita dapatkan dengan menggunakan aplikasi dalam wadah dengan OpenLiberty. (Anda harus menginstal versi java apa pun, langkah selanjutnya harus dilakukan saat berada di direktori wlp)

Kecepatan:


Kecepatan adalah indikator terpenting untuk aplikasi cloud, karena agar aplikasi cloud dapat dengan cepat mengukur, mengelola, dan mengatasi beban yang bertambah, itu harus diluncurkan dalam hitungan detik. Server aplikasi yang ringan dapat melakukan ini. Untuk memeriksa, unduh server OpenLiberty dan jalankan bin / server run ( daftar lengkap perintah ):

$ bin/server run  defaultServer (Open Liberty 19.0.0.6/wlp-1.0.29.cl190620190617-1530)  Java HotSpot(TM) 64-Bit Server VM  1.8.0_212-b10 (ru_US) [AUDIT ] CWWKE0001I:  defaultServer . [AUDIT ] CWWKZ0058I:   dropins  . [AUDIT ] CWWKF0012I:     : [el-3.0, jsp-2.3, servlet-3.1]. [AUDIT ] CWWKF0011I:  defaultServer      .  defaultServer   1,709 . 

Modularitas dan fleksibilitas


Sebagian besar aplikasi tidak memerlukan Java EE secara keseluruhan, tetapi memerlukan seperangkat standar khusus, paling sering digunakan dalam aplikasi perusahaan. Berkat OSGI, kita dapat memilih serangkaian standar Java EE dan / atau MicroProfile yang kita butuhkan, mengabaikan yang lainnya.

Sebagai contoh, deklarasikan JAX-RS dari Java EE dan mpHealth dari Microprofile dengan menambahkan beberapa baris ke featureManager memblokir usr / server / serverName /server.xml

 <?xml version="1.0" encoding="UTF-8"?> <server description="new server"> <!-- Enable features --> <featureManager> <feature>jsp-2.3</feature> <feature>mpHealth-1.0</feature> <feature>jaxrs-2.1</feature> </featureManager> <!-- To access this server from a remote client add a host attribute to the following element, eg host="*" --> <httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" /> <!-- Automatically expand WAR files and EAR files --> <applicationManager autoExpand="true"/> </server> 

Pembaruan dinamis


Selama pengembangan, kode program dan konfigurasi terus berubah.
Server aplikasi dikonfigurasi untuk memantau perubahan, dan jika perlu, mengkonfigurasi ulang dan menyebarkan aplikasi dengan cepat. Misalnya, reaksi terhadap perubahan terbaru:

 [AUDIT ] CWWKG0016I:    . [AUDIT ] CWWKG0017I:      0,475 . [AUDIT ] CWWKF0012I:     : [cdi-2.0, jaxrs-2.1, jaxrsClient-2.1, jndi-1.0, json-1.0, jsonp-1.1, mpHealth-1.0, servlet-4.0]. [AUDIT ] CWWKF0013I:     : [servlet-3.1]. [AUDIT ] CWWKF0008I:     0,476 . 

Ukuran dan rakitan gambar


Ukuran server aplikasi telah menurun secara signifikan dan sekarang memungkinkan Anda untuk menggunakan
setiap aplikasi pada server aplikasi terpisah untuk mengemasnya dalam wadah, memberikan fleksibilitas terbesar. Apalagi sejak itu gambar terdiri dari beberapa lapisan, ketika memasang kembali dan mendistribusikan artefak, hanya lapisan aplikasi yang disalin, OS, runtime dan server aplikasi di-cache.

Dockerhub memiliki gambar prebuilt yang berisi server OpenLiberty yang telah dikonfigurasikan sebelumnya. Kami akan menggunakan salah satunya dan membuat Dockerfile:

 FROM open-liberty COPY usr/servers/defaultServer /opt/ol/wlp/usr/servers/defaultServer ENTRYPOINT ["/opt/ol/wlp/bin/server", "run"] CMD ["defaultServer"] 

Mari kita kumpulkan gambar:

 docker build -t app . 

Jalankan sebagai wadah:

 docker run -d --name app -p 9080:9080 app 

Periksa hasilnya http: // localhost: 9080 / health /



Untuk menghentikan wadah:

 docker stop app 

Ada banyak skenario lebih lanjut untuk menggunakan wadah, dan secara umum, ini adalah kesempatan untuk masing-masing artikel, jadi mari kita kembali ke pertanyaan.

Bagaimana kekhususan pekerjaan berubah?


Paket bundel


Gambar kontainer harus dikumpulkan hanya sekali, dan kemudian dijalankan di semua lingkungan. Oleh karena itu, disarankan untuk mengumpulkan setiap aplikasi bersama dengan server aplikasi. Ini menyederhanakan siklus hidup dan penyebaran aplikasi dan sangat cocok dengan dunia modern teknologi wadah.

Majelis


Sekarang tidak perlu lagi mengemas blok teknis yang berbeda ke dalam arsip terpisah. Semua logika bisnis, bersama dengan layanan web dan fungsi ujung ke ujung, dikemas ke dalam satu file perang. Ini sangat menyederhanakan instalasi proyek, serta prosedur perakitan. Anda tidak lagi harus mengemas aplikasi ke beberapa level hierarki, lalu membukanya lagi menjadi satu contoh server.

Luncurkan


Server aplikasi dan aplikasi itu sendiri ditambahkan ke gambar selama proses membangun. Konfigurasi potensial sumber data, drive atau modul server juga ditentukan selama proses pembangunan dengan menambahkan file konfigurasi khusus. Semua perbedaan dalam konfigurasi harus dikelola bukan dari dalam aplikasi, tetapi dari luar. Oleh karena itu, aplikasi tidak boleh digunakan dalam wadah yang sudah berjalan, tetapi harus ditambahkan ke dalamnya pada tahap perakitan gambar di direktori penempatan otomatis untuk meluncurkannya ketika wadah mulai.

Perpanjangan Fungsi


Kontainer, penyebaran dan sistem penskalaan, layanan pemantauan dan jaringan layanan memberi kami kesempatan untuk mengkonfigurasi deteksi, pemantauan, manajemen, otentikasi, penskalaan, pelacakan, stabilitas di atas aplikasi, secara transparan mentransfer sejumlah besar logika ke tingkat lain, memfasilitasi aplikasi dan menyederhanakan pengembangannya.

Mengapa mengemas server aplikasi dalam sebuah wadah?


Pertama-tama, dengan mengemas server aplikasi dalam sebuah wadah, Anda memberi setiap tim kesempatan untuk mengkonfigurasi server aplikasi mereka secara mandiri dan fokus pada fungsi-fungsi implementasi, menghemat waktu pengembang pada operasi manual, middleware, dan berbagai persetujuan.

Sebagai bonus, Anda mendapatkan kesempatan untuk sepenuhnya menikmati manfaat dari wadah dan semua alat yang dibangun di sekitarnya. Aplikasi ini mudah dikelola dan ditingkatkan, diperbarui, dan diotomatisasi perakitan dan penyebaran artefak tanpa waktu henti.

Anda akan menemukan lebih banyak latihan di sini.
Selain dokumentasi , situs web proyek memiliki sejumlah besar tutorial: cara membuat aplikasi web dengan pakar, mengemas dan menyebarkan aplikasi, menyebarkan dan mengkonfigurasi layanan microsoft di kubernet, mengelola lalu lintas dengan istio, dan menyebarkan ke IBM Cloud dari penyedia cloud populer lainnya dan masih banyak lagi.

Sebastian Dashner (penggemar Java & OSS, Java Champion, IBMer, anggota JCP, commuter EE Jakarta) menerbitkan artikel yang bermanfaat tentang cara menggunakan OpenLiberty, seperti memantau Open Liberty dengan Prometheus dan Grafana , di blognya , dan bukunya Architecting Modern Java Aplikasi EE digunakan dalam persiapan artikel ini.

Liberty-maven-plugin (alternatif untuk gradle ) dapat sangat menyederhanakan pekerjaan Anda. Omong-omong, manual memiliki contoh yang baik tentang penggunaannya.

Anda juga dapat berkontribusi pada proyek .

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


All Articles