[පරිවර්තනය] එන්වෝයි නූල් දැමීමේ ආකෘතිය

ලිපියේ පරිවර්තනය: එන්වෝයි නූල් දැමීමේ ආකෘතිය - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

මට මෙම ලිපිය ඉතා සිත්ගන්නාසුළු වූ අතර, එන්වෝයි බොහෝ විට "istio" හි කොටසක් ලෙස හෝ සරලව kubernetes හි "ඇතුළත්වීමේ පාලකය" ලෙස භාවිතා කරන බැවින්, බොහෝ පුද්ගලයින්ට එය සමඟ සමාන සෘජු අන්තර්ක්‍රියාකාරිත්වයක් නොමැත, උදාහරණයක් ලෙස, සාමාන්‍ය සමග Nginx හෝ Haproxy ස්ථාපනයන්. කෙසේ වෙතත්, යමක් කැඩී ගියහොත්, එය ඇතුළත සිට ක්රියා කරන ආකාරය තේරුම් ගැනීම හොඳය. මම විශේෂ වචන ඇතුළුව හැකිතාක් රුසියානු භාෂාවට පරිවර්තනය කිරීමට උත්සාහ කළෙමි; මෙය බැලීම වේදනාකාරී යැයි සිතන අයට, මම මුල් පිටපත් වරහන් තුළ තැබුවෙමි. cat වෙත සාදරයෙන් පිළිගනිමු.

එන්වෝයි කේත පදනම සඳහා පහත් මට්ටමේ තාක්ෂණික ලියකියවිලි දැනට තරමක් විරල ය. මෙයට පිළියමක් ලෙස, එන්වෝයිගේ විවිධ උප පද්ධති ගැන බ්ලොග් සටහන් මාලාවක් කිරීමට මම අදහස් කරමි. මෙය පළමු ලිපිය බැවින්, කරුණාකර ඔබ සිතන්නේ කුමක්ද සහ ඉදිරි ලිපි සඳහා ඔබ උනන්දු විය හැකි දේ මට දන්වන්න.

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

නූල් දළ විශ්ලේෂණය

[පරිවර්තනය] එන්වෝයි නූල් දැමීමේ ආකෘතිය

නියෝජිතයා විවිධ ප්‍රවාහ වර්ග තුනක් භාවිතා කරයි:

  • ප්රධාන: මෙම නූල් ක්‍රියාවලි ආරම්භ කිරීම සහ අවසන් කිරීම, DNS ඇතුළුව XDS (xDiscovery Service) API හි සියලුම සැකසුම්, සෞඛ්‍ය පරීක්ෂාව, සාමාන්‍ය පොකුරු සහ ධාවන කාල කළමනාකරණය, සංඛ්‍යාලේඛන යළි පිහිටුවීම, පරිපාලනය සහ සාමාන්‍ය ක්‍රියාවලි කළමනාකරණය - Linux සංඥා, උණුසුම් නැවත ආරම්භ කිරීම, යනාදී සියල්ල පාලනය කරයි. මෙම ත්‍රෙඩ් එකේ සිදුවන්නේ අසමමුහුර්ත සහ "අවහිර නොවන" ය. සාමාන්‍යයෙන්, ප්‍රධාන නූල් මඟින් ක්‍රියාත්මක වීමට විශාල CPU ප්‍රමාණයක් අවශ්‍ය නොවන සියලුම තීරණාත්මක ක්‍රියාකාරී ක්‍රියාවලීන් සම්බන්ධීකරණය කරයි. මෙමගින් බොහෝ පාලන කේත තනි නූල් එකක් මෙන් ලිවීමට ඉඩ සලසයි.
  • සේවකයා: පෙරනිමියෙන්, එන්වෝයි පද්ධතියේ එක් එක් දෘඪාංග නූල් සඳහා සේවක නූල් නිර්මාණය කරයි, මෙය විකල්පය භාවිතයෙන් පාලනය කළ හැක --concurrency. සෑම සේවක නූල් එකක්ම “අවහිර නොවන” සිදුවීම් පුඩුවක් ක්‍රියාත්මක කරයි, එය එක් එක් සවන්දෙන්නන්ට සවන් දීම සඳහා වගකිව යුතු ය; ලියන අවස්ථාවේදී (29 ජූලි 2017) සවන්දෙන්නන්ගේ බෙදා හැරීමක්, නව සම්බන්ධතා පිළිගැනීමක්, පෙරහන් තොගයක් ක්‍රියාත්මක කිරීමක් සිදු නොවේ. සම්බන්ධතාවය, සහ සම්බන්ධතාවයේ ජීවිත කාලය තුළ සියලුම ආදාන/ප්‍රතිදාන (IO) මෙහෙයුම් සැකසීම. නැවතත්, මෙය බොහෝ සම්බන්ධතා හැසිරවීමේ කේතය තනි නූල් එකක් ලෙස ලිවීමට ඉඩ සලසයි.
  • ගොනු ෆ්ලෂර්: එන්වෝයි ලියන සෑම ගොනුවක්ම, ප්‍රධාන වශයෙන් ප්‍රවේශ ලොග, දැනට ස්වාධීන අවහිර නූලක් ඇත. මෙයට හේතුව භාවිතා කරන විට පවා ගොනු පද්ධතිය විසින් හැඹිලිගත ගොනු වෙත ලිවීමයි O_NONBLOCK සමහර විට අවහිර විය හැක (සුසුම්). සේවක නූල් ගොනුවකට ලිවීමට අවශ්‍ය වූ විට, දත්ත ඇත්ත වශයෙන්ම මතකයේ බෆරයකට ගෙන යන අතර එහිදී එය අවසානයේ නූල් හරහා සෝදා හරිනු ලැබේ. ගොනු ෆ්ලෂ්. මෙය මතක බෆරයක් පිරවීමට උත්සාහ කරන අතරතුර තාක්‍ෂණිකව සියලුම සේවක නූල් වලට එකම අගුල අවහිර කළ හැකි එක් කේතයකි.

සම්බන්ධතා හැසිරවීම

ඉහත කෙටියෙන් සාකච්ඡා කළ පරිදි, සියලුම සේවක නූල් කිසිදු බෙදීමකින් තොරව සියලුම සවන්දෙන්නන්ට සවන් දෙයි. මේ අනුව, කර්නලය සේවක නූල් වෙත පිළිගත් සොකට් අලංකාර ලෙස යැවීමට භාවිතා කරයි. නවීන කර්නල් සාමාන්‍යයෙන් මේ සඳහා ඉතා හොඳ ය, ඔවුන් එකම සොකට් එකක සවන් දෙන වෙනත් නූල් භාවිතා කිරීමට පෙර, රවුන්ඩ් රොබින් භාවිතා නොකරන වෙනත් නූල් භාවිතා කිරීමට පෙර ත්‍රෙඩ් එකක් වැඩ කිරීමට උත්සාහ කිරීම සඳහා ආදාන/ප්‍රතිදානය (IO) ප්‍රමුඛතා වැඩි කිරීම වැනි විශේෂාංග භාවිතා කරයි. එක් එක් ඉල්ලීම සැකසීමට අගුලු දැමීම (Spinlock).
වර්කර් ත්‍රෙඩ් එකක කනෙක්ෂන් එකක් පිලිගත්තට පස්සේ ඒක කවදාවත් ඒ ත්‍රෙඩ් එකෙන් අයින් වෙන්නේ නෑ. ඕනෑම ඉදිරියට යැවීමේ හැසිරීමක් ඇතුළුව, සම්බන්ධතාවයේ සියලුම වැඩිදුර සැකසුම් සම්පූර්ණයෙන්ම සේවක නූල් තුළ හසුරුවනු ලැබේ.

මෙය වැදගත් ප්රතිවිපාක කිහිපයක් ඇත:

  • එන්වෝයි හි සියලුම සම්බන්ධතා තටාක සේවක නූලකට පවරා ඇත. එබැවින්, HTTP/2 සම්බන්ධතා තටාක එක් එක් උඩුගං ධාරකයකට වරකට එක් සම්බන්ධතාවයක් පමණක් සිදු කළද, සේවක නූල් හතරක් තිබේ නම්, ස්ථායී තත්ත්වයක දී උඩුගං ධාරකයකට HTTP/2 සම්බන්ධතා හතරක් ඇත.
  • Envoy මේ ආකාරයට ක්‍රියා කිරීමට හේතුව වන්නේ සියල්ල තනි කම්කරු ත්‍රෙඩ් එකක තබා ගැනීමෙන් සියලුම කේතයන් වාගේ බ්ලොක් නොකර තනි ත්‍රෙඩ් එකක් ලෙස ලිවිය හැකි වීමයි. මෙම සැලසුම අසීමිත අසීමිත සේවක නූල් ගණනකට ඇදහිය නොහැකි ලෙස බොහෝ කේත සහ පරිමාණයන් ලිවීමට පහසු කරයි.
  • කෙසේ වෙතත්, ප්‍රධාන ප්‍රතික්‍රියා වලින් එකක් නම්, මතක සංචිතයකින් සහ සම්බන්ධතා කාර්යක්ෂමතාවයේ දෘෂ්ටි කෝණයෙන්, ඇත්ත වශයෙන්ම වින්‍යාස කිරීම ඉතා වැදගත් වේ. --concurrency. අවශ්‍ය ප්‍රමාණයට වඩා සේවක නූල් තිබීම මතකය නාස්ති කරයි, වැඩිපුර අක්‍රිය සම්බන්ධතා ඇති කරයි, සහ සම්බන්ධතා එකතු කිරීමේ වේගය අඩු කරයි. Lyft හි, අපගේ නියෝජිත සයිඩ්කාර් බහාලුම් ඉතා අඩු සමගාමීව ධාවනය වන අතර එමඟින් කාර්ය සාධනය ඔවුන් අසල වාඩි වී සිටින සේවාවන්ට දළ වශයෙන් ගැලපේ. අපි එජ් ප්‍රොක්සියක් ලෙස එන්වෝයි ධාවනය කරන්නේ උපරිම සමගාමීව පමණි.

අවහිර නොකිරීම යන්නෙන් අදහස් කරන්නේ කුමක්ද?

ප්‍රධාන සහ සේවක නූල් ක්‍රියා කරන ආකාරය සාකච්ඡා කිරීමේදී "අවහිර නොකිරීම" යන යෙදුම මේ දක්වා කිහිප වතාවක් භාවිතා කර ඇත. සෑම කේතයක්ම ලියා ඇත්තේ කිසිවක් කිසිදා අවහිර නොවන බවට උපකල්පනය කරමිනි. කෙසේ වෙතත්, මෙය සම්පූර්ණයෙන්ම සත්‍ය නොවේ (සම්පූර්ණයෙන්ම සත්‍ය නොවන්නේ කුමක්ද?).

නියෝජිතයා දිගු ක්‍රියාවලි අගුලු කිහිපයක් භාවිතා කරයි:

  • සාකච්ඡා කළ පරිදි, ප්‍රවේශ ලොග ලිවීමේදී, මතකයේ ඇති ලොග් බෆරය පිරවීමට පෙර සියලුම සේවක නූල් එකම අගුලක් ලබා ගනී. අගුල රඳවා තබා ගැනීමේ කාලය ඉතා අඩු විය යුතුය, නමුත් අගුල ඉහළ සමගාමීව සහ ඉහළ ප්‍රතිදානයකින් තරඟ කළ හැකිය.
  • ත්‍රෙඩ් එකට දේශීය වන සංඛ්‍යාලේඛන හැසිරවීමට එන්වෝයි ඉතා සංකීර්ණ පද්ධතියක් භාවිතා කරයි. මෙය වෙනම ලිපියක මාතෘකාව වනු ඇත. කෙසේ වෙතත්, දේශීය වශයෙන් නූල් සංඛ්‍යාලේඛන සැකසීමේ කොටසක් ලෙස, සමහර විට මධ්‍යම "සංඛ්‍යාලේඛන ගබඩාව" මත අගුලක් ලබා ගැනීමට අවශ්‍ය බව මම කෙටියෙන් සඳහන් කරමි. මෙම අගුලු දැමීම කිසි විටෙක අවශ්ය නොවිය යුතුය.
  • ප්‍රධාන නූල් කාලානුරූපව සියලුම සේවක නූල් සමඟ සම්බන්ධීකරණය කිරීමට අවශ්‍ය වේ. මෙය සිදු කරනු ලබන්නේ ප්‍රධාන ත්‍රෙඩ් එකේ සිට වර්කර් ත්‍රෙඩ් දක්වා "ප්‍රකාශනය" කිරීමෙනි, සමහර විට කම්කරු ත්‍රෙඩ් වලින් නැවත ප්‍රධාන ත්‍රෙඩ් වෙත. යැවීමට අගුලක් අවශ්‍ය වන අතර එමඟින් ප්‍රකාශිත පණිවිඩය පසුව බෙදා හැරීම සඳහා පෝලිම් කළ හැක. මෙම අගුලු කිසි විටෙක බරපතල ලෙස තරඟ නොකළ යුතු නමුත් ඒවා තවමත් තාක්ෂණික වශයෙන් අවහිර කළ හැකිය.
  • එන්වෝයි පද්ධති දෝෂ ප්‍රවාහයට (සම්මත දෝෂය) ලොගයක් ලියන විට, එය සම්පූර්ණ ක්‍රියාවලියටම අගුලක් ලබා ගනී. සාමාන්‍යයෙන්, එන්වෝයිගේ දේශීය ලොග් කිරීම කාර්ය සාධන ආස්ථානයෙන් භයානක ලෙස සලකනු ලැබේ, එබැවින් එය වැඩිදියුණු කිරීම කෙරෙහි වැඩි අවධානයක් යොමු කර නොමැත.
  • තවත් අහඹු අගුලු කිහිපයක් ඇත, නමුත් ඒවා කිසිවක් කාර්ය සාධනය විවේචනාත්මක නොවන අතර කිසි විටෙකත් අභියෝග නොකළ යුතුය.

නූල් දේශීය ගබඩාව

එන්වෝයි විසින් ප්‍රධාන ත්‍රෙඩ් එකේ වගකීම් කම්කරු ත්‍රෙඩ් එකේ වගකීම් වලින් වෙන් කරන ආකාරය නිසා, ප්‍රධාන ත්‍රෙඩ් එකේ සංකීර්ණ සැකසුම් සිදු කළ හැකි අතර පසුව එක් එක් කම්කරු ත්‍රෙඩ් වෙත ඉතා සමගාමීව ලබා දිය හැකි අවශ්‍යතාවයක් ඇත. මෙම කොටස ඉහළ මට්ටමේ එන්වෝයි නූල් දේශීය ගබඩාව (TLS) විස්තර කරයි. එය පොකුරක් කළමනාකරණය කිරීමට භාවිතා කරන ආකාරය ඊළඟ කොටසින් විස්තර කරමි.
[පරිවර්තනය] එන්වෝයි නූල් දැමීමේ ආකෘතිය

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

එන්වෝයිගේ TLS (නූල් දේශීය ගබඩාව) පද්ධතිය පහත පරිදි ක්‍රියා කරයි:

  • ප්‍රධාන ත්‍රෙඩ් එකෙහි ක්‍රියාත්මක වන කේතය මඟින් සම්පූර්ණ ක්‍රියාවලිය සඳහා TLS තව් එකක් වෙන් කළ හැක. මෙය වියුක්ත වුවද, ප්‍රායෝගිකව එය O(1) ප්‍රවේශය ලබා දෙන දෛශිකයක් තුළට දර්ශකයකි.
  • ප්‍රධාන නූලට අත්තනෝමතික දත්ත එහි තව් තුළට ස්ථාපනය කළ හැකිය. මෙය සිදු කළ විට, දත්ත සාමාන්‍ය සිදුවීම් ලූප් සිදුවීමක් ලෙස එක් එක් සේවක ත්‍රෙඩ් වෙත ප්‍රකාශයට පත් කෙරේ.
  • සේවක නූල් වලට ඔවුන්ගේ TLS ස්ලොට් එකෙන් කියවිය හැකි අතර එහි ඇති ඕනෑම නූල්-දේශීය දත්ත ලබා ගත හැක.

එය ඉතා සරල සහ ඇදහිය නොහැකි තරම් බලවත් සුසමාදර්ශයක් වුවද, එය RCU (කියවීම-පිටපත්-යාවත්කාලීන කිරීම) අවහිර කිරීමේ සංකල්පයට බෙහෙවින් සමාන ය. අත්‍යවශ්‍යයෙන්ම, වැඩ ක්‍රියාත්මක වන අතරතුර TLS තව් වල කිසිඳු දත්ත වෙනසක් සේවක නූල් කිසිවිටෙක නොදකියි. වෙනසක් සිදු වන්නේ වැඩ සිදුවීම් අතර විවේක කාලය තුළ පමණි.

නියෝජිතයා මෙය විවිධ ආකාර දෙකකින් භාවිතා කරයි:

  • එක් එක් සේවක නූල් මත විවිධ දත්ත ගබඩා කිරීමෙන්, කිසිදු අවහිරයකින් තොරව දත්ත වෙත ප්‍රවේශ විය හැක.
  • එක් එක් සේවක නූල් මත කියවීමට-පමණි මාදිලියේ ගෝලීය දත්ත වෙත බෙදාගත් දර්ශකයක් පවත්වා ගැනීමෙන්. මේ අනුව, සෑම සේවක ත්‍රෙඩ් එකකටම දත්ත යොමු ගණනක් ඇත, එය කාර්යය ක්‍රියාත්මක වන විට අඩු කළ නොහැක. සියලුම කම්කරුවන් සන්සුන් වී නව බෙදාගත් දත්ත උඩුගත කළ විට පමණක් පැරණි දත්ත විනාශ වේ. මෙය RCU ට සමාන වේ.

පොකුරු යාවත්කාලීන නූල් දැමීම

මෙම කොටසේදී, පොකුරක් කළමනාකරණය කිරීමට TLS (නූල් දේශීය ගබඩාව) භාවිතා කරන ආකාරය මම විස්තර කරමි. පොකුරු කළමනාකරණයට xDS API සහ/හෝ DNS සැකසුම් මෙන්ම සෞඛ්‍ය පරීක්ෂාව ඇතුළත් වේ.
[පරිවර්තනය] එන්වෝයි නූල් දැමීමේ ආකෘතිය

පොකුරු ප්‍රවාහ කළමනාකරණයට පහත සඳහන් සංරචක සහ පියවර ඇතුළත් වේ:

  1. Cluster Manager යනු දන්නා සියලුම පොකුරු ඉහළ ධාරා, Cluster Discovery Service (CDS) API, Secret Discovery Service (SDS) සහ Endpoint Discovery Service (EDS) APIs, DNS, සහ සක්‍රීය බාහිර පරීක්‍ෂණ කළමනාකරණය කරන Envoy තුළ ඇති සංරචකයකි. සොයාගත් ධාරක මෙන්ම සෞඛ්‍ය තත්ත්වයද ඇතුළත් වන එක් එක් උඩුගං පොකුරේ "අවසානයේ ස්ථාවර" දර්ශනයක් නිර්මාණය කිරීම සඳහා එය වගකිව යුතුය.
  2. සෞඛ්‍ය පරීක්ෂකවරයා ක්‍රියාකාරී සෞඛ්‍ය පරීක්‍ෂණයක් සිදු කරන අතර සෞඛ්‍ය තත්ත්වය වෙනස්වීම් පොකුරු කළමණාකරු වෙත වාර්තා කරයි.
  3. CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS පොකුරු සාමාජිකත්වය තීරණය කිරීම සඳහා සිදු කරනු ලැබේ. රාජ්ය වෙනස් කිරීම පොකුරු කළමනාකරු වෙත ආපසු යවනු ලැබේ.
  4. සෑම සේවක නූල් එකක්ම සිදුවීම් ලූපයක් අඛණ්ඩව ක්‍රියාත්මක කරයි.
  5. පොකුරු කළමණාකරු පොකුරක් සඳහා තත්ත්වය වෙනස් වී ඇති බව තීරණය කළ විට, එය පොකුරු තත්ත්වය පිළිබඳ නව කියවීමට පමණක් සැණෙපොතක් සාදා එය එක් එක් සේවක නූල් වෙත යවයි.
  6. මීළඟ නිස්කලංක කාලසීමාව තුළ, සේවක නූල් වෙන් කළ TLS තව් තුළ සැණ රුව යාවත්කාලීන කරනු ඇත.
  7. පූරණ ශේෂය සඳහා ධාරකය තීරණය කළ යුතු I/O සිදුවීමක් අතරතුර, භාරකරු විසින් ධාරකය පිළිබඳ තොරතුරු ලබා ගැනීම සඳහා TLS (නූල් දේශීය ගබඩාව) තව් එකක් ඉල්ලනු ඇත. මේ සඳහා අගුල් අවශ්ය නොවේ. ලෝඩ් බැලන්සර් සහ අනෙකුත් සංරචක වලට හැඹිලි, දත්ත ව්‍යුහයන් යනාදිය නැවත ගණනය කිරීමට හැකි වන පරිදි යාවත්කාලීන සිදුවීම් ද TLS හට දිය හැකි බව සලකන්න. මෙය මෙම පෝස්ටුවෙහි විෂය පථයෙන් ඔබ්බට, නමුත් කේතයේ විවිධ ස්ථානවල භාවිතා වේ.

ඉහත ක්‍රියාපටිපාටිය භාවිතා කරමින්, කිසිදු අවහිරයකින් තොරව (පෙර විස්තර කර ඇති පරිදි හැර) තානාපතිවරයාට සෑම ඉල්ලීමක්ම ක්‍රියාවට නැංවිය හැක. TLS කේතයෙහිම සංකීර්ණත්වය හැරුණු විට, බොහෝ කේත බහු නූල් ක්‍රියා කරන ආකාරය සහ තනි නූල් ලිවිය හැකි ආකාරය තේරුම් ගැනීමට අවශ්‍ය නොවේ. මෙය උසස් කාර්ය සාධනයට අමතරව බොහෝ කේතයන් ලිවීමට පහසු කරයි.

TLS භාවිතා කරන වෙනත් උප පද්ධති

එන්වෝයි හි TLS (නූල් දේශීය ගබඩාව) සහ RCU (පිටපත් යාවත්කාලීන කියවන්න) බහුලව භාවිතා වේ.

භාවිතා කිරීමේ උදාහරණ:

  • ක්‍රියාත්මක කිරීමේදී ක්‍රියාකාරීත්වය වෙනස් කිරීමේ යාන්ත්‍රණය: සක්‍රීය ක්‍රියාකාරීත්වයේ වත්මන් ලැයිස්තුව ප්‍රධාන නූලෙහි ගණනය කෙරේ. සෑම සේවක ත්‍රෙඩ් එකකටම RCU අර්ථ ශාස්ත්‍රය භාවිතයෙන් කියවීමට පමණක් සැණෙපොතක් ලබා දේ.
  • මාර්ග වගු ආදේශ කිරීම: RDS (Route Discovery Service) විසින් සපයනු ලබන මාර්ග වගු සඳහා, ප්‍රධාන නූල් මත මාර්ග වගු නිර්මාණය කර ඇත. RCU (Read Copy Update) semantics භාවිතයෙන් එක් එක් සේවක ත්‍රෙඩ් වෙත කියවීමට-පමණි සැණ රුව පසුව ලබා දෙනු ඇත. මෙය මාර්ග වගු වෙනස් කිරීම පරමාණුක කාර්යක්ෂම කරයි.
  • HTTP ශීර්ෂක හැඹිලිගත කිරීම: එය හැරෙන පරිදි, එක් එක් ඉල්ලීම සඳහා HTTP ශීර්ෂය ගණනය කිරීම (core එකකට ~25K+ RPS ධාවනය වන විට) තරමක් මිල අධික වේ. එන්වොයි මධ්‍යගතව සෑම තත්පර භාගයකට වරක්ම ශීර්ෂකය ගණනය කරන අතර එය TLS සහ RCU හරහා සෑම සේවකයෙකුටම සපයයි.

වෙනත් අවස්ථා තිබේ, නමුත් පෙර උදාහරණ TLS භාවිතා කරන්නේ කුමක් සඳහාද යන්න පිළිබඳ හොඳ අවබෝධයක් ලබා දිය යුතුය.

දන්නා කාර්ය සාධන අන්තරායන්

එන්වොයි සමස්තයක් ලෙස ඉතා හොඳින් ක්‍රියා කරන අතර, එය ඉතා ඉහළ සමගාමී සහ ප්‍රතිදානයක් සමඟ භාවිතා කරන විට අවධානය යොමු කළ යුතු කැපී පෙනෙන අංශ කිහිපයක් තිබේ:

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

නිගමනය

නිවැරදිව වින්‍යාස කර නොමැති නම් නාස්ති විය හැකි මතකය සහ සම්බන්ධතා වල වියදමින් ක්‍රමලේඛනය සහ දැවැන්ත සමාන්තරකරණය පහසු කිරීම සඳහා එන්වෝයිගේ නූල් ආකෘතිය සැලසුම් කර ඇත. මෙම ආකෘතිය එය ඉතා ඉහළ නූල් ගණනකින් සහ ප්‍රතිදානයකදී ඉතා හොඳින් ක්‍රියා කිරීමට ඉඩ සලසයි.
මම Twitter හි කෙටියෙන් සඳහන් කළ පරිදි, සැලසුම DPDK (Data Plane Development Kit) වැනි සම්පූර්ණ පරිශීලක මාදිලියේ ජාලකරණ තොගයක් මත ක්‍රියා කළ හැකි අතර, එමඟින් සාම්ප්‍රදායික සේවාදායකයන් විසින් සම්පූර්ණ L7 සැකසුම් සමඟ තත්පරයකට මිලියන ගණනක් ඉල්ලීම් හසුරුවා ගත හැකිය. ඉදිරි වසර කිහිපය තුළ ගොඩනඟන්නේ කුමක් දැයි බැලීම ඉතා රසවත් වනු ඇත.
අවසාන ඉක්මන් ප්‍රකාශයක්: අප එන්වෝයි සඳහා C++ තෝරා ගත්තේ මන්දැයි බොහෝ වාරයක් මගෙන් විමසා ඇත. හේතුව තවමත් මෙම ලිපියේ විස්තර කර ඇති ගෘහ නිර්මාණ ශිල්පය ගොඩනැගිය හැකි බහුලව භාවිතා වන එකම කාර්මික ශ්‍රේණියේ භාෂාව එය වීමයි. C++ අනිවාර්යයෙන්ම සියලුම හෝ බොහෝ ව්‍යාපෘති සඳහා සුදුසු නොවේ, නමුත් ඇතැම් භාවිත අවස්ථා සඳහා එය තවමත් කාර්යය ඉටු කිරීමට ඇති එකම මෙවලම වේ.

කේතය වෙත සබැඳි

මෙම ලිපියේ සාකච්ඡා කර ඇති අතුරුමුහුණත් සහ ශීර්ෂ ක්‍රියාත්මක කිරීම් සහිත ගොනු වෙත සබැඳි:

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

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