බෙදා හරින ලද යෙදුම් ගොඩනැගීමේ කොටස්. ශුන්ය ආසන්න කිරීම

බෙදා හරින ලද යෙදුම් ගොඩනැගීමේ කොටස්. ශුන්ය ආසන්න කිරීම

ලෝකය නිශ්චල නොවේ. ප්රගතිය නව තාක්ෂණික අභියෝග නිර්මාණය කරයි. වෙනස්වන අවශ්‍යතා අනුව, තොරතුරු පද්ධතිවල ගෘහ නිර්මාණ ශිල්පය පරිණාමය විය යුතුය. අද අපි සිදුවීම් මත පදනම් වූ ගෘහනිර්මාණ ශිල්පය, සමගාමීත්වය, සමමුහුර්තභාවය, අසමමුහුර්තභාවය සහ ඔබට Erlang හි මේ සියල්ල සමඟ සාමකාමීව ජීවත් විය හැකි ආකාරය ගැන කතා කරමු.

හැඳින්වීම

සැලසුම් කරන ලද පද්ධතියේ විශාලත්වය සහ ඒ සඳහා වන අවශ්යතා අනුව, අපි, සංවර්ධකයින්, පද්ධතියේ තොරතුරු හුවමාරු කිරීමේ ක්රමය තෝරා ගනිමු. බොහෝ අවස්ථාවන්හීදී, සේවා අන්තර්ක්‍රියා සංවිධානය කිරීම සඳහා, වැඩ කරන විකල්පයක් තැරැව්කරුවෙකු සමඟ යෝජනා ක්‍රමයක් විය හැකිය, උදාහරණයක් ලෙස, RabbitMQ හෝ kafka මත පදනම්ව. නමුත් සමහර අවස්ථාවලදී සිදුවීම් ගලායාම, SLA සහ පද්ධතිය පාලනය කිරීමේ මට්ටම සූදානම් කළ පණිවිඩ යැවීම අපට නොගැලපේ. ඇත්ත වශයෙන්ම, ප්‍රවාහන ස්තරය සහ පොකුරු සෑදීම සඳහා වගකීම භාර ගැනීමෙන් ඔබට පද්ධතිය ටිකක් සංකීර්ණ කළ හැකිය, උදාහරණයක් ලෙස ZeroMQ හෝ nanomsg භාවිතා කිරීම. නමුත් පද්ධතියට සම්මත Erlang පොකුරේ ප්‍රමාණවත් ප්‍රතිදානයක් සහ හැකියාවන් තිබේ නම්, අතිරේක ආයතනයක් හඳුන්වාදීමේ ගැටළුව සවිස්තරාත්මක අධ්‍යයනයක් සහ ආර්ථික සාධාරණීකරණයක් අවශ්‍ය වේ.

ප්‍රතික්‍රියාශීලී බෙදා හරින ලද යෙදුම්වල මාතෘකාව තරමක් පුළුල් ය. ලිපියේ ආකෘතිය තුළ තබා ගැනීමට, අද සාකච්ඡාවේ විෂය වනුයේ Erlang/Elixir මත ගොඩනගා ඇති සමජාතීය පරිසරයන් පමණි. Erlang/OTP පරිසර පද්ධතිය ඔබට අවම උත්සාහයකින් ප්‍රතික්‍රියාශීලී ගෘහ නිර්මාණ ශිල්පයක් ක්‍රියාත්මක කිරීමට ඉඩ සලසයි. නමුත් ඕනෑම අවස්ථාවක, අපට පණිවිඩ යැවීමේ ස්ථරයක් අවශ්ය වනු ඇත.

න්යායික පදනම

නිර්මාණය ආරම්භ වන්නේ ඉලක්ක සහ සීමාවන් නිර්වචනය කිරීමෙනි. ප්‍රධාන ඉලක්කය වන්නේ සංවර්ධනය සඳහා සංවර්ධන ක්ෂේත්‍රයේ නොවේ. අපට ආරක්ෂිත සහ පරිමාණය කළ හැකි මෙවලමක් ලබා ගත යුතු අතර, එහි පදනම මත අපට නිර්මාණය කළ හැකි අතර, වඩාත්ම වැදගත් ලෙස, විවිධ මට්ටම්වල නවීන යෙදුම් සංවර්ධනය කළ යුතුය: කුඩා ප්‍රේක්ෂක පිරිසකට සේවය කරන තනි-සේවාදායක යෙදුම් වලින් පටන් ගෙන, පසුව එය 50 දක්වා පොකුරු දක්වා වර්ධනය විය හැකිය. -60 නෝඩ්, පොකුරු සම්මේලන වලින් අවසන් වේ. මේ අනුව, ප්රධාන ඉලක්කය වන්නේ අවසාන පද්ධතියේ සංවර්ධන හා හිමිකාරිත්වයේ පිරිවැය අඩු කිරීම මගින් ලාභය උපරිම කිරීමයි.

අවසාන පද්ධතිය සඳහා ප්‍රධාන අවශ්‍යතා 4ක් අපි ඉස්මතු කරමු:

  • Сසිදුවීම්-නැඹුරු.
    පද්ධතිය සෑම විටම සිදුවීම් ගලායාම හරහා ගමන් කිරීමට සහ අවශ්ය ක්රියාවන් සිදු කිරීමට සූදානමින් සිටී;
  • Мපරිමාණය
    තනි කුට්ටි සිරස් අතට සහ තිරස් අතට පරිමාණය කළ හැකිය. සමස්ත පද්ධතියම අසීමිත තිරස් වර්ධනයකට හැකියාව තිබිය යුතුය;
  • Оවැරදි ඉවසීම.
    සියලුම මට්ටම් සහ සියලුම සේවාවන් අසමත්වීම් වලින් ස්වයංක්‍රීයව යථා තත්ත්වයට පත් විය යුතුය;
  • Гසහතික කළ ප්‍රතිචාර කාලය.
    කාලය වටිනා වන අතර පරිශීලකයින් වැඩි වේලාවක් බලා නොසිටිය යුතුය.

"හැකි කුඩා එන්ජිම" ගැන පැරණි සුරංගනා කතාව මතකද? සැලසුම් කරන ලද පද්ධතිය සාර්ථකව මූලාකෘති අවධියෙන් පිටවීමට සහ ප්‍රගතිශීලී වීමට නම්, එහි පදනම අවම අවශ්‍යතා සපුරාලිය යුතුය. SMOG.

යටිතල පහසුකම් මෙවලමක් ලෙස පණිවිඩ යැවීමට තවත් එක් කරුණක් එකතු කරන අතර සියලු සේවාවන් සඳහා පදනම: ක්‍රමලේඛකයින් සඳහා භාවිතයේ පහසුව.

සිදුවීම්-නැඹුරු

යෙදුමක් තනි සේවාදායකයක සිට පොකුරක් දක්වා වර්ධනය වීමට නම්, එහි ගෘහ නිර්මාණ ශිල්පය ලිහිල් සම්බන්ධ කිරීම සඳහා සහාය විය යුතුය. අසමමුහුර්ත ආකෘතිය මෙම අවශ්‍යතාවය සපුරාලයි. එහි දී, යවන්නා සහ ලබන්නා පණිවිඩයේ තොරතුරු භාරය ගැන සැලකිලිමත් වන අතර පද්ධතිය තුළ සම්ප්‍රේෂණය සහ මාර්ගගත කිරීම ගැන කරදර නොවන්න.

පරිමාණය

පරිමාණය සහ පද්ධති කාර්යක්ෂමතාවය එකිනෙකට යාබදව පවතී. යෙදුම් සංරචක වලට පවතින සියලු සම්පත් භාවිතා කිරීමට හැකි විය යුතුය. අපට වඩා කාර්යක්ෂමව ධාරිතාව භාවිතා කළ හැකි අතර අපගේ සැකසුම් ක්‍රම වඩාත් ප්‍රශස්ත වන තරමට අප උපකරණ සඳහා වැය කරන මුදල අඩු වේ.

තනි යන්ත්‍රයක් තුළ, Erlang ඉතා තරඟකාරී පරිසරයක් නිර්මාණය කරයි. Erlang VM වෙත පවතින මෙහෙයුම් පද්ධති නූල් ගණන සහ මෙම නූල් භාවිතා කරන උපලේඛන ගණන තෝරා ගැනීමෙන් සමගාමීත්වය සහ සමාන්තරකරණය අතර සමතුලිතතාවය සැකසිය හැක.
Erlang ක්‍රියාවලි තත්වය බෙදා නොගන්නා අතර අවහිර නොවන ආකාරයෙන් ක්‍රියා කරයි. මෙය සාම්ප්‍රදායික අවහිර කිරීම් මත පදනම් වූ යෙදුම් වලට වඩා සාපේක්ෂව අඩු ප්‍රමාදයක් සහ ඉහළ ප්‍රතිදානයක් සපයයි. Erlang හි උපලේඛනය CPU සහ IO සාධාරණ ලෙස වෙන් කිරීම සහතික කරයි, අවහිර කිරීම් නොමැති වීම උපරිම බර හෝ අසාර්ථක වීම් වලදී පවා ප්‍රතිචාර දැක්වීමට යෙදුමට ඉඩ සලසයි.

පොකුරු මට්ටමින්, බැහැර කිරීමේ ගැටලුව ද පවතී. පොකුරේ ඇති සියලුම යන්ත්‍ර ඒකාකාරව පටවා ඇති අතර ජාලය අධික ලෙස පටවා නොතිබීම වැදගත්ය. අපි යම් තත්වයක් සිතමු: පරිශීලක ගමනාගමනය පැමිණෙන සමතුලිතකයන් (haproxy, nginx, ආදිය) මත ගොඩබසිනු ඇත, ඔවුන් සැකසුම් ඉල්ලීම් පවතින පසුපෙළ කට්ටලය අතර හැකි තරම් ඒකාකාරව බෙදා හරිනු ලැබේ. යෙදුම් යටිතල ව්‍යුහය තුළ, අවශ්‍ය අතුරුමුහුණත ක්‍රියාත්මක කරන සේවාව අවසාන සැතපුම පමණක් වන අතර මූලික ඉල්ලීමට ප්‍රතිචාර දැක්වීමට වෙනත් සේවාවන් ගණනාවක් ඉල්ලා සිටීමට අවශ්‍ය වනු ඇත. අභ්‍යන්තර ඉල්ලීම් සඳහා ද මාර්ගගත කිරීම සහ සමතුලිත කිරීම අවශ්‍ය වේ.
දත්ත ප්‍රවාහයන් ඵලදායි ලෙස කළමනාකරණය කිරීම සඳහා, පණිවිඩ යැවීම මඟින් සංවර්ධකයින්ට මාර්ගගත කිරීම සහ පැටවීම තුලනය කිරීම කළමනාකරණය කිරීමට අතුරු මුහුණතක් සැපයිය යුතුය. මෙයට ස්තූතිවන්ත වන්නට, ක්ෂුද්‍ර සේවා රටා (සමූහකය, ප්‍රොක්සි, දාමය, ශාඛාව, ආදිය) භාවිතා කරමින්, සම්මත ගැටළු සහ කලාතුරකින් පැන නගින ගැටළු දෙකම විසඳීමට සංවර්ධකයින්ට හැකි වේ.

ව්‍යාපාරික දෘෂ්ටි කෝණයකින්, පරිමාණය අවදානම් කළමනාකරණ මෙවලම් වලින් එකකි. ප්රධාන දෙය නම් උපකරණ ප්රශස්ත ලෙස භාවිතා කිරීමෙන් පාරිභෝගික ඉල්ලීම් තෘප්තිමත් කිරීමයි:

  • ප්රගතියේ ප්රතිඵලයක් ලෙස උපකරණවල බලය වැඩි වන විට. අසම්පූර්ණ මෘදුකාංගයක් නිසා එය නිෂ්ක්‍රීය නොවනු ඇත. Erlang සිරස් අතට හොඳින් පරිමාණය කරන අතර සෑම විටම සියලුම CPU මධ්‍යයන් සහ පවතින මතකය භාවිතා කිරීමට හැකි වනු ඇත;
  • වලාකුළු පරිසරයන්හිදී, අපට වත්මන් හෝ පුරෝකථනය කරන ලද භාරය මත පදනම්ව උපකරණ ප්‍රමාණය කළමනාකරණය කර SLA සහතික කළ හැක.

වැරදි ඉවසීම

"අසමත්වීම් පිළිගත නොහැකිය" සහ "සෑම විටම අසාර්ථක වනු ඇත" යන ප්‍රත්‍යක්ෂ දෙකක් සලකා බලමු. ව්‍යාපාරයක් සඳහා, මෘදුකාංග අසමත් වීම යනු මුදල් නැතිවීම සහ වඩාත් නරක දෙය නම් කීර්තිනාමය අහිමි වීමයි. සිදුවිය හැකි පාඩු සහ වැරදි ඉවසන මෘදුකාංග සංවර්ධනය කිරීමේ පිරිවැය අතර තුලනය කිරීම, සම්මුතියක් බොහෝ විට සොයාගත හැකිය.

කෙටි කාලීනව, දෝෂ ඉවසීම ඇතුළත් ගෘහනිර්මාණ ශිල්පයක් රාක්කයෙන් පිටත පොකුරු විසඳුම් මිලදී ගැනීමේදී මුදල් ඉතිරි කරයි. ඒවා මිල අධික වන අතර ඒවායේ දෝෂ ද ඇත.
දිගු කාලීනව, දෝෂ-ඉවසන ගෘහ නිර්මාණ ශිල්පය සංවර්ධනයේ සෑම අදියරකදීම බොහෝ වාරයක් ගෙවයි.
කේත පදනම තුළ පණිවිඩ යැවීම මඟින් සංවර්ධන අදියරේදී පද්ධතිය තුළ ඇති සංරචකවල අන්තර්ක්‍රියා විස්තරාත්මකව ක්‍රියා කිරීමට ඔබට ඉඩ සලසයි. මෙමගින් අසාර්ථකවීම් වලට ප්‍රතිචාර දැක්වීමේ සහ කළමනාකරණය කිරීමේ කාර්යය සරල කරයි, මන්ද සියලුම තීරණාත්මක සංරචක අසාර්ථකත්වයන් හසුරුවන අතර, ප්‍රතිඵලය වන පද්ධතිය සැලසුම් මගින් අසාර්ථක වීමෙන් පසු ස්වයංක්‍රීයව යථා තත්ත්වයට පත්වන ආකාරය දනී.

ප්රතිචාර

අසාර්ථකත්වය කුමක් වුවත්, අයදුම්පත ඉල්ලීම් වලට ප්‍රතිචාර දැක්විය යුතු අතර SLA හමුවිය යුතුය. යථාර්ථය නම් මිනිසුන්ට බලා සිටීමට අවශ්‍ය නැති නිසා ව්‍යාපාර ඒ අනුව අනුගත විය යුතුය. වැඩි වැඩියෙන් යෙදුම් ඉතා ප්‍රතිචාර දක්වනු ඇතැයි අපේක්ෂා කෙරේ.
ප්‍රතිචාරාත්මක යෙදුම් ආසන්න තථ්‍ය කාලය තුළ ක්‍රියාත්මක වේ. Erlang VM මෘදු තත්‍ය කාලීන මාදිලියේ ක්‍රියා කරයි. කොටස් වෙළඳාම, ඖෂධ සහ කාර්මික උපකරණ පාලනය වැනි සමහර ක්ෂේත්‍ර සඳහා, දැඩි තත්‍ය කාලීන මාදිලිය වැදගත් වේ.
ප්‍රතිචාරාත්මක පද්ධති UX වැඩිදියුණු කර ව්‍යාපාරයට ප්‍රතිලාභ ලබා දෙයි.

මූලික සාරාංශය

මෙම ලිපිය සැලසුම් කිරීමේදී, පණිවිඩ හුවමාරු තැරැව්කරුවෙකු නිර්මාණය කිරීම සහ එය පදනම් කරගත් සංකීර්ණ පද්ධති ගොඩනැගීම පිළිබඳ මගේ අත්දැකීම් බෙදා ගැනීමට මට අවශ්‍ය විය. නමුත් න්‍යායාත්මක සහ අභිප්‍රේරණ කොටස තරමක් පුළුල් විය.
ලිපියේ දෙවන කොටසේදී, හුවමාරු ස්ථාන, පණිවිඩ යැවීමේ රටා සහ ඒවායේ යෙදුම ක්‍රියාත්මක කිරීමේ සූක්ෂ්මතා ගැන මම කතා කරමි.
තෙවන කොටසේදී අපි සේවා සංවිධානය කිරීම, මාර්ගගත කිරීම සහ සමතුලිත කිරීම පිළිබඳ පොදු ගැටළු සලකා බලමු. පද්ධතිවල පරිමාණය සහ වැරදි ඉවසීමේ ප්‍රායෝගික පැත්ත ගැන කතා කරමු.

පළමු කොටසේ අවසානය.

ඡායාරූප @lucabravo.

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

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