Ohjelmointi

13 Java-kehystä vankalle mikropalvelulle

Se on ollut pitkä matka Java-kielelle, joka alkoi television yläosassa olevan laatikon kielikielenä päivinä, jolloin televisioissa ei ollut sisäänrakennettua Rokua tai Chromecastia. Sitten Java aikoi omistaa World Wide Webin animoimalla selaimen, ennen kuin JavaScript tuli esiin ja mutkaisi sen tieltä.

Java päätyi löytämään kapean palvelintiloilta, joissa kerran oli riittävästi erilaisia ​​siruarkkitehtuureja ja käyttöjärjestelmiä, jotta "kirjoita kerran suoritetaan missä tahansa lupaavat" oli pakollinen. Ja näissä palvelintiloissa Java on elänyt, luotettavuudesta riippuvaisten yritys-IT-kauppojen suosikki ja kehittäjät, jotka rakastavat vahvaa kirjoittamista.

Sillä välin Javascript yleensä ja erityisesti Node.js ovat haastaneet Java palvelimelle käyttämällä suurta läpäisykykyä ja langattomaa nopeutta ottaakseen valtavan osan liikenteestä verkossa. Node on vanginnut uusimpien palvelinpuolen ohjelmoijien mielikuvituksen tarjoamalla nopeuden ja resurssitehokkuuden lisäksi myös yksinkertaisen koodin, joka toimii sekä asiakkaalla että palvelimella.

Kilpailun lisääntymisestä huolimatta Java ei pelkästään jatka pelkästään selviytymistä vaan myös menestymistä. Monet mikropalveluarkkitehtuurien kehittämisestä vastaavista ryhmistä käyttävät edelleen Java-ohjelmaa. Suurimman syyn on oltava, koska tekniikkaa testataan vuosien ajan taistelussa etulinjoilla jäsennettäessä HTTP-pyyntöjä. Sun loi vankan virtuaalikoneen, ja Oracle jatkaa sen vaalimista ja tukemista.

Toinen syy on oltava kielen jatkuva kehitys. Java 8 tarjoaa vankan tuen toiminnallisille kielille, kuten Scala ja Kotlin. JVM on nyt perusta monille parhaille kokeille tietokonekielen kehittämisessä. Kymmenet uudet kielet voivat koota alas Java-tavukoodin ja muodostaa yhteyden toisiinsa saadakseen monimutkaiset projektit toimimaan yhdessä. Monet JVM: llä sujuvasti toimivista pinoista voidaan rakentaa Java- ja useiden muiden kielten yhdistelmällä.

Suurimman syyn on kuitenkin oltava pelkkä hitaus. Kun kirjoitan, 371 työpaikkaa COBOL-ohjelmoijille on lueteltu Noppa. On paljon, paljon enemmän töitä, joissa on sana Java. Onko mikään yllätys, että älykkäät tiimit katsovat valtavia ikääntyviä Java-koodipinojaan ja ajattelevat, että yksinkertaisin ratkaisu on vain lisätä sivuovi, joka sylkii tiedot JSON-tietorakenteiksi? Voilà. Vanha koodi jatkuu, mutta se toimii kuin moderni mikropalvelu näissä sivuovissa.

Kaikki nämä ja muut vaihtoehdot varmistavat, että Java: lla on edelleen vahva ja tärkeä rooli mikropalvelujen vallankumouksessa. Ei ole mikään yllätys, että Java-avoimen lähdekoodin yhteisö on seurannut mukana luomalla monia uusia vaihtoehtoja Java-ohjelmoijille, joiden on opetettava Java-koodinsa puhumaan kuin mikroservi.

Tässä on luettelo 13 avoimen lähdekoodin vaihtoehdosta, joita Java-kehittäjät käyttävät saadakseen ratkaisuja, jotka muodostavat perustan mikropalveluarkkitehtuureille kaikkialla.

Kevään saapas

Java-maailma on rakentanut kevään sovelluksia jo pitkään. Spring Boot on erityinen Spring-versio, joka helpottaa prosessia käsittelemällä monia kokoonpanotietoja puolestasi. Spring Boot luotiin automatisoimaan kaikenlaiset kevätprojektit, ei pelkästään mikropalvelut. Jotta asiat olisivat vielä yksinkertaisempia, kun olet valmis sovelluksen kanssa, Spring Boot sekoittaa verkkopalvelimen ja sylkii yhden JAR-tiedoston, joka on melkein kaikki mitä tarvitset paitsi JVM. Ajattele sitä alkuperäisenä Docker-säiliönä.

Monet näistä älykkyyksistä arvostavat monia ihmisiä, joiden tehtävänä on rakentaa mikropalveluja, koska koko kokoonpano tulee olemaan ärsyttävää, kun joudut tekemään sitä uudestaan ​​ja uudestaan ​​jokaiselle kymmenkunnalle mikropalvelulle. Jos Spring Boot pystyy automatisoimaan sen, useiden kymmenien mikropalvelujen poistaminen on paljon helpompaa.

Springin kanssa kehitetyt mikropalvelut noudattavat samaa MVC-filosofiaa kuin makroverkkosovellukset, joita olemme rakentaneet jo vuosia. Kehys nauttii kaikista vuosien Java-kehityksestä rakennettuista syvistä yhteyksistä, mukaan lukien integrointi kaikkiin suuriin ja pieniin tietovarastoihin, LDAP-palvelimiin ja viestityökaluihin, kuten Apache Kafka. On myös kymmeniä pieniä ja ei-niin pieniä ominaisuuksia käynnissä olevan palvelinkokoelman ylläpitämiseksi, kuten Spring Vault, työkalu palvelinten tarvitsemien salaisuuksien, salasanojen ja tunnistetietojen ylläpitoon tuotannossa. Kaikki nämä edut osoittavat, miksi Java-ohjelmoijat ovat liittyneet kaistalle vuosien ajan.

Eclipse MicroProfile

Vuonna 2016 jotkut Java Enterprise -yhteisön faneista katsoivat ympärilleen ja päättivät puhdistaa kaiken Java Enterprise Editionin epäonnistumisen, jotta ihmiset voisivat rakentaa yksinkertaisia ​​mikropalveluja klassisilla osilla. He heittivät yllättävän määrän kirjastoja, mutta säilyttivät koodin REST-pyyntöjen käsittelemiseksi, JSON-jäsenyyden jäsentämiseksi ja riippuvuusinjektioiden hallitsemiseksi. Mitä he päätyivät, nimeltään Eclipse MicroProfile, oli nopeaa ja yksinkertaista.

Siitä lähtien MicroProfile-yhteisö teki sopimuksen uusien versioiden julkaisemisesta niin usein kuin neljännesvuosittain ja lisäsi uuden koodin pitääkseen mikropalvelut sujuvasti ja turvallisesti. Kehitysprosessi ja koodirakenne ovat hyvin tuttuja kaikille Java EE -maailmassa asuneille, mutta loputtomat kokoonpanohäiriöt on hiottu pois. Se on todiste siitä, että voit opettaa vanhoille koirille uusia temppuja.

Dropwizard

Kun Dropwizard ilmestyi vuonna 2011, se avasi Java Enterprise -kehittäjien silmät kuinka vähän koodia todella tarvittiin. Dropwizard-kehys toimitti hyvin yksinkertaisen mallin kehitykselle monien tärkeiden päätösten kanssa puolestasi, ja se on edelleen seurannut tätä polkua. Lisäät jonkin verran liiketoimintalogiikkaa ja sitten kaikki muu määritetään sinulle yleissopimuksen mukaisesti. Tuloksena ovat ohuet JAR-tiedostot, joita käyttäjät ylistävät käynnistymisestä nopeasti.

Suurin rajoitus voi olla riippuvuusinjektion puute. Jos haluat käyttää riippuvuusinjektiota pitämään koodisi puhtaana ja löyhästi kytkettynä, sinun on lisättävä kirjastot itse. Toisin kuin Spring-maailmassa, tähän ei ole Dropwizard-tapaa. Suurinta osaa muista luksustuotteista tuetaan kuitenkin nyt, kuten puunkorjuuta, terveystarkastuksia ja joustavuutta tarjoavaa koodia. Sinun ei tarvitse tehdä liikaa uhrauksia.

WildFly Thorntail

Red Hatin ihmiset rakensivat oman versionsa MicroProfilesta, joka oli täydellinen tyylikkäällä määritystyökalulla. Kehys oli alun perin nimeltään WildFly Swarm, mutta sitten se nimettiin uudelleen Thorntailiksi. Thorntail-verkkosivusto auttaa sinua luomaan oman Maven-rakennustiedoston vain määrittämällä tarvitsemasi ominaisuudet. Sitten Maven huolehtii kaiken kokoamisesta.

Thorntail tunnistaa myös tärkeimmät komponentit, joita tarvitset skannaamalla koodisi, mutta voit ohittaa tämän BOM (bill of material) -tiedostolla. Kun kaikki on käynnissä, Thorntail poistaa Java Enterprise Editionin osat, joita ei käytetä, ja luo JAR-tiedoston, joka on pieni ja valmis käyttöönottoon yhdellä komennolla - tyylikäs ominaisuus, jonka avulla Thorntail-projekti voi kutsua sitä Uberiksi -JAR. Se on toinen tapa seurata Java Enterprise Editionin perinteitä pitämättä koko raskasta matkatavaraa.

Helidon

Helidon on ollut poissa vasta muutama kuukausi lehdistötiedotteiden ja ensimmäisen sitoutumisen jälkeen GitHub-arkistoon, mutta kehys on jo herättänyt sellaista huomiota, jonka Oraclen tuki takaa. Vaikka Java-maailmankaikkeus on valtava, paljon sitä kiertää edelleen Oraclen ympärillä.

Helidonin arkkitehdit seurasivat monia samoja teemoja, joita toistetaan muissa täällä olevissa projekteissa. Ota Java Enterprise Edition -turnaus ja pidä kevyt, servlet-pohjainen ydin, joka on ansainnut maailman luottamuksen. Helidonin tapauksessa kehittäjät aloittivat Nettyn ​​ja lisäsivät vain tarpeeksi koodia reitityksen ja virheiden käsittelyyn. Tehdäkseen asiat mielenkiintoisiksi, he omaksuivat koodille kaksi perusmallia, niin kutsutut SE- ja MP-versiot.

Helidon SE näyttää hyvin tutulta Node.js-ohjelmoijille, kun toimintokutsujen ketjut on yhdistetty pisteisiin. Helidon MP näyttää tutummalta Java-ohjelmoijilta, jotka käyttävät JAX-RS: ää. On myös joitain hyödyllisiä ja arvostettuja työkaluja palvelimien kunnon tarkistamiseen tai tietovirran jäljittämiseen mikropalvelumetsän läpi. Nämä ovat pakottavia syitä tutkia mahdollisuuksia, jopa ilman Oraclen tukea.

Kriketti

Vielä yksi kehys nopeaan API-kehitykseen on Cricket. Kriketti on pieni huolimatta siitä, että siinä on useita lisäominaisuuksia, kuten avainarvoinen tietovarasto, joka säästää sinua yhdistämästä tietokantaa ja ajoitinta toistuvan taustankäsittelyn hallitsemiseksi. Ei ole muita riippuvuuksia, jotka lisäävät komplikaatioita tai lukituksia, joten on melko helppo lisätä koodi Cricketiin ja käynnistää itsenäinen mikropalvelu.

Jersey

Yksi verkkopalvelun kehittämisen tavanomaisista lähestymistavoista on Java API for RESTful Web Services (alias JAX-RS), yleinen spesifikaatio, joka on toteutettu Jerseyn kehyksessä. Lähestymistapa riippuu suuresti siitä, miten merkintöjen avulla määritetään polun kartoitus ja palautustiedot. Jersey hoitaa kaiken muun parametrien jäsentämisestä ja JSON: n pakkaamisesta.

Jerseyn tärkein etu on, että se toteuttaa JAX-RS-standardin, joka on tarpeeksi toivottava, että jotkut kehittäjät yhdistävät Jerseyn Spring Bootiin nauttimaan molemmista yhdessä.

pelata

Yksi parhaista tavoista kokea JVM: n kielen välinen teho on Play-kehys, kasa Scala-koodia, joka linkittyy Java- tai muihin JVM-kieliin. Säätiö on hyvin moderni, ja siinä on asynkroninen, valtioton malli, joka ei ylikuormita palvelinta loputtomilla säikeillä, jotka yrittävät seurata käyttäjiä ja heidän istuntotietojaan. On myös useita lisäominaisuuksia, joita voidaan käyttää verkkosivuston muotoilemiseen, kuten OpenID, validointi ja tiedostojen lataustuki.

Play-koodikanta on kehittynyt yli vuosikymmenen ajan, joten löydät myös kaikuja unohdetuista ajoista, kuten XML-tuki. Peli on sekä kypsä että taipuisa, yhdistelmä, joka voi olla harvinaista luonnossa.

Rehvastella

API: n luominen saattaa tuntua yhtä yksinkertaiselta kuin kirjoittaa jotain porttia kuuntelevaa ja vastauksia tuottavaa koodia, mutta Swaggerin kehittäjät pyytävät eroa. He ovat luoneet kokonaisen OpenAPI-nimisen sovellusliittymän määrityskielen, jonka avulla voit ilmaista, mitä sovellusliittymäsi tekee. Tämä saattaa tuntua ylimääräiseltä vaiheelta, mutta Swagger-tiimi on myös toimittanut koodin, joka muuttaa tämän määrityksen automaattisiksi testeiksi, dokumentaatioksi ja muuksi.

Swagger-määritystiedostossa oleva yksinkertainen, melkein spartaninen sovellusliittymän kuvaus on kehrätty Java-koodiksi käyttöliittymän toteuttamiseksi, sen käyttäytymisen dokumentoimiseksi ja joukon työkaluja sen alle rakennetun koodin testaamiseen. API: n hallinnassa on jopa mekanismi, joten voit työskennellä pesemättömien joukkojen kanssa, jotka pian hakkaavat API: n ovea ja odottavat vastauksia.

Swagger on sovellusliittymien ekosysteemi, eikä se rajoitu Javaan. Jos joukkueesi siirtyy Node.js: lle tai muulle kymmenelle muulle kielelle, on Swagger Codegen -moduuli, joka odottaa muuntaa OpenAPI-spesifikaation kyseisellä kielellä toteutettavaksi.

Restlet

Yksi suurimmista eroista eri kehysten välillä on yhteyksien määrä muihin palveluihin ja kirjastoihin. Restlet-projekti tarjoaa yhden suurimmista ominaisuuksien ja yhteyksien kokoelmista. Se on jo integroitu kirjastojen, kuten JavaMailin kanssa, mikäli mikropalvelusi täytyy puhua POP, IMAP tai SMTP jollekin sähköpostipalvelimelle ja Lucene / Solrille, jos haluat rakentaa haettavissa olevia indeksejä suurista tekstipaloista ja ympärille kiedotuista metatiedoista se.

Restletin mahdollisuudet vain jatkuvat, koska tämä pino tukee yleensä useita eri vaihtoehtoja jokaiselle osalle. Sinun ei tarvitse käyttää esimerkiksi JSONia, koska koodi käsittelee XML-, CSV-, YAML- ja muutamia muita tiedostomuotoja. Saat useita erilaisia ​​vaihtoehtoja malleille vastauksen jäsentämiseksi. Yksi mukavimmista lisäominaisuuksista on Restlet-asiakasohjelma, jonka avulla voit testata sovellusliittymiäsi Chrome-selaimella.

Squash

Mikropalvelujen virheenkorjaus on usein todellinen haaste, koska osat on kytketty niin löyhästi ja on vaikea seurata datan kulkua järjestelmän kaikkien kerrosten läpi. Squash antaa sinulle mahdollisuuden asettaa katkaisupisteitä Kubernetes-klusterissa käynnissä olevaan koodiin ja vastaanottaa sitten kaikki tiedot takaisin IDE: hen ikään kuin ne olisivat paikallisesti käynnissä olevia koodeja. Squash integroituu myös Node.js- ja Python-ajonaikaisuuksiin siinä tapauksessa, että mikropalvelujen kokoelmasi ei ole vain Java.

Telepresence

Toinen vaihtoehto virheenkorjaukseen on käyttää Telepresence-palvelua paikallisen välityspalvelimen luomiseen kaukoputken mikropalvelulle kaukoputkessa. Tämän palvelun puhelusi ohjataan paikalliseen versioon, jossa voit asettaa katkaisupisteitä tai tehdä mitä tahansa muuta mitä voit kuvitella paikallisella koneellasi.

Zipkin

Zipkin on mekanismi tapahtumien kirjaamiseen erilaisiin mikropalveluihin ja sitten korreloivaan tapahtumiin siten, että ongelmat voidaan eristää ja tutkia, kun ne aaltoilevat koneiden kokoelman läpi. Java-ohjelmassa on Zipkin-toteutus sekä vähintään kuusi muuta kieltä, jotta monikielisiin järjestelmiin voidaan puuttua. Joissakin kehittyneimmissä kehyksissä, kuten Spring, Zipkin on jo integroitu jossakin muodossa.