Apache Ignite Zero Deployment: واقعي صفر؟

Apache Ignite Zero Deployment: واقعي صفر؟

اسان هڪ پرچون نيٽ ورڪ جي ٽيڪنالاجي ترقي کاتي آهيون. هڪ ڏينهن، انتظاميا MSSQL سان گڏ Apache Ignite استعمال ڪندي وڏي پيماني تي حساب ڪتاب کي تيز ڪرڻ جو ڪم مقرر ڪيو، ۽ جاوا ڪوڊ جي خوبصورت تصويرن ۽ مثالن سان هڪ ويب سائيٽ ڏيکاري. مون کي فوري طور تي سائيٽ پسند ڪيو زيرو لڳائڻ، جنهن جي وضاحت معجزن جو واعدو ڪري ٿو: توهان کي گرڊ ۾ هر نوڊ تي پنهنجو جاوا يا اسڪالا ڪوڊ دستي طور تي لڳائڻ جي ضرورت ناهي ۽ هر دفعي ان کي تبديل ڪرڻ تي ٻيهر ترتيب ڏيڻو پوندو. جيئن ڪم اڳتي وڌندو ويو، اهو ظاهر ٿيو ته زيرو ڊيپلائيشن جا مخصوص استعمال آهن، جن جون خاصيتون آئون حصيداري ڪرڻ چاهيان ٿو. ڪٽ هيٺان خيالات ۽ عمل درآمد جا تفصيل آهن.

1. مسئلي جو بيان

مسئلي جو خلاصو هن ريت آهي. هتي هڪ SalesPoint سيلز پوائنٽ ڊاريڪٽري ۽ هڪ Sku (اسٽاڪ رکڻ واري يونٽ) پراڊڪٽ ڊاريڪٽري آهي. وڪري جي نقطي ۾ "ننڍو" ۽ "وڏي" جي قدرن سان "اسٽور جو قسم" خاصيت آهي. هڪ ترتيب (وڪري جي نقطي جي شين جي فهرست) وڪرو جي هر نقطي سان ڳنڍيل آهي (ڊي بي ايم ايس تان لوڊ ٿيل) ۽ معلومات مهيا ڪئي وئي آهي ته مخصوص تاريخ کان مخصوص پيداوار
مجموعن مان خارج ٿيل يا ترتيب ۾ شامل ڪيو ويو.

اهو ضروري آهي ته وڪري جي پوائنٽن جي ورهاڱي واري ڪيش کي ترتيب ڏيو ۽ ان ۾ هڪ مهيني اڳ ۾ ڳنڍيل شين جي معلومات کي ذخيرو ڪريو. جنگي نظام سان مطابقت جي ضرورت آهي Ignite ڪلائنٽ نوڊ کي ڊيٽا لوڊ ڪرڻ لاءِ، فارم جي مجموعي کي ڳڻيو (اسٽور جو قسم، پراڊڪٽ ڪوڊ، ڏينهن، number_of_sales_points) ۽ ان کي واپس DBMS تي اپ لوڊ ڪريو.

2. ادب جو مطالعو

مون کي اڃا تائين ڪو به تجربو نه آهي، تنهنڪري مان اسٽو تان ناچ ڪرڻ شروع ڪري رهيو آهيان. اهو آهي، اشاعت جي جائزي مان.

آرٽيڪل 2016 متعارف ڪرائڻ Apache Ignite: پهريون قدم Apache Ignite پروجيڪٽ جي دستاويزن جي لنڪ تي مشتمل آهي ۽ ساڳئي وقت هن دستاويز جي مبهميت لاءِ ملامت. مون ان کي ٻه ڀيرا ٻيهر پڙهيو، وضاحت نه ايندي. مان حوالو ڏيان ٿو سرڪاري سبق شروع ڪرڻته
پراميد طور تي واعدو ڪيو "توهان هڪ لمحي ۾ اٿي ۽ هلندا!" مان ڳولي رهيو آهيان ماحوليات جي متغير سيٽنگون، ٻه Apache Ignite Essentials وڊيوز ڏسي رهيو آهيان، پر اهي منهنجي مخصوص ڪم لاءِ گهڻو ڪارائتو نه هئا. مون ڪاميابيءَ سان Ignite کي ڪمانڊ لائين مان معياري فائل “example-ignite.xml” سان لانچ ڪيو، پھرين ايپليڪيشن ٺاھڻ ڳڻپيوڪر ايپليڪيشن Maven استعمال ڪندي. ايپليڪيشن ڪم ڪري ٿي ۽ استعمال ڪري ٿي زيرو ڊيپلائيشن، ڪهڙي خوبي!

مون اڳتي پڙهيو، ۽ اتي مثال فوري طور تي استعمال ڪري ٿو affinityKey (اڳ ۾ ٺهيل هڪ SQL سوال ذريعي)، ۽ اڃا به استعمال ڪري ٿو پراسرار BinaryObject:

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

مون ان کي پڙهيو ٿوري دير: بائنري فارميٽ - ڪجھ عڪاسي جھڙوڪ، نالي سان ھڪڙي اعتراض جي فيلڊ تائين رسائي. ڪنهن به فيلڊ جي قيمت کي پڙهي سگھي ٿو بغير مڪمل طور تي اعتراض کي ختم ڪرڻ (ميموري کي بچائڻ). پر ڇو استعمال ڪيو ويو آهي BinaryObject شخص جي بدران، ڇو ته اتي زيرو ڊيپلائيشن آهي؟ ڇو IgniteCache IgniteCache ڏانهن منتقل ڪيو ويو ؟ اهو اڃا واضح ناهي.

مان پنهنجي ڪيس جي مناسبت سان Compute Application کي ٻيهر ٺاهي رهيو آهيان. MSSQL ۾ پوائنٽس آف سيل جي ڊاريڪٽري جي بنيادي ڪنجي جي وضاحت ڪئي وئي آهي [id] [int] NOT NULL، مان هڪ ڪيش ٺاهيان ٿو قياس ذريعي

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

xml config ۾ مان ظاهر ڪريان ٿو ته ڪيش ورهاڱي ڪئي وئي آهي

<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 پتي کي default-config.xml ۾ بيان ڪريو، هر هڪ تي عمل ڪريو

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

ٻئي Ignite nodes ھلندا آھن ۽ ھڪ ٻئي کي ڏسي سگھندا آھن. آئون ڪلائنٽ ايپليڪيشن جي xml ترتيب ۾ گهربل ايڊريس بيان ڪريان ٿو، اهو شروع ٿئي ٿو، ٽاپولوجي ۾ ٽيون نوڊ شامل ڪري ٿو ۽ فوري طور تي ٻه نوڊس ٻيهر آهن. لاگ ڏيکاري ٿو "ClassNotFoundException: model.SalesPoint" لائن ۾

SalesPoint sp=salesPointCache.get(spId);

StackOverflow چوي ٿو ته غلطي جو سبب اهو آهي ته CentOs سرورز تي ڪابه ڪسٽم سيلز پوائنٽ ڪلاس ناهي. اسان پهچي ويا آهيون. ڪيئن "توهان کي هر نوڊ تي دستي طور تي توهان جي جاوا ڪوڊ کي ترتيب ڏيڻ جي ضرورت ناهي" وغيره وغيره؟ يا ڇا "توهان جو جاوا ڪوڊ" 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.

ٻيو مستند رايو: ڊينس مگدا، ڊائريڪٽر آف پراڊڪٽ مينيجمينٽ، گرڊ گين سسٽم.

Habré تي آرٽيڪل microservices جي باري ۾ ڊينس مگدا پاران ٽن مضمونن جو حوالو: Microservices حصو I, Microservices حصو II, Microservices حصو 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 سڀ کان وڌيڪ مفيد سبق موجود آهن. هن جي MicroServices مثال Github ڪلستر نوڊس کي ترتيب ڏيڻ جو مڪمل طور تي تيار ڪيل مثال تي مشتمل آهي، جيڪو بغير ڪنهن اضافي اسڪواٽنگ جي گڏ ڪري ٿو.

مان اهو ساڳيو طريقي سان ڪريان ٿو ۽ هڪ واحد جار فائل حاصل ڪري ٿو جيڪو "ڊيٽا نوڊ" يا "ڪلائنٽ نوڊ" کي لانچ ڪري ٿو ڪمان لائن دليل جي بنياد تي. اسيمبلي شروع ٿئي ٿي ۽ ڪم ڪري ٿي. زيرو ڊولپمينٽ کي شڪست ڏني وئي آهي.

ٽيسٽ ڊيٽا جي ميگا بائيٽ کان ڏهن گيگا بائيٽ جي جنگي ڊيٽا ڏانهن منتقلي ڏيکاري ٿي ته بائنري فارميٽ هڪ سبب لاءِ موجود آهي. اهو ضروري هو ته نوڊس تي ياداشت جي استعمال کي بهتر ڪرڻ لاء، ۽ اهو آهي جتي BinaryObject تمام مفيد ثابت ٿيو.

4. نتيجو

Apache Ignite پروجيڪٽ جي دستاويزن جي مبهميت جي باري ۾ پهريون ملامت ظاهر ٿيو منصفانه؛ ٿورڙي 2016 کان تبديل ٿي چڪو آهي. شروعات ڪندڙ لاءِ ويب سائيٽ ۽/يا مخزن جي بنياد تي ڪم ڪندڙ پروٽوٽائپ گڏ ڪرڻ آسان ناهي.

ڪيل ڪم جي نتيجن جي بنياد تي، اهو تاثر هو ته زيرو ڊيپلائيمينٽ ڪم ڪري ٿو، پر صرف سسٽم جي سطح تي. ڪجهه هن طرح: BinaryObject استعمال ڪيو ويندو آهي ريموٽ ڪلستر نوڊس کي سيکارڻ لاءِ ڪسٽم ڪلاس سان ڪم ڪرڻ لاءِ؛ زيرو لڳائڻ - اندروني ميڪانيزم
Apache پاڻ کي Ignite ڪري ٿو ۽ سسٽم جي شين کي سڄي ڪلستر ۾ ورهائي ٿو.

مون کي اميد آهي ته منهنجو تجربو نون Apache Ignite استعمال ڪندڙن لاءِ ڪارآمد ثابت ٿيندو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو