
Մենք տեխնոլոգիական զարգացման բաժինն ենք. Մի օր ղեկավարությունը հարցադրեց՝ արագացնել զանգվածային հաշվարկները, օգտագործելով Apache Ignite և MSSQL, ցույց տվեց հրաշալի օրինակի կայք և Java կոդի օրինակներ: Կայքում անմիջապես դուրեկան բաներ էին , որի նկարագրությունը խոստանում է հրաշքներ. դուք պետք չէ ձեռքով տեղադրել ձեր Java կամ Scala կոդը ցանցի յուրաքանչյուր հանգույցում և կրկին տեղադրել այն, երբ այն փոխվում է: Աշխատանքի ընթացքում պարզվեց, որ Zero Deployment-ը ունի հատուկ օգտագործման բնույթ, որի մասին ուզում եմ կիսվել: Հոդվածի մեջ մտածումներ և իրականացման մանրամասներ:
1. Հայտնի խնդիր
Փ Problema essentia հետևյալն է. Ունենք վաճառքի կետեր SalesPoint և ապրանքների ցուցակ Sku (Stock Keeping Unit): Վաճառքի կետն ունի «մասնազատ» հատկություն, որը կարող է լինել «փոքր» կամ «մեծ»: Ամեն վաճառքի կետին միակցվում է (բեռնվում տվյալների բազայից) assortment (վաճառքի կանոնակարգի ապրանքների ցուցակ) և մատուցվում է տեղեկություն, որ նշված ամսաթվից նշված ապրանքը
կոչվում է վաճառքի ցուցակից կամ ավելացվում է վաճառքի ցուցակին:
Պետք է կազմակերպել վաճառքի կետերի բաժանված կեշ և պահել նրա մեջ կապակցված ապրանքների տեղեկությունը մեկ ամիս առաջ: Հակամարտության համակարգը նշանակում է, որ Ignite հաճախորդի հանգույցը պետք է բեռնեին տվյալները, հաշվել (ավագի ձևը (մասնազատ, ապրանքի ծածկագիր, օր, վաճառքի կետերի թիվ)) և արտահանեն դա տվյալների բազա:
2. Ե վարակման ուսումնասիրություն
Հաշվի առնելով, որ փորձարկում ինձ դեռ չունենք, սկսում եմ հիմքերից: Կամ՝ հրապարակումների վերանայումից:
2016 թվականի հոդվածը պարունակում է հղում Apache Ignite նախագծի փաստաթղթերին և նաև վերադառնալ այն փաստի մասին, որ այդ փաստաթղթերը հստակ չեն: Որպեսզի ցանկության դեպքում մի քանի անգամ կարդացել եմ, պարզություն չկա: Հիմա անցնում եմ պաշտոնական դասընթացին , որը
ապահովում է «Կ Скоро եք օգտվելու օժանդակությամբ». Կարող եմ դեպի միջավայրի փոփոխականների կարգավորումները, դիտում եմ երկու տեսանյութ Apache Ignite Essentials, հատուկ իմ խնդիրների համար դրանք այնքան օգտակար չեն: Ջնջում եմ Ignite-ը սովորական ֆայլով «example-ignite.xml», հավաքվում է առաջին ծրագիրը Maven-ի միջոցով: Ծրագիրը աշխատում է և օգտագործում Zero Deployment, ինչ գեղեցկություն է:
Այնուհետև կարդում եմ, և այնտեղ առաջարկվում է նախընտրություն affinityKey (առաջին անգամ ստեղծված SQL-ով), ինչպես նաև կիրառվում է գեհենային BinaryObject:
IgniteCache<BinaryObject, BinaryObject> people
= ignite.cache("Person").withKeepBinary(); Ես կարդում եմ : բինարային ձևաչափը — մի բան, որը նման է անդրադարձի, առարկայի դաշտերին մուտք գործել անունով: Կարող է կարդալ դաշտի արժեքը առանց ամբողջական դեսերիալիզացիայի (հիշողության խնայողություն): Բայց ինչու է BinaryObject են անվանում Person, երբ Zero Deployment-ը կա? Ինչու IgniteCache<Key,Person> կոչվում է IgniteCache<BinaryObject, BinaryObject>? Այս պահին հստակ չէ:
Խմբագրում եմ Compute Application իմ դեպքի համար: Վաճառքի կետերի բառարանում առաջին հիմքը MSSQL-ում սահմանված է որպես [id] [int] NOT NULL, ստեղծում եմ կեշ аналогично
IgniteCache<Integer, SalesPoint> salesPointCache=ignite.cache("spCache")XML կարգավորիչում նշում եմ, որ կեշը բաժանված է
Վաճառքի կետերով բաժանումը ենթադրում է, որ կիրառվող ագրեգատը կկառուցվի յուրաքանչյուր խմբավորիչում موجود վաճառքի կետերի տվյալների վրա, ինչից հետո հաճախորդի կետը կկատարի ընդհանուր հաշվարկումը:
Ունեմ ուսուցում , անում եմ նմանության հիման վրա: Յուրաքանչյուր խմբավորիչում գործարկում եմ IgniteRunnable(), մոտավորապես այսպես:
@Override
public void run() {
SalesPoint sp=salesPointCache.get(spId);
sp.calculateSalesPointCount();
..
}Ավելացնում եմ ագրեգացման և արտահանման տրամաբանությունը, գործարկում եմ փորձնական տվյալների հավաքածուի վրա: Լոկալ հասցեջում everything works.
Գործարկում եմ երկու փորձնական սերվեր 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 օգտվողի դասը: Դա խնդիր է: Ինչպես կարող է «you don’t have to manually deploy your Java code on each node» և այլն? Թե արդյո՞ք «your Java code» նշանակում է SalesPoint-ի մասին:
Կանհավանական է, որ ինչ-որ բան բաց տող եմ թողել — սկսում եմ որոնել, կարդալ և նորից որոնել: Ամեն ինչ, որ գտնում եմ կապված թեմայի շուրջ, արդեն չկա: Այդ ընթացքում մի քանի հետաքրքիր նկատառում եմ գտել:
, GridGain Systems-ի Lead Architect-ը, StackOverflow-ում, ապրիլ 2016:
Model class-ները չեն ներդնում նույն աշխարհագրության մեջ, բայց կարող եք օգտագործել withKeepBinary() լոկտորը
կեշում և հարցնել BinaryObjects: Այս կերպ կխուսափել եք սկիզբի կողմում deserialization
և չեք ստանա ClassNotFoundException:Մեկ այլ հեղինակավոր կարծիք: , GridGain Systems-ի արտադրանքի կառավարման տնօրեն:
Հոդված Հաբրում պատասխանել է երեք հոդվածներին Denis Magda-ի: , , 2016-2017 թվականների: Երկրորդ հոդվածում Denis-ն առաջարկում է սկսել խմբավորիչի узла գործողությունը 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.Նմանապես, that's it. Ի՞նչ է սա, որ այդ առեղծվածային բինարային ձևաչափը նշանակություն ունի!
3. SingleJar
Denis-ին զբաղեցնում է իմ անձնական դասակարգման առաջին տեղը, իմ կարծիքով ամենաեկեղեցական այս պահին ամենից օգտակար ուսուցումը: Նրա գիտափորձի վրա լիովին պատրաստ գործի օրինակ է, որը կոմպլեկտ է արված առանց որևէ լրացուցիչ դժվարությունների:
Ես կատարում եմ ըստ պատկերի և նմանության, ստանում եմ միավորված jar ֆայլ, որը գործարկում է «data node» կամ «client node» կախված հրամանային ունիվերսալի արգումենտից: Կազմակերպումը մեկնարկվեց և աշխատում է: Zero Deployment-ը հաղթահարված է:
Մեգաբայթների փորձնական տվյալներից անցումը տասնյակ ԳԲ մարտական նվիրվածությանը ցույց տվեց, որ բինար ձևաչափը գոյություն ունի այլևս։ Տեղին էր օպտիմալացնել հիշողության ծախսը նոդերի վրա, և այստեղ BinaryObject-ը շատ օգտակար դարձավ:
4. Արխիքում
Ապաչե Ignite նախագծի անորոշության առաջին անգամ հանդիպած քննադատությունը արդարացի էր, 2016 թվականից հետո ոչինչ շատ չի փոխվել։ Նորեկին դժվար է գործարկման աշխատանքային նմուշ հավաքել կայքի և/թ կամ ռեպոզիտարի հիման վրա:
Անցած աշխատանքի արդյունքում առաջացավ զգացում, որ Zero Deployment-ը գործում է, սակայն միայն համակարգային մակարդակում: Հրապարակորեն, BinaryObject-ը օգտագործվում է հեռահար узլերի կլաստերում օգտագործողի դասեր սովորելու համար; Zero Deployment-ը — ապաչիխ Ignite-ի ներքին մեխանիզմ է և տարածում է համակարգային օբյեկտներ կլաստերում:
ապա Apache Ignite-ի կանխատեսելի մարմնով:
Համոզված եմ, որ իմ փորձը օգտակար կլինի Apache Ignite նոր օգտատերերին:
Ընտանիք: habr.com
