Apache Ignite Zero Deployment: Дар ҳақиқат сифр?

Apache Ignite Zero Deployment: Дар ҳақиқат сифр?

Мо шӯъбаи рушди технологияи шабакаи чакана мебошем. Рӯзе роҳбарият вазифа гузошт, ки ҳисобҳои калонҳаҷмро бо истифода аз Apache Ignite дар якҷоягӣ бо MSSQL суръат бахшад ва вебсайтеро бо тасвирҳои зебо ва намунаҳои коди Java нишон дод. Ба ман дарҳол сайт писанд омад Ҷойгиркунии сифр, тавсифи он мӯъҷизаҳоро ваъда медиҳад: ба шумо лозим нест, ки рамзи Java ё Scala-и худро дар ҳар як гиреҳи шабака дастӣ ҷойгир кунед ва ҳар дафъае, ки он тағир меёбад, онро дубора ҷойгир кунед. Вақте ки кор пеш рафт, маълум шуд, ки Zero Deployment истифодаи мушаххас дорад, ки хусусиятҳои онҳоро ман мехоҳам мубодила кунам. Дар зер буриш фикрҳо ва тафсилоти татбиқ мебошанд.

1. Изҳороти масъала

Мохияти масъала чунин аст. Феҳристи нуқтаи фурӯши SalesPoint ва феҳристи маҳсулоти Sku (Воҳиди нигоҳдории захираҳо) мавҷуд аст. Нуқтаи фурӯш дорои хусусияти "Намуди мағоза" бо арзишҳои "хурд" ва "калон" мебошад. Ассортимент (рӯйхати маҳсулоти нуқтаи фурӯш) ба ҳар як нуқтаи фурӯш пайваст карда мешавад (аз DBMS бор карда мешавад) ва маълумот пешниҳод карда мешавад, ки аз санаи муқарраршуда маҳсулоти зикршуда.
аз ассортимент хориҷ карда ё ба ассортимент илова карда шудааст.

Зарур аст, ки кэши тақсимшудаи нуқтаҳои савдо ташкил карда, дар он маълумот дар бораи маҳсулоти пайвастшуда як моҳ пеш нигоҳ дошта шавад. Мутобиқӣ бо системаи ҷангӣ аз гиреҳи муштарии Ignite талаб мекунад, ки маълумотро бор кунад, маҷмӯи формаро ҳисоб кунад (Намуди мағоза, коди маҳсулот, рӯз, рақами_фурӯшҳо) ва дубора ба DBMS бор кунад.

2. Омузиши адабиёт

Ман то ҳол таҷриба надорам, аз ин рӯ ман аз оташдон рақс карданро сар мекунам. Яъне аз баррасии нашрияҳо.

Моддаи 2016 Муаррифии Apache Ignite: Қадамҳои аввал дорои истинод ба ҳуҷҷатҳои лоиҳаи Apache Ignite ва ҳамзамон сарзаниш барои номуайянии ин ҳуҷҷатҳо мебошад. Як-чанд маротиба хондам, равшанӣ намеояд. Ман ба дастури расмӣ муроҷиат мекунам сар кардани кор, ки
хушбинона ваъда медиҳад, ки "Шумо дар як лаҳза ба кор меравед!" Ман танзимоти тағирёбандаи муҳити зистро мефаҳмам ва ду видеои Apache Ignite Essentials -ро тамошо мекунам, аммо онҳо барои вазифаи мушаххаси ман чандон муфид набуданд. Ман Ignite-ро аз сатри фармон бо файли стандартии "example-ignite.xml" бомуваффақият оғоз кардам, ки барномаи аввалро бунёд мекунам. Барномаи ҳисоббарорӣ бо истифода аз Maven. Ин барнома кор мекунад ва Zero Deployment -ро истифода мебарад, чӣ зебост!

Ман минбаъд хондам ва дар он ҷо мисол фавран afinityKey-ро истифода мебарад (қаблан тавассути дархости SQL сохта шуда буд) ва ҳатто BinaryObject пурасрорро истифода мебарад:

IgniteCache<BinaryObject, BinaryObject> people 
        = ignite.cache("Person").withKeepBinary(); 

Ман онро хондам як каме: формати дуӣ - чизе монанди инъикос, дастрасӣ ба майдонҳои объект бо ном. Метавонад арзиши майдонро бидуни сериализатсияи пурраи объект (сарфаи хотира) хонад. Аммо чаро BinaryObject ба ҷои Шахс истифода мешавад, зеро ҷойгиркунии сифр вуҷуд дорад? Чаро IgniteCache ба IgniteCache интиқол дода мешавад ? Ҳанӯз маълум нест.

Ман Замимаи ҳисоббарориро барои мувофиқ кардани ҳолати худ аз нав таҳия мекунам. Калиди ибтидоии феҳристи нуқтаҳои фурӯш дар MSSQL ҳамчун [id] [int] NULL НЕСТ, ман кэшро аз рӯи аналогия эҷод мекунам

IgniteCache<Integer, SalesPoint> salesPointCache=ignite.cache("spCache")

Дар конфигуратсияи xml ман нишон медиҳам, ки кэш тақсим шудааст

<bean class="org.apache.ignite.configuration.CacheConfiguration">
    <property name="name" value="spCache"/>
    <property name="cacheMode" value="PARTITIONED"/>
</bean>

Тақсимкунӣ аз рӯи нуқтаи фурӯш тахмин мекунад, ки агрегати зарурӣ дар ҳар як гиреҳи кластер барои сабтҳои salesPointCache дар он ҷо сохта мешавад ва баъд аз он гиреҳи муштарӣ ҷамъбасти ниҳоиро иҷро мекунад.

Ман дарсро мехонам Аввалин барномаи Ignite Compute, Ман инро аз рӯи қиёс мекунам. Дар ҳар як гиреҳи кластер ман IgniteRunnable() -ро иҷро мекунам, чизе монанди ин:

  @Override
  public void run() {
    SalesPoint sp=salesPointCache.get(spId);
    sp.calculateSalesPointCount();
    ..
  }

Ман мантиқи ҷамъкунӣ ва боркуниро илова мекунам ва онро дар маҷмӯи додаҳои санҷишӣ иҷро мекунам. Ҳама чиз дар сервери рушд ба таври маҳаллӣ кор мекунад.

Ман ду сервери санҷишии CentOs-ро оғоз мекунам, суроғаҳои IP-ро дар default-config.xml муайян мекунам ва ҳар яки онро иҷро мекунам.

./bin/ignite.sh config/default-config.xml

Ҳарду гиреҳи Ignite кор мекунанд ва якдигарро мебинанд. Ман суроғаҳои лозимиро дар конфигуратсияи xml замимаи муштарӣ муайян мекунам, он оғоз мешавад, гиреҳи сеюмро ба топология илова мекунад ва дарҳол боз ду гиреҳ пайдо мешаванд. Журнал дар сатр "ClassNotFoundException: model.SalesPoint" -ро нишон медиҳад

SalesPoint sp=salesPointCache.get(spId);

StackOverflow мегӯяд, ки сабаби хато дар он аст, ки дар серверҳои CentOs синфи фармоишии SalesPoint вуҷуд надорад. Мо расидем. Дар бораи "ба шумо лозим нест, ки рамзи Java-и худро дар ҳар як гиреҳ дастӣ ҷойгир кунед" ва ғайра? Ё "рамзи Java-и шумо" дар бораи SalesPoint нест?

Эҳтимол ман чизеро аз даст додам - ​​ман боз ба ҷустуҷӯ, хондан ва ҷустуҷӯ кардан шурӯъ мекунам. Пас аз чанде, ман ҳис мекунам, ки ман ҳама чизро дар мавзӯъ хондаам, дигар ҳеҷ чизи наве нест. Вақте ки ман ҷустуҷӯ мекардам, ман якчанд шарҳҳои ҷолиб пайдо кардам.

Валентин Куличенко, Архитектори пешбари GridGain Systems, ҷавоб дар StackOverflow, апрели 2016:

Model classes are not peer deployed, but you can use withKeepBinary() flag
on the cache and query BinaryObjects. This way you will avoid deserialization
on the server side and will not get ClassNotFoundException.

Боз як андешаи мӯътабар: Денис Магда, Директори идоракунии маҳсулот, GridGain Systems.

Мақола дар бораи Ҳабре дар бораи хизматрасониҳои микроэлементхо ба се мақолаи Денис Магда истинод мекунад: Хидматҳои хурд Қисми I, Хидматҳои хурд Қисми II, Хидматрасониҳои хурд Қисми III 2016-2017. Дар мақолаи дуюм, Денис пешниҳод мекунад, ки гиреҳи кластер тавассути MaintenanceServiceNodeStartup.jar оғоз карда шавад. Шумо инчунин метавонед оғозро бо конфигуратсияи xml ва сатри фармон истифода баред, аммо пас шумо бояд ба таври дастӣ синфҳои фармоиширо дар ҳар як гиреҳи кластери ҷойгиршуда ҷойгир кунед:

That's it. Start (..)  node using MaintenanceServiceNodeStartup file or pass
maintenance-service-node-config.xml to Apache Ignite's ignite.sh/bat scripts.
If you prefer the latter then make sure to build a jar file that will contain
all the classes from java/app/common and java/services/maintenance directories.
The jar has to be added to the classpath of every node where the service
might be deployed.

Воқеан, ҳамин аст. Дар ин ҷо маълум мешавад, ки чаро ин формати пурасрор дуӣ!

3.SingleJar

Денис дар рейтинги шахсии ман ҷои аввалро гирифт, IMHO муфидтарин дарси ҳама дастрас. Дар худ Мисол MicroServices Github дорои як намунаи комилан омодаи танзими гиреҳҳои кластер мебошад, ки бе ягон сквати иловагӣ тартиб медиҳад.

Ман инро ҳамин тавр мекунам ва як файли jar мегирам, ки вобаста ба далели сатри фармон "гиреҳи маълумот" ё "гиреҳи мизоҷ" -ро оғоз мекунад. Маҷлис оғоз ва кор мекунад. Ҷойгиркунии сифр мағлуб карда шуд.

Гузариш аз мегабайтҳои маълумоти санҷишӣ ба даҳҳо гигабайтҳои маълумоти ҷангӣ нишон дод, ки формати бинарӣ бо ягон сабаб вуҷуд дорад. Зарур буд, ки истеъмоли хотира дар гиреҳҳо оптимизатсия карда шавад ва дар ин ҷо BinaryObject хеле муфид буд.

4. Хулоса

Аввалин сарзаниш дар бораи номуайянии ҳуҷҷатҳои лоиҳавии Apache Ignite одилона баромад; аз соли 2016 каме тағйир ёфт. Ҷамъоварии прототипи амалкунанда дар асоси вебсайт ва/ё репозиторий барои шурӯъкунандагон осон нест.

Дар асоси натиҷаҳои кори анҷомдода, таассурот чунин буд, ки Zero Deployment кор мекунад, аммо танҳо дар сатҳи система. Чизе монанди ин: BinaryObject барои таълим додани гиреҳҳои кластери дурдаст барои кор бо синфҳои фармоишӣ истифода мешавад; Ҷойгиркунии сифр - механизми дохилӣ
Apache Ignite худаш ва объектҳои системаро дар тамоми кластер паҳн мекунад.

Умедворам, ки таҷрибаи ман барои корбарони нави Apache Ignite муфид хоҳад буд.

Манбаъ: will.com

Илова Эзоҳ