13 Kerangka Java untuk perkhidmatan mikro padat batu

Ini adalah perjalanan panjang untuk Java, bahasa yang dimulai sebagai lingua franca untuk kotak di atas set televisyen pada hari-hari ketika TV tidak disertakan dengan Roku atau Chromecast bawaan. Kemudian Java akan memiliki World Wide Web dengan menganimasikan penyemak imbas sebelum JavaScript datang dan melepaskannya dari jalan.

Java akhirnya menemui niche di ladang pelayan di mana terdapat sekali arsitektur cip dan sistem operasi yang cukup untuk membuat janji "tulis sekali jalankan di mana sahaja" menarik. Dan di ladang-ladang pelayan tersebut, Java hidup, kegemaran kedai IT perusahaan yang ketagihan kebolehpercayaan dan pemaju dengan suka menaip yang kuat.

Sementara itu, JavaScript pada umumnya dan Node.js khususnya telah menantang Java di pelayan, menggunakan throughput tinggi dan kelajuan bebas utas untuk mengambil alih sejumlah besar lalu lintas di web. Node telah menangkap imaginasi pengaturcara sisi pelayan terbaru dengan menawarkan bukan sahaja kelajuan dan kecekapan sumber tetapi juga kesederhanaan kod yang dijalankan pada kedua-dua pelanggan dan pelayan.

Namun di sebalik persaingan yang meningkat, Java terus tidak hanya bertahan tetapi juga unggul. Sebilangan besar pasukan yang ditugaskan untuk mengembangkan seni bina perkhidmatan mikro terus menggunakan Java. Sebab utama mestilah kerana teknologi ini diuji pertempuran sejak bertahun-tahun di barisan depan yang menguraikan permintaan HTTP. Sun mencipta mesin maya yang kukuh, dan Oracle terus memelihara dan menyokongnya.

Sebab lain mestilah evolusi bahasa yang berterusan. Java 8 menawarkan sokongan padu untuk bahasa berfungsi seperti Scala dan Kotlin. JVM kini menjadi asas bagi banyak eksperimen terbaik dalam pengembangan bahasa komputer. Puluhan bahasa baru dapat menyusun kod bait Java dan saling menghubungkan satu sama lain untuk membuat projek-projek yang kompleks berfungsi bersama. Sebilangan besar timbunan berjalan lancar pada JVM mungkin dibina oleh campuran Java dan sejumlah bahasa lain.

Alasan terbesar, bagaimanapun, adalah inersia semata-mata. Semasa saya menulis, 371 pekerjaan untuk pengaturcara COBOL disenaraikan di Dice. Terdapat banyak, lebih banyak pekerjaan dengan kata Java di dalamnya. Adakah mengejutkan bahawa pasukan pintar melihat banyak kod Java penuaan mereka dan berfikir bahawa penyelesaian paling mudah adalah dengan menambah pintu sampingan yang mengeluarkan data sebagai struktur data JSON? VoilĂ . Kod lama terus berjalan, tetapi ia berfungsi seperti perkhidmatan mikro moden di pintu sebelah ini.

Semua pilihan ini dan lebih memastikan bahawa Java terus memainkan peranan yang kuat dan penting dalam revolusi perkhidmatan mikro. Dan tidak menghairankan bahawa komuniti sumber terbuka Java telah mengikuti, menciptakan banyak pilihan baru untuk pengaturcara Java yang perlu mengajar kod Java mereka untuk berbicara seperti perkhidmatan mikro.

Berikut adalah senarai 13 pilihan sumber terbuka yang digunakan pemaju Java untuk menghasilkan penyelesaian yang menjadi asas seni bina perkhidmatan mikro di mana sahaja.

Spring Boot

Dunia Java telah lama membangun aplikasi Spring. Spring Boot adalah versi khas Spring yang menjadikan prosesnya lebih mudah dengan mengendalikan banyak butiran konfigurasi untuk anda. Spring Boot dibuat untuk mengautomasikan permulaan projek Spring dalam bentuk apa pun, bukan hanya perkhidmatan mikro. Untuk menjadikan segalanya lebih mudah, setelah selesai menggunakan aplikasinya, Spring Boot bercampur dengan pelayan web dan mengeluarkan satu fail JAR yang cukup banyak yang anda perlukan kecuali JVM. Anggaplah ia sebagai bekas Docker yang asli.

Semua kepandaian ini dihargai oleh banyak orang yang ditugaskan untuk membina perkhidmatan mikro kerana semua konfigurasi menjadi menjengkelkan apabila anda harus melakukannya berulang kali untuk setiap belasan atau lebih perkhidmatan mikro. Sekiranya Spring Boot dapat mengotomatisasi, mengeluarkan beberapa dozen perkhidmatan mikro jauh lebih mudah.

Perkhidmatan mikro yang dikembangkan dengan Spring mengikuti falsafah MVC yang sama dengan aplikasi web makro yang kami buat selama bertahun-tahun. Kerangka ini menikmati semua hubungan mendalam yang dibangun selama bertahun-tahun pembangunan Java termasuk penyatuan dengan semua kedai data utama dan kecil, pelayan LDAP, dan alat pesanan seperti Apache Kafka. Terdapat juga puluhan ciri kecil dan tidak begitu kecil untuk mengekalkan koleksi pelayan yang sedang berjalan, ciri seperti Spring Vault, alat untuk menjaga rahsia, kata laluan, dan bukti yang diperlukan oleh pelayan dalam pengeluaran. Semua kelebihan ini menunjukkan mengapa programmer Java telah bergabung dengan kereta muzik selama bertahun-tahun.

Eclipse MicroProfile

Pada tahun 2016, beberapa peminat komuniti Java Enterprise melihat-lihat dan memutuskan untuk membersihkan semua kerajinan dari Java Enterprise Edition supaya orang dapat membina perkhidmatan mikro sederhana dengan bahagian klasik. Mereka membuang sejumlah perpustakaan yang mengejutkan, tetapi menyimpan kod untuk memproses permintaan REST, menguraikan JSON, dan menguruskan suntikan ketergantungan. Apa yang mereka akhirnya, dijuluki Eclipse MicroProfile, cepat dan sederhana.

Sejak itu komuniti MicroProfile membuat perjanjian untuk melepaskan versi baru sesering setiap suku tahun sambil menambahkan kod baru untuk memastikan perkhidmatan mikro berjalan lancar dan selamat. Proses pengembangan dan struktur kod akan sangat dikenal oleh siapa saja yang pernah tinggal di dunia Java EE, tetapi kerumitan konfigurasi yang tidak berkesudahan telah diselesaikan. Ini bukti bahawa anda boleh mengajar anjing baru helah baru.

Dropwizard

Ketika Dropwizard muncul pada tahun 2011, ia membuka mata para pembangun Java Enterprise tentang betapa sedikitnya kod yang sangat diperlukan. Kerangka Dropwizard memberikan model pembangunan yang sangat sederhana dengan banyak keputusan penting yang dibuat untuk anda, dan ia terus mengikuti jalan ini. Anda menambah logik perniagaan dan kemudian semua yang lain dikonfigurasikan untuk anda mengikut konvensyen. Hasilnya adalah fail JAR langsing yang dipuji pengguna kerana memulakannya dengan cepat.

Batasan terbesar mungkin kekurangan suntikan kebergantungan. Sekiranya anda ingin menggunakan suntikan ketergantungan untuk memastikan kod anda bersih dan digabungkan secara longgar, anda perlu menambahkan perpustakaan sendiri. Tidak ada cara Dropwizard untuk melakukan ini, tidak seperti di dunia Spring. Sebilangan besar barang mewah lain kini disokong termasuk pembalakan, pemeriksaan kesihatan, dan kod penyedia ketahanan. Anda tidak perlu membuat banyak pengorbanan.

WildFly Thorntail

Orang-orang di Red Hat membina versi MicroProfile mereka sendiri lengkap dengan alat konfigurasi yang licin. Kerangka ini pada awalnya disebut WildFly Swarm, tetapi kemudian dinamakan semula menjadi Thorntail. Laman web Thorntail membantu anda membuat fail build Maven anda sendiri hanya dengan menentukan ciri yang anda perlukan. Maven kemudian menguruskan pemasangan semuanya.

Thorntail juga akan mengesan komponen utama yang anda perlukan dengan mengimbas kod anda, tetapi anda boleh mengatasinya dengan fail BOM (bil bahan). Apabila semuanya berjalan, Thorntail akan melucutkan bahagian Java Enterprise Edition yang tidak akan digunakan dan membuat fail JAR yang kecil dan siap digunakan dengan satu arahan - ciri licin yang membolehkan projek Thorntail memanggilnya Uber -JAR. Ini adalah pendekatan lain untuk mengikuti tradisi Java Enterprise Edition tanpa menyimpan semua barang berat.

Helidon

Helidon hanya keluar selama beberapa bulan sejak siaran akhbar dan yang pertama berkomitmen untuk repositori GitHub, tetapi kerangka kerja itu sudah menarik perhatian yang mendapat sokongan dari jaminan Oracle. Walaupun alam semesta Java sangat besar, banyak yang masih berputar di sekitar Oracle. 

Arkitek Helidon mengikuti banyak tema yang sama yang diulang dalam projek lain di sini. Keluarkan Java Edisi Perusahaan dan simpan inti ringan yang berasaskan servlet yang telah mendapat kepercayaan dunia. Dalam kes Helidon, para pembangun bermula dengan Netty dan menambahkan kod yang cukup untuk melakukan pengendalian rutin dan ralat. Untuk menjadikan sesuatu menarik, mereka menggunakan dua model asas untuk kod tersebut, yang disebut versi SE dan MP.

Helidon SE akan kelihatan sangat biasa bagi pengaturcara Node.js dengan rantai panggilan yang panjang yang disambungkan dengan noktah. Helidon MP akan kelihatan lebih biasa bagi pengaturcara Java yang menggunakan JAX-RS. Terdapat juga beberapa alat yang berguna dan dihargai untuk memeriksa kesihatan pelayan atau mengesan aliran data melalui hutan perkhidmatan mikro. Ini adalah alasan yang kuat untuk menerokai potensi, walaupun tanpa sokongan Oracle.  

Kriket

Satu lagi kerangka kerja untuk pengembangan API yang pantas adalah Cricket. Kriket kecil walaupun merangkumi beberapa tambahan seperti penyimpanan data kunci-nilai untuk menyelamatkan anda daripada menghubungkan pangkalan data dan penjadual untuk mengawal pemprosesan latar belakang berulang. Tidak ada kebergantungan lain yang menambah komplikasi atau penguncian, jadi cukup mudah untuk menambahkan kod anda ke Cricket dan memulakan perkhidmatan mikro bebas.

Jersi

Salah satu pendekatan standard untuk mengembangkan perkhidmatan web adalah Java API untuk RESTful Web Services (aka JAX-RS), spesifikasi umum yang telah dilaksanakan dalam kerangka Jersey. Pendekatannya sangat bergantung pada penggunaan anotasi untuk menentukan pemetaan jalan dan perincian pengembalian. Segala yang lain dari penguraian parameter dan pembungkusan JSON dikendalikan oleh Jersey.

Kelebihan utama Jersey adalah bahawa ia menerapkan standard JAX-RS, satu ciri yang cukup diinginkan agar sebilangan pemaju menggabungkan Jersey dengan Spring Boot untuk menikmati keduanya bersama-sama. 

Main

Salah satu cara terbaik untuk merasakan kekuatan bahasa silang JVM adalah dengan kerangka Play, tumpukan kod Scala yang menghubungkan dengan Java atau bahasa JVM lain. Asasnya sangat moden, dengan model tidak statik dan tidak statik yang tidak membebani pelayan dengan utas tanpa henti yang cuba menjejaki pengguna dan data sesi mereka. Ada juga sejumlah fitur tambahan yang dapat digunakan untuk menyusun laman web seperti OpenID, validasi, dan sokongan muat naik fail.

Pangkalan data Play telah berkembang selama lebih dari satu dekad, jadi anda juga akan menemui gema masa-masa yang lama dilupakan seperti sokongan untuk XML. Bermain baik dan matang, kombinasi yang jarang berlaku di alam liar.

Pusing

Membangun API mungkin kelihatan semudah menulis beberapa kod yang mendengarkan di port dan memberikan jawapan, tetapi pembangun Swagger meminta untuk berbeza. Mereka telah membuat keseluruhan bahasa spesifikasi API yang disebut OpenAPI yang dapat anda gunakan untuk menjelaskan apa yang API anda akan lakukan. Ini mungkin kelihatan seperti langkah tambahan, tetapi pasukan Swagger juga telah memberikan kod yang mengubah spesifikasi ini menjadi ujian automatik, dokumentasi, dan banyak lagi.

Deskripsi API yang sederhana dan hampir sederhana dalam file konfigurasi Swagger diputar ke dalam kod Java untuk melaksanakan antarmuka, mendokumentasikan bagaimana perilakunya, dan menyediakan satu set alat untuk menguji kod yang dibina di bawahnya. Bahkan ada mekanisme untuk tadbir urus API sehingga anda dapat bekerja dengan massa yang tidak dicuci yang akan segera menyerang pintu API anda dan mengharapkan jawapan.

Swagger adalah ekosistem untuk API dan ia tidak terhad kepada Java. Sekiranya pasukan anda berpindah ke Node.js atau beberapa lusin bahasa lain, ada modul Swagger Codegen yang menunggu untuk menukar spesifikasi OpenAPI anda menjadi implementasi dalam bahasa tersebut.

Letakkan semula

Salah satu perbezaan yang lebih besar antara pelbagai kerangka kerja adalah bilangan sambungan ke perkhidmatan dan perpustakaan lain. Projek Restlet menawarkan salah satu koleksi ciri dan sambungan yang lebih besar. Ini sudah disatukan dengan perpustakaan seperti JavaMail, sekiranya perkhidmatan mikro anda perlu bercakap POP, IMAP, atau SMTP ke beberapa pelayan mel, dan Lucene / Solr, sekiranya anda ingin membina indeks yang dapat dicari dengan potongan teks dan metadata yang dililit ia.

Kemungkinan di Restlet terus berjalan kerana timbunan ini umumnya menyokong beberapa pilihan yang berbeza untuk setiap bahagian. Anda tidak perlu menggunakan JSON, misalnya, kerana kod tersebut akan menangani XML, CSV, YAML, dan beberapa format fail lagi. Anda mendapat beberapa pilihan yang berbeza untuk templat untuk menyusun respons anda juga. Salah satu ciri tambahan yang lebih kemas adalah klien Restlet, yang membolehkan anda menguji API anda dari penyemak imbas Chrome.

Skuasy

Melengkapkan perkhidmatan mikro sering menjadi cabaran sebenar kerana bahagian-bahagiannya digabungkan secara longgar dan sukar untuk mengesan aliran data melalui semua lapisan sistem. Squash membolehkan anda mengatur titik putus dalam kod anda yang berjalan pada kluster Kubernetes dan kemudian menerima semua data kembali dalam IDE anda seolah-olah itu adalah kod yang dijalankan secara tempatan. Squash juga disatukan dengan Node.js dan Python runtime sekiranya koleksi perkhidmatan mikro anda bukan hanya Java.

Telepresence

Pilihan lain untuk melakukan debug adalah menggunakan Telepresence untuk membuat proksi tempatan untuk perkhidmatan mikro pada kluster Kubernetes yang jauh. Panggilan anda untuk perkhidmatan ini akan dialihkan ke versi tempatan di mana anda dapat mengatur titik putus atau melakukan apa sahaja yang anda bayangkan di mesin tempatan anda.

Zipkin

Zipkin adalah mekanisme untuk mencatat peristiwa di pelbagai perkhidmatan mikro dan kemudian menghubungkan peristiwa tersebut sehingga masalah dapat diasingkan dan dikaji ketika mereka bergelombang melalui pengumpulan mesin. Terdapat implementasi Zipkin untuk Java serta sekurang-kurangnya enam bahasa lain sehingga sistem multi-bahasa dapat ditangani. Beberapa kerangka kerja yang paling canggih seperti Spring sudah menyatukan Zipkin dalam beberapa bentuk.