Apache Ignite Zero Deployment: በእውነት ዜሮ?

Apache Ignite Zero Deployment: በእውነት ዜሮ?

እኛ የችርቻሮ አውታር የቴክኖሎጂ ልማት ክፍል ነን። አንድ ቀን፣ አመራሩ Apache Ignite ከ MSSQL ጋር በመተባበር መጠነ ሰፊ ስሌቶችን የማፋጠን ስራ አዘጋጅቷል፣ እና የሚያምሩ ምሳሌዎችን እና የጃቫ ኮድ ምሳሌዎችን የያዘ ድህረ ገጽ አሳይቷል። ወዲያው ጣቢያውን ወደድኩት ዜሮ ማሰማራት, ተአምራትን እንደሚሰጥ መግለጫው: የእርስዎን Java ወይም Scala ኮድ በፍርግርግ ውስጥ በእያንዳንዱ መስቀለኛ መንገድ ላይ እራስዎ ማሰማራት እና በተለወጠ ቁጥር እንደገና ማሰማራት የለብዎትም. ስራው እየገፋ ሲሄድ, ዜሮ ማሰማራት የተወሰኑ አጠቃቀሞች አሉት, እኔ ላካፍላቸው የምፈልጋቸው ባህሪያት. ከቁርጡ በታች ሀሳቦች እና የአተገባበር ዝርዝሮች አሉ።

1. የችግሩ መግለጫ

የችግሩ ፍሬ ነገር የሚከተለው ነው። የሽያጭ ነጥቦች የሽያጭ ነጥብ ማውጫ እና Sku (የአክሲዮን ማቆያ ክፍል) የምርት ማውጫ አለ። የሽያጭ ቦታው "ትንሽ" እና "ትልቅ" ከሚሉት እሴቶች ጋር "የመደብር አይነት" ባህሪ አለው. አሶርትመንት (የሽያጭ ቦታ ምርቶች ዝርዝር) ከእያንዳንዱ የሽያጭ ቦታ ጋር ተያይዟል (ከዲቢኤምኤስ የተጫነ) እና ከተጠቀሰው ቀን ጀምሮ መረጃው ተሰጥቷል.
ከአዛርቱ የተገለሉ ወይም ወደ ስብስቡ የተጨመሩ።

የተከፋፈለ የሽያጭ ነጥቦችን መሸጎጫ ማደራጀት እና በውስጡም ስለተገናኙ ምርቶች መረጃ ከአንድ ወር በፊት ማከማቸት ያስፈልጋል። ከጦርነቱ ስርዓት ጋር ተኳሃኝነት የIgnite ደንበኛ መስቀለኛ መንገድ ውሂብን ለመጫን፣ የቅጹን ድምር (የመደብር አይነት፣ የምርት ኮድ፣ ቀን፣ የሽያጭ_ነጥብ) አስልቶ ወደ DBMS መልሶ መጫን ያስፈልገዋል።

2. የስነ-ጽሑፍ ጥናት

እስካሁን ምንም ልምድ የለኝም, ስለዚህ ከምድጃ ውስጥ መደነስ እጀምራለሁ. ማለትም ከሕትመቶች ግምገማ።

አንቀጽ 2016 Apache Ignite: የመጀመሪያ እርምጃዎችን በማስተዋወቅ ላይ የ Apache Ignite ፕሮጀክት ሰነድ አገናኝ እና በተመሳሳይ ጊዜ ለዚህ ሰነድ ግልጽነት ነቀፋ ይዟል። ሁለት ጊዜ ደግሜ አነበብኩት፣ ግልጽነት አይመጣም። ኦፊሴላዊውን አጋዥ ስልጠና እጠቅሳለሁ። መጀመር, እሱም
በብሩህ ተስፋ “በአስደሳች ሁኔታ ውስጥ ትሆናለህ!” በማለት ቃል ገብቷል። የአካባቢን ተለዋዋጭ መቼቶች እያጣራሁ ነው፣ ሁለት Apache Ignite Essentials ቪዲዮዎችን እየተመለከትኩ ነው፣ ነገር ግን ለተለየ ስራዬ በጣም ጠቃሚ አልነበሩም። Ignite ከትዕዛዝ መስመሩ "example-ignite.xml" በሚለው መደበኛ ፋይል በተሳካ ሁኔታ አስጀምሪያለሁ፣ የመጀመሪያውን መተግበሪያ በመገንባት ትግበራ ማስላት Maven በመጠቀም. አፕሊኬሽኑ ይሰራል እና ዜሮ ማሰማራትን ይጠቀማል፣ እንዴት ያለ ውበት ነው!

የበለጠ አንብቤያለሁ፣ እና እዚያ ምሳሌው ወዲያውኑ የ affinityKeyን ይጠቀማል (ቀደም ሲል በ SQL መጠይቅ የተፈጠረ) እና ሚስጥራዊውን የሁለትዮሽ ነገር ይጠቀማል፡

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

አንብቤዋለሁ ትንሽ።: ሁለትዮሽ ቅርጸት - እንደ ነጸብራቅ ያለ ነገር ፣ የአንድን ነገር መስኮች በስም መድረስ። ነገሩን ሙሉ በሙሉ ሳያጠፋ (ማስታወስን ሳያስቀምጡ) የመስክን ዋጋ ማንበብ ይችላል። ግን ለምንድነው BinaryObject በሰው ምትክ ጥቅም ላይ የሚውለው ዜሮ ማሰማራት ስላለ? ለምን IgniteCache ወደ IgniteCache ተላልፏል ? እስካሁን ግልጽ አልሆነም።

ከጉዳዬ ጋር እንዲስማማ የ Compute መተግበሪያን እንደገና እየሰራሁ ነው። በ MSSQL ውስጥ ያለው የሽያጭ ነጥቦች ማውጫ ዋና ቁልፍ እንደ [መታወቂያ] [int] ባዶ አይደለም ፣ በአመሳስሎ መሸጎጫ እፈጥራለሁ

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>

በሽያጭ ቦታ መከፋፈል የሚፈለገው ድምር በእያንዳንዱ የክላስተር መስቀለኛ መንገድ ላይ ለሽያጭ ፖይንትካሼ መዛግብት እንደሚገነባ ያስባል፣ ከዚያ በኋላ የደንበኛው መስቀለኛ መንገድ የመጨረሻውን ማጠቃለያ ያከናውናል።

ትምህርቱን እያነበብኩ ነው። መጀመሪያ ማስላት መተግበሪያ፣ በአመሳስሎ ነው የማደርገው። በእያንዳንዱ የክላስተር መስቀለኛ መንገድ ላይ IgniteRunnable ()ን እሮጣለሁ፣ የሆነ ነገር

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

አመክንዮ መጨመር እና መጫን እጨምራለሁ እና በሙከራ የውሂብ ስብስብ ላይ አሂድዋለሁ። ሁሉም ነገር በልማት አገልጋዩ ላይ በአካባቢው ይሰራል።

ሁለት የ CentOs የሙከራ አገልጋዮችን አስጀምሬያለሁ፣ የአይፒ አድራሻዎቹን በነባሪ-config.xml ውስጥ እገልጻለሁ፣ በእያንዳንዱ ላይ አከናውናለሁ።

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

ሁለቱም ኢግኒት ኖዶች እየሮጡ ነው እና እርስ በእርስ ሊተያዩ ይችላሉ። በደንበኛው መተግበሪያ የ xml ውቅረት ውስጥ የሚፈለጉትን አድራሻዎች እገልጻለሁ ፣ ይጀምራል ፣ ሦስተኛውን አንጓ ወደ ቶፖሎጂ ያክላል እና ወዲያውኑ ሁለት አንጓዎች እንደገና አሉ። ምዝግብ ማስታወሻው በመስመር ላይ "ClassNotFoundException: model.SalesPoint" ያሳያል

SalesPoint sp=salesPointCache.get(spId);

StackOverflow የስህተቱ ምክንያት በCentOs አገልጋዮች ላይ ብጁ SalesPoint ክፍል ባለመኖሩ ነው ብሏል። ደርሰናል። "የእርስዎን የጃቫ ኮድ በእያንዳንዱ መስቀለኛ መንገድ ላይ እራስዎ ማሰማራት የለብዎትም" እና የመሳሰሉትስ? ወይስ "የእርስዎ ጃቫ ኮድ" ስለ SalesPoint አይደለም?

የሆነ ነገር አምልጦኝ ይሆናል - እንደገና መፈለግ፣ ማንበብ እና እንደገና መፈለግ ጀመርኩ። ከተወሰነ ጊዜ በኋላ, በርዕሱ ላይ ሁሉንም ነገር እንዳነበብኩ ይሰማኛል, ምንም አዲስ ነገር የለም. በመፈለግ ላይ ሳለሁ አንዳንድ አስደሳች አስተያየቶችን አገኘሁ።

ቫለንቲን ኩሊቼንኮበ GridGain ሲስተምስ መሪ አርክቴክት፣ መልስ በ 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 ሲስተምስ.

ስለ Habré መጣጥፍ ስለ ማይክሮ አገልግሎቶች በዴኒስ ማክዳ ሶስት መጣጥፎችን ዋቢ አድርጓል፡- የማይክሮ አገልግሎቶች ክፍል 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. ነጠላ ጃር

ዴኒስ በእኔ የግል ደረጃ አንደኛ ቦታ ወሰደ፣ IMHO ካሉት ሁሉ በጣም ጠቃሚው አጋዥ ስልጠና ነው። በእሱ ውስጥ የማይክሮ ሰርቪስ ምሳሌ Github ክላስተር ኖዶችን የማዘጋጀት ሙሉ ለሙሉ ዝግጁ የሆነ ምሳሌ ይዟል፣ ይህም ያለ ምንም ተጨማሪ ስኩዊት ያጠናቅራል።

በተመሳሳይ መንገድ አደርጋለሁ እና በትእዛዝ መስመር ክርክር ላይ በመመስረት "የውሂብ ኖድ" ወይም "የደንበኛ ኖድ" የሚጀምር ነጠላ የጃር ፋይል አገኛለሁ. ስብሰባው ተጀምሮ ይሠራል። ዜሮ ማሰማራት ተሸንፏል።

ከሜጋባይት የሙከራ መረጃ ወደ አስር ጊጋባይት የውጊያ መረጃ የተደረገው ሽግግር የሁለትዮሽ ፎርማት በምክንያት መኖሩን ያሳያል። በኖዶች ላይ የማህደረ ትውስታ ፍጆታን ማመቻቸት አስፈላጊ ነበር, እና BinaryObject በጣም ጠቃሚ ሆኖ የተገኘው እዚህ ነው.

4. መደምደሚያ

ስለ Apache Ignite የፕሮጀክት ሰነድ ግልጽነት የገጠመው የመጀመሪያው ነቀፋ ፍትሃዊ ሆኖ ተገኝቷል፤ ከ2016 ጀምሮ ብዙም የተለወጠ ነገር የለም። ለጀማሪ በድር ጣቢያ እና/ወይም በማከማቻ ማከማቻ ላይ በመመስረት የሚሰራ ፕሮቶታይፕ መሰብሰብ ቀላል አይደለም።

በተሰራው ስራ ውጤት ላይ በመመርኮዝ, ዜሮ ማሰማራት እንደሚሰራ, ግን በስርአት ደረጃ ብቻ ነበር. እንደዚህ ያለ ነገር: BinaryObject የርቀት ክላስተር ኖዶች ከብጁ ክፍሎች ጋር እንዲሰሩ ለማስተማር ጥቅም ላይ ይውላል; ዜሮ ማሰማራት - ውስጣዊ አሠራር
Apache እራሱን ያቃጥላል እና የስርዓት ነገሮችን በክላስተር ውስጥ ያሰራጫል።

የእኔ ተሞክሮ ለአዲሱ Apache Ignite ተጠቃሚዎች ጠቃሚ እንደሚሆን ተስፋ አደርጋለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ