Programmēšana

13 Java ietvari stingriem mikropakalpojumiem

Tas ir bijis garš ceļojums Java, valodai, kas sākās kā lingua franca kastei televizora augšpusē tajos laikos, kad televizoriem nebija iebūvēta Roku vai Chromecast ierīce. Tad Java plānoja piederēt globālajam tīmeklim, animējot pārlūkprogrammu, pirms JavaScript parādījās un elkoja to no ceļa.

Java galu galā atrada nišu serveru fermās, kur kādreiz bija pietiekami daudz dažādu mikroshēmu arhitektūru un operētājsistēmu, lai padarītu pārliecinošu “soli rakstīt, kur palaist jebkur” solījumu. Šajās serveru saimniecībās Java ir dzīvojusi, un tā ir iecienīta uzņēmuma IT veikalu uzticamība un izstrādātāji ar mīlestību pret spēcīgu rakstīšanu.

Tikmēr JavaScript kopumā un it īpaši Node.js ir izaicinājuši Java uz servera, izmantojot savu lielo caurlaidspēju un bezvītņu ātrumu, lai pārņemtu milzīgu daļu no tīmekļa trafika. Node ir piesaistījis jaunāko servera puses programmētāju iztēli, piedāvājot ne tikai ātrumu un resursu efektivitāti, bet arī koda vienkāršību, kas darbojas gan klientā, gan serverī.

Neskatoties uz konkurences pieaugumu, Java turpina ne tikai izdzīvot, bet arī izcelties. Daudzas komandas, kuru uzdevums ir izstrādāt mikropakalpojumu arhitektūras, turpina izmantot Java. Galvenajam iemeslam tam ir jābūt tāpēc, ka tehnoloģija jau vairākus gadus tiek pārbaudīta frontes līnijās, analizējot HTTP pieprasījumus. Saule izveidoja stingru virtuālo mašīnu, un Oracle turpina to kopt un atbalstīt.

Vēl viens iemesls ir valodas nepārtraukta attīstība. Java 8 piedāvā stabilu atbalstu funkcionālajām valodām, piemēram, Scala un Kotlin. JVM tagad ir pamats daudziem labākajiem datorvalodas attīstības eksperimentiem. Desmitiem jaunu valodu var apkopot līdz Java baitu kodam un izveidot savienojumu savā starpā, lai sarežģīti projekti darbotos kopā. Daudzas no JVM vienmērīgi darbojošajām kaudzēm var veidot Java un vairāku citu valodu sajaukums.

Lielākajam iemeslam tomēr jābūt tīrajai inercei. Kā es rakstu, Dice ir uzskaitīts 371 darbs COBOL programmētājiem. Ir vēl daudz, daudz vairāk darbu, kuros ir vārds Java. Vai ir pārsteigums, ka viedās komandas skatās uz saviem milzīgajiem novecojošā Java koda kaudzēm un domā, ka vienkāršākais risinājums ir tikai pievienot sānu durvis, kas izspiež datus kā JSON datu struktūras? Voilà. Vecais kods turpina darboties, taču tas darbojas kā moderns mikropakalpojums pie šīm sānu durvīm.

Visas šīs iespējas un vēl vairāk nodrošina to, ka Java turpina spēlēt spēcīgu un būtisku lomu mikropakalpojumu revolūcijā. Un tas nav pārsteigums, ka Java atvērtā pirmkoda kopiena ir sekojusi līdzi, radot daudz jaunu iespēju Java programmētājiem, kuriem jāiemāca Java kods, lai viņi runātu kā mikropakalpojums.

Šeit ir saraksts ar 13 atvērtā pirmkoda iespējām, kuras Java izstrādātāji izmanto, lai izrādītu risinājumus, kas visur veido mikroservisu arhitektūru pamatu.

Pavasara zābaks

Java pasaule jau ilgu laiku ir veidojusi pavasara lietojumprogrammas. Spring Boot ir īpaša Spring versija, kas ievērojami atvieglo procesu, apstrādājot daudzas konfigurācijas detaļas jums. Pavasara sāknēšana tika izveidota, lai automatizētu jebkura veida pavasara projektu sākšanu, ne tikai mikropakalpojumus. Lai viss būtu vēl vienkāršāk, kad esat pabeidzis lietojumprogrammu, Spring Boot sajaucas tīmekļa serverī un izspļauj vienu JAR failu, kas ir gandrīz viss, kas jums nepieciešams, izņemot JVM. Padomājiet par to kā par oriģinālo Docker konteineru.

Visu šo gudrību novērtē daudzi cilvēki, kuru uzdevums ir izveidot mikropakalpojumus, jo visa konfigurācija kļūst kaitinoša, kad jums tas jādara atkal un atkal katram no pārdesmit mikropakalpojumiem. Ja Spring Boot var to automatizēt, ir daudz vieglāk veikt vairākus desmitus mikropakalpojumu.

Mikropakalpojumi, kas izstrādāti kopā ar Spring, atbilst tai pašai MVC filozofijai kā makro tīmekļa lietojumprogrammas, kuras mēs esam veidojuši gadiem ilgi. Sistēma bauda visus dziļos savienojumus, kas izveidoti Java izstrādes gadu laikā, ieskaitot integrāciju ar visiem lielākajiem un mazākajiem datu krātuvēm, LDAP serveriem un ziņojumapmaiņas rīkiem, piemēram, Apache Kafka. Ir arī desmitiem mazu un ne tik mazu funkciju, lai uzturētu darbojošos serveru kolekciju, tādas funkcijas kā Spring Vault, rīks serveru nepieciešamo noslēpumu, paroļu un akreditācijas datu uzturēšanai ražošanā. Visas šīs priekšrocības parāda, kāpēc Java programmētāji jau daudzus gadus pievienojas grupai.

Eclipse MicroProfile

2016. gadā daži no Java Enterprise kopienas faniem palūkojās apkārt un nolēma iztīrīt visus Java Enterprise Edition radītos trūkumus, lai cilvēki varētu izveidot vienkāršus mikropakalpojumus ar klasiskajām daļām. Viņi izmeta pārsteidzoši daudz bibliotēku, taču saglabāja kodu REST pieprasījumu apstrādei, JSON parsēšanai un atkarības injicēšanas pārvaldībai. Tas, ar ko viņi nonāca, saukts par Eclipse MicroProfile, bija ātrs un vienkāršs.

Kopš tā laika MicroProfile kopiena noslēdza līgumu par jaunu versiju izlaišanu reizi ceturksnī, vienlaikus pievienojot jaunu kodu, lai mikropakalpojumi darbotos nevainojami un droši. Izstrādes process un koda struktūra būs ļoti pazīstama ikvienam, kurš ir dzīvojis Java EE pasaulē, taču nebeidzamās konfigurācijas grūtības ir novērstas. Tas ir pierādījums tam, ka jūs varat iemācīt veciem suņiem jaunus trikus.

Dropwizard

Kad 2011. gadā parādījās Dropwizard, tas pavēra Java Enterprise izstrādātāju acis uz to, cik maz koda patiesībā nepieciešams. Dropwizard ietvars sniedza ļoti vienkāršu attīstības modeli ar daudziem svarīgiem lēmumiem, kas jums tika pieņemti, un tas turpināja iet šo ceļu. Jūs pievienojat kādu biznesa loģiku, un tad viss pārējais jums ir konfigurēts atbilstoši konvencijai. Rezultāts ir plāni JAR faili, kurus lietotāji slavē par ātru palaišanu.

Lielākais ierobežojums var būt atkarības injekcijas trūkums. Ja vēlaties izmantot atkarības injekciju, lai kods būtu tīrs un brīvi savienots, bibliotēkas jāpievieno pašiem. Nav atšķirības no Dropwizard, kā to izdarīt, atšķirībā no pavasara pasaules. Tomēr tagad tiek atbalstīta lielākā daļa citu luksusa priekšmetu, tostarp mežizstrāde, veselības pārbaudes un izturības nodrošināšanas kods. Jums nevajadzēs nest pārāk daudz upuru.

WildFly Thorntail

Red Hat ļaudis izveidoja savu MicroProfile versiju komplektā ar slaidu konfigurācijas rīku. Sākotnēji ietvars tika saukts par WildFly Swarm, bet pēc tam to pārdēvēja par Thorntail. Vietne Thorntail palīdz jums izveidot savu Maven būvniecības failu, tikai norādot nepieciešamās funkcijas. Tad Maven rūpējas par visa montāžu.

Thorntail arī noteiks galvenos komponentus, kas jums būs nepieciešami, skenējot kodu, taču jūs varat to ignorēt ar BOM (materiālu rēķins) failu. Kad tas viss darbojas, Thorntail noņems tās Java Enterprise Edition daļas, kuras netiks izmantotas, un izveidos mazu JAR failu, kas ir gatavs izvietošanai ar vienu komandu - slidens līdzeklis, kas ļauj Thorntail projektam to saukt par Uber -JAR. Tā ir vēl viena pieeja, kā sekot Java Enterprise Edition tradīcijai, nesaglabājot visu smago bagāžu.

Helidona

Kopš paziņojumiem presei un pirmās saistības ar GitHub repozitoriju Helidons ir bijis tikai dažus mēnešus, taču sistēma jau tagad piesaista tādu uzmanību, kādu garantē Oracle atbalsts. Lai gan Java Visums ir milzīgs, daudz tā joprojām griežas ap Oracle.

Helidon arhitekti ievēroja daudzas tās pašas tēmas, kas tiek atkārtotas citos šeit esošajos projektos. Izņemiet Java Enterprise Edition versiju un saglabājiet vieglu, uz servletiem balstītu kodolu, kas izpelnījies pasaules uzticību. Helidona gadījumā izstrādātāji sāka ar Netty un pievienoja tikai pietiekami daudz koda, lai veiktu maršrutēšanu un kļūdu apstrādi. Lai padarītu lietas interesantas, viņi izmantoja divus koda pamatmodeļus, tā sauktās SE un MP versijas.

Helidon SE Node.js programmētājiem izskatīsies ļoti pazīstams ar garām funkciju izsaukumu ķēdēm, kuras savieno periodi. Helidon MP izskatīsies pazīstamāks Java programmētājiem, kuri izmanto JAX-RS. Ir arī daži noderīgi un labi novērtēti rīki serveru stāvokļa pārbaudei vai datu plūsmas izsekošanai caur mikropakalpojumu mežu. Šie ir pārliecinoši iemesli, lai izpētītu potenciālu pat bez Oracle atbalsta.

Krikets

Vēl viens ātras API izstrādes pamats ir Krikets. Krikets ir mazs, neskatoties uz to, ka tajā ir iekļautas vairākas ekstras, piemēram, atslēgas vērtības datu krātuve, lai jūs nevarētu savienot ar datu bāzi un plānotāju, lai kontrolētu atkārtotu fona apstrādi. Nav citu atkarību, kas pievienotu sarežģījumus vai bloķēšanu, tāpēc ir diezgan viegli pievienot kodu Cricket un sākt neatkarīgu mikropakalpojumu.

Džērsija

Viena no standarta pieejām tīmekļa pakalpojuma izstrādei ir Java API RESTful Web Services (aka JAX-RS), vispārīga specifikācija, kas ir ieviesta Džersijas sistēmā. Šī pieeja ir ļoti atkarīga no anotāciju izmantošanas, lai norādītu ceļa kartēšanu un atgriešanās detaļas. Visu pārējo, sākot no parametru parsēšanas un JSON iepakošanas, veic Džersija.

Džersijas galvenā priekšrocība ir tā, ka tā ievieš JAX-RS standartu, kas ir pietiekami vēlama funkcija, lai daži izstrādātāji apvienotu Džersiju ar Spring Boot, lai izbaudītu abus kopā.

Spēlēt

Viens no labākajiem veidiem, kā izbaudīt JVM starpvalodu iespējas, ir Play ietvars, Scala koda kaudze, kas sasaista saiti ar Java vai jebkuru citu JVM valodu. Pamats ir ļoti moderns, ar asinhronu bezvalstnieku modeli, kas nepārslogo serveri ar nebeidzamiem pavedieniem, mēģinot izsekot lietotājiem un viņu sesiju datiem. Ir arī vairākas papildu funkcijas, kuras var izmantot, lai pilnveidotu vietni, piemēram, OpenID, validāciju un failu augšupielādes atbalstu.

Play koda bāze ir attīstījusies vairāk nekā desmit gadus, tāpēc jūs atradīsit arī sen aizmirstu laiku atbalsis, piemēram, atbalstu XML. Spēle ir gan nobriedusi, gan elastīga, kombinācija, kas savvaļā var būt reta.

Swagger

API veidošana var šķist tikpat vienkārša kā kāda koda uzrakstīšana, kas klausās ostā un sniedz atbildes, taču Swagger izstrādātāji lūdz atšķirties. Viņi ir izveidojuši visu API specifikācijas valodu ar nosaukumu OpenAPI, kuru varat izmantot, lai precīzi noteiktu, ko jūs darīsit API. Tas var šķist papildu solis, taču Swagger komanda ir arī nodrošinājusi kodu, kas šo specifikāciju pārvērš automatizētos testos, dokumentācijā un citur.

Vienkāršs, gandrīz spartisks API apraksts Swagger konfigurācijas failā tiek savērpts Java kodā, lai ieviestu saskarni, dokumentētu tā uzvedību un nodrošinātu rīku kopu, kas ļauj pārbaudīt zem tā izveidoto kodu. Ir pat API pārvaldības mehānisms, lai jūs varētu strādāt ar nemazgātajām masām, kuras drīz vien uzsitīs jūsu API durvis un gaidīs atbildes.

Swagger ir API ekosistēma, un tā neaprobežojas tikai ar Java. Ja jūsu komanda pāriet uz Node.js vai kādu no vairākiem desmitiem citu valodu, ir Swagger Codegen modulis, kas gaida jūsu OpenAPI specifikācijas pārveidošanu par ieviešanu šajā valodā.

Restlet

Viena no lielākajām atšķirībām starp dažādiem ietvariem ir savienojumu skaits ar citiem pakalpojumiem un bibliotēkām. Restlet projekts piedāvā vienu no lielākajām funkciju un savienojumu kolekcijām. Tas jau ir integrēts ar tādām bibliotēkām kā JavaMail, ja jūsu mikropakalpojumam būs jārunā POP, IMAP vai SMTP ar kādu pasta serveri un Lucene / Solr, ja vēlaties izveidot meklējamus indeksus ar lieliem teksta gabaliem un metadatiem, kas aptīti ap to.

Restlet iespējas turpina turpināties, jo šī kaudze parasti atbalsta vairākas dažādas iespējas katrai daļai. Piemēram, jums nav jāizmanto JSON, jo kods apstrādās XML, CSV, YAML un vēl dažus failu formātus. Jūs saņemat vairākas dažādas veidņu iespējas arī atbildes strukturēšanai. Viena no kārtīgākajām papildu funkcijām ir Restlet klients, kas ļauj pārbaudīt API no Chrome pārlūka.

Skvošs

Mikropakalpojumu atkļūdošana bieži ir īsts izaicinājums, jo daļas ir tik brīvi savienotas, un ir grūti izsekot datu plūsmai visos sistēmas slāņos. Skvošs ļauj iestatīt koda pārtraukumpunktus, kas darbojas Kubernetes kopā, un pēc tam visus datus saņemt atpakaļ savā IDE, it kā tas būtu kods, kas darbojas lokāli. Skvošs integrējas arī ar Node.js un Python izpildlaiku, ja jūsu mikropakalpojumu kolekcija nav paredzēta tikai Java.

Telepresence

Vēl viena atkļūdošanas iespēja ir Telepresence izmantošana, lai izveidotu vietējo starpniekserveri mikropakalpojumam tālā Kubernetes klasterī. Jūsu zvani uz šo pakalpojumu tiks novirzīti uz vietējo versiju, kur jūs varat iestatīt pārtraukuma punktus vai darīt jebko citu, ko varat iedomāties savā lokālajā mašīnā.

Zipkins

Zipkins ir mehānisms notikumu reģistrēšanai dažādos mikropakalpojumos un pēc tam notikumu korelācijai, lai problēmas varētu izolēt un izpētīt, kad tās viļņojas mašīnu kolekcijā. Ir Java, kā arī vēl vismaz sešas citas valodas Zipkin ieviešana, lai varētu risināt daudzvalodu sistēmas. Dažos no sarežģītākajiem ietvariem, piemēram, Spring, Zipkins jau ir kaut kādā veidā integrēts.

$config[zx-auto] not found$config[zx-overlay] not found