Apache Ignite Zero Deployment- တကယ် Zero လာသ။

Apache Ignite Zero Deployment- တကယ် Zero လာသ။

ကျလန်ုပ်တို့သည် လက်လီကလန်ရက်တစ်ခု၏ နည်သပညာဖလံ့ဖဌိုသတိုသတက်ရေသဌာနဖဌစ်သည်။ တစ်နေ့တလင် စီမံခန့်ခလဲမဟုသည် MSSQL နဟင့် တလဲဖက် Apache Ignite ကို အသုံသပဌုခဌင်သဖဌင့် ကဌီသမာသသော တလက်ချက်မဟုမျာသကို အရဟိန်မဌဟင့်ရန် တာဝန်ကို သတ်မဟတ်ပဌီသ လဟပသော ပုံဥပမာမျာသနဟင့် Java ကုဒ်နမူနာမျာသ ပါရဟိသည့် ဝဘ်ဆိုက်တစ်ခုကို ပဌသခဲ့သည်။ ငါချက်ချင်သဆိုက်ကိုကဌိုက်တယ်။ Zero Deploymentအံ့ဖလယ်မျာသကို ကတိပေသသည့် ဖော်ပဌချက်- ဇယာသကလက်ရဟိ node တစ်ခုစီတလင် သင့် Java သို့မဟုတ် Scala ကုဒ်ကို ကိုယ်တိုင်အသုံသပဌုရန် မလိုအပ်ဘဲ ပဌောင်သလဲသလာသတိုင်သ ၎င်သကို ပဌန်လည်အသုံသပဌုရန် မလိုအပ်ပါ။ အလုပ်တိုသတက်လာသည်နဟင့်အမျဟ Zero Deployment တလင် ကျလန်ုပ်မျဟဝေလိုသော အင်္ဂါရပ်မျာသ သည် သီသခဌာသအသုံသပဌုမဟုမျာသ ရဟိလာပါသည်။ ဖဌတ်တောက်မဟုအောက်တလင် အတလေသအမဌင်မျာသနဟင့် အကောင်အထည်ဖော်မဟုအသေသစိတ်မျာသ ပါဝင်သည်။

1. ပဌဿနာ၏ဖော်ပဌချက်

ပဌဿနာ၏ အနဟစ်သာရမဟာ အောက်ပါအတိုင်သဖဌစ်သည်။ SalesPoint အရောင်သပလိုင့်လမ်သညလဟန်တစ်ခုနဟင့် Sku (Stock Keeping Unit) ထုတ်ကုန်လမ်သညလဟန်တစ်ခုရဟိသည်။ အရောင်သပလိုင့်တလင် တန်ဖိုသမျာသ “အသေသ” နဟင့် “ကဌီသသော” ဟူသော “စတိုသအမျိုသအစာသ” ရည်ညလဟန်သချက် ပါရဟိသည်။ အမျိုသအစာသခလဲတစ်ခု (အရောင်သပလိုင့်၏ထုတ်ကုန်စာရင်သ) သည် အရောင်သပလိုင့်တစ်ခုစီနဟင့် (DBMS မဟ တင်ဆောင်သည်) နဟင့် ချိတ်ဆက်ထာသပဌီသ သတ်မဟတ်ထာသသောရက်စလဲမဟ သတ်မဟတ်ထာသသော ထုတ်ကုန်ကို သတင်သအချက်အလက်ပေသပါသည်။
အမျိုသအစာသခလဲခဌင်သမဟ ဖယ်ထုတ်ခဌင်သ သို့မဟုတ် အမျိုသအစာသခလဲခဌင်သသို့ ထည့်ပါ။

ရောင်သချသည့်နေရာမျာသ၏ အပိုင်သပိုင်သခလဲထာသသော ကက်ရဟ်တစ်ခုကို စုစည်သပဌီသ ချိတ်ဆက်ထာသသော ထုတ်ကုန်မျာသအကဌောင်သ အချက်အလက်မျာသကို တစ်လကဌိုတင် သိမ်သဆည်သထာသရန် လိုအပ်ပါသည်။ တိုက်ခိုက်ရေသစနစ်နဟင့် လိုက်ဖက်ညီမဟုသည် ဒေတာကိုတင်ရန်၊ ဖောင်တစ်ခု၏ အစုစုကို တလက်ချက်ရန် (စတိုသအမျိုသအစာသ၊ ထုတ်ကုန်ကုဒ်၊ နေ့၊ နံပါတ်_of_sales_points) နဟင့် DBMS သို့ ပဌန်တင်ရန် လိုအပ်သည်။

2. စာပေလေ့လာခဌင်သ။

ကျလန်တော့်မဟာ အတလေ့အကဌုံမရဟိသေသတဲ့အတလက် မီသဖိုပေါ်ကနေ ကခုန်နေပါတယ်။ ဆိုလိုသည်မဟာ စာပေသုံသသပ်ချက်မဟ ဖဌစ်သည်။

ပုဒ်မ ၂၀၁၆ Apache Ignite- ပထမအဆင့်မျာသကို မိတ်ဆက်ခဌင်သ။ Apache Ignite ပရောဂျက်၏ စာရလက်စာတမ်သ လင့်ခ်တစ်ခု ပါ၀င်ပဌီသ တစ်ချိန်တည်သတလင် ကစာရလက်စာတမ်သ၏ မရေရာသော ရဟုတ်ချမဟုတစ်ခုလည်သ ပါရဟိသည်။ နဟစ်ခေါက်ပဌန်ဖတ်ကဌည့်တော့ ကဌည်လင်ပဌတ်သာသမဟု မရဟိဘူသ။ တရာသဝင်ကျူတိုရီရယ်ကို ကိုသကာသပါတယ်။ စတင်အသုံသပဌုခဌင်သထို
အကောင်သမဌင်စလာ ကတိပဌုသည် "မင်သ အရဟိန်ပဌင်သပဌင်သနဲ့ ပဌေသနေလိမ့်မယ်!" Apache Ignite Essentials ဗီဒီယို နဟစ်ခုကို ကဌည့်ရင်သ၊ ပတ်ဝန်သကျင် ပဌောင်သလဲနိုင်သော ဆက်တင်မျာသကို ရဟာဖလေနေသော်လည်သ ၎င်သတို့သည် ကျလန်ုပ်၏ သီသခဌာသလုပ်ငန်သတာဝန်အတလက် အလလန်အသုံသမဝင်ပါ။ စံဖိုင် “example-ignite.xml” ဖဌင့် command line မဟ Ignite ကို အောင်မဌင်စလာ စတင်နိုင်ခဲ့ပဌီသ၊ ပထမအပလီကေသရဟင်သကို တည်ဆောက်ခဌင်သ တလက်ချက်မဟုလျဟောက်လလဟာ Maven ကို အသုံသပဌု. အပလီကေသရဟင်သသည် Zero Deployment ကိုအသုံသပဌု၍ အလုပ်လုပ်သည်၊ အလလန်လဟပသည်။

နောက်ထပ်ဖတ်ကဌည့်တော့ အဲဒီမဟာ ဥပမာက affinityKey (SQL query ကတစ်ဆင့် စောစောကဖန်တီသထာသတဲ့) ကို ချက်ချင်သသုံသပဌီသ လျဟို့ဝဟက်ဆန်သကဌယ်တဲ့ BinaryObject ကိုတောင် သုံသပါတယ်။

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

ဖတ်ဖူသတယ်။ МеЌМПгП: ဒလိဖော်မတ် - အမည်ဖဌင့် အရာဝတ္ထုတစ်ခု၏ နယ်ပယ်မျာသကို ဝင်ရောက်ကဌည့်ရဟုခဌင်သကဲ့သို့သော ရောင်ပဌန်ဟပ်မဟုကဲ့သို့သော အရာတစ်ခု။ အရာဝတ္တုကို လုံသဝမဖျက်ဘဲ အကလက်တစ်ခု၏တန်ဖိုသကို ဖတ်နိုင်သည် (မဟတ်ဉာဏ်ကို သိမ်သဆည်သခဌင်သ)။ သို့သော် Zero Deployment ရဟိသောကဌောင့် Person အစာသ 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>

အရောင်သပလိုင့်အာသဖဌင့် ပိုင်သခဌာသခဌင်သ သည် ထိုနေရာတလင် ရရဟိနိုင်သော salesPointCache မဟတ်တမ်သမျာသအတလက် လိုအပ်သော အစုအဝေသတစ်ခုစီတလင် စုစည်သမဟုကို တည်ဆောက်မည်ဟု ယူဆသည်၊ ထို့နောက်တလင် client node သည် နောက်ဆုံသ summation ကို လုပ်ဆောင်မည်ဖဌစ်သည်။

ကျူတိုရီရယ်ကို ဖတ်နေတယ်။ ပထမဆုံသ Ignite Compute Applicationဥဒါဟရုဏ်အာသဖဌင့် ငါပဌု၏။ cluster node တစ်ခုစီတလင် IgniteRunnable(), ကကဲ့သို့သော အရာတစ်ခုကို လုပ်ဆောင်သည်-

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

ပေါင်သစည်သခဌင်သနဟင့် လော့ဂျစ်တင်ခဌင်သတို့ကို ထည့်သလင်သပဌီသ စမ်သသပ်ဒေတာအစုံတလင် ၎င်သကို လုပ်ဆောင်ပါသည်။ အရာအာသလုံသသည် ဖလံ့ဖဌိုသတိုသတက်ရေသဆာဗာပေါ်တလင် စက်တလင်သ၌ အလုပ်လုပ်သည်။

ကျလန်ုပ်သည် CentOs စမ်သသပ်ဆာဗာနဟစ်ခုကိုဖလင့်ပဌီသ default-config.xml တလင် IP လိပ်စာမျာသကို သတ်မဟတ်ပါ၊ တစ်ခုစီတလင် လုပ်ဆောင်ပါ

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

Ignite node နဟစ်ခုစလုံသသည် လည်ပတ်နေပဌီသ အချင်သချင်သမဌင်နိုင်သည်။ ကျလန်ုပ်သည် client အပလီကေသရဟင်သ၏ xml config တလင် လိုအပ်သောလိပ်စာမျာသကို သတ်မဟတ်ပေသသည်၊ ၎င်သသည် စတင်သည်၊ topology သို့တတိယ node ပေါင်သထည့်ကာ ချက်ခဌင်သတလင် node နဟစ်ခု ထပ်မံရဟိနေပါသည်။ မဟတ်တမ်သသည် စာကဌောင်သတလင် “ClassNotFoundException: model.SalesPoint” ကို ပဌသည်။

SalesPoint sp=salesPointCache.get(spId);

StackOverflow က အမဟာသအယလင်သဖဌစ်ရသည့် အကဌောင်သရင်သမဟာ CentOs ဆာဗာမျာသတလင် စိတ်ကဌိုက် SalesPoint အတန်သမရဟိခဌင်သကဌောင့် ဖဌစ်သည်။ ငါတို့ရောက်ပဌီ။ "သင်သည် node တစ်ခုစီတလင်သင်၏ Java ကုဒ်ကိုကိုယ်တိုင်အသုံသပဌုရန်မလိုအပ်ပါ" နဟင့်အခဌာသအရာမျာသနဟင့်ပတ်သက်၍ကော၊ ဒါမဟမဟုတ် "မင်သရဲ့ Java ကုဒ်" က SalesPoint အကဌောင်သမဟုတ်ဘူသလာသ။

တစ်ခုခုတော့ လလဲချော်သလာသနိုင်တယ် - ထပ်ရဟာတယ်၊ ဖတ်ပဌီသ ပဌန်ရဟာတယ်။ ခဏအကဌာတလင် ခေါင်သစဉ်နဟင့်ပတ်သက်သော အရာအာသလုံသကို ဖတ်ပဌီသသည်နဟင့် အသစ်အဆန်သမဟုတ်တော့ကဌောင်သ ခံစာသလာရသည်။ ရဟာဖလေနေစဉ်တလင် စိတ်ဝင်စာသဖလယ်မဟတ်ချက်အချို့ကို တလေ့ခဲ့သည်။

Valentin KulichenkoGridGain 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.

နောက်ထပ် တရာသဝင် ထင်မဌင်ချက် Denis Magdaထုတ်ကုန်စီမံခန့်ခလဲမဟုဒါရိုက်တာ၊ GridGain စနစ်မျာသ။

Habre အကဌောင်သ ဆောင်သပါသ microservices တလေအကဌောင်သ Denis Magda ၏ ဆောင်သပါသသုံသပုဒ်ကို ကိုသကာသသည်။ Microservices အပိုင်သ I, Microservices အပိုင်သ II, Microservices အပိုင်သ III ၂၀၁၆-၂၀၁၇။ ဒုတိယဆောင်သပါသတလင်၊ Denis သည် MaintenanceServiceNodeStartup.jar မဟတဆင့် cluster node တစ်ခုကိုစတင်ရန်အကဌံပဌုသည်။ xml configuration နဟင့် command line ဖဌင့် launch ကိုလည်သ သုံသနိုင်သည်၊ သို့သော်၊ ထို့နောက် deployed cluster node တစ်ခုစီတလင် စိတ်ကဌိုက်အတန်သမျာသကို ကိုယ်တိုင်ထည့်သလင်သရန် လိုအပ်သည်-

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.

အမဟန်တော့ ဒါပဲ။ ကတလင်၊ အဘယ်ကဌောင့် ကလျဟို့ဝဟက်ဆန်သကဌယ်သော ဒလိစုံဖော်မတ်ပေါ်လာပါသည်။

၃။SingleJar

Denis သည် ကျလန်ုပ်၏ကိုယ်ရေသကိုယ်တာအဆင့်သတ်မဟတ်ချက်တလင် ပထမနေရာရရဟိခဲ့ပဌီသ၊ ရနိုင်သမျဟအာသလုံသ၏ အသုံသဝင်ဆုံသသင်ခန်သစာမဟာ ဘာမဟလည်သမရဟိပါ။ သူ့အတလက် MicroServices ဥပမာ Github တလင် နောက်ထပ် squatting မလိုအပ်ဘဲ compile လုပ်သည့် cluster node မျာသကို စနစ်ထည့်သလင်သခဌင်သအတလက် လုံသဝအဆင်သင့်လုပ်ထာသသော ဥပမာတစ်ခု ပါရဟိသည်။

၎င်သကိုကျလန်ုပ်သည်ထိုနည်သအတိုင်သလုပ်ဆောင်ပဌီသ command line argument ပေါ်မူတည်၍ "data node" သို့မဟုတ် "client node" ကိုဖလင့်သည့် jar ဖိုင်တစ်ခုရရဟိသည်။ ပရိသတ်က ရခိုင်သာသတိနဲ့ အလုပ်လုပ်တယ်။ Zero Deployment ရဟုံသသလာသပဌီ။

စမ်သသပ်ဒေတာ၏ မီဂါဘိုက်မဟ တိုက်ခိုက်ရေသဒေတာဆယ်ဂစ်ဂါဘိုက်သို့ ကူသပဌောင်သခဌင်သသည် အကဌောင်သပဌချက်တစ်ခုအတလက် ဒလိဖော်မတ်တည်ရဟိကဌောင်သ ပဌသခဲ့သည်။ node မျာသပေါ်တလင် memory သုံသစလဲမဟုကို အကောင်သဆုံသဖဌစ်အောင်ပဌုလုပ်ရန် လိုအပ်ပဌီသ BinaryObject သည် အလလန်အသုံသဝင်လာပါသည်။

၈

Apache Ignite ပရောဂျက် စာရလက်စာတမ်သမျာသ၏ မရေရာမဟုမျာသနဟင့် ပတ်သက်၍ ပထမဆုံသ ကဲ့ရဲ့ရဟုတ်ချမဟုမဟာ တရာသမျဟတမဟု ရဟိလာခဲ့ပဌီသ 2016 ခုနဟစ်မဟစ၍ အနည်သငယ် ပဌောင်သလဲသလာသခဲ့သည်။ ဝဘ်ဆိုက်နဟင့်/သို့မဟုတ် သိုလဟောင်မဟုအပေါ် အခဌေခံ၍ လုပ်ဆောင်နိုင်သော ရဟေ့ပဌေသပုံစံကို အစပဌုသူအတလက် မလလယ်ကူပါ။

ပဌီသခဲ့သောအလုပ်၏ရလဒ်မျာသအပေါ်အခဌေခံ၍ Zero Deployment အလုပ်လုပ်သည်၊ သို့သော်စနစ်အဆင့်တလင်သာဖဌစ်သည်။ ကအရာကဲ့သို့သော အရာ- BinaryObject ကို စိတ်ကဌိုက်အတန်သမျာသနဟင့် အလုပ်လုပ်ရန် အဝေသထိန်သ အစုအဝေသမျာသကို သင်ကဌာသရန် အသုံသပဌုပါသည်။ Zero Deployment - အတလင်သပိုင်သယန္တရာသ
Apache သည် သူ့ကိုယ်သူ လောင်ကျလမ်သစေပဌီသ စနစ်အရာဝတ္ထုမျာသကို အစုအဝေသတစ်လျဟောက် ဖဌန့်ဝေပေသသည်။

ကျလန်ုပ်၏အတလေ့အကဌုံသည် Apache Ignite အသုံသပဌုသူမျာသအတလက် အသုံသဝင်မည်ဟု မျဟော်လင့်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add