د اپاچي د صفر ګمارنه: واقعیا صفر؟

د اپاچي د صفر ګمارنه: واقعیا صفر؟

موږ د پرچون شبکې د ټیکنالوژۍ پراختیا څانګه یو. یوه ورځ، مدیریت د MSSQL سره په ګډه د Apache Ignite په کارولو سره د لوی کچې محاسبې ګړندۍ کولو دنده وټاکه، او د جاوا کوډ د ښکلي انځورونو او مثالونو سره یوه ویب پاڼه وښودله. ما سمدلاسه سایټ خوښ کړ صفر ګومارل، د کوم وضاحت چې د معجزو ژمنه کوي: تاسو اړتیا نلرئ په لاسي ډول خپل جاوا یا سکالا کوډ په گرډ کې په هر نوډ کې ځای په ځای کړئ او هرکله چې بدل شي بیا یې ځای په ځای کړئ. لکه څنګه چې کار پرمختګ وکړ، دا معلومه شوه چې د صفر ځای پرځای کول ځانګړي کارونې لري، هغه ځانګړتیاوې چې زه یې غواړم شریک کړم. د کټ لاندې د افکارو او پلي کولو توضیحات دي.

1. د ستونزې بیان

د ستونزې جوهر په لاندې ډول دی. دلته د SalesPoint د پلور ټکي لارښود او د Sku (Stock Keeping Unit) محصول لارښود شتون لري. د پلور نقطه د "کوچني" او "لوی" ارزښتونو سره د "د پلورنځي ډول" ځانګړتیا لري. یو ترتیب (د پلور د نقطې د محصولاتو لیست) د پلور هرې نقطې سره وصل دی (د DBMS څخه بار شوی) او معلومات چمتو شوي چې له ټاکلې نیټې څخه ټاکل شوي محصول
له ترتیب څخه ایستل شوی یا په ترتیب کې اضافه شوی.

دا اړینه ده چې د پلور پوائنټونو ویشل شوې زیرمه تنظیم کړئ او د یوې میاشتې دمخه د وصل شوي محصولاتو په اړه معلومات پکې ذخیره کړئ. د جنګي سیسټم سره مطابقت د Ignite پیرودونکي نوډ ته اړتیا لري ترڅو ډاټا بار کړي، د فورمې مجموعه محاسبه کړي (د پلورنځي ډول، د محصول کوډ، ورځ، شمیره_of_sales_points) او دا بیرته DBMS ته اپلوډ کړئ.

2. د ادب مطالعه

زه تر اوسه کومه تجربه نه لرم، نو زه د ډنډ څخه نڅا پیل کوم. دا د خپرونو د بیاکتنې څخه دی.

ماده 2016 د Apache Ignite معرفي کول: لومړی ګامونه د Apache Ignite پروژې اسنادو ته لینک لري او په ورته وخت کې د دې اسنادو مبهمیت لپاره ملامت دی. ما دا یو څو ځله بیا لوستل، وضاحت نه راځي. زه رسمي ټیوټوریل ته مراجعه کوم پیل کولکوم چې
په خوشبینه توګه ژمنه کوي "تاسو به په یوه وخت کې راپورته شئ او په منډه کېږئ!" زه د چاپیریال متغیر تنظیمات په ګوته کوم ، د اپاچي Ignite Essentials دوه ویډیوګانې ګورم ، مګر دا زما د ځانګړي دندې لپاره خورا ګټور ندي. ما په بریالیتوب سره Ignite د معیاري فایل "example-ignite.xml" سره د کمانډ لاین څخه پیل کړ، د لومړي غوښتنلیک په جوړولو سره د کمپیوټري غوښتنلیک د Maven په کارولو سره. غوښتنلیک کار کوي او د صفر پلي کولو کاروي ، څه ښکلا!

ما نور لوستل ، او هلته مثال سمدلاسه affinityKey کاروي (مخکې د 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>

د پلور د نقطې له مخې ویشل فرض کوي چې اړین مجموعه به د پلور پوائنټ کیچ ریکارډونو لپاره په هر کلستر نوډ کې رامینځته شي چې هلته شتون لري ، وروسته له دې چې د پیرودونکي نوډ به وروستۍ مجموعه ترسره کړي.

زه درسونه لولم لومړی Ignite Compute Application، زه دا د مشابهت له مخې کوم. په هر کلستر نوډ کې زه IgniteRunnable() چلوم، یو څه داسې:

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

زه د راټولولو او اپلوډ کولو منطق اضافه کوم او دا د ټیسټ ډیټا سیټ کې پرمخ وړم. هر څه په محلي توګه د پراختیایي سرور په اړه کار کوي.

زه دوه د CentOs ازموینې سرورونه پیلوم، IP پتې په ډیفالټ-config.xml کې مشخص کړئ، په هر یو کې اجرا کړئ

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

دواړه Ignite نوډونه روان دي او یو بل لیدلی شي. زه د مراجعینو غوښتنلیک په xml ترتیب کې اړین پتې مشخص کوم، دا پیل کیږي، ټوپولوژي ته دریم نوډ اضافه کوي او سمدلاسه بیا دوه نوډونه شتون لري. لاګ په لیکه کې "ClassNotFoundException: model.SalesPoint" ښیې

SalesPoint sp=salesPointCache.get(spId);

StackOverflow وايي چې د تېروتنې دلیل دا دی چې د CentOs سرورونو کې د ګمرکي SalesPoint ټولګي شتون نلري. موږ را رسیدلي یو. څنګه "تاسو اړتیا نلرئ په هر نوډ کې خپل جاوا کوډ په لاسي ډول ځای په ځای کړئ" او داسې نور؟ یا "ستاسو جاوا کوډ" د SalesPoint په اړه نه دی؟

ما شاید یو څه له لاسه ورکړی وي - زه بیا لټون پیلوم، لوستل او بیا لټون کول. یو څه وروسته، زه احساس کوم چې ما د موضوع په اړه هرڅه لوستلي دي، نور هیڅ شی نشته. پداسې حال کې چې ما لټون کاوه، ما ځینې په زړه پورې تبصرې وموندلې.

ویلینټین کولیچینکود ګریډ ګین سیسټمونو مخکښ معمار، ځواب په 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.

بل مستند نظر: ډینس مګداد محصول مدیریت رییس، د ګریډ ګین سیسټمونه.

د هابري په اړه مقاله د مایکرو خدماتو په اړه د ډینس مګدا لخوا درې مقالې حواله کوي: کوچني خدمتونه برخه I, کوچني خدمتونه دویمه برخه, کوچني خدمتونه دریمه برخه 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 د ټولو موجودو ګټورو زده کړو. په هغه کې د مایکرو خدماتو بیلګه ګیتوب د کلستر نوډونو تنظیم کولو بشپړ چمتو شوی مثال لري ، کوم چې پرته له کوم اضافي سکویټینګ څخه تالیف کوي.

زه دا په ورته ډول ترسره کوم او یو واحد جار فایل ترلاسه کوم چې د کمانډ لاین دلیل پورې اړه لري "ډیټا نوډ" یا "کلینټ نوډ" لانچ کوي. مجلس پیل او کار کوي. د صفر ګومارنې ماتې شوې.

د ټیسټ ډیټا میګابایټ څخه لسګونه ګیګابایټ جنګي ډیټا ته لیږد وښودله چې د بائنری بڼه د یو دلیل لپاره شتون لري. دا اړینه وه چې په نوډونو کې د حافظې مصرف اصلاح کړئ ، او دا هغه ځای دی چې BinaryObject خورا ګټور ثابت شو.

4. نتيجه

د اپاچي Ignite پروژې اسنادو د مبهمتوب په اړه لومړۍ ملامتي سمه ثابته شوه؛ د 2016 راهیسې لږ بدلون راغلی. د پیل کونکي لپاره دا اسانه نده چې د ویب پا andې او / یا ذخیره کولو پراساس د فعالیت پروټوټایپ راټول کړي.

د ترسره شویو کارونو د پایلو پراساس، تاثر دا و چې د صفر ډیپلومینټ کار کوي، مګر یوازې د سیسټم په کچه. د دې په څیر یو څه: BinaryObject د دودیز ټولګیو سره کار کولو لپاره د لرې پرتو کلستر نوډونو ښوولو لپاره کارول کیږي؛ صفر ګومارنه - داخلي میکانیزم
اپاچی پخپله جلا کوي او په ټول کلستر کې د سیسټم توکي توزیع کوي.

زه امید لرم چې زما تجربه به د نوي اپاچي Ignite کاروونکو لپاره ګټوره وي.

سرچینه: www.habr.com

Add a comment