Apache Ignite Zero Deployment: ඇත්තටම Zero?

Apache Ignite Zero Deployment: ඇත්තටම Zero?

අපි සිල්ලර ජාලයක තාක්ෂණික සංවර්ධන දෙපාර්තමේන්තුවයි. දිනක්, MSSQL සමඟ ඒකාබද්ධව Apache Ignite භාවිතා කරමින් විශාල පරිමාණ ගණනය කිරීම් වේගවත් කිරීමේ කාර්යය කළමනාකරණය කළ අතර, Java කේතයේ අලංකාර රූප සටහන් සහ උදාහරණ සහිත වෙබ් අඩවියක් පෙන්වීය. මම වහාම වෙබ් අඩවියට කැමති විය ශුන්ය යෙදවීම, ප්‍රාතිහාර්යයන් පොරොන්දු වන විස්තරය: ජාලයේ එක් එක් නෝඩය මත ඔබේ ජාවා හෝ ස්කලා කේතය හස්තීයව යෙදවීමට සහ එය වෙනස් වන සෑම අවස්ථාවකම එය නැවත යෙදවීමට අවශ්‍ය නැත. කාර්යය ප්‍රගතිශීලී වන විට, Zero Deployment හි විශේෂිත භාවිතයන් ඇති බව පෙනී ගියේය, මට බෙදා ගැනීමට අවශ්‍ය විශේෂාංග. කප්පාදුවට පහළින් සිතුවිලි සහ ක්රියාත්මක කිරීමේ විස්තර ඇත.

1. ගැටලුවේ ප්රකාශය

ගැටලුවේ සාරය පහත පරිදි වේ. SalesPoint විකුණුම් ස්ථාන නාමාවලියක් සහ Sku (Stock Keeping Unit) නිෂ්පාදන නාමාවලියක් ඇත. විකුණුම් ස්ථානයට "කුඩා" සහ "විශාල" අගයන් සහිත "ගබඩා වර්ගය" ගුණාංගයක් ඇත. එකතුවක් (විකිණුම් ස්ථානයේ නිෂ්පාදන ලැයිස්තුව) එක් එක් විකුණුම් ස්ථානයට සම්බන්ධ කර ඇත (DBMS වෙතින් පටවා ඇත) සහ තොරතුරු සපයනු ලබන්නේ නිශ්චිත දිනයේ සිට නිශ්චිත නිෂ්පාදිතය
එකතුවෙන් බැහැර කර හෝ එකතුවට එකතු කර ඇත.

කොටස් කළ විකුණුම් ස්ථාන හැඹිලියක් සංවිධානය කිරීම සහ සම්බන්ධිත නිෂ්පාදන පිළිබඳ තොරතුරු මාසයකට පෙර එහි ගබඩා කිරීම අවශ්‍ය වේ. සටන් පද්ධතිය සමඟ ගැළපීම සඳහා දත්ත පූරණය කිරීමට, පෝරමයේ එකතුවක් (ගබඩා වර්ගය, නිෂ්පාදන කේතය, දිනය, අංක_of_sales_points) ගණනය කර එය නැවත DBMS වෙත උඩුගත කිරීමට Ignite client node අවශ්‍ය වේ.

2. සාහිත්යය අධ්යයනය

මට තවම කිසිම අත්දැකීමක් නැහැ, ඒ නිසා මම ලිපෙන් නටන්න පටන් ගන්නවා. එනම්, ප්රකාශන සමාලෝචනයෙනි.

2016 වගන්තිය Apache Ignite හඳුන්වාදීම: පළමු පියවර Apache Ignite ව්‍යාපෘතියේ ප්‍රලේඛනයට සබැඳියක් අඩංගු වන අතර ඒ සමඟම මෙම ලේඛනයේ නොපැහැදිලි භාවයට දොස් පවරයි. මම එය දෙතුන් වතාවක් නැවත කියෙව්වා, පැහැදිලි බවක් නොපැමිණේ. මම නිල නිබන්ධනය වෙත යොමු කරමි ඇරඹේ, ඒ
ශුභවාදීව පොරොන්දු වෙනවා “ඔබ ඉක්මනින්ම ක්‍රියාත්මක වනු ඇත!” මම Apache Ignite Essentials වීඩියෝ දෙකක් නරඹමින් පරිසර විචල්‍ය සැකසුම් සොයා ගනිමින් සිටිමි, නමුත් ඒවා මගේ නිශ්චිත කාර්යය සඳහා එතරම් ප්‍රයෝජනවත් නොවීය. පළමු යෙදුම ගොඩනඟා සම්මත ගොනුව "example-ignite.xml" සමඟින් මම විධාන රේඛාවෙන් Ignite සාර්ථකව දියත් කරමි ගණනය කිරීමේ යෙදුම Maven භාවිතා කරමින්. යෙදුම ක්‍රියා කරන අතර Zero Deployment භාවිතා කරයි, මොනතරම් අලංකාරයක්ද!

මම තවදුරටත් කියෙව්වා, එහි උදාහරණය වහාම affinityKey භාවිතා කරයි (කලින් SQL විමසුමක් හරහා සාදන ලදී), සහ අද්භූත BinaryObject පවා භාවිතා කරයි:

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

මම එය කියෙව්වා ටිකක්: ද්විමය ආකෘතිය - පරාවර්තනය වැනි දෙයක්, වස්තුවක ක්ෂේත්‍ර වෙත නමෙන් ප්‍රවේශ වීම. වස්තුව සම්පූර්ණයෙන් ඉවත් නොකර (මතකය සුරැකීම) ක්ෂේත්‍රයක අගය කියවිය හැක. නමුත් Zero Deployment ඇති බැවින් Person වෙනුවට 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>

විකුණුම් ලක්ෂ්‍යයෙන් කොටස් කිරීම උපකල්පනය කරන්නේ එහි ඇති salesPointCache වාර්තා සඳහා අවශ්‍ය එකතුව එක් එක් පොකුරු නෝඩය මත ගොඩනගා ඇති අතර ඉන් පසුව සේවාදායක නෝඩය අවසාන සාරාංශය සිදු කරනු ඇති බවයි.

මම නිබන්ධනය කියවනවා මුලින්ම Ignite Compute Application එක, මම එය කරන්නේ සාදෘශ්‍යයෙන්. සෑම පොකුරු නෝඩයකම මම IgniteRunnable(), මෙවැනි දෙයක් ධාවනය කරමි:

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

මම එකතු කිරීම සහ උඩුගත කිරීමේ තර්කනය එකතු කර එය පරීක්ෂණ දත්ත කට්ටලයක් මත ධාවනය කරමි. සංවර්ධන සේවාදායකයේ සෑම දෙයක්ම දේශීයව ක්‍රියා කරයි.

මම CentOs පරීක්ෂණ සේවාදායකයන් දෙකක් දියත් කරමි, default-config.xml හි IP ලිපින සඳහන් කරන්න, එක් එක් මත ක්‍රියාත්මක කරන්න

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

ඉග්නයිට් නෝඩ් දෙකම ක්‍රියාත්මක වන අතර එකිනෙක දැකිය හැක. මම සේවාදායක යෙදුමේ xml වින්‍යාසය තුළ අවශ්‍ය ලිපින සඳහන් කරමි, එය ආරම්භ වී, ස්ථල විද්‍යාවට තුන්වන නෝඩයක් එක් කරන අතර වහාම නැවත නෝඩ් දෙකක් ඇත. ලොගය පේළියේ "ClassNotFoundException: model.SalesPoint" පෙන්වයි

SalesPoint sp=salesPointCache.get(spId);

StackOverflow පවසන්නේ දෝෂයට හේතුව CentOs සේවාදායක මත අභිරුචි විකුණුම් පොයින්ට් පන්තියක් නොමැති බවයි. අපි ආවා. "ඔබට ඔබගේ ජාවා කේතය එක් එක් නෝඩය මත අතින් යෙදවිය යුතු නැත" සහ යනාදිය ගැන කෙසේද? නැත්නම් "ඔබේ ජාවා කේතය" SalesPoint ගැන නොවේද?

මට යමක් මග හැරී ඇත - මම නැවත සෙවීමට, කියවීමට සහ සෙවීමට පටන් ගනිමි. ටික වේලාවකට පසු, මම මාතෘකාව පිළිබඳ සියල්ල කියවා ඇති බව මට හැඟේ, තවත් අලුත් දෙයක් නැත. මම සොයමින් සිටියදී, මට රසවත් අදහස් කිහිපයක් හමු විය.

වැලන්ටින් කුලිචෙන්කෝ, GridGain Systems හි Lead Architect, පිළිතුර 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 පද්ධති.

හබ්රේ පිළිබඳ ලිපිය microservices ගැන Denis Magda විසින් ලිපි තුනක් යොමු කරයි: Microservices I කොටස, Microservices II කොටස, Microservices III කොටස 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.

ඇත්ත වශයෙන්ම, එය එයයි. මෙන්න එය හැරෙනවා, ඇයි, මෙම අද්භූත ද්විමය ආකෘතිය!

3.SingleJar

ඩෙනිස් මගේ පුද්ගලික ශ්‍රේණිගත කිරීම්වල ප්‍රථම ස්ථානය ලබා ගත්තා, IMHO ලබා ගත හැකි සියල්ලෙන් වඩාත්ම ප්‍රයෝජනවත් නිබන්ධනය. ඔහුගේ තුළ MicroServices උදාහරණය Github හි පොකුරු නෝඩ් සැකසීම සඳහා සම්පුර්ණයෙන්ම සූදානම් කළ උදාහරණයක් අඩංගු වන අතර, එය අතිරේක squatting නොමැතිව සම්පාදනය කරයි.

මම එය එලෙසම කරන අතර විධාන රේඛා තර්කය මත පදනම්ව “දත්ත නෝඩය” හෝ “සේවාදායක නෝඩය” දියත් කරන තනි jar ගොනුවක් ලබා ගන්න. එකලස් කිරීම ආරම්භ වන අතර ක්රියා කරයි. Zero Deployment පරාජය වී ඇත.

මෙගාබයිට් පරීක්ෂණ දත්තවල සිට ගිගාබයිට් දස ගනනකට සටන් දත්ත දක්වා සංක්‍රමණය වීම නිසා ද්විමය ආකෘතිය පවතින බව පෙන්නුම් කළේය. නෝඩ් වල මතක පරිභෝජනය ප්‍රශස්ත කිරීම අවශ්‍ය වූ අතර BinaryObject ඉතා ප්‍රයෝජනවත් වූයේ මෙහිදීය.

4. නිගමන

Apache Ignite ව්‍යාපෘති ප්‍රලේඛනයේ නොපැහැදිලි බව පිළිබඳ පළමු දෝෂාරෝපණය සාධාරණ විය; 2016 සිට සුළු වශයෙන් වෙනස් වී ඇත. වෙබ් අඩවියක් සහ/හෝ ගබඩාවක් මත පදනම්ව ක්‍රියාකාරී මූලාකෘතියක් එකලස් කිරීම ආරම්භකයකුට පහසු නොවේ.

සිදු කරන ලද කාර්යයේ ප්රතිඵල මත පදනම්ව, හැඟීම වූයේ Zero Deployment ක්රියා කරයි, නමුත් පද්ධති මට්ටමින් පමණි. මෙවැනි දෙයක්: අභිරුචි පන්ති සමඟ වැඩ කිරීමට දුරස්ථ පොකුරු නෝඩ් ඉගැන්වීමට BinaryObject භාවිතා කරයි; ශුන්ය යෙදවීම - අභ්යන්තර යාන්ත්රණය
Apache Ignite එයම සහ පොකුර පුරා පද්ධති වස්තු බෙදාහරියි.

නව Apache Ignite පරිශීලකයින්ට මගේ අත්දැකීම ප්‍රයෝජනවත් වනු ඇතැයි මම බලාපොරොත්තු වෙමි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න