Programmering

13 Java-rammer til bundsolide mikrotjenester

Det har været en lang tur for Java, et sprog, der begyndte som lingua franca for kassen oven på fjernsynsapparatet i de dage, hvor tv ikke kom med indbygget Roku eller Chromecast. Derefter skulle Java eje World Wide Web ved at animere browseren, før JavaScript kom og albuer det ud af vejen.

Java endte med at finde en niche i serverfarmene, hvor der engang var nok forskellige chiparkitekturer og operativsystemer til at gøre "skriv en gang køre hvor som helst løfte" overbevisende. Og i disse serverbedrifter har Java levet, en favorit blandt virksomhedens it-butikker, der er afhængige af pålidelighed og udviklere med en kærlighed til stærk skrivning.

I mellemtiden har JavaScript generelt og Node.js i særdeleshed udfordret Java på serveren ved hjælp af deres høje kapacitet og trådfri hastighed til at overtage en enorm del af trafikken på nettet. Node har fanget fantasien hos de nyeste server-programmører ved at tilbyde ikke kun hastighed og ressourceeffektivitet, men også enkelheden i kode, der kører på både klienten og serveren.

På trods af stigningen i konkurrencen fortsætter Java ikke kun med at overleve, men at udmærke sig. Mange af de hold, der har til opgave at udvikle mikroservicearkitekturer, fortsætter med at bruge Java. En væsentlig årsag skal være, fordi teknologien er kamptestet i år på frontlinjen, der analyserer HTTP-anmodninger. Sun skabte en bunnsolid virtuel maskine, og Oracle fortsætter med at pleje og støtte den.

En anden grund skal være den fortsatte udvikling af sproget. Java 8 tilbyder solid support til de funktionelle sprog som Scala og Kotlin. JVM er nu et fundament for mange af de bedste eksperimenter inden for udvikling af computersprog. Snesevis af nye sprog kan kompilere ned til Java-byte-kode og forbinde hinanden for at få komplekse projekter til at arbejde sammen. Mange af de stakke, der kører problemfrit på en JVM, kan bygges af en blanding af Java og en række andre sprog.

Den største grund skal dog være ren inerti. Mens jeg skriver, vises 371 job til COBOL-programmører på terninger. Der er mange, mange flere job med ordet Java i. Er det nogen overraskelse, at smarte hold ser på deres enorme stakke af aldrende Java-kode og tænker, at den enkleste løsning bare er at tilføje en sidedør, der spytter dataene ud som JSON-datastrukturer? Voilà. Den gamle kode fortsætter, men den fungerer som en moderne mikroservice ved disse sidedøre.

Alle disse muligheder og mere sikrer, at Java fortsat spiller en stærk og vital rolle i mikroservicerevolutionen. Og det er ikke overraskende, at Java open source-samfundet har fulgt med og skabt mange nye muligheder for Java-programmører, der har brug for at lære deres Java-kode at tale som en mikroservice.

Her er en liste over 13 open source-muligheder, som Java-udviklere bruger til at vise løsninger, der danner grundlaget for mikroservicearkitekturer overalt.

Spring Boot

Java-verdenen har bygget forårsprogrammer i lang tid. Spring Boot er en bestemt version af Spring, der gør processen meget lettere ved at håndtere mange af konfigurationsoplysningerne for dig. Spring Boot blev oprettet for at automatisere starten af ​​Spring-projekter af enhver art, ikke kun mikroservices. For at gøre tingene endnu enklere, når du er færdig med applikationen, blandes Spring Boot i en webserver og spytter en enkelt JAR-fil, der stort set er alt hvad du behøver undtagen JVM. Tænk på det som den originale Docker-container.

Al denne kløgtighed værdsættes af mange af de mennesker, der har til opgave at opbygge mikrotjenester, fordi hele konfigurationen bliver irriterende, når du skal gøre det igen og igen for hver af de dusin mikrotjenester. Hvis Spring Boot kan automatisere det, er det meget nemmere at knuse flere dusin mikrotjenester.

Mikrotjenesterne udviklet med Spring følger den samme MVC-filosofi som de makro-webapplikationer, vi har bygget i årevis. Rammen nyder alle de dybe forbindelser, der er opbygget gennem mange års Java-udvikling, herunder integration med alle større og mindre datalagre, LDAP-servere og messaging-værktøjer som Apache Kafka. Der er også snesevis af små og ikke så lidt funktioner til vedligeholdelse af en kørende samling af servere, funktioner som Spring Vault, et værktøj til at vedligeholde de hemmeligheder, adgangskoder og legitimationsoplysninger, som serverne har brug for i produktionen. Alle disse fordele viser, hvorfor Java-programmører har tilsluttet sig vognen i mange år.

Eclipse MicroProfile

I 2016 kiggede nogle af fansen af ​​Java Enterprise-samfundet sig omkring og besluttede at rense alt cruft fra Java Enterprise Edition, så folk kunne bygge enkle mikrotjenester med de klassiske dele. De kastede et overraskende antal biblioteker ud, men holdt kode til behandling af REST-anmodninger, parsing af JSON og styring af afhængighedsinjektion. Hvad de endte med, kaldet Eclipse MicroProfile, var hurtig og enkel.

Siden da lavede MicroProfile-fællesskabet en pagt om at frigive nye versioner så ofte som kvartalsvis, mens de tilføjede ny kode for at holde mikrotjenesterne glat og sikkert. Udviklingsprocessen og kodestrukturen vil være meget velkendt for alle, der har boet i Java EE-verdenen, men de uendelige konfigurationsbesvær er poleret væk. Det er et bevis på, at du kan lære gamle hunde nye tricks.

Dropwizard

Da Dropwizard dukkede op i 2011, åbnede det Java Enterprise-udvikleres øjne for, hvor lidt kode der virkelig var behov for. Dropwizard-rammen leverede en meget enkel model til udvikling med mange af de vigtige beslutninger, der blev taget for dig, og den er fortsat med at følge denne vej. Du tilføjer nogle forretningslogik, og så konfigureres stort set alt andet for dig i henhold til konventionen. Resultatet er slanke JAR-filer, som brugerne roser for at starte hurtigt op.

Den største begrænsning kan være manglen på afhængighedsinjektion. Hvis du vil bruge afhængighedsinjektion for at holde din kode ren og løst koblet, skal du selv tilføje bibliotekerne. Der er ingen Dropwizard-måde at gøre dette på, i modsætning til i forårets verden. De fleste af de andre luksusartikler understøttes nu, inklusive logning, sundhedstjek og modstandsdygtighedskode. Du behøver ikke at bringe for mange ofre.

WildFly Thorntail

Folkene på Red Hat byggede deres egen version af MicroProfile komplet med et glat konfigurationsværktøj. Rammen blev oprindeligt kaldt WildFly Swarm, men blev derefter omdøbt til Thorntail. Thorntail-webstedet hjælper dig med at oprette din egen Maven build-fil bare ved at specificere de funktioner, du har brug for. Maven tager sig derefter af at samle alt.

Thorntail registrerer også de vigtigste komponenter, du har brug for, ved at scanne din kode, men du kan tilsidesætte dette med en styklistefil (stykliste) -fil. Når det hele kører, fjerner Thorntail de dele af Java Enterprise Edition, der ikke bruges, og opretter en JAR-fil, der er lille og klar til at blive implementeret med en kommando - en glat funktion, der gør det muligt for Thorntail-projektet at kalde det en Uber -KRUKKE. Det er en anden tilgang til at følge traditionen med Java Enterprise Edition uden at beholde al den tunge bagage.

Helidon

Helidon har kun været ude i et par måneder siden pressemeddelelserne og den første forpligtelse til GitHub-arkivet, men rammen tiltrækker allerede den slags opmærksomhed, som support fra Oracle garanterer. Mens Java-universet er enormt, drejer masser af det stadig sig omkring Oracle.

Helidons arkitekter fulgte mange af de samme temaer, som gentages i de andre projekter her. Rip Java Enterprise Edition cruft ud, og bevar den lette, servletbaserede kerne, der har fortjent verdens tillid. I Helidons tilfælde startede udviklerne med Netty og tilføjede lige nok kode til at udføre routing og fejlhåndtering. For at gøre tingene interessante omfavnede de to grundlæggende modeller til koden, de såkaldte SE- og MP-versioner.

Helidon SE ser meget velkendt ud for Node.js-programmører med de lange kæder af funktionsopkald forbundet med perioder. Helidon MP vil se mere velkendt ud for Java-programmørerne, der bruger JAX-RS. Der er også nogle nyttige og meget værdsatte værktøjer til at kontrollere serverenes sundhed eller spore datastrømmen gennem en skov af mikrotjenester. Disse er overbevisende grunde til at udforske potentialet, selv uden Oracles støtte.

Cricket

Endnu en anden ramme for hurtig API-udvikling er Cricket. Cricket er lille på trods af at det inkluderer flere ekstramateriale som en nøgleværdidatalager for at redde dig fra at forbinde en database og en planlægning for at kontrollere gentagen baggrundsbehandling. Der er ingen andre afhængigheder, der tilføjer komplikationer eller låsning, så det er ret nemt at tilføje din kode til Cricket og starte en uafhængig mikroservice.

Jersey

En af standardtilgange til udvikling af en webservice er Java API til RESTful Web Services (aka JAX-RS), en generel spec, der er implementeret i Jersey-rammen. Metoden afhænger stærkt af, om du bruger annoteringerne til at specificere stiftilknytningen og returdetaljerne. Alt andet fra parsing af parametrene og pakning af JSON håndteres af Jersey.

Den største fordel ved Jersey er, at den implementerer JAX-RS-standarden, en funktion der er ønskelig nok til, at nogle udviklere kombinerer Jersey med Spring Boot til at nyde begge sammen.

Spil

En af de bedste måder at opleve krydssproget på JVM er med Play-rammen, en bunke Scala-kode, der forbinder Java eller et hvilket som helst af de andre JVM-sprog. Grundlaget er meget moderne med en asynkron, statsløs model, der ikke overbelaster serveren med endeløse tråde, der prøver at holde styr på brugerne og deres sessionsdata. Der er også en række ekstra funktioner, der kan bruges til at uddybe et websted som OpenID, validering og fil upload support.

Play-kodebasen har udviklet sig i mere end et årti, så du finder også ekkoer fra længe glemte tider som support til XML. Leg er både modent og smidigt, en kombination der kan være sjælden i naturen.

Swagger

Opbygning af et API kan virke så simpelt som at skrive en kode, der lytter til en port og leverer svar, men udviklerne af Swagger beder om at være anderledes. De har oprettet et helt API-specifikationssprog kaldet OpenAPI, som du kan bruge til at stave, hvad du API vil gøre. Dette kan virke som et ekstra trin, men Swagger-teamet har også leveret kode, der gør denne specifikation til automatiserede tests, dokumentation og mere.

Den enkle, næsten spartanske beskrivelse af en API i Swagger-konfigurationsfilen spindes i Java-kode til implementering af grænsefladen, dokumentation af, hvordan den opfører sig, og tilvejebringelse af et sæt værktøjer til test af koden bygget under den. Der er endda en mekanisme til API-styring, så du kan arbejde med de uvaskede masser, der snart vil banke på din APIs dør og forvente svar.

Swagger er et økosystem for API'er, og det er ikke begrænset til Java. Hvis dit team flytter til Node.js eller et af flere dusin andre sprog, er der et Swagger Codegen-modul, der venter på at konvertere din OpenAPI-spec til en implementering på dette sprog.

Restlet

En af de større forskelle mellem de forskellige rammer er antallet af forbindelser til andre tjenester og biblioteker. Restlet-projektet tilbyder en af ​​de større samlinger af funktioner og forbindelser. Det er allerede integreret med biblioteker som JavaMail, hvis din mikroservice skal tale POP, IMAP eller SMTP til en eller anden mailserver og Lucene / Solr, hvis du vil oprette søgbare indekser med store stykker tekst og metadataene pakket ind det.

Mulighederne i Restlet fortsætter bare, fordi denne stak generelt understøtter flere forskellige muligheder for hver del. Du behøver for eksempel ikke at bruge JSON, fordi koden håndterer XML, CSV, YAML og et par flere filformater. Du får også flere forskellige muligheder for skabelonerne til strukturering af dit svar. En af de pænere ekstra funktioner er Restlet-klienten, som lader dig teste dine API'er fra Chrome-browseren.

Squash

Fejlfinding af mikrotjenester er ofte en reel udfordring, fordi delene er så løst koblede, og det er svært at spore datastrømmen gennem alle systemets lag. Med Squash kan du oprette breakpoints i din kode, der kører på en Kubernetes-klynge, og derefter modtage alle dataene tilbage i din IDE, som om det var kode, der kører lokalt. Squash integreres også med Node.js og Python-driftstider, hvis din samling af mikroservices ikke kun er Java.

Telepresence

En anden mulighed for fejlfinding er at bruge Telepresence til at oprette en lokal proxy til en mikroservice i en fjern Kubernetes-klynge. Dine opkald til denne service omdirigeres til den lokale version, hvor du kan oprette breakpoints eller gøre noget andet, du kan forestille dig på din lokale maskine.

Zipkin

Zipkin er en mekanisme til at logge begivenheder på forskellige mikrotjenester og derefter korrelere begivenhederne, så problemer kan isoleres og undersøges, når de kruser gennem samling af maskiner. Der er en Zipkin-implementering til Java såvel som mindst seks andre sprog, så flersprogede systemer kan tackles. Nogle af de mest sofistikerede rammer som Spring har allerede Zipkin integreret i en eller anden form.