ПредишенСледващото

Така че, предполагам, че ние имаме задача да намерите бързо онова, което някога задачата на големи обеми от данни. Това обикновено означава "голямо количество" на данни? Това е такова натоварване обем на клиента, което няма смисъл, тъй като клиентът не ще бъде в състояние да се поберат на ваша страна всички необходими данни. Дилемата е как да получите резултат, без да се свалят целия обем на данни за клиента. Един от възможните начини за решаване ще направи подмножество на голям набор от данни за клиента и събиране на междинните резултати от цикъла. Такова решение е добро за всички, с изключение на това, че последователното прилагане ще бъде много по-дълго, отколкото на работата на целия набор в даден момент (времето, ще бъдат изразходвани за обучение подкомлекта заявка / отговор на данните и изпращането на подгрупи от данни на клиента за броене). Също така, по време на изпълнение на последователно действие на данните може да не е актуална. Това означава, че ние интуитивно разбират, че данните трябва да бъдат обработени, когато лъжа (без да изпрати в мрежата) и, освен това, в същото време през целия набор.
Тук идват на помощ на решения като Oracle добра съгласуваност, Hadoop, Gemfire т.н.

Нека да мине през основите на Oracle съгласуваност.
Ние прочетете документацията и да видим следното: "Oracle Съгласуваността е в памет решетка данни решение, което позволява ...".
"В памет" - което означава, че данните, съхранявани в паметта на компютъра (може да бъде на диск, но повече за това по-късно).
"Данните решение мрежа" - което означава, че данните са разпределени в клъстера и не се концентрира на едно място.

Но първо първите неща. Нека първо да разберем какво "градивните елементи" са на разположение за изпълнение на задачи.

Нод е само процес на Java (пуснете клас com.tangosol.net.DefaultCacheServer) с coherence.jar на CLASSPATH и конфигурационни файлове. Можете да стартирате множество възли на една и съща / различни машини при същите или различни потребители без никакви ограничения. Това е важно да се разбере, че това е просто процес на Java и може / трябва да се трасира, както и всяко приложение, сървър, който ви пиша.

Клъстерът е съвкупност от множество възли. Възли в стандартната конфигурация ще открият един друг автоматично мултикаст. Ако е необходимо, можете да конфигурирате WKA (добре познати адреси), ако системните администратори, няма да бъдат щастливи, че сте "вкара всичките си мултикаст мрежа." В клъстер, винаги има главен възел (високопоставен член), който гледа какво се случва с клъстера (колко възли са там, кои от тях данни магазина, от който копират данни, ако един от възли "падането", и т.н.). Магистър възел - това е първия възел, което беше започнато. Ако, следващият главен възел автоматично се дава главен възел "надолу" по някаква причина. Трябва да се отбележи, че не се използва по време на обработката на основни данни възел. Изчисленията се извършват на nodah където лежат на необходимите данни. Обикновено, възли се отделят чрез назначаване: прокси изчислителни възли и съхранение. Ако на всички възли "да отпадне", а след това не е нужно на данни. Това означава, че е необходимо да се мисли предварително как данните / промени ще бъдат запазени и как да стартират след зареждане.
В процеса на разработване препоръчва да конфигурирате развитие на околната среда, подобна на производството. Това ще позволи на много грешки сериализация и комуникация между възлите, преди да пусна серийната версия.

конфигурация възел

По подразбиране, не са необходими конфигурационни файлове в този случай, файловете ще бъдат използвани coherence.jar. Конфигурационният файл се предоставят по подразбиране, не са подходящи за производствени системи, те трябва да се промени за конкретна задача. Някои дори препоръчваме да изтриете тези файлове от coherence.jar файл.
Има 3 основни конфигурационен файл, с който ще трябва да работа:
tangosol-coherence.xml - този файл е отговорен за конфигурацията на клъстера като цяло. Например, името на клъстера се конфигурира в този файл.
съгласуваност кеш-config.xml - този файл е отговорен за конфигурацията на различни кеш, който ще служи на клъстера.
съгласуваност-POF-config.xml - този файл се използва да се определи кои данни ще бъдат обработвани от клъстера. Също така, в този файл определя как данните се серийни номера за пренос и съхранение в клъстера.

Има така наречените overrirde файлове (например tangosol-съгласуваност-override.xml). Настройките в този файл да презапишат определяне на основните файлове. Това означава, че ако имате tangosol-coherence.xml и tangosol-съгласуваност-override.xml в CLASSPATH, а след това всички настройки се зареждат от първия файл и пренаписани през звена на втория.
Можете да имате няколко от едни и същи файлове в CLASSPATH, но само първия файл ще бъде използван. Можете също така да зададете необходимите конфигурационни файлове с използване на системата (-D) инсталации.
Когато клъстера започва, пише той, какви файлове се използват за конфигуриране на системата. Те няма да бъдат нещо подобно на следното:
Заредени оперативна конфигурация от ресурси ...
Заредени оперативни замени от ресурсите ...
Заредени оперативни замени от ресурсите ...

Proxy (разширяване) възел

Възли съхранение (възли за съхранение)

Това е възел, в който са изложени променлива среда -Dtangosol.coherence.distributed.localstorage = вярно. По подразбиране, възелът съхранява данните в Java купчина, но можете да "сгънете" ги на диск и зарежда, когато е необходимо. В тези nodah може да изпълнява изчисления, но трябва да се разбере, че е необходимо да се произвеждат по-малко отпадъци в процеса на изчисления с възел не е "паднал", поради липса на памет (OutOfMemory). Ако възел "падането" по някаква причина, данните трябва да бъдат копирани в други възли, така че общият капацитет на намалението на клъстера. Това може да доведе до каскада ефект, ако свободното пространство в клъстера няма да е достатъчно, а след това може да "падне" на касетъчните възли за nodom. Като правило, най-важните данни имат второ копие (което е предписано в настройките за конфигурация), така че загубата на един възел не е критично.
Данните, които е междинен резултат и може лесно да бъде изчислено на основните данни, не е нужно второ копие. Съхранение на данни може да бъде конфигуриран по такъв начин, че да има копие на друг възел, в друга физическа машина или дори на друг шкаф в различен град. Това е всичко на параметрите на конфигурацията и програмиране не се нуждае от нищо тук. параметри за съхранение на данни са гъвкави и позволяват да конфигурирате системата за конкретна задача.

Изчислителни възли (заявление от първи ред / за съхранение на възли с увреждания)

Това е един възел, в който променливата -Dtangosol.coherence.distributed.localstorage изложени на околната среда = неверни. Тези възли са свикнали да разпределите равномерно изчисляването на един клъстер. Те могат също така да nodah кешира междинни изчисления. Всички бизнес логика, която искате да приложат за това приложение трябва да се извърши в клъстера на тези nodah.

Нека да погледнем как този процес се изпълнява от подскачащи вашето обаждане чрез йерархия на възли. Имате ли възел за съхранение на данни, изчислителни възли и прокси възли. Proxy nodah данни не се съхраняват и не могат да се конфигурират кеш. На компютъра nodah конфигурирате кеш, но без възможност за съхранение на данни в кешовете. На nodah за съхранение на данни ви е. От страната на клиента, не трябва да използвате кеш паметта, където се съхранява данни. Това означава, че не се представят изчисления на самите данни директно с клиента и винаги използват изчислителни възли за извършване на операции върху данните. По този начин, да изолирате данните от клиентското приложение, което ви дава възможност да се промени бъдещето на архитектурата за съхранение на данни, без да променя клиента. Всички възли в "знам" на клъстера, където се намира кеш. Оказва се, че ако изпратите задача да изпълнява от кеша е конфигуриран да се изчисли, че ще бъде изпълнена в група от изчислителни възли, като се използват данни от възлите, на който се съхраняват данните. Може да звучи не е напълно ясно, но това е друга статия.

локализация данни (афинитет данни)

В някои случаи е полезно да има данни, групирани по някакъв принцип. Например, можете да групирате данните по такъв начин, че възлите, които са на една и съща физическа машина, ще бъдат зависими от данни. В този случай, няма да се налага забавянето на мрежата и изчисления ще бъде по-бързо.

Механизми за изпращане на задачата за извършване на следното: EntryAggregator, EntryProcessor, InvocationService, MapListener, EventInterceptor

Агрегатор (EntryAggregator) - задача, която ще се извърши на копия на данни. Това означава, че за промяна на данните в кеша на агрегатора не получите. Работата идва с данни само за четене. Типични проблеми е сумата, минимум, максимум.
Processor (EntryProcessor) - тази задача, която включва промяна на данните в кеша. Това означава, че ако искате да промените данните в кеш паметта, където се намира физически данни, трябва да се използва за този процесор. Хубав характеристика на процесора е да се заключва с данните по време на обработката. Това означава, че ако имате няколко операции, които трябва да бъдат призовани последователно, той трябва да използва процесора, тъй като само един процесор, ще се работи по тази част от данните във всеки даден момент.
InvocationService - ниво задача възел. В този случай, вие използвате грубо от процеса Java, а не на данните. Задачи от този тип трябва да прилагат Invocable, което от своя страна е Изпълнима.
MapListener - задачата ще бъде изпълнена асинхронно, в отговор на събития, на ниво кеш.
EventInterceptor - тази задача е подобна на предишната, в смисъл, че тя ще бъде изпълнена в отговор на събитие, но разликата се крие във факта, че слушателя да бъде изпълнено по всички nodah, който е конфигуриран кеша и прехващачи - само nodah, че разполагаме с данни за които събитието. Interceptor'a Ние също имаме възможност да се нарече преди или след събитието.
Подробно обяснение за това как различните видове проблеми е извън обхвата на тази статия.

POF (преносим обект формат) сериализирането

Всички данни в клъстера се съхраняват в масив от байтове. Полетата поредица обект съхранява последователно (всяко поле индекс му) и точно както ти пиша в методите readExternal / writeExternal клас, който реализира интерфейса или PortableObject Сериализирането / десериализиране клас, който реализира интерфейса PofSerializer. Байт полета в масива се съхраняват последователно. Сканиране масив също протича последователно. От това не следва очевидното заключение: Най-полета трябва да бъдат по-близо до най-горния байт масив. обектните данни, написани на масива могат да бъдат вложени и имат своята сериализация. Това означава, че в изпълнението и PortableObject PofSerializer интерфейси, прехвърляте йерархичната структура на Java обект в планарна структура на масив от байтове.
Последователност осигурява сериализация за стандартните обекти на JDK (java.lang). Всички обекти, които трябва да се съхраняват в клъстера трябва да бъдат описани във файла за съгласуваност-POF-config.xml. Всеки тип данни има свой собствен номер. Non на типовете данни трябва да започва в 1000. По този начин, можете да получите структура понася добре от една платформа на друга, както и от един език за програмиране на друг. Всеки клас трябва да бъдат поредица в клъстера трябва да имат правилната realizovanna хеш-код и се равнява на методи.

Извличане на данни от клъстер (ValueExtractor)

От предишната точка, ние знаем, че данните се съхраняват в масив от байтове. За да извлечете данните, трябва да се напише клас, който реализира интерфейс ValueExtractor. Съгласуваността ще използва този клас, за да се получи необходимата част от поредица обекта и да го представи на класа, с които можете да работите. Това означава, че имате възможност да "дръпне" не е на целия обект от данните, а само това, което трябва в този момент за изчисляване. По този начин можете да намали количеството данни, изпратени по мрежата.

Partishn (преграда)

Последователност дава възможност за съхраняване на данни във формата на "ключ-стойност", но ключ и стойност - това е логически понятия на системата. На физическо ниво, данните се групират в partishn. Това означава, че няколко ключа и стойности могат да принадлежат към един partishn. Partishn е единица за съхранение на данни. Когато възел и капка данните са пренаредени между възли, partishn изцяло копирани. А клас, който присвоява partishn за даден обект изпълнява KeyPartitioningStrategy интерфейс. По подразбиране, partishn вписват според Binary ключов обект хеш код (com.tangosol.util.Binary обект "тайна" масив от байтове). Вие сами може да повлияе на начина, назначен partishn, оставяйки тяхното изпълнение KeyPartitioningStrategy интерфейс.

Както в случая с базата данни, индексът на съгласуваността използва, за да се ускори за извличане на данни. За създаване на индекс, използван метод QueryMap.addIndex (аспиратор ValueExtractor, булева нареди java.util.Comparator сравнение).
ValueExtractor използва, за да изберете от масив от байтове, необходими данни за индекса. Когато се обадите метод addIndex, това не означава, че на клъстера ще започне да индексира данни в момента. Настоящата покана е препоръка за създаване на индекс, който ще позволи на ресурси, за да го направят. След създаването му, тези промени ще се показват правилно в индекса. Този метод може да се нарече няколко пъти и ако индексът вече съществува, той няма да бъде пресъздаден. Index - ниво структура възел. Това е, когато данните се копира от един възел към друг, индексът няма да се копира, вместо това ще се промени в съответствие с данните, които са на една и съща възел. Данните в индекса се съхраняват в deserialized форма, така че ако имате нужда, за да получите информация бързо и deserialization, създават индекс. Естествено, за удобство и скоростта трябва да "плати", а вие плащате за свободното пространство в клъстера и изчислителни ресурси. Вътре, индексът се състои от две под-индекси (преден и заден). Директни данни магазини индекс в дентно> стойност (която предвидени екстрактора), данните за обратна индекс съхранява под формата на ценностно> множество ключове.

Кеш: повторен, разпределени, в района на

Повторен - този кеш, в която всички данни се съхраняват в deserialized на всеки един от възлите. Този тип кеш, който осигурява най-бързо чете, но по-бавно напишете операции. Факт е, че в случай на запис, данните трябва да бъдат копирани на всички възли, където се конфигурират кеша. Този тип кеш обикновено се използва за рядко променливо малко количество данни.
Разпределени - това е основният тип кеш, който се използва за съхранение на данни. Тя ви позволява да се преодолеят ограниченията върху размера на паметта разпределени на един възел, така да се каже, "размазва" данните в рамките на клъстера. Този тип кеш осигурява хоризонтална скалируемост дължи на включването на нови възли на клъстера, както и устойчивост на откази, като съхранява копия на данни за други nodah.
Близо - тип хибрид на кеша, който е конфигуриран на викащата страна (викащата страна може да бъде както клиент и друг възел в кеш паметта). Като правило, този кеш е "струва", за да разпределят кеш, и магазините често използваните данни. Данните се съхраняват в deserialized. В случай на близко кеш паметта, има възможност, че изтичането на данни, така че трябва да изберете как данните ще бъдат актуализирани.

Сега, когато имаме основните градивни елементи на концепции, че е възможно да се отговори на въпроса, защо е необходимо съгласуваност.
Отговорът е прост: трябва устойчиви на грешки, хоризонтално мащабируема решение за съхранение, която осигурява бърз достъп до данните за паралелни изчисления. Поради наличието на множество възли, не е нужно ограничения по отношение на размера на данните, които може да се съхранява в клъстер (разбира се, вие сте ограничени от размера на наличната памет на физическа машина, посветена на тази задача). Вие нямате ограничения за размера на еднократна двойки ключ-стойност. Можете също така да изтеглите съхранени данни от точно това, което ви трябва за изчисляване, така че мрежата ще бъдат копирани на минимум информация. Като цяло, съгласуваност на цялата идеология е изградена въз основа да изпрати само това, което е необходимо за мрежата. Също така, можете да регулирате нивото на услугите и работата с компютър е достатъчно гъвкава, за вашата кандидатура. В резултат на това на предизвикателствата ще бъдат решавани бързо.
От гледна точка на управлението на, да купите решение, което ще отговаря на различни изисквания. След изтеглянето на данни в системата, ще бъде в състояние да ги извлечете по различни начини и да се използва в други системи, които използват съгласуваност като склад за данни. По този начин, чрез поставяне на основата на добра съгласуваност, може да се изгради една екосистема за добив и обработка на данни.

Ако се интересувате от тази тема, аз може да продължи серията от статии за съгласуваност. Напиши това, което ви интересува, и аз ще се опитам да отговоря.
Досега по отношение на:

  • конфигуриране на база структурата на клъстера
  • Работа с EntryAggregator
  • Работа с EntryProcessor
  • асинхронни повиквания към съгласуваност
  • погледнете в двоичен обект
  • Работа с индекси

Като цяло, трябва да се има предвид, че с Съгласуваността е лесно да се започне, но е много трудно да се справят добре и бързо, така че целта на поредица от статии за запълване на празнината между първоначалното ниво на познаване на системата, както и нивото на напредналите програмисти.

Наскоро моя колега е написал книга за напреднали програмисти, които се препоръчват за четене. В тази книга няма да намерите основните знания, но ще намерите примери за решения (с обяснения) е достатъчно сложни задачи.

Подкрепете проекта - споделете линка, благодаря!