Trebate li ići sa JMS-om?

Razvoj distribuiranih sustava brzo raste kako programeri softvera grade sustave koji moraju ići u korak sa sve većim zahtjevima koje nameće e-poslovanje. Ali, nikada prije dizajn i implementacija sloja za obradu poruka unutar distribuiranog sustava nisu bili tako složeni kao danas. To je uglavnom zbog dramatičnog povećanja potencijalne funkcionalnosti koju omogućuju standardi poput Java Message Service (JMS) koji povezuju mnoge tehnologije dobavljača u jedan sustav. Uz to, širenje Interneta iznjedrilo je nove, ekspanzivne korisničke baze i stavilo na raspolaganje nekoliko protokola za komunikaciju unutar distribuiranog sustava. Takvi protokoli uključuju CORBA IIOP (Internet Inter-ORB Protocol), Microsoft DCOM (Distributed Component Object Model) i Java RMI (Remote Method Invocation).

Prirodna evolucija ovih protokola dovela je do uvođenja posredničkog softvera orijentiranog na poruke (MOM), koji omogućuje slobodnije povezivanje unutar distribuiranih sustava apstrahirajući prijevod, sigurnost i temeljne komunikacijske protokole od klijenata i poslužitelja. Međuoprema uključuju SOAP (Simple Object Access Protocol) i JMS. Vlasnička, obrada transakcija srednjeg sloja postoji od ranih dana COBOL-a (Common Business Oriented Language), ali nije bila vrlo složena zbog ograničenja tehnologija ranih poruka.

Pojavom standarda poput JMS-a programeri sada mogu povezati brojne tehnologije. Odluke o dizajnu distribuiranog sustava teže su, a njihove implikacije na integritet i distribuciju podataka presudne su za uspjeh ili neuspjeh sustava.

Široko rasprostranjena i prešutna pretpostavka je da je uvođenje tehnologije imovina, a njezine se obveze često zanemaruju. Neobračunavanje obveza često rezultira sustavom koji je ili nepotrebno kompliciran i / ili preinženjeriran. Osnovno razumijevanje JMS-a i njegovih svojstvenih kvaliteta (od sustava neovisne kvalitete), praćeno pažljivom analizom u odnosu na određene scenarije distribuiranog sustava, može ukazati na to koliko dobro JMS može riješiti sistemske zahtjeve nasuprot mijenjanju postojećih problema ili čak uvođenju novih.

JMS pregled

JMS, koji je Sun Microsystems uveo 1999. godine, kao dio specifikacije platforme Java 2, Enterprise Edition (J2EE), skup je standarda koji opisuju temelje međuzračnog sloja za obradu poruka. JMS omogućuje sustavima da komuniciraju sinkrono ili asinkrono putem modela od točke do točke i modela objavljivanja i pretplate. Danas nekoliko dobavljača pruža JMS implementacije kao što su BEA Systems, Hewlett-Packard, IBM, Macromedia i Oracle, omogućujući tako JMS-u interakciju s više dobavljačkih tehnologija.

Na slici 1. prikazan je jednostavan sustav zasnovan na JMS-u s odlaznim redom napunjenim porukama koje klijenti trebaju obraditi i dolaznim redom koji prikuplja rezultate obrade klijenta za umetanje u bazu podataka.

Kao što je gore spomenuto, MOM (poput JMS-a) omogućuje slobodnije spajanje unutar distribuiranih sustava apstrahirajući prijevod, sigurnost i temeljne komunikacijske protokole od klijenata i poslužitelja. Jedno od glavnih svojstava sloja za obradu poruka je da se, budući da uvodi ovaj sloj apstrakcije, implementacija bilo klijenta ili poslužitelja može promijeniti, ponekad i radikalno, bez utjecaja na ostale komponente sustava.

Dva specifična scenarija

U ovom odjeljku predstavljam dva distribuirana sustava koji su potencijalni kandidati za JMS i objašnjavam ciljeve svakog sustava i zašto su sustavi kandidati za JMS.

Scenarij 1

Prvi kandidat je distribuirani sustav kodiranja (prikazan na slici 2). Ovaj sustav ima skup od N klijenata koji dohvaćaju zadatke kodiranja sa središnjeg poslužitelja baze podataka. Klijenti zatim izvršavaju stvarnu transformaciju (kodiranje) iz digitalnog glavnog u kodirane datoteke i završavaju izvještavanjem o svom statusu naknadne obrade (npr. Uspjeh / neuspjeh) natrag na središnji poslužitelj baze podataka.

Vrste kodiranje (npr, tekst, audio ili video) ili transformacije (npr .pdfda .xml, .wavda .mp3, .avida .qt) to ne smeta. Važno je shvatiti da kodiranje zahtijeva CPU i zahtijeva raspodijeljenu obradu na više klijenata radi skaliranja.

Na prvi pogled, ovaj je sustav potencijalni kandidat za JMS jer:

  • Obrada se mora distribuirati jer je izuzetno intenzivna (CPU) intenzivna
  • S gledišta izvedbe sustava može biti problematično izravno povezati više klijenata na jedan poslužitelj baze podataka

Scenarij 2

Drugi sustav kandidata za JMS je globalni sustav registracije za internetski portal. Globalna registracija obrađuje zahtjeve za stvaranjem novih korisnika (registracijom), prijavom i autentifikacijom.

Određeni podaci o registraciji (npr. Ime, adresa, omiljena boja) i načini provjere autentičnosti korisnika (npr. Korisnički objekti na strani poslužitelja, HTTP kolačići) nisu važni. Međutim, važno je da se ovaj sustav prilagođava milijunima korisnika, a obrasce korištenja teško je, ako ne i nemoguće predvidjeti. (Tijekom televizijske utakmice ESPN Svjetskog kupa spiker kaže: "Prijavite se i glasajte u našoj internetskoj anketi. Rezultate ćemo predstaviti na kraju emisije." Odjednom se 500 000 korisnika prijavi u roku od tri minute interval. 3 minute = 180 sekundi; 500.000 prijava korisnika / 180 sekundi = 2.778 prijava korisnika / sek.)

Ovaj je sustav potencijalni kandidat za JMS iz sljedećih razloga:

  • Sustav se mora distribuirati kako bi se prilagodio opseg transakcije
  • Transakcije su atomske (npr. Prijava), pa su bez državljanstva i stoga kandidati za distribuciju

Ova su dva sustava arhitektonski slična. Nekoliko klijentskih strojeva izvlači podatke sa središnjeg poslužitelja baze podataka (moguće replicirati na M poslužitelje baze podataka samo za čitanje), izvršava neku logiku na klijentu, a zatim izvještava o statusu natrag na središnji poslužitelj baze podataka. Jedan sustav isporučuje kodirane datoteke u datotečni sustav putem UNC / FTP; drugi isporučuje HTML sadržaj web preglednicima putem HTTP-a. Oba su sustava distribuirana.

To je ono što mnogi inženjeri idu sa svojim analizama prije primjene JMS-a. U ostatku ovog članka objašnjavam da, iako ovi sustavi dijele mnoštvo karakteristika, prikladnost JMS-a postaje jasnija i divergentnija dok ispitujemo zahtjeve svakog sustava, uključujući izvedbu sustava, distribuciju podataka i skalabilnost.

Analiza sustava: integrirati ili ne integrirati

JMS ima svojstvene osobine, neovisne o sustavu. Neke od ovih osobina (prednosti označene sa +, kontra označene sa -) koje se odnose na oba sustava uključuju:

  • (+) JMS je skup standarda stvorenih više implementacija dobavljača; dakle, izbjegavate problem s zaključavanjem strašnog dobavljača .
  • (+) JMS omogućuje apstrakciju (putem generičkog API-ja) između klijenta i poslužitelja; možete promijeniti shemu baze podataka ili platformu bez promjene aplikacijskog sloja (ovdje se podrazumijevaju druge potencijalne promjene sustava, međusobno izolirane slojem za razmjenu poruka).
  • (+) / (-) JMS može pomoći razmjeri sustava (profesionalac). Suština je u tome što se svaki sustav koji skalira s JMS-om može skalirati i bez njega.
  • (-) JMS je složen. To je potpuno novi sloj s novim setom poslužitelja. Upravljanje uvođenjem softvera, nadzor poslužitelja i sigurnost samo su neki od netrivijalnih problema povezanih s JMS uvođenjem. Također treba uzeti u obzir troškove.
  • (-) Dobavljači ne tumače i stoga primjenjuju standarde na potpuno isti način, pa postoje razlike između različitih primjena.
  • (-) S JMS-om vam je potrebno više provjere i ravnoteže u sustavu. Ne samo da uvodite novi sloj, već uvodite i asinkronu distribuciju i potvrdu podataka, što ima dodatnu složenost asinkrone obavijesti.
  • (-) Nema redova javljanja / ažuriranja / praćenja poruka bez prilagođenog softvera.

JMS također ima kvalitete ovisne o sustavu. Prikladnost JMS-a ovisi o tome koliko se dobro te osobine preslikavaju na skup problema koji pokušavate riješiti. Slijede neke od ovih osobina i njihov odnos prema dvama sustavima interesa:

Predmemoriranje

Keširanje je primarno pitanje planiranja kapaciteta unutar bilo kojeg distribuiranog sustava. JMS ima brojne značajke koje omogućuju njegovu upotrebu kao tehnologiju predmemoriranja (uglavnom da je distribuirana, sinkrona ili asinkrona i razmjena podataka kao objekti u porukama). Stoga se postojeća JMS instalacija može iskoristiti kao infrastruktura za predmemoriranje ako je potrebno.

Kad se razmatra sustav kodiranja, predmemoriranje obično nije korisno za povećanje ukupnih performansi sustava, jer se većina transformacija datoteka izvršava jednom i premješta u objekt za hosting ili SAN (mreža područja pohrane), a malo je preklapanja sadržaja između kupaca. Globalna registracija glavni je kandidat za predmemoriju korisničkih podataka, jer se korisnici obično prijavljuju, pregledavaju i odjavljuju. Prijava kreira unos korisničke predmemorije, a ovaj objekt omogućuje naknadnu provjeru autentičnosti korisnika dok je korisnik na web mjestu.

Obrada naloga

Unutar globalnog sustava registracije nema rasporeda i / ili naloga za obradu transakcija. Pseudo-slučajni korisnici ulaze u sustav u pseudo-slučajnim intervalima nakon prijave, pregledavaju sadržaj (i stoga su ovjereni kada pristupaju ograničenom sadržaju i / ili aplikacijama), a zatim se odjavljuju.

Unutar sustava kodiranja nalaže se obrada. Sadržaj se grupira u grupe za isporuku, ovisno o dostupnosti uklonjive pohrane (npr. DLT rješenja ili pohrana mrežnog uređaja). Sadržaj se ne isporučuje dok se serija ne dovrši, pa se paketi moraju izvršavati redom (premda pretvorbe unutar serije mogu potencijalno biti neuređene). Moguća je implementacija prioritetnih redova unutar JMS-a radi očuvanja redoslijeda obrade, ali održavanje ovog redoslijeda snopova poruka između više JMS poslužitelja i više redova postaje prilično komplicirano. Relacijski poslužitelj baze podataka s podrškom za transakcije prikladnija je tehnologija za upravljanje ovim tijekom rada.

Sigurnost

Sigurnost nije dio JMS specifikacije. Sigurnosni se problem ne mijenja nužno implementacijom zasnovanom na JMS-u (ako imate sigurnosni zahtjev prije JMS-a, imat ćete sličan sigurnosni zahtjev i nakon JMS-a). Znajući to, važno je razumjeti kako se JMS može odnositi na postojeću sigurnost infrastrukture.

Općenito, što više tehnologije koristite, sustav postaje ranjiviji na hakere i sigurnosna kršenja. Budući da je globalni poslužitelj aplikacija za registraciju usmjeren na mrežu, sigurnosne nedostatke otkrivene u implementaciji JMS-a vašeg dobavljača i objavljene u internetskim grupama vijesti brzo postaju sigurnosne obveze za vaše web mjesto. Također, budući da je JMS generički API, skloniji je narušavanju sigurnosti od vlasničkog sustava koji koristi neobjavljeni API.

Iako postojeći vatrozid i mrežnu sigurnost zasnovanu na IP-u možete iskoristiti kako biste zaštitili pozadinske (čitaj: nisu web-okrenute - namijenjene dosjetkama) aplikacije i poslužitelje baze podataka od sigurnosnih kršenja, postoji značajan sigurnosni rizik stvoren izlaganjem JMS poslužitelja aplikacija izravno na Internet.

Sustav kodiranja općenito postoji na istoj mreži (također mreža izolirana od Interneta). Dakle, nema ništa svojstveno mrežnoj topografiji ovog sustava što se odnosi na JMS i iskorištavanje ove topografije za pružanje sigurnosti (za sustav kodiranja postoji mnogo manje sigurnosnih zahtjeva, jer nije okrenut prema mreži).

Skalabilnost

Budući da je globalni sustav registracije podložan hirovima velike i hirovite baze korisnika, zahtjevi za skalabilnošću sustava jamče JMS. JMS neće samo pomoći u skaliranju sustava, već će staviti transakcije u red, iako neće biti od velike pomoći kada korisnički zahtjevi preplave sustav.

Budući da distribuirani sustav kodiranja pažljivo regulira promet podataka (jer je to vjerojatno samostalni sustav), zahtjevi za skalabilnošću sustava nisu toliko zastrašujući. Za distribuirano kodiranje možete svoje O[100]klijente izravno povezati s bazom podataka i prigušiti njihov promet kako biste uravnotežili protok kodiranja s performansama poslužitelja baze podataka.

Izvođenje

Uvođenje jednog JMS poslužitelja može promijeniti probleme s izvedbom, a ne riješiti ih. Iz tog razloga, JMS sustav trebao bi biti dizajniran s više JMS poslužitelja (i stoga s više redova). Slika 4 pokazuje zašto se problemi s performansama mijenjaju umjesto rješavaju. Ilustrira slojeve obrade potrebne generičkom poslužitelju podataka da odgovori na zahtjeve za povezivanje s klijentom:

Razmjena podataka između klijenta i poslužitelja je dvodijelni postupak, bilo da je ovo klijent-baza podataka ili klijent-JMS poslužitelj:

  1. Pristup podacima
  2. Upravljanje navojem i utičnicom, udruživanje i predmemoriranje

JMS i poslužitelj baze podataka izgledaju potpuno isto (slika 4). Oni se bave povezivanjem utičnica, upravljanjem nitima i pristupom podacima poslužitelja.

Sa samo jednim JMS poslužiteljem, potencijalni problemi s izvedbom jednostavno se premještaju s poslužitelja baze podataka na JMS poslužitelj. Uz moguću pogoršanje izvedbe povezano s prebacivanjem konteksta unutar vašeg poslužitelja baze podataka, problemi s izvedbom sada su potencijalno veći zbog problema s izvedbom JVM-a unutar vašeg JMS poslužitelja.

Jedan JMS poslužitelj dodaje značajnu složenost vašem sustavu i može također uvesti probleme s izvedbom koji se odnose na povezivanje više klijenata na jedan poslužitelj. Utjecaj više JMS poslužitelja na dizajn vašeg sustava i protok podataka može značiti razliku između uspješnog ili neuspjelog uvođenja sustava.

Ukratko, značajke naspram potencijalnog utjecaja JMS-a izgledaju ovako:

Značajke nasuprot utjecaju JMS-a