13 framework Java untuk layanan mikro yang kokoh

Ini merupakan perjalanan yang panjang untuk Java, bahasa yang dimulai sebagai lingua franca untuk kotak di atas televisi pada hari-hari ketika TV tidak dilengkapi dengan Roku atau Chromecast built-in. Kemudian Java akan memiliki World Wide Web dengan menganimasikan browser sebelum JavaScript muncul dan menyingkirkannya.

Java akhirnya menemukan ceruk di ladang server di mana dulu terdapat cukup banyak arsitektur chip dan sistem operasi yang berbeda untuk membuat "janji tulis sekali berjalan di mana saja" menarik. Dan di server farm tersebut Java tetap hidup, toko favorit perusahaan IT yang kecanduan keandalan dan pengembang dengan kecintaan akan pengetikan yang kuat.

Sementara itu, JavaScript secara umum dan Node.js secara khusus telah menantang Java di server, menggunakan throughput tinggi dan kecepatan tanpa thread untuk mengambil alih sebagian besar lalu lintas di web. Node telah menangkap imajinasi programmer sisi server terbaru dengan menawarkan tidak hanya kecepatan dan efisiensi sumber daya, tetapi juga kesederhanaan kode yang berjalan pada klien dan server.

Namun meskipun persaingan meningkat, Jawa tidak hanya terus bertahan tetapi juga unggul. Banyak tim yang ditugaskan untuk mengembangkan arsitektur layanan mikro terus menggunakan Java. Alasan utamanya pasti karena teknologinya telah teruji dari tahun ke tahun di garis depan dalam mengurai permintaan HTTP. Sun menciptakan mesin virtual yang kokoh, dan Oracle terus memelihara dan mendukungnya.

Alasan lain pasti evolusi bahasa yang berkelanjutan. Java 8 menawarkan dukungan yang solid untuk bahasa fungsional seperti Scala dan Kotlin. JVM sekarang menjadi landasan bagi banyak eksperimen terbaik dalam pengembangan bahasa komputer. Lusinan bahasa baru dapat dikompilasi ke kode byte Java dan terhubung satu sama lain untuk membuat proyek yang kompleks bekerja sama. Banyak tumpukan yang berjalan mulus di JVM dapat dibuat oleh campuran Java dan sejumlah bahasa lain.

Alasan terbesar, bagaimanapun, haruslah inersia belaka. Saat saya menulis, 371 pekerjaan untuk programmer COBOL terdaftar di Dice. Masih banyak lagi pekerjaan dengan kata Java di dalamnya. Apakah mengherankan jika tim cerdas melihat tumpukan besar kode Java yang menua dan berpikir bahwa solusi paling sederhana adalah menambahkan pintu samping yang mengeluarkan data sebagai struktur data JSON? Voila. Kode lama tetap berjalan, tetapi berfungsi seperti layanan mikro modern di pintu samping ini.

Semua opsi ini dan lebih banyak lagi memastikan bahwa Java terus memainkan peran yang kuat dan vital dalam revolusi layanan mikro. Dan tidak mengherankan jika komunitas open source Java telah mengikutinya, menciptakan banyak opsi baru untuk programmer Java yang perlu mengajarkan kode Java mereka untuk berbicara seperti layanan mikro.

Berikut adalah daftar 13 opsi open source yang digunakan pengembang Java untuk menghasilkan solusi yang membentuk fondasi arsitektur layanan mikro di mana-mana.

Boot Musim Semi

Dunia Java telah membangun aplikasi Spring untuk waktu yang lama. Spring Boot adalah versi Spring tertentu yang membuat prosesnya lebih mudah dengan menangani banyak detail konfigurasi untuk Anda. Spring Boot dibuat untuk mengotomatiskan permulaan proyek Spring dalam bentuk apa pun, tidak hanya layanan mikro. Untuk membuat segalanya lebih sederhana, setelah Anda selesai dengan aplikasi, Spring Boot mencampur di server web dan mengeluarkan satu file JAR yang cukup banyak yang Anda butuhkan kecuali JVM. Anggap saja sebagai container Docker asli.

Semua kecerdasan ini dihargai oleh banyak orang yang ditugaskan untuk membangun layanan mikro karena semua konfigurasi akan mengganggu ketika Anda harus melakukannya berulang kali untuk setiap lusinan layanan mikro. Jika Spring Boot dapat mengotomatiskannya, menghasilkan beberapa lusin layanan mikro jauh lebih mudah.

Layanan mikro yang dikembangkan dengan Spring mengikuti filosofi MVC yang sama dengan aplikasi web makro yang telah kami bangun selama bertahun-tahun. Kerangka kerja ini menikmati semua koneksi mendalam yang dibangun selama bertahun-tahun dalam pengembangan Java termasuk integrasi dengan semua penyimpanan data besar dan kecil, server LDAP, dan alat perpesanan seperti Apache Kafka. Ada juga lusinan fitur kecil dan tidak terlalu kecil untuk memelihara kumpulan server yang berjalan, fitur seperti Spring Vault, alat untuk menjaga rahasia, kata sandi, dan kredensial yang dibutuhkan oleh server dalam produksi. Semua keuntungan ini menunjukkan mengapa programmer Java telah bergabung selama bertahun-tahun.

Profil Mikro Eclipse

Pada tahun 2016, beberapa penggemar komunitas Java Enterprise melihat sekeliling dan memutuskan untuk membersihkan semua sisa dari Java Enterprise Edition sehingga orang dapat membuat layanan mikro sederhana dengan bagian klasik. Mereka membuang sejumlah pustaka yang mengejutkan, tetapi menyimpan kode untuk memproses permintaan REST, mengurai JSON, dan mengelola injeksi ketergantungan. Apa yang mereka dapatkan, dijuluki Eclipse MicroProfile, cepat dan sederhana.

Sejak itu komunitas MicroProfile membuat perjanjian untuk merilis versi baru setiap tiga bulan sambil menambahkan kode baru untuk menjaga layanan mikro berjalan dengan lancar dan aman. Proses pengembangan dan struktur kode akan sangat familiar bagi siapa saja yang pernah hidup di dunia Java EE, tetapi kerumitan konfigurasi yang tak ada habisnya telah dipoles. Itu bukti bahwa Anda bisa mengajari anjing tua trik baru.

Dropwizard

Ketika Dropwizard muncul pada tahun 2011, itu membuka mata para pengembang Java Enterprise tentang betapa sedikitnya kode yang benar-benar dibutuhkan. Kerangka kerja Dropwizard memberikan model pengembangan yang sangat sederhana dengan banyak keputusan penting yang dibuat untuk Anda, dan terus mengikuti jalur ini. Anda menambahkan beberapa logika bisnis dan kemudian hampir semua hal lainnya dikonfigurasikan untuk Anda sesuai dengan konvensi. Hasilnya adalah file JAR tipis yang dipuji pengguna karena dapat dimulai dengan cepat.

Batasan terbesar mungkin adalah kurangnya injeksi ketergantungan. Jika Anda ingin menggunakan injeksi ketergantungan untuk menjaga kode Anda tetap bersih dan longgar, Anda harus menambahkan pustaka sendiri. Tidak ada cara Dropwizard untuk melakukan ini, tidak seperti di dunia Musim Semi. Namun, sebagian besar barang mewah lainnya sekarang didukung termasuk penebangan, pemeriksaan kesehatan, dan kode yang memberi ketahanan. Anda tidak perlu terlalu banyak berkorban.

WildFly Thorntail

Orang-orang di Red Hat membangun MicroProfile versi mereka sendiri lengkap dengan alat konfigurasi yang apik. Kerangka tersebut awalnya bernama WildFly Swarm, tapi kemudian diganti namanya menjadi Thorntail. Situs web Thorntail membantu Anda membuat file build Maven Anda sendiri hanya dengan menentukan fitur yang Anda butuhkan. Maven kemudian mengurus semuanya.

Thorntail juga akan mendeteksi komponen utama yang Anda perlukan dengan memindai kode Anda, tetapi Anda dapat menimpanya dengan file BOM (bill of materials). Saat semuanya berjalan, Thorntail akan menghapus bagian-bagian dari Java Enterprise Edition yang tidak akan digunakan dan membuat file JAR yang kecil dan siap untuk diterapkan dengan satu perintah — fitur apik yang memungkinkan proyek Thorntail menyebutnya sebagai Uber -BOTOL. Ini adalah pendekatan lain untuk mengikuti tradisi Java Enterprise Edition tanpa menyimpan semua beban berat.

Helidon

Helidon baru keluar selama beberapa bulan sejak rilis pers dan komitmen pertama ke repositori GitHub, tetapi kerangka kerja tersebut sudah menarik perhatian yang didukung oleh jaminan dari Oracle. Meskipun jagad Java sangat besar, banyak di antaranya masih berputar di sekitar Oracle. 

Arsitek Helidon mengikuti banyak tema yang sama yang diulangi dalam proyek lain di sini. Singkirkan cruft Java Enterprise Edition dan pertahankan inti ringan berbasis servlet yang telah mendapatkan kepercayaan dunia. Dalam kasus Helidon, para pengembang memulai dengan Netty dan menambahkan kode yang cukup untuk melakukan beberapa perutean dan penanganan kesalahan. Untuk membuat hal-hal menarik, mereka menggunakan dua model dasar untuk kode tersebut, yang disebut versi SE dan MP.

Helidon SE akan terlihat sangat familiar bagi pemrogram Node.js dengan rantai panjang pemanggilan fungsi yang digabungkan dengan titik. Helidon MP akan terlihat lebih familiar bagi programmer Java yang menggunakan JAX-RS. Ada juga beberapa alat yang berguna dan sangat dihargai untuk memeriksa kesehatan server atau melacak aliran data melalui hutan layanan mikro. Ini adalah alasan kuat untuk mengeksplorasi potensi, bahkan tanpa dukungan Oracle.  

Jangkrik

Kerangka lain untuk pengembangan API cepat adalah Cricket. Cricket kecil meskipun termasuk beberapa tambahan seperti penyimpanan data nilai kunci untuk menyelamatkan Anda dari menghubungkan database dan penjadwal untuk mengontrol pemrosesan latar belakang yang berulang. Tidak ada dependensi lain yang menambahkan komplikasi atau lock-in, jadi cukup mudah untuk menambahkan kode Anda ke Cricket dan memulai layanan mikro independen.

Jersey

Salah satu pendekatan standar untuk mengembangkan layanan web adalah Java API for RESTful Web Services (alias JAX-RS), spesifikasi umum yang telah diimplementasikan dalam kerangka Jersey. Pendekatan ini sangat bergantung pada penggunaan anotasi untuk menentukan pemetaan jalur dan detail pengembalian. Segala sesuatu yang lain dari penguraian parameter dan pengemasan JSON ditangani oleh Jersey.

Keuntungan utama Jersey adalah menerapkan standar JAX-RS, fitur yang cukup diinginkan sehingga beberapa pengembang menggabungkan Jersey dengan Spring Boot untuk menikmati keduanya bersama-sama. 

Bermain

Salah satu cara terbaik untuk merasakan kekuatan lintas bahasa JVM adalah dengan kerangka Play, tumpukan kode Scala yang terhubung dengan Java atau bahasa JVM lainnya. Fondasinya sangat modern, dengan model asynchronous, stateless yang tidak membebani server dengan utas tanpa akhir yang mencoba melacak pengguna dan data sesi mereka. Ada juga sejumlah fitur tambahan yang dapat digunakan untuk menyempurnakan situs web seperti OpenID, validasi, dan dukungan unggah file.

Basis kode Play telah berkembang selama lebih dari satu dekade, jadi Anda juga akan menemukan gaung dari waktu yang lama terlupakan seperti dukungan untuk XML. Bermain itu matang dan lentur, kombinasi yang jarang terjadi di alam liar.

Menyombongkan

Membangun API mungkin tampak sesederhana menulis beberapa kode yang mendengarkan di port dan memberikan jawaban, tetapi pengembang Swagger memohon untuk berbeda. Mereka telah membuat seluruh bahasa spesifikasi API yang disebut OpenAPI yang dapat Anda gunakan untuk menjelaskan apa yang akan dilakukan API Anda. Ini mungkin tampak seperti langkah ekstra, tetapi tim Swagger juga menyediakan kode yang mengubah spesifikasi ini menjadi pengujian otomatis, dokumentasi, dan banyak lagi.

Deskripsi API yang sederhana dan hampir sederhana dalam file konfigurasi Swagger diputar ke dalam kode Java untuk mengimplementasikan antarmuka, mendokumentasikan bagaimana perilakunya, dan menyediakan seperangkat alat untuk menguji kode yang dibangun di bawahnya. Bahkan ada mekanisme untuk tata kelola API sehingga Anda dapat bekerja dengan massa yang tidak dicuci yang akan segera menggedor pintu API Anda dan mengharapkan jawaban.

Kesombongan adalah ekosistem untuk API dan tidak terbatas pada Java. Jika tim Anda pindah ke Node.js atau beberapa lusin bahasa lainnya, ada modul Swagger Codegen yang menunggu untuk mengubah spesifikasi OpenAPI Anda menjadi implementasi dalam bahasa tersebut.

Restlet

Salah satu perbedaan besar antara berbagai kerangka kerja adalah jumlah koneksi ke layanan dan perpustakaan lain. Proyek Restlet menawarkan salah satu koleksi fitur dan koneksi yang lebih besar. Ini sudah terintegrasi dengan pustaka seperti JavaMail, jika layanan mikro Anda perlu menggunakan POP, IMAP, atau SMTP ke beberapa server email, dan Lucene / Solr, jika Anda ingin membuat indeks yang dapat dicari dari potongan besar teks dan metadata yang membungkusnya Itu.

Kemungkinan di Restlet terus berjalan karena tumpukan ini umumnya mendukung beberapa opsi berbeda untuk setiap bagian. Anda tidak perlu menggunakan JSON, misalnya, karena kode akan menangani XML, CSV, YAML, dan beberapa format file lainnya. Anda juga mendapatkan beberapa opsi berbeda untuk templat untuk menyusun respons Anda. Salah satu fitur tambahan yang lebih rapi adalah klien Restlet, yang memungkinkan Anda menguji API Anda dari browser Chrome.

Labu

Debugging microservices sering menjadi tantangan nyata karena bagian-bagiannya digabungkan secara longgar dan sulit untuk melacak aliran data melalui semua lapisan sistem. Squash memungkinkan Anda mengatur breakpoint dalam kode Anda yang berjalan pada cluster Kubernetes dan kemudian menerima semua data kembali di IDE Anda seolah-olah itu adalah kode yang berjalan secara lokal. Squash juga terintegrasi dengan runtime Node.js dan Python jika koleksi layanan mikro Anda tidak hanya untuk Java.

Telepresence

Opsi lain untuk debugging adalah menggunakan Telepresence untuk membuat proxy lokal untuk layanan mikro di kluster Kubernetes yang jauh. Panggilan Anda untuk layanan ini akan dialihkan ke versi lokal tempat Anda dapat mengatur breakpoint atau melakukan hal lain yang dapat Anda bayangkan di komputer lokal Anda.

Zipkin

Zipkin adalah mekanisme untuk mencatat peristiwa di berbagai layanan mikro dan kemudian menghubungkan peristiwa tersebut sehingga masalah dapat diisolasi dan dipelajari saat terjadi melalui kumpulan mesin. Ada implementasi Zipkin untuk Java serta setidaknya enam bahasa lain sehingga sistem multi-bahasa dapat ditangani. Beberapa kerangka kerja paling canggih seperti Spring sudah memiliki Zipkin yang terintegrasi dalam beberapa bentuk.