Programiranje

13 Okvir Java za trdne mikro storitve

Dolgo potovanje po Javi, jeziku, ki se je začelo kot lingua franca za škatlo na vrhu televizorja v dneh, ko televizorji niso imeli vgrajenega Rokuja ali Chromecasta. Nato je bila Java lastnica svetovnega spleta z animiranjem brskalnika, preden je nastopil JavaScript in ga odstranil.

Java je na koncu našla tržno nišo na strežniških kmetijah, kjer je bilo nekoč dovolj različnih arhitektur čipov in operacijskih sistemov, da je bilo prepričanje, da je »pisanje enkrat zagnano kjer koli« obljubno. In na teh strežniških kmetijah je živela Java, najljubša v podjetniških IT trgovinah, ki je zasvojena z zanesljivostjo in razvijalci z ljubeznijo do močnega tipkanja.

Medtem sta JavaScript na splošno in zlasti Node.js izzvala Javo na strežniku, saj sta z veliko pretočnostjo in hitrostjo brez niti prevzela velik del prometa v spletu. Node je zajel domišljijo najnovejših programerjev na strani strežnika, saj ne ponuja samo hitrosti in učinkovitosti virov, temveč tudi preprostost kode, ki deluje tako na odjemalcu kot na strežniku.

Kljub naraščanju konkurence pa Java še naprej ne samo preživlja, temveč tudi dosega odličnost. Številne ekipe, ki so zadolžene za razvoj arhitektur mikro storitev, še naprej uporabljajo Javo. Glavni razlog mora biti ta, da je tehnologija že leta preizkušena v bojnih preizkušnjah in razčlenjuje zahteve HTTP. Sun je ustvaril trden virtualni stroj, ki ga Oracle še naprej neguje in podpira.

Drugi razlog mora biti nadaljnji razvoj jezika. Java 8 ponuja trdno podporo za funkcionalne jezike, kot sta Scala in Kotlin. JVM je zdaj osnova za številne najboljše poskuse pri razvoju računalniškega jezika. Na ducate novih jezikov se lahko zberejo do bajtne kode Java in se med seboj povežejo, da zapleteni projekti delujejo skupaj. Mnogo skladov, ki se nemoteno izvajajo na JVM, lahko ustvari mešanica Java in številnih drugih jezikov.

Največji razlog pa mora biti zgolj vztrajnost. Ko pišem, je na Dice naštetih 371 delovnih mest za programerje COBOL. Veliko je veliko več delovnih mest z besedo Java. Ali je presenetljivo, da pametne ekipe gledajo svoje ogromne sklade starajoče se kode Java in mislijo, da je najpreprostejša rešitev samo dodati stranska vrata, ki izpljunejo podatke kot podatkovne strukture JSON? Voilà. Stara koda se še naprej izvaja, vendar deluje kot sodobna mikro storitev na teh stranskih vratih.

Vse te možnosti in še več zagotavljajo, da ima Java še naprej močno in ključno vlogo v revoluciji mikro storitev. In ne preseneča, da ji je sledila odprtokodna skupnost Java, ki ustvarja številne nove možnosti za programerje Java, ki morajo svojo kodo Java naučiti govoriti kot mikrostoritev.

Tu je seznam 13 odprtokodnih možnosti, ki jih razvijalci Java uporabljajo za iskanje rešitev, ki so povsod temelj arhitektur mikro storitev.

Spring Boot

Svet Jave že dolgo gradi spomladanske aplikacije. Spring Boot je posebna različica Springa, ki postopek olajša z obdelavo številnih podrobnosti o konfiguraciji. Spring Boot je bil ustvarjen za avtomatizacijo začetka kakršnih koli pomladnih projektov, ne samo mikro storitev. Če želite poenostaviti stvari, se Spring Boot, ko končate z aplikacijo, vmeša v spletni strežnik in izpusti eno datoteko JAR, ki je skoraj vse, kar potrebujete, razen JVM. Mislite na to kot na originalni Dockerjev vsebnik.

Vso to prebrisanost cenijo mnogi ljudje, ki so zadolženi za gradnjo mikroservisov, ker je vsa konfiguracija moteča, ko jo morate znova in znova narediti za vsako od ducata ali tako mikro storitev. Če jo lahko Spring Boot avtomatizira, je odvajanje več deset mikro storitev toliko lažje.

Mikroservice, razvite s Springom, sledijo isti filozofiji MVC kot makro spletne aplikacije, ki jih gradimo že leta. Okvir uživa vse globoke povezave, ki so nastale v letih razvoja Jave, vključno z integracijo z vsemi večjimi in manjšimi shrambami podatkov, strežniki LDAP in orodji za sporočanje, kot je Apache Kafka. Obstaja tudi na desetine majhnih in ne tako majhnih funkcij za vzdrževanje tekoče zbirke strežnikov, funkcije, kot je Spring Vault, orodje za vzdrževanje skrivnosti, gesel in poverilnic, ki jih strežniki potrebujejo v proizvodnji. Vse te prednosti kažejo, zakaj se programerji Java že vrsto let pridružujejo pasu.

Eclipse MicroProfile

Leta 2016 so se nekateri oboževalci skupnosti Java Enterprise ozrli naokoli in se odločili, da bodo iz Java Enterprise Edition očistili vse ostanke, da bodo lahko ljudje s klasičnimi deli izdelali preproste mikro storitve. Izvrgli so presenetljivo število knjižnic, vendar so obdržali kodo za obdelavo zahtev REST, razčlenjevanje JSON-a in upravljanje vbrizgavanja odvisnosti. Končali so z imenom Eclipse MicroProfile, hitro in preprosto.

Od takrat je skupnost MicroProfile sklenila dogovor o izdaji novih različic tako pogosto, četrtletno, hkrati pa dodala novo kodo za nemoteno in varno delovanje mikro storitev. Postopek razvoja in struktura kode bosta dobro poznala vsakogar, ki je živel v svetu Java EE, vendar so bile neskončne konfiguracijske težave odstranjene. To je dokaz, da lahko stare pse naučite novih trikov.

Dropwizard

Ko se je Dropwizard pojavil leta 2011, je razvijalcem Java Enterprise odprl oči, kako malo kode je v resnici potrebno. Okvir Dropwizard je ponudil zelo preprost model za razvoj z mnogimi pomembnimi odločitvami, sprejetimi za vas, in še naprej sledi tej poti. Dodate nekaj poslovne logike in potem je skoraj vse ostalo nastavljeno za vas v skladu s konvencijo. Rezultat so tanke datoteke JAR, ki jih uporabniki pohvalijo za hiter zagon.

Največja omejitev je lahko pomanjkanje injekcije odvisnosti. Če želite uporabiti vbrizganje odvisnosti, da bo koda čista in ohlapno povezana, boste morali knjižnice dodati sami. Za razliko od spomladanskega sveta tega ne more storiti Dropwizard. Vendar je zdaj podprta večina drugih luksuznih predmetov, vključno z beleženjem, zdravstvenimi pregledi in kodo za zagotavljanje odpornosti. Ne bo vam treba preveč žrtvovati.

WildFly Thorntail

Ljudje iz Red Hat-a so ustvarili svojo različico MicroProfile skupaj z orodjem za gladko konfiguracijo. Prvotno se je ogrodje imenovalo WildFly Swarm, nato pa se je preimenovalo v Thorntail. Spletno mesto Thorntail vam pomaga ustvariti lastno datoteko za gradnjo Maven, tako da določite funkcije, ki jih potrebujete. Nato Maven poskrbi za sestavljanje vsega.

Thorntail bo s skeniranjem vaše kode zaznal tudi glavne komponente, ki jih potrebujete, vendar jih lahko preglasite z datoteko BOM (spisek gradiva). Ko se bo vse zagnalo, bo Thorntail odstranil dele Java Enterprise Edition, ki se ne bodo uporabljali, in z enim ukazom ustvaril datoteko JAR, ki je majhna in pripravljena za razmestitev - gladka funkcija, ki projektu Thorntail omogoča, da jo pokliče Uber -JAR. Gre za drug pristop k sledenju tradiciji Java Enterprise Edition, ne da bi obdržali vso težko prtljago.

Helidon

Helidon je od izjav za javnost in prve zaveze k skladišču GitHub odsoten le nekaj mesecev, vendar ogrodje že pritegne tisto pozornost, ki jo zagotavlja Oraclova podpora. Medtem ko je vesolje Java ogromno, se še vedno veliko vrti okoli Oracle-a.

Helidonovi arhitekti so sledili mnogim istim temam, ki se ponavljajo v drugih projektih tukaj. Izpustite Java Enterprise Edition in obdržite lahko, jedro na osnovi servletov, ki je zaslužilo zaupanje sveta. V primeru Helidona so razvijalci začeli z Nettyjem in dodali ravno toliko kode, da so lahko usmerjali in obravnavali napake. Da bi bile stvari zanimive, so sprejeli dva osnovna modela kode, tako imenovani različici SE in MP.

Helidon SE se bo programerjem Node.js zdel zelo znan z dolgimi verigami funkcijskih klicev, ki so združene s pikami. Helidon MP bo programerjem Java, ki uporabljajo JAX-RS, bolj znan. Obstaja tudi nekaj uporabnih in cenjenih orodij za preverjanje stanja strežnikov ali sledenje pretoku podatkov skozi gozd mikro storitev. To so prepričljivi razlogi za raziskovanje potenciala, tudi brez Oraclove podpore.

Kriket

Še en okvir za hiter razvoj API je Cricket. Kriket je majhen, kljub temu da vključuje več dodatkov, kot je shramba podatkov ključ-vrednost, da vam prihrani povezavo z bazo podatkov in načrtovalnikom za nadzor ponavljajoče se obdelave v ozadju. Ni drugih odvisnosti, ki bi dodale zaplete ali zaklepanje, zato je zelo enostavno dodati kodo v Cricket in zagnati neodvisno mikrostoritev.

Jersey

Eden od standardnih pristopov k razvoju spletne storitve je Java API za spletne storitve RESTful (aka JAX-RS), splošna specifikacija, ki je bila uporabljena v okviru Jerseyja. Pristop je močno odvisen od uporabe pripisov za določanje preslikave poti in podrobnosti o vrnitvi. Vse ostalo od razčlenjevanja parametrov in pakiranja JSON-ja ureja Jersey.

Glavna prednost Jerseyja je, da izvaja standard JAX-RS, funkcijo, ki je dovolj zaželena, da nekateri razvijalci Jersey kombinirajo s Spring Bootom, da lahko uživajo v obeh.

Igraj

Eden najboljših načinov, kako izkusiti medjezikovno moč JVM, je z ogrodjem Play, kupom Scala kode, ki se poveže z Javo ali katerim koli drugim jezikom JVM. Temelj je zelo sodoben, z asinhronim modelom brez državljanstva, ki strežnika ne preobremeni z neskončnimi nitmi, ki poskušajo slediti uporabnikom in njihovim podatkom o sejah. Obstajajo tudi številne dodatne funkcije, ki jih je mogoče uporabiti za izboljšanje spletnega mesta, kot so OpenID, preverjanje veljavnosti in podpora za nalaganje datotek.

Koda baze Play se razvija že več kot desetletje, zato boste našli tudi odmeve davno pozabljenih časov, kot je podpora za XML. Igra je zrela in gibčna, kombinacija, ki je v naravi redka.

Swagger

Izdelava API-ja se morda zdi tako preprosta, kot je pisanje kode, ki posluša vrata in prinaša odgovore, vendar se razvijalci Swaggerja strinjajo, da se ne bodo strinjali. Ustvarili so celoten jezik specifikacije API, imenovan OpenAPI, s katerim lahko določite, kaj boste počeli. To se morda zdi dodaten korak, vendar je skupina Swagger zagotovila tudi kodo, ki to specifikacijo spremeni v avtomatizirane teste, dokumentacijo in še več.

Preprost, skoraj špartanski opis API-ja v konfiguracijski datoteki Swagger je predan v kodo Java za izvajanje vmesnika, dokumentiranje njegovega obnašanja in zagotavlja nabor orodij za testiranje kode, ki je vgrajena pod njim. Obstaja celo mehanizem za upravljanje API-jev, tako da lahko sodelujete z neopranimi množicami, ki bodo kmalu trkale na vrata vašega API-ja in pričakovale odgovore.

Swagger je ekosistem za API-je in ni omejen na Javo. Če se vaša ekipa premakne na Node.js ali katerega koli od več deset drugih jezikov, obstaja modul Swagger Codegen, ki čaka na pretvorbo specifikacij OpenAPI v izvedbo v tem jeziku.

Restlet

Ena večjih razlik med različnimi okviri je število povezav z drugimi storitvami in knjižnicami. Projekt Restlet ponuja eno večjih zbirk funkcij in povezav. Že je integriran s knjižnicami, kot je JavaMail, v primeru, da bo morala vaša mikro služba govoriti s POP, IMAP ali SMTP s kakšnim poštnim strežnikom in Lucene / Solr, če želite zgraditi iskalne indekse velikih kosov besedila in metapodatkov, ovitih okoli to.

Možnosti v Restletu kar nadaljujejo, ker ta kup na splošno podpira več različnih možnosti za vsak del. Na primer, vam ni treba uporabljati JSON, ker bo koda obravnavala XML, CSV, YAML in še nekaj drugih datotek. Dobite tudi več različnih možnosti za predloge za strukturiranje vašega odziva. Ena od boljših dodatnih funkcij je odjemalec Restlet, ki vam omogoča preskušanje API-jev iz brskalnika Chrome.

Skvoš

Odpravljanje napak mikrostoritev je pogosto pravi izziv, ker so deli tako ohlapno povezani in je težko slediti pretoku podatkov skozi vse plasti sistema. Squash vam omogoča, da v kodi nastavite mejne točke, ki se izvajajo v gruči Kubernetes, in nato prejmete vse podatke nazaj v IDE, kot da bi se koda izvajala lokalno. Squash se integrira tudi z izvajanjem Node.js in Python, če vaša zbirka mikro storitev ni samo Java.

Teleprisotnost

Druga možnost za odpravljanje napak je uporaba Telepresence za ustvarjanje lokalnega strežnika proxy za mikro storitev v oddaljeni gruči Kubernetes. Vaši klici za to storitev bodo preusmerjeni na lokalno različico, kjer lahko nastavite mejne točke ali naredite kar koli drugega, kar si zamislite na svojem lokalnem računalniku.

Zipkin

Zipkin je mehanizem za beleženje dogodkov na različnih mikro storitvah in nato korelacijo dogodkov, tako da lahko težave ločimo in preučujemo, ko se valovijo skozi zbiranje strojev. Obstaja izvedba Zipkin za Javo in vsaj še šest drugih jezikov, tako da se je mogoče spoprijeti z večjezičnimi sistemi. Nekateri najbolj dovršeni okviri, kot je Spring, že vsebujejo Zipkin v neki obliki.

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