Az Oracle koherencia orosz miért kell ez
Tételezzük fel, hogy van egy feladat, hogy gyorsan megtalálja, amit valaha is a feladata, nagy mennyiségű adat. Ez általában azt jelenti, „nagy mennyiségű” adat? Ez egy ilyen kötet terhelés az ügyfél nincs értelme, mert az ügyfél nem lesz képes, hogy illeszkedjen az Ön oldalán minden szükséges adatot. A dilemma az, hogyan lehet az eredmény, anélkül, hogy letölti a teljes adatmennyiség az ügyfél. A lehetséges megoldás lesz, hogy egy részhalmaza egy nagy adathalmazt az ügyfél, és gyűjtsük össze a részeredmények a ciklusban. Egy ilyen megoldás jó, kivéve, hogy a következetes végrehajtása sokkal hosszabb lesz, mint a teljesítménye a teljes készlet egy időben (a időt fordítanak a kérés / válasz képzés részét az adatok és az adatok küldését részhalmaza az ügyfél számolás). Továbbá, a végrehajtása során szekvenciális hatása az adatok elavultak lehetnek. Vagyis, mi ösztönösen érti, hogy az adatokat fel kell dolgozni, ahol a hazugság (elküldés nélkül a hálózat), sőt, egyidejűleg az egész készlet.
Itt jön a támogatás a megoldások, mint például az Oracle Coherence Hadoop, Gemfire stb
Menjünk át az alapokat Oracle Coherence.
Azt olvassuk a dokumentáció és a következő látható: „Oracle Coherence egy memóriában adatrács megoldás, amely lehetővé teszi ...”.
„In memory” - ami azt jelenti, hogy a tárolt adatok a számítógép memóriájában (lehet a lemezen, de erről bővebben később).
„Data Grid megoldás” - ami azt jelenti, hogy az adatok között oszlik a klaszter, és nem koncentrálódik egy helyen.
De kezdjük az elején. Nézzük először megérteni, mit jelent a „építőkockák” állnak rendelkezésre feladatok végrehajtásának.
Nod csak egy Java folyamatot (futás az osztály com.tangosol.net.DefaultCacheServer) a osztályútvonal coherence.jar és a konfigurációs fájlok. Is futtatható több csomóponton azonos / különböző gépek ugyanazon vagy különböző felhasználók korlátozás nélkül. Ez fontos megérteni, hogy ez csak egy Java folyamatot, és ez / kell hibakeresés, valamint bármilyen szerver alkalmazás, amit írsz.
A klaszter egy sor több csomópont. Csomópontjai az alapértelmezett konfiguráció megtalálják egymást automatikusan multicast. Ha szükséges, akkor beállíthatja a WKA (jól ismert címek), ha a rendszergazdák nem lesz boldog, hogy „szerzett összes multicast hálózat.” A klaszter, mindig a master csomópont (senior tag), amely azt vizsgálja, hogy mi történik a klaszter (hány csomópontok vannak, melyek az adatok tárolására, ahol másolja az adatokat, ha a csomópontok „esik”, stb.) Főcsomóponton - ez az első csomópont, amely indult. Ha a master node „le” valamilyen oknál fogva, a következő fő csomópont automatikusan kap. Meg kell jegyezni, hogy nem használják a feldolgozás során az adatok főcsomópontja. A számításokat végeztünk nodah ahol fekszenek a szükséges adatokat. Jellemzően, a csomópontok vannak elválasztva kijelölés: proxy számítási csomópontok és tárolási. Ha egyáltalán csomópont „leesett”, akkor nem kell adatokat. Azaz, meg kell gondolni előre, hogy az adatok / változások mentésre kerülnek, és hogyan kell boot után csomagtartó.
A folyamat során a fejlődő ajánlott beállítani a fejlesztési környezet a termeléshez hasonló. Ez lehetővé teszi, hogy sok hibát sorozatprogramozásának kommunikációs csomópontok között, mielőtt megjelent a végleges változat.
konfiguráció csomópont
Alapértelmezésben a konfigurációs fájlok nem szükséges ebben az esetben a fájlokat fogja használni coherence.jar. A konfigurációs fájlok alapértelmezésben, nem alkalmasak termelési rendszerek, akkor meg kell változtatni egy adott feladatra. Egyesek még azt javasolják, hogy törli ezeket a fájlokat coherence.jar fájlt.
Jelenleg 3 fő konfigurációs fájl, amellyel meg kell dolgozni:
tangosol-coherence.xml - ez a fájl felelős a konfiguráció a klaszter egészének. Például a fürt nevét úgy van kialakítva, ebben a fájlban.
koherencia-cache-config.xml - ez a fájl felelős a konfiguráció a különböző cache, amely szolgál a klaszter.
koherencia-POF-config.xml - ez a fájl meghatározni, hogy mely adatok kerülnek feldolgozásra a klaszter. Továbbá, ezen a fájl határozza meg az adatok hogyan sorosítani az átvitelét és tárolását a fürt.
Vannak úgynevezett overrirde fájlok (például tangosol-koherencia-override.xml). A beállítási fájl felülírása beállítás az alapvető fájlokat. Azaz, ha tangosol-coherence.xml és tangosol-koherencia-override.xml a classpath, akkor az összes beállítás töltik az első fájlt, és újraírta az egységeket a második.
Egyszerre több azonos fájlokat a classpath, de csak az első fájlt fogja használni. Azt is beállíthatja a kívánt konfigurációs fájlokat a rendszer használata (-D) berendezések.
Amikor a klaszter indul, azt írja, hogy mely fájlokat a konfiguráció a rendszer. A naplók lesz valami hasonló a következő:
Loaded működési konfigurációt erőforrás ...
Loaded operatív felülbírálja az erőforrás ...
Loaded operatív felülbírálja az erőforrás ...
Proxy (kiterjeszteni) csomópontot
Csomópontok tárral (a tár csomópontok)
Ez egy csomópont, ahol a kitett környezeti változó -Dtangosol.coherence.distributed.localstorage = true. Alapértelmezésben a csomópont eltárolja az adatokat egy java kupac, de akkor is „szeres” őket a lemezre, és betöltve, ha szükséges. Ezekben nodah lehet számításokat végezni, de meg kell értenünk, hogy ez ahhoz szükséges, hogy a legkevesebb hulladék a folyamat computing a csomópont nem „bukott” hiánya miatt a memória (OutOfMemory). Ha a csomópont „bukása” bármilyen okból adatokat kell másolni más csomópontok, így a teljes kapacitása a klaszter csökkenés. Ez ahhoz vezethet, hogy a dominóhatásból, ha a szabad terület a klaszter nem lesz elég, és azután „esik” minden csomópontok számára nodom. Általános szabály, hogy a legfontosabb adatokat egy második példányt (ami előírt, a konfigurációs beállítások), így a veszteség egy csomópont nem kritikus.
Az adatok, hogy egy köztes eredmény, akkor könnyen kiszámítható az alapadatok, nem kell egy másik példányt. Adattárolás lehet állítani oly módon, hogy egy másolatot másik csomóponton, egy másik fizikai gépen, sőt egy másik rack-ben egy másik városban. Ez a konfigurációs paramétereket és programozás nem kell semmit itt. Adattárolás paraméterek rugalmas és lehetővé teszi, hogy konfigurálja a rendszert egy adott feladatot.
Computing csomópontok (alkalmazási szint / tároló tiltva csomópontok)
Ez egy csomópont, ahol a kitett környezeti változó -Dtangosol.coherence.distributed.localstorage = false. Ezek a csomópontok használják egyenletesen oszlatja el a számítás per klaszter. Ezek nodah is gyorsíthatóságát közbenső számítások. Minden üzleti logika, hogy szeretné megvalósítani ezt a kérelmet el kell végezni a klaszter a következő nodah.
Nézzük meg, hogy a folyamat végrehajtása a pattogó a hívás egy hierarchia csomópontokat. Van egy csomópont az adatok tárolása, a számítási csomópontok és proxy csomópont. Proxy nodah adatokat nem tároljuk, és nem konfigurálható cache. A számítógépen nodah konfigurálja cache, de lehetősége nélkül adattárolásra a cache. A nodah tárolási adatok Önnek. A kliens oldalon, akkor ne használja a cache, ahol tárolva. Azaz, ha nem végez számításokat az adat önmagában közvetlenül az ügyféllel, és mindig a számítási csomópontok végre műveleteket adatokat. Így izolálni az adatokat a kliens alkalmazás, amely képes megváltoztatni a jövő adatok tárolási architektúra megváltoztatása nélkül az ügyfél. Minden csomópont a „tudja” a klaszter, ahol egy cache található. Kiderült, hogy ha küld egy feladat elvégzésére a cache van kialakítva, hogy számítani, akkor lefut egy csoport számítási csomópontok adatait felhasználva, a csomópontok, amelyeken az adatokat tárolják. Hangzik nem teljesen tisztázott, de ez egy másik cikk.
adatok lokalizációs (adatok affinitás)
Bizonyos esetekben hasznos, ha az adatokat csoportosítva bármely elve. Például, akkor csoport az adatokat oly módon, hogy a csomópontok, amelyek ugyanazon a fizikai gépen lesz függő adatokat. Ebben az esetben, akkor nem kell hálózati késleltetés és a számítás gyorsabb lesz.
Mechanizmusok küldött a feladat elvégzésére a következő: EntryAggregator, EntryProcessor, InvocationService, MapListener, EventInterceptor
Aggregátor (EntryAggregator) - ez a feladat, hogy el kell végezni az adatok példányban. Ez azt jelenti, hogy változtatni az adatokat a cache az aggregátor nem kap. A munka jön csak olvasható adatok. Tipikus probléma az összeg, minimum, maximum.
Processzor (EntryProcessor) - ez a feladat, amely magában változó adatokat a cache. Azaz, ha meg akarja változtatni az adatokat a cache, ahol az adatok fizikailag találhatók, akkor kell használni erre a processzor. Egy szép jellemzője a processzor, hogy rögzítse az adatokat a feldolgozás során. Azaz, ha több műveleteket kell hívni következetesen, akkor kell használni a CPU, hiszen csak egy processzor fog dolgozni ez az adat az adott pillanatban.
InvocationService - a feladat csomópont szintjén. Ebben az esetben, ha fut nagyjából a Java folyamatot, hanem az adatokat. Feladatok Az ilyen típusú végre kell hajtania Invocable, ami viszont futtatható.
MapListener - a feladat végrehajtásra kerül aszinkron eseményekre reagálva a cache szinten.
EventInterceptor - ez a feladat hasonló az előző abban az értelemben, hogy nem lesz végrehajtva, mint a válasz, hogy egy esemény, de a különbség abban rejlik, hogy a hallgató lesz végrehajtva minden nodah, amely úgy van kialakítva cache és elfogó - csak nodah amelyek rendelkeznek adatokkal amelyekre az eseményt. Interceptor'a is lehetősége van arra, hogy az úgynevezett előtt vagy az esemény után.
A részletes magyarázata, hogy a különböző típusú problémák túlmutat ezt a cikket.
POF (hordozható objektum formátum) sorszámozás
Minden adatot a klaszter tárolt byte tömböt. Fields szerializált objektum tárolt egymás (minden területen az index), és pontosan úgy, ahogy írsz a módszerek readExternal / writeExternal osztályt, amely megvalósítja az interfészt, vagy PortableObject sorosításához / deserialize egy osztályt, amely megvalósítja az interfészt PofSerializer. Byte területeken belül a tömbben tárolt egymást. Letapogató tömb is végbemegy egymás után. Ebből nem következik a nyilvánvaló következtetést: a legtöbb területen kell közelebb a felső byte tömböt. objektumot írt adatok a tömb ágyazhatók, és a sorszámozás. Azaz, a végrehajtás és PortableObject PofSerializer interfészek, akkor át a hierarchikus java objektum egy sík szerkezete a byte tömböt.
Koherenciája biztosítja sorszámozás a szabványos objektumok jdk (java.lang). Minden tárgy, hogy kell tárolni a klaszter le kell írni a koherencia-POF-config.xml fájlt. Mindegyik adattípus van saját száma. Nem adattípus kell kezdeni c 1000. Így kapsz egy szerkezet jól tolerálható az egyik platformról a másikra, és az egyik programozási nyelvről a másikra. Mindegyik osztály sorosítható a klaszter kell a megfelelő realizovanna Hash kód és egyenlő módszerek.
Kicsomagolása adatokat a klaszter (ValueExtractor)
Az előző pontban, tudjuk, hogy az adatok tárolása egy byte tömböt. Ahhoz, hogy kivonják az adatokat, meg kell írni egy osztályt, amely megvalósítja az interfészt ValueExtractor. Koherenciája fogja használni ezt az osztályt annak érdekében, hogy a szükséges része a szerializált objektum, és azt benyújtja egy osztály, akivel lehet dolgozni. Ez azt jelenti, hogy megvan a képessége, hogy „húzza” nem a teljes objektum az adatokat, és csak a szükséges ezen a ponton a számítás. Így már csökkentette a küldött adatok a hálózaton keresztül.
Partishn (partíció)
Koherenciája lehetővé teszi, hogy tárolja az adatokat formájában „kulcs-érték”, de a kulcs és az érték - logikus fogalmakat a rendszer. A fizikai szinten, az adatok csoportosítva partishn. Ez azt jelenti, több kulcs és érték tartozhat egy partishn. Partishn egy adattároló egységet. Amikor csomópont és dobja az adatokat átrendezzük csomópontok között, partishn teljesen másolt. Egy osztály, mely kijelöli partishn egy adott objektum megvalósítja KeyPartitioningStrategy felület. Alapértelmezésben partishn szerint kijelölt Binary kulcs objektumot hash kód (com.tangosol.util.Binary tárgy „pakolások” byte array). Te magad is befolyásolhatja a kijelölt partishn, így azok végrehajtását KeyPartitioningStrategy felület.
Mivel az adatbázis, az index a koherencia használják, hogy gyorsítsák fel az adatok visszakeresése. Index létrehozásához, használt QueryMap.addIndex módszer (ValueExtractor extraktor, logikai megrendelt, java.util.Comparator komparátor).
ValueExtractor használni annak érdekében, hogy válasszon a tömb byte szükséges adatokat az index. Ha telefonál addIndex módszer, ez nem jelenti azt, hogy a klaszter kezd index adatok most. A hívás egy javaslat egy indexet, amely lehetővé teszi források erre. Létrehozását követően, ezeket a változásokat helyesen fog megjelenni az index. Ez a módszer nevezhető többször, és ha az index már létezik, akkor nem lehet újra létrehozni. Index - a struktúra-csomópont szinten. Vagyis, ha az adatokat másolni az egyik csomópontról a másikra, az index nem lehet másolni, hanem ez meg fog változni összhangban az adatokat, hogy ugyanazon a csomóponton. Az adatok az index tárolása egy deserialized formában, így ha van szükség, hogy az információk gyors és deserialization, hozzon létre indexet. Természetesen a kényelem és a sebesség kell „fizetni”, és fizet a szabad hely a klaszter és számítástechnikai erőforrásokat. Belül, az index két al-indexek (előre és hátra). Közvetlen tárolja index adatai kulcs-> értéket (amely biztosította a páraelszívó), a fordított index tárolja az adatokat formájában érték-> gombok sokaságát.
Caches: sokszorosításra, elosztott, közel
Replikált - ez cache, amelyben az összes adatot tárolnak a deserialized az egyes csomópontok. Ez a fajta cache, amely a leggyorsabb szól, de lassabb írási műveleteket. A tény az, hogy abban az esetben, felvétel, az adatokat át kell másolni az összes csomópontot, ahol a cache van konfigurálva. Ez a fajta cache általában használt ritkán változékony kis mennyiségű adat.
Elosztott - ez a fő típusa cache, hogy a használt adatok tárolására. Ez lehetővé teszi, hogy felszámolja a korlátozásokat a méret a lefoglalt memória egyközpontú, mintha, „elkenődött” az adatokat az egész fürt. Ez a fajta gyorsítótár horizontális skálázhatóság miatt a beilleszkedés az új csomópont a klaszter, valamint hibatűrésre tárolásával adatmásolat más nodah.
Közel - a hibrid típusú cache úgy van kialakítva, a hívó fél (a hívó fél lehet az ügyfél és a másik csomópont a cache). Mint általában, ez a cache „megéri” elosztott cache, és tárolja a gyakran használt adatokat. Az adatok tárolása egy deserialized. Abban az esetben, a közeli cache, fennáll annak a lehetősége, hogy az adatokat lejár, így meg kell beállítani, hogy az adatok frissítésre kerül.
Most, hogy megvan az alapvető építőkövei a fogalmak, akkor lehetséges, hogy válaszoljon a kérdésre, miért van szükségünk koherencia.
A válasz egyszerű: van egy hibatűrő, skálázható vízszintesen tárolási megoldás, amely gyors hozzáférést biztosít az adatokhoz párhuzamos számítástechnika. Jelenléte miatt több csomópont, akkor nem kell korlátozásokat a méret adatokat tárolhatja a klaszter (persze, akkor csak a méret a rendelkezésre álló memória egy fizikai gépen, külön erre a feladatra). Nincs korlátozás a mérete egy kulcs-érték párokat. Azt is letölteni tárolt adatot, amire szükség van a számítás, így a hálózat lesz másolva egy minimális információkat. Általában a koherencia teljes ideológia épül, hogy küldjön csak ami szükséges a hálózathoz. Is, akkor beállíthatja a szinteket a szolgáltatások és a számítástechnika elég rugalmas az alkalmazás. Ennek eredményeként, a kihívások fogják oldani gyorsan.
A szempontból a menedzsment, akkor vegyél egy megoldást, amely megfelel a különböző követelményeknek. Miután letölti adatokat a rendszerbe, akkor képes lesz letölteni őket különböző módokon, és már más rendszereknél, amelyek a koherencia, mint egy adattárház. Így azáltal, hogy a bázis koherencia, akkor lehet építeni egy ökoszisztéma a kitermelés és a feldolgozás az adatok.
Ha érdekli ez a téma, én továbbra is a cikksorozatot koherencia. Írd le, mit is érdekel, és megpróbálom megválaszolni.
Eddig a következő szempontok alapján:
- konfigurálása az alapszerkezet a klaszter
- Bízza EntryAggregator
- Bízza EntryProcessor
- aszinkron hívások koherencia
- nézzen a bináris objektum
- Munka indexek
Általánosságban meg kell jegyezni, hogy a koherencia könnyű elkezdeni, de nagyon nehéz, hogy jól és gyorsan, így a cél egy cikksorozatot, hogy pótolja a kezdeti szinten ismerik a rendszert, és a fejlett fejlesztő szinten.
Nemrégiben kollégám írt egy könyvet a haladó fejlesztők, ami ajánlott az olvasás. Ebben a könyvben nem fog találni az alapvető ismereteket, de meg fogja találni példákat megoldások (magyarázatokkal) kellően összetett feladat.