Skupiny J. - JGroups - Wikipedia
![]() | tento článek ne uvést žádný Zdroje.Února 2018) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Vývojáři | Bela Ban |
---|---|
Stabilní uvolnění | 4.1.3. Konečné / 16. srpna 2019 |
Napsáno | Jáva |
Operační systém | Cross-platform |
Velikost | 2,1 MB |
Typ | spolehlivý vícesměrové vysílání Systém |
Licence | Licence Apache 2.0 |
webová stránka | http://www.jgroups.org/ |
Skupiny J. je knihovna pro spolehlivou komunikaci one-to-one nebo one-to-many napsanou v Jáva Jazyk.
Lze jej použít k vytvoření skupin procesů, jejichž členové si navzájem posílají zprávy. Skupiny JG umožňují vývojářům vytvářet spolehlivé vícebodové (multicast) aplikace, u nichž je spolehlivost problémem nasazení. JGroups také zbavuje vývojáře aplikací implementace této logiky sami. To šetří značný čas na vývoj a umožňuje nasazení aplikace v různých prostředích, aniž byste museli měnit kód.
Funkce
- Vytváření a mazání skupin. Členy skupiny lze rozšířit mezi sítě LAN nebo WAN
- Vstup do skupin a odchod ze skupin
- Detekce členství a oznámení o připojených / levých / havarovaných členech
- Detekce a odstranění havarovaných členů
- Odesílání a přijímání zpráv mezi členy (point-to-multipoint)
- Odesílání a přijímání zpráv mezi členy (point-to-point)
Ukázka kódu
Tento kód níže ukazuje, jak lze napsat jednoduchou chatovací aplikaci pomocí JGroups:
veřejnost třída Povídat si rozšiřuje Adaptér přijímače { JChannel kanál; veřejnost prázdnota pohled Přijato(Pohled new_view) { Systém.ven.tisk("** Pohled: " + new_view); } veřejnost prázdnota dostávat(Zpráva zpráva) { Systém.ven.printf("od% s:% s n", zpráva.getSource(), zpráva.getObject()); } soukromé prázdnota Start(Tětiva rekvizity, Tětiva název) hodí Výjimka { kanál = Nový JChannel(rekvizity).setName(název) .setReceiver(tento).připojit("ChatCluster"); eventLoop(); kanál.zavřít(); } soukromé prázdnota eventLoop() { Vyrovnávací paměť v = Nový Vyrovnávací paměť(Nový InputStreamReader(Systém.v)); zatímco (skutečný) { Snaž se { Systém.ven.tisk("> "); Systém.ven.flush(); Tětiva čára = v.readLine().toLowerCase(); Zpráva zpráva = Nový Zpráva(nula, čára); kanál.poslat(zpráva); } chytit(Výjimka E) { } } } veřejnost statický prázdnota hlavní(Tětiva[] args) hodí Výjimka { Tětiva rekvizity = „udp.xml“; Tětiva název = nula; pro (int i=0; i < args.délka; i++) { -li (args[i].rovná se("-props")) { rekvizity = args[++i]; pokračovat; } -li (args[i].rovná se("-název")) { název = args[++i]; pokračovat; } Systém.ven.tisk("Chat [-props XML config] [-name name]"); vrátit se; } Nový Povídat si().Start(rekvizity, název); }}
V start () je JChannel vytvořen z konfigurace XML (např. Udp.xml). Kanál je koncový bod pro připojení ke clusteru.
Dále je nastaven přijímač, což znamená, že budou vyvolána 2 zpětná volání:
- viewAccepted (View v) vždy, když se přidá nový člen nebo stávající člen opustí klastr
- receive (Message msg) when a message from some other cluster member is receive
Poté se kanál připojí ke clusteru „ChatCluster“. Od této chvíle lze zprávy odesílat a přijímat, plus nové zobrazení (včetně tohoto člena) bude nainstalováno ve všech členech klastru (včetně nově připojeného člena).
Cokoli zadaný v hlavní smyčce má za následek vytvoření zprávy, která se odešle všem členům klastru, včetně odesílatele.
Instance chatovací aplikace lze spouštět ve stejném procesu, ve stejném poli, na různých hostitelích v místní síti, na hostitelích v různých sítích nebo v cloudu. Kód zůstává stejný; jediná věc, kterou je třeba změnit, je konfigurace.
Například v místní síti může být použito vícesměrové vysílání IP. Když je vícesměrové vysílání IP zakázáno, lze jako přenos použít TCP. Při spuštění v cloudu by se použil protokol TCP plus cloud discovery a tak dále ...
Flexibilní zásobník protokolu
Nejvýkonnějším rysem JGroups je jeho flexibilní protokol, který vývojářům umožňuje přizpůsobit jej tak, aby přesně odpovídal jejich aplikačním požadavkům a charakteristikám sítě. Výhodou je, že platíte pouze za to, co používáte. Smícháním a porovnáním protokolů lze uspokojit různé požadavky na různé aplikace. JGroups přichází například s řadou protokolů (ale každý si může napsat vlastní)
- Transportní protokoly: UDP (Multicast IP ), TCP
- Fragmentace velkých zpráv
- Discovery protocols to discover the initial membership for a joining node
- Spolehlivý přenos zpráv unicast a multicast. Ztracené zprávy jsou přenášeny znovu
- Detekce selhání: havarovaní členové jsou z členství vyloučeni
- Objednávkové protokoly: Fifo, Total Order (na základě sekvenceru nebo tokenu)
- Členství a oznámení o připojených nebo havarovaných členech
- Detekce a slučování síťových oddílů (split brain)
- Řízení toku
- Šifrování a ověřování (včetně podpory SASL)
- Komprese
Stavební bloky
Stavební bloky jsou třídy vrstvené přes kanály JGroups, které poskytují abstrakce na vyšší úrovni, jako je
- RPC na jednotlivé nebo všechny uzly clusteru
- Distribuované mezipaměti
- Distribuované zámky
- Distribuované atomové čítače
- Distribuované spuštění úlohy