13 Java okvira za čvrste mikroservise

Bilo je to dugo putovanje za Javu, jezik koji je započeo kao lingua franca za kutiju na vrhu televizora u doba kada televizori nisu dolazili s ugrađenim Rokuom ili Chromecastom. Tada će Java posjedovati World Wide Web animirajući preglednik prije nego što se pojavio JavaScript i uklonio ga s puta.

Java je na kraju pronašla nišu na farmama poslužitelja gdje je nekoć postojalo dovoljno različitih arhitektura čipova i operativnih sustava kako bi obećavajuće bilo „obećavanje pisanja jednom pokrenuto bilo gdje“. I na onim farmama poslužitelja Java je živjela, omiljena u poslovnim IT trgovinama ovisnim o pouzdanosti i programerima s ljubavlju snažnog tipkanja.

U međuvremenu, JavaScript općenito, a posebno Node.js izazvali su Javu na poslužitelju, koristeći veliku propusnost i brzinu bez niti da bi preuzeli ogroman dio prometa na webu. Node je zaokupio maštu najnovijih programera na strani poslužitelja nudeći ne samo brzinu i učinkovitost resursa već i jednostavnost koda koji radi i na klijentu i na poslužitelju.

Ipak, unatoč porastu konkurencije, Java nastavlja ne samo da opstaje, već i da se ističe. Mnogi timovi čiji je zadatak razviti arhitekturu mikroservisa i dalje koriste Javu. Glavni razlog mora biti taj što je tehnologija godinama testirana na bitkama i raščlanjuje HTTP zahtjeve. Sun je stvorio čvrst virtualni stroj, a Oracle ga nastavlja njegovati i podržavati.

Drugi razlog mora biti kontinuirana evolucija jezika. Java 8 nudi solidnu podršku za funkcionalne jezike poput Scale i Kotlina. JVM je sada temelj mnogih najboljih eksperimenata u razvoju računalnog jezika. Deseci novih jezika mogu se prevesti do Java bajt koda i međusobno povezati kako bi složeni projekti radili zajedno. Mnogi se stogovi na JVM-u mogu nesmetano izvoditi kombinacijom Jave i niza drugih jezika.

Ipak, najveći razlog mora biti puka inercija. Dok pišem, na Dice je naveden 371 posao za COBOL programere. Mnogo je, puno više poslova u kojima je riječ Java. Je li iznenađenje da pametni timovi gledaju svoje ogromne hrpe ostarjelog Java koda i misle da je najjednostavnije rješenje samo dodati bočna vrata koja ispljunuju podatke kao JSON podatkovne strukture? Voilà. Stari kôd nastavlja raditi, ali na tim bočnim vratima djeluje poput moderne mikro usluge.

Sve ove opcije i više osiguravaju da Java i dalje igra snažnu i vitalnu ulogu u revoluciji mikro usluga. I nije iznenađenje da je Java open source zajednica slijedila, stvarajući mnogo novih mogućnosti za Java programere koji svoj Java kôd trebaju naučiti da govori poput mikroservisa.

Evo popisa od 13 opcija otvorenog koda koje programeri Java koriste da bi pronašli rješenja koja svugdje čine temelj arhitektura mikro usluga.

Proljetna čizma

Svijet Java već dugo gradi proljetne aplikacije. Spring Boot je posebna verzija Springa koja postupak čini mnogo lakšim obrađujući mnoge pojedinosti o konfiguraciji za vas. Spring Boot stvoren je za automatizaciju početka proljetnih projekata bilo koje vrste, ne samo mikroservisa. Da bi stvari bile još jednostavnije, nakon što završite s aplikacijom, Spring Boot se miješa na web poslužitelju i ispljuva jednu JAR datoteku koja je gotovo sve što vam treba, osim JVM-a. Zamislite to kao originalni Docker spremnik.

Svu ovu pamet razumiju mnogi ljudi koji imaju zadatak graditi mikroservise, jer sva konfiguracija postaje dosadna kad to trebate učiniti iznova i iznova za svaki od desetak mikroservisa. Ako ga Spring Boot može automatizirati, izbacivanje nekoliko desetaka mikro usluga toliko je lakše.

Mikroservisi razvijeni u Springu slijede istu MVC filozofiju kao i makro web aplikacije koje izrađujemo godinama. Okvir uživa sve duboke veze izgrađene tijekom godina razvoja Java-a, uključujući integraciju sa svim glavnim i manjim spremištima podataka, LDAP poslužiteljima i alatima za razmjenu poruka poput Apache Kafke. Postoje i deseci malih i ne tako malo značajki za održavanje tekuće kolekcije poslužitelja, značajke poput Spring Vault, alata za održavanje tajni, lozinki i vjerodajnica potrebnih poslužiteljima u proizvodnji. Sve ove prednosti pokazuju zašto se Java programeri već dugi niz godina pridružuju.

Eclipse MicroProfile

2016. godine neki su se obožavatelji Java Enterprise zajednice osvrnuli oko sebe i odlučili očistiti svu bit iz Java Enterprise Edition kako bi ljudi mogli graditi jednostavne mikroservise s klasičnim dijelovima. Izbacili su iznenađujući broj knjižnica, ali zadržali su kod za obradu REST zahtjeva, raščlanjivanje JSON-a i upravljanje ubrizgavanjem ovisnosti. Ono što su završili, nazvano Eclipse MicroProfile, bilo je brzo i jednostavno.

Od tada je zajednica MicroProfile sklopila pakt o objavljivanju novih verzija što češće tromjesečno, dodajući novi kôd za održavanje nesmetanog i sigurnog rada mikroservisa. Proces razvoja i struktura koda bit će vrlo poznati svima koji su živjeli u svijetu Java EE, ali beskrajne gnjavaže oko konfiguracije uklonjene su. To je dokaz da stare pse možete naučiti novim trikovima.

Čarobnjak

Kada se Dropwizard pojavio 2011. godine, otvorio je oči programerima Java Enterprisea koliko je stvarno potrebno koda. Dropwizard okvir pružio je vrlo jednostavan model za razvoj s mnogim važnim odlukama donesenim za vas i nastavio je slijediti taj put. Dodate malo poslovne logike i tada vam je gotovo sve ostalo konfigurirano u skladu s konvencijom. Rezultat su tanke JAR datoteke koje korisnici hvale zbog brzog pokretanja.

Najveće ograničenje može biti nedostatak injekcije ovisnosti. Ako želite koristiti ubrizgavanje ovisnosti kako bi vaš kôd ostao čist i labavo povezan, morat ćete sami dodati knjižnice. Za to ne postoji način Dropwizarda, za razliku od proljetnog svijeta. Većina ostalih luksuznih predmeta, međutim, sada je podržana, uključujući evidentiranje, zdravstvene provjere i kod za pružanje elastičnosti. Nećete trebati previše žrtvovati.

WildFly Thorntail

Ljudi iz Red Hat-a izradili su vlastitu verziju MicroProfilea u kompletu s glatkim alatom za konfiguraciju. Izvorno se ime okvira zvalo WildFly Swarm, no tada je preimenovano u Thorntail. Web stranica Thorntail pomaže vam u stvaranju vlastite datoteke gradnje Maven samo određivanjem značajki koje su vam potrebne. Maven se tada brine da sve skupi.

Thorntail će također otkriti glavne komponente koje će vam trebati skeniranjem vašeg koda, ali to možete poništiti datotekom BOM (troškovnik). Kad sve bude pokrenuto, Thorntail će ukloniti dijelove Java Enterprise Edition koji se neće koristiti i stvoriti JAR datoteku koja je mala i spremna za postavljanje jednom naredbom - klizava značajka koja omogućuje projektu Thorntail da je naziva Uber -JAR. To je još jedan pristup slijeđenju tradicije Java Enterprise Edition bez zadržavanja sve teške prtljage.

Helidon

Helidon je izašao tek nekoliko mjeseci otkako su objavljena priopćenja za tisak i prva se obvezala na GitHub repozitorij, ali okvir već privlači pažnju koju podrška Oraclea jamči. Iako je svemir Java ogroman, još uvijek se dosta toga vrti oko Oraclea. 

Helidonovi arhitekti slijedili su iste teme koje se ponavljaju u ostalim projektima ovdje. Iskopite Java Enterprise Edition i zadržite laganu jezgru zasnovanu na servletima koja je zaslužila povjerenje svijeta. U slučaju Helidon, programeri su započeli s Nettyjem i dodali taman toliko koda da izvrše usmjeravanje i rješavanje pogrešaka. Da bi stvari bile zanimljive, prihvatili su dva osnovna modela koda, takozvane SE i MP verzije.

Helidon SE izgledat će vrlo poznat programerima Node.js s dugim lancem poziva funkcija pridruženih točkama. Helidon MP izgledat će poznatiji Java programerima koji koriste JAX-RS. Postoje i neki korisni i cijenjeni alati za provjeru ispravnosti poslužitelja ili praćenje protoka podataka kroz šumu mikroservisa. To su uvjerljivi razlozi za istraživanje potencijala, čak i bez Oracleove podrške.  

Kriket

Još jedan okvir za brzi razvoj API-ja je kriket. Kriket je mali unatoč tome što uključuje nekoliko dodataka poput spremišta podataka ključ / vrijednost kako bi vas spasio od povezivanja baze podataka i planera za kontrolu ponavljajuće obrade u pozadini. Ne postoje druge ovisnosti koje dodaju komplikacije ili zaključavanje, pa je vrlo jednostavno dodati svoj kôd u Cricket i pokrenuti neovisnu mikro uslugu.

Dres

Jedan od standardnih pristupa razvoju web usluge je Java API za RESTful web usluge (aka JAX-RS), općenita specifikacija koja je implementirana u okvir Jerseyja. Pristup uvelike ovisi o korištenju napomena za specificiranje mapiranja puta i detalja povratka. Sve ostalo od raščlanjivanja parametara i pakiranja JSON-a rješava Jersey.

Glavna prednost Jerseya je što implementira JAX-RS standard, značajku koja je dovoljno poželjna da neki programeri kombiniraju Jersey s Spring Bootom kako bi zajedno uživali u oba. 

igra

Jedan od najboljih načina da iskusite snagu svih jezika JVM-a je pomoću Play okvira, gomile Scala koda koji se povezuje s Javom ili bilo kojim drugim JVM jezicima. Temelj je vrlo moderan, s asinkronim modelom bez državljanstva koji ne preopterećuje poslužitelj beskrajnim nitima pokušavajući pratiti korisnike i podatke njihovih sesija. Postoji i niz dodatnih značajki koje se mogu koristiti za dotjerivanje web mjesta poput OpenID-a, provjere valjanosti i podrške za prijenos datoteka.

Baza kodova Play razvija se više od deset godina, pa ćete pronaći i odjeke davno zaboravljenih vremena poput podrške za XML. Igra je i zrela i gipka, kombinacija koja u divljini može biti rijetka.

Šepurenje

Izgradnja API-ja može se činiti jednostavnom poput pisanja nekog koda koji preslušava na portu i daje odgovore, ali programeri Swaggera mole da se razlikuju. Stvorili su čitav jezik specifikacije API-ja pod nazivom OpenAPI koji možete koristiti za navođenje što ćete raditi. To se može činiti dodatnim korakom, ali Swagger tim je također pružio kod koji ovu specifikaciju pretvara u automatizirane testove, dokumentaciju i još mnogo toga.

Jednostavan, gotovo spartanski opis API-ja u konfiguracijskoj datoteci Swagger predan je u Java kod za implementaciju sučelja, dokumentiranje njegovog ponašanja i pružanje skupa alata za testiranje koda izgrađenog ispod njega. Postoji čak i mehanizam za upravljanje API-jem, tako da možete raditi s neopranom masom koja će uskoro lupati na vrata vašeg API-ja i očekivati ​​odgovore.

Swagger je ekosustav za API-je i nije ograničen na Javu. Ako se vaš tim preseli na Node.js ili bilo koji od nekoliko desetaka drugih jezika, postoji modul Swagger Codegen koji čeka pretvorbu vaših OpenAPI specifikacija u implementaciju na tom jeziku.

Restlet

Jedna od većih razlika između različitih okvira je broj veza s drugim uslugama i knjižnicama. Projekt Restlet nudi jednu od većih kolekcija značajki i veza. Već je integriran s bibliotekama kao što je JavaMail, u slučaju da će vaša mikroservis trebati razgovarati POP, IMAP ili SMTP s nekim poslužiteljem pošte i Lucene / Solr, u slučaju da želite izgraditi indekse za pretraživanje velikih dijelova teksta i metapodataka omotanih oko to.

Mogućnosti u Restletu samo nastavljaju jer ovaj stog obično podržava nekoliko različitih opcija za svaki dio. Na primjer, ne trebate koristiti JSON, jer će kôd obrađivati ​​XML, CSV, YAML i još nekoliko formata datoteka. Dobivate nekoliko različitih opcija za predloške za strukturiranje vašeg odgovora. Jedna od urednijih dodatnih značajki je klijent Restlet koji vam omogućuje testiranje API-ja iz preglednika Chrome.

Skvoš

Otklanjanje pogrešaka u mikroservisima često je pravi izazov jer su dijelovi tako labavo povezani i teško je pratiti protok podataka kroz sve slojeve sustava. Squash vam omogućuje postavljanje točaka prekida u vašem kodu koji se izvode na Kubernetesovom klasteru, a zatim primate sve podatke natrag u svoj IDE kao da se kod lokalno izvodi. Squash se također integrira s Node.js i Python runtimes-om u slučaju da vaša zbirka mikrousluga nije samo Java.

Teleprisutnost

Druga mogućnost za otklanjanje pogrešaka je upotreba Telepresence za stvaranje lokalnog proxyja za mikro uslugu na udaljenom Kubernetesovom klasteru. Vaši pozivi za ovu uslugu bit će preusmjereni na lokalnu verziju gdje možete postaviti točke prekida ili učiniti bilo što drugo što možete zamisliti na svom lokalnom računalu.

Zipkin

Zipkin je mehanizam za bilježenje događaja na različitim mikroservisima, a zatim korelaciju događaja tako da se problemi mogu izolirati i proučavati dok se talasaju kroz prikupljanje strojeva. Postoji Zipkin implementacija za Javu, kao i za najmanje šest drugih jezika, tako da se mogu rješavati višejezični sustavi. Neki od najsofisticiranijih okvira poput Proljeća već imaju Zipkin integriran u nekom obliku.