[ژباړه] د اینوای تارینګ ماډل

د مقالې ژباړه: د استازي تار کولو ماډل - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

ما دا مقاله خورا په زړه پوري وموندله، او له هغه وخته چې سفیر اکثرا د "istio" برخې په توګه کارول کیږي یا په ساده ډول د کبرنیټس د "انګریس کنټرولر" په توګه کارول کیږي، ډیری خلک د دې سره ورته مستقیم تعامل نلري، د بیلګې په توګه، د مثال په توګه. Nginx یا Haproxy تاسیسات. په هرصورت، که یو څه مات شي، نو دا به ښه وي چې پوه شي چې دا څنګه د دننه څخه کار کوي. ما هڅه وکړه چې د امکان تر حده ډیر متن په روسي ژبه وژبړم، د ځانګړو کلمو په شمول؛ د هغو کسانو لپاره چې دا یې لیدل دردناک وي، ما اصلي متن په قوسونو کې پریښود. بلی ته ښه راغلاست.

د استازي کوډبیس لپاره د ټیټې کچې تخنیکي اسناد اوس مهال خورا لږ دي. د دې د حل لپاره، زه پلان لرم چې د سفیر مختلف فرعي سیسټمونو په اړه د بلاګ پوسټونو لړۍ ترسره کړم. څرنګه چې دا لومړی مقاله ده، مهرباني وکړئ ما ته خبر راکړئ چې تاسو څه فکر کوئ او تاسو په راتلونکو مقالو کې څه لیوالتیا لرئ.

یو له خورا عام تخنیکي پوښتنو څخه چې زه یې د سفیر په اړه ترلاسه کوم د تارینګ ماډل د ټیټې کچې توضیح غوښتنه کوي چې دا یې کاروي. پدې پوسټ کې ، زه به تشریح کړم چې څنګه سفیر د تارونو سره اړیکې نقشې کوي ، په بیله بیا د تار محلي ذخیره کولو سیسټم دا د کوډ ډیر موازي او لوړ فعالیت کولو لپاره په داخلي توګه کاروي.

د توری کولو کتنه

[ژباړه] د اینوای تارینګ ماډل

سفیر درې ډوله جریانونه کاروي:

  • اصلي: دا تار د پروسې پیل او پای ته رسیدو کنټرول کوي، د XDS (xDiscovery Service) API ټول پروسس کول، پشمول د DNS، روغتیا معاینه کول، عمومي کلستر او د چلولو مدیریت، د احصایې بیا ځای کول، اداره او د عمومي پروسې مدیریت - د لینکس سیګنالونه، ګرم بیا پیل کول، او نور هر څه چې. په دې تار کې پیښیږي غیر متناسب او "غیر بلاکیدونکی" دی. په عموم کې، اصلي تار ټول مهم فعالیت پروسې همغږي کوي چې د چلولو لپاره د CPU لوی مقدار ته اړتیا نلري. دا د ډیری کنټرول کوډ ته اجازه ورکوي چې لیکل شي لکه څنګه چې دا واحد تار شوی وي.
  • کارګر: په ډیفالټ ډول، Envoy په سیسټم کې د هر هارډویر تار لپاره د کارګر تار جوړوي، دا د اختیار په کارولو سره کنټرول کیدی شي --concurrency. د هر کارکونکي تار د "غیر بندیدو" پیښې لوپ پرمخ وړي، کوم چې د هر اوریدونکي اوریدلو مسولیت لري؛ د لیکلو په وخت کې (د جولای 29، 2017) د اوریدونکي هیڅ شیډول نشته، د نوي اړیکو منل، د فلټر سټیک ګړندي کول. پیوستون، او د پیوستون د ژوند په جریان کې د ټولو ان پټ/آؤټ پټ (IO) عملیات پروسس کول. یوځل بیا ، دا د ډیری پیوستون اداره کولو کوډ ته اجازه ورکوي چې لیکل شي لکه څنګه چې دا واحد تار شوی وي.
  • د فایل فلشر: هر فایل چې سفیر لیکي، په عمده توګه لاګونو ته لاسرسی لري، دا مهال د بلاک کولو خپلواکه موضوع لري. دا د دې حقیقت له امله دی چې د فایل سیسټم لخوا زیرمه شوي فایلونو ته لیکل حتی د کارولو پرمهال O_NONBLOCK ځینې ​​​​وختونه بند کیدی شي (سه). کله چې کارګر تارونه اړتیا لري فایل ته ولیکي، ډاټا په حقیقت کې په حافظه کې بفر ته لیږدول کیږي چیرې چې دا په پای کې د تار له لارې فلش کیږي. فایل فلش. دا د کوډ یوه ساحه ده چیرې چې تخنیکي پلوه ټول کارګر تارونه کولی شي ورته تالا بند کړي پداسې حال کې چې د حافظې بفر ډکولو هڅه کوي.

د پیوستون اداره کول

لکه څنګه چې پورته په لنډه توګه بحث وشو، ټول کارګر تارونه پرته له کوم شیډنګ ټولو اوریدونکو ته غوږ نیسي. په دې توګه، دانه د کارګر تارونو ته د منلو وړ ساکټونو لیږلو لپاره کارول کیږي. عصري دانا په عموم ډول پدې کې خورا ښه دي ، دوی د input/output (IO) لومړیتوب لوړولو په څیر ځانګړتیاوې کاروي ترڅو هڅه وکړي چې د کار سره تار ډک کړي مخکې لدې چې دوی د نورو تارونو کارولو پیل وکړي چې په ورته ساکټ کې هم اوریدل کیږي ، او د راؤنډ رابین نه کاروي. لاک کول (Spinlock) د هرې غوښتنې پروسس کولو لپاره.
یوځل چې اړیکه په کارګر تار کې ومنل شي ، دا هیڅکله هغه تار نه پریږدي. د اتصال ټول نور پروسس په بشپړ ډول د کارګر تار کې اداره کیږي ، پشمول د هر ډول لیږلو چلند.

دا څو مهمې پایلې لري:

  • په سفیر کې د ارتباط ټول حوضونه د کارګر تار ته ګمارل شوي. نو، که څه هم د HTTP/2 اتصال حوضونه په یو وخت کې د هر اپ سټریم کوربه سره یوازې یو اړیکه رامینځته کوي ، که چیرې څلور کارګر تارونه شتون ولري ، نو په ثابت حالت کې به په هر اپ سټریم کوربه کې څلور HTTP/2 اړیکې وي.
  • د دې لامل چې انواین پدې ډول کار کوي دا دی چې د هر څه په یو واحد کارګر تار کې ساتلو سره ، نږدې ټول کوډ پرته له بلاک کولو لیکل کیدی شي او لکه څنګه چې دا واحد تار شوی وي. دا ډیزاین د ډیری کوډ لیکلو لپاره اسانه کوي او نږدې غیر محدود شمیر کارګر تارونو ته په ناقانونه توګه ښه اندازه کوي.
  • په هرصورت، یو له اصلي لارو څخه دا دی چې د حافظې حوض او د اتصال موثریت له نظره، دا واقعیا خورا مهم دی چې تنظیم کړئ. --concurrency. د اړتیا په پرتله د ډیرو کارګر تارونو درلودل به حافظه ضایع کړي ، ډیرې بې کاره اړیکې رامینځته کړي ، او د پیوستون پولینګ کچه راټیټه کړي. په لیفټ کې ، زموږ د استازي سایډ کار کانټینرونه خورا ټیټ توافق سره پرمخ ځي ترڅو فعالیت نږدې د هغه خدماتو سره سمون ولري چې دوی یې څنګ ته ناست دي. موږ سفیر یوازې په اعظمي موافقت کې د څنډې پراکسي په توګه چلوو.

د نه بندیدو معنی څه ده؟

د "غیر بلاک کولو" اصطلاح تر دې دمه څو ځله کارول شوې کله چې د اصلي او کارګر تارونو کار کولو څرنګوالي په اړه بحث کیږي. ټول کوډ په دې انګیرنه لیکل شوی چې هیڅ شی هیڅکله بند شوی نه دی. په هرصورت، دا په بشپړه توګه ریښتیا نه ده (هغه څه چې په بشپړ ډول ریښتیا ندي؟).

سفیر څو اوږده پروسې لاکونه کاروي:

  • لکه څنګه چې بحث شوی، کله چې د لاسرسي لاګ لیکل کیږي، ټول کارګر تارونه د حافظې لاګ بفر ډکولو دمخه ورته قفل ترلاسه کوي. د تالاشۍ وخت باید خورا ټیټ وي، مګر دا ممکنه ده چې د تالاشۍ لپاره په لوړه همغږي او د لوړې کچې سره سیالي وشي.
  • سفیر د احصایو اداره کولو لپاره خورا پیچلي سیسټم کاروي چې موضوع ته محلي دي. دا به د جلا پوسټ موضوع وي. په هرصورت، زه به په لنډه توګه یادونه وکړم چې په محلي توګه د تار احصایې پروسس کولو برخې په توګه، ځینې وختونه اړین دي چې په مرکزي "احصایه پلورنځي" کې تالاشي ترلاسه کړئ. دا تالاشي باید هیڅکله اړین نه وي.
  • اصلي تار په دوره توګه د ټولو کارګر تارونو سره همغږي کولو ته اړتیا لري. دا د اصلي تار څخه د کارګر تارونو ته د "خپرولو" له لارې ترسره کیږي، او ځینې وختونه د کارګر تارونو څخه بیرته اصلي تار ته. لیږل یو بند ته اړتیا لري ترڅو خپور شوی پیغام د وروسته تحویلۍ لپاره په کتار کې ودرول شي. دا قفلونه باید هیڅکله په جدي توګه مقابله ونه کړي، مګر دوی لاهم په تخنیکي توګه بلاک کیدی شي.
  • کله چې استازي د سیسټم ایرر سټریم (معیاري تېروتنه) ته لاګ لیکي ، دا په ټوله پروسه کې لاک ترلاسه کوي. په عموم کې، د استازي محلي ننوتل د فعالیت له نظره خورا خطرناک ګڼل کیږي، نو د دې ښه کولو ته ډیره پاملرنه نه ده شوې.
  • یو څو نور تصادفي لاکونه شتون لري، مګر هیڅ یو یې د فعالیت مهم ندي او هیڅکله باید ننګونه ونه کړي.

د ځایی ذخیره کولو موضوع

له دې امله چې سفیر د اصلي تار مسؤلیتونه د کارګر تار له مسؤلیتونو څخه جلا کوي، نو اړتیا ده چې پیچلي پروسس په اصلي تار کې ترسره شي او بیا هر کارګر تار ته په خورا همغږي ډول چمتو شي. دا برخه په لوړه کچه د Envoy Thread Local Storage (TLS) تشریح کوي. په راتلونکې برخه کې به زه تشریح کړم چې دا څنګه د کلستر اداره کولو لپاره کارول کیږي.
[ژباړه] د اینوای تارینګ ماډل

لکه څنګه چې مخکې تشریح شوي، اصلي تار په حقیقت کې د انووای پروسې کې د الوتکې ټول مدیریت او کنټرول فعالیت اداره کوي. د کنټرول الوتکه دلته یو څه ډیر بار شوي ، مګر کله چې تاسو پخپله د انوی پروسې دننه وګورئ او دا د فارورډینګ سره پرتله کړئ چې د کارګر تارونه یې کوي ، دا معنی لري. عمومي قاعده دا ده چې د اصلي تار پروسه یو څه کار کوي، او بیا د دې کار پایلې سره سم د هر کارګر تار تازه کولو ته اړتیا لري. په دې حالت کې، د کارګر تار اړتیا نلري چې په هر لاسرسي کې تالاشي ترلاسه کړي.

د استازي TLS (د تار محلي ذخیره) سیسټم په لاندې ډول کار کوي:

  • په اصلي تار کې روان کوډ کولی شي د ټولې پروسې لپاره د TLS سلاټ تخصیص کړي. که څه هم دا خلاص شوی دی، په عمل کې دا په ویکتور کې یو شاخص دی، O(1) ته لاسرسی چمتو کوي.
  • اصلي تار کولی شي په خپل سلاټ کې خپل سري معلومات نصب کړي. کله چې دا ترسره شي، ډاټا د هر کارګر تار ته د عادي پیښې لوپ پیښې په توګه خپریږي.
  • د کارګر تارونه کولی شي د دوی د TLS سلاټ څخه لوستل شي او هلته موجود هر ډول موضوع - محلي ډاټا بیرته ترلاسه کړي.

که څه هم دا خورا ساده او په زړه پوري قوي تمثیل دی ، دا د RCU (Read-Copy-Update) بلاک کولو مفهوم سره ورته دی. په لازمي ډول ، د کارګر تارونه هیڅکله د کار په جریان کې د TLS سلاټونو کې د معلوماتو هیڅ بدلون نه ګوري. بدلون یوازې د کار پیښو ترمنځ د آرام دورې په جریان کې واقع کیږي.

سفیر دا په دوه بیلابیلو لارو کاروي:

  • په هر کارګر تار کې د مختلف ډیټا ذخیره کولو سره ، ډاټا ته پرته له کوم بلاک څخه لاسرسی کیدی شي.
  • په هر کارګر تار کې یوازې د لوستلو حالت کې نړیوال ډیټا ته د ګډ پوائنټر ساتلو سره. په دې توګه، د هر کارګر تار د معلوماتو حوالې شمیره لري چې د کار په جریان کې کمیدل نشي کیدی. یوازې هغه وخت چې ټول کارګران آرام شي او نوي شریک شوي ډیټا اپلوډ کړي زاړه معلومات به له مینځه ویسي. دا د RCU سره ورته دی.

د کلستر تازه تارینګ

پدې برخه کې، زه به تشریح کړم چې څنګه TLS (د موضوع محلي ذخیره) د کلستر اداره کولو لپاره کارول کیږي. د کلستر مدیریت کې xDS API او/یا DNS پروسس کول، او همدارنګه د روغتیا معاینه شامله ده.
[ژباړه] د اینوای تارینګ ماډل

د کلستر جریان مدیریت لاندې برخې او مرحلې لري:

  1. د کلستر مدیر د استازي دننه یوه برخه ده چې ټول پیژندل شوي کلستر اپ سټریمونه اداره کوي، د کلستر کشف خدمت (CDS) API، د پټ کشف خدمت (SDS) او د پای ټکي کشف خدمت (EDS) APIs، DNS، او فعاله بهرنۍ چکونه. د روغتیا معاینه. دا د هر اپ سټریم کلستر لپاره "په نهایت کې ثابت" لید رامینځته کولو مسؤلیت لري ، چې پکې کشف شوي کوربه او همدارنګه روغتیا حالت شامل دي.
  2. د روغتیا معاینه کونکی فعال روغتیایی معاینه ترسره کوي او د کلستر مدیر ته د روغتیا حالت بدلونونو راپور ورکوي.
  3. CDS (د کلستر کشف خدمت) / SDS (د پټ کشف خدمت) / EDS (د پای ټکی کشف خدمت) / DNS د کلستر غړیتوب ټاکلو لپاره ترسره کیږي. د دولت بدلون د کلستر مدیر ته راستانه شوی.
  4. هر کارګر تار په دوامداره توګه د پیښې لوپ اجرا کوي.
  5. کله چې د کلستر مدیر وټاکي چې د کلستر لپاره حالت بدل شوی، دا د کلستر حالت یو نوی لوستل شوی سنیپ شاټ رامینځته کوي او د هر کارګر تار ته یې لیږي.
  6. د راتلونکي خاموش دورې په جریان کې، د کارګر تار به په تخصیص شوي TLS سلاټ کې سنیپ شاټ تازه کړي.
  7. د I/O پیښې په جریان کې چې د بیلانس بار کولو لپاره کوربه ټاکل کیږي ، د بار بیلنس کونکی به د کوربه په اړه د معلوماتو ترلاسه کولو لپاره د TLS (تریډ محلي ذخیره) سلاټ غوښتنه وکړي. دا تالاشۍ ته اړتیا نلري. دا هم په یاد ولرئ چې TLS کولی شي تازه پیښې هم رامینځته کړي ترڅو د بار بار بیلانسران او نور اجزا کولی شي کیچونه ، د ډیټا جوړښتونه او نور بیا محاسبه کړي. دا د دې پوسټ له دائرې څخه بهر دی، مګر په کوډ کې په مختلفو ځایونو کې کارول کیږي.

د پورته کړنلارې په کارولو سره، سفیر کولی شي هره غوښتنه پرته له کوم خنډ پرته پروسس کړي (پرته له دې چې مخکې تشریح شوي). پخپله د TLS کوډ پیچلتیا سربیره ، ډیری کوډ اړتیا نلري پدې پوه شي چې څنګه ملټي ریډینګ کار کوي او کولی شي په واحد تار لیکل شي. دا د غوره فعالیت سربیره ډیری کوډ لیکل اسانه کوي.

نور فرعي سیسټمونه چې د TLS کاروي

TLS (د موضوع محلي ذخیره) او RCU (Read Copy Update) په پراخه توګه په انوی کې کارول کیږي.

د کارولو مثالونه:

  • د اجرا کولو پرمهال د فعالیت بدلولو میکانیزم: د فعال شوي فعالیت اوسنی لیست په اصلي موضوع کې حساب شوی. د هر کارګر تار ته بیا د RCU سیمانټیکونو په کارولو سره یوازې د لوستلو سنیپ شاټ ورکول کیږي.
  • د لارې میزونو بدلول: د روټ جدولونو لپاره چې د RDS (د لارې کشف خدمت) لخوا چمتو شوي ، د لارې میزونه په اصلي تار کې رامینځته شوي. یوازې د لوستلو سنیپ شاټ به وروسته د RCU (Read Copy Update) سیمانټیک په کارولو سره هر کارګر تار ته چمتو شي. دا د روټ میزونو بدلول په اټومي توګه اغیزمن کوي.
  • د HTTP سرلیک کیچ کول: لکه څنګه چې دا معلومه شوه، د هرې غوښتنې لپاره د HTTP سرلیک محاسبه کول (په داسې حال کې چې په هر کور کې ~ 25K + RPS چلول) خورا ګران دي. سفیر په مرکزي توګه په هره نیمه ثانیه کې سرلیک محاسبه کوي او هر کارمند ته یې د TLS او RCU له لارې چمتو کوي.

نورې قضیې هم شتون لري، مګر پخوانۍ بیلګې باید ښه پوهه وړاندې کړي چې TLS د څه لپاره کارول کیږي.

د فعالیت نیمګړتیاوې پیژندل شوي

پداسې حال کې چې سفیر په ټولیز ډول ښه ترسره کوي، یو څو د پام وړ ساحې شتون لري چې پاملرنې ته اړتیا لري کله چې دا د خورا لوړ همغږي او له لارې کارول کیږي:

  • لکه څنګه چې پدې مقاله کې تشریح شوي، دا مهال ټول کارګر تارونه د لاسرسي لاګ حافظې بفر ته د لیکلو پرمهال یو لاک ترلاسه کوي. په لوړ همغږي او لوړ ټرپټ کې، تاسو به اړتیا ولرئ چې د هر کارګر تار لپاره د لاسرسي لاګونه بسته کړئ کله چې وروستي فایل ته د لیکلو په وخت کې د امر څخه بهر تحویلي لګښت کې. په بدیل سره، تاسو کولی شئ د هر کارګر تار لپاره جلا لاسرسي لاګ جوړ کړئ.
  • که څه هم احصایې خورا مطلوبې دي ، په خورا لوړ همغږي او له لارې به احتمال په انفرادي احصایو کې اټومي شخړې وي. د دې ستونزې حل د مرکزي کاونټرونو د دورې بیا تنظیم کولو سره د هر کارګر تار شمیرونکي دي. دا به په راتلونکي پوسټ کې بحث وشي.
  • اوسنۍ جوړښت به ښه کار ونکړي که چیرې سفیر په داسې سناریو کې ځای په ځای شي چیرې چې ډیر لږ اړیکې شتون لري چې د پام وړ پروسس سرچینو ته اړتیا لري. هیڅ تضمین شتون نلري چې اړیکې به په مساوي ډول د کارګر تارونو ترمینځ وویشل شي. دا د کارګر اتصال توازن پلي کولو سره حل کیدی شي ، کوم چې به د کارګر تارونو ترمینځ د اړیکو تبادلې ته اجازه ورکړي.

پایله

د اینووی د تارینګ ماډل ډیزاین شوی ترڅو د پروګرام کولو اسانتیا او د احتمالي ضایع حافظې او ارتباطاتو په لګښت کې پراخه موازي چمتو کړي که چیرې په سمه توګه تنظیم شوي نه وي. دا ماډل دې ته اجازه ورکوي چې په خورا لوړ تار شمیرو او ټریپټ کې خورا ښه ترسره کړي.
لکه څنګه چې ما په لنډه توګه په ټویټر کې یادونه وکړه، ډیزاین کولی شي د بشپړ کاروونکي موډ شبکې سټیک لکه DPDK (د ډیټا پلان پرمختیا کټ) په سر کې هم وګرځي، کوم چې د دودیز سرورونو په پایله کې کولی شي د بشپړ L7 پروسس کولو سره په هره ثانیه کې ملیونونه غوښتنې اداره کړي. دا به ډیره په زړه پورې وي چې وګورئ چې په راتلونکو څو کلونو کې څه جوړیږي.
یو وروستی ګړندی تبصره: له ما څخه څو ځله پوښتل شوي چې ولې موږ د سفیر لپاره C ++ غوره کړی. دلیل پاتې دی چې دا لاهم په پراخه کچه کارول شوې صنعتي درجې ژبه ده چې پدې پوسټ کې تشریح شوي معمارۍ رامینځته کیدی شي. C++ یقینا د ټولو یا حتی ډیری پروژو لپاره مناسب نه دی، مګر د ځینې کارونې قضیې لپاره دا لاهم د کار ترسره کولو یوازینۍ وسیله ده.

کوډ ته لینکونه

د انٹرفیسونو او سرلیک پلي کولو سره فایلونو ته لینکونه پدې پوسټ کې بحث شوي:

سرچینه: www.habr.com

Add a comment