نو تاسو میټریکونه راټول کړئ. لکه څنګه چې موږ یو. موږ میټریک هم راټولوو. البته، د سوداګرۍ لپاره اړین دی. نن ورځ موږ به زموږ د څارنې سیسټم د لومړۍ لینک په اړه وغږیږو - د statsd-compatible aggregation server
زموږ د تیرو مقالو څخه (
ادعا 1. ګیتوب ، د پروژې پراختیا کونکی ، د دې ملاتړ بند کړ: د پیچونو او فکسونو خپرول ، زموږ منل او (نه یوازې زموږ) PR. په تیرو څو میاشتو کې (د 2018 کال د فبروري څخه تر مارچ پورې)، فعالیت بیا پیل شوی، مګر تر دې دمخه شاوخوا 2 کاله بشپړ آرام و. برسېره پر دې، پروژه د پراختیا په حال کې ده
ادعا 2. د محاسبې دقت. بربیک د مجموعې لپاره ټولټال 65536 ارزښتونه راټولوي. زموږ په قضیه کې، د ځینو میترونو لپاره، د راټولولو دوره (30 ثانیو) په جریان کې، ډیر ارزښتونه ممکن راشي (1 په چوکۍ کې). د دې نمونې په پایله کې، اعظمي او لږترلږه ارزښتونه بې ګټې ښکاري. د مثال په توګه، دا ډول:
لکه څنګه چې دا وه
څنګه باید وی
د ورته دلیل لپاره، مقدارونه عموما په غلط ډول محاسبه کیږي. دلته د 32-bit فلوټ اوور فلو سره بګ اضافه کړئ ، کوم چې عموما سرور سیګفالټ ته لیږي کله چې ښکاري بې ګناه میټریک ترلاسه کوي ، او هرڅه عالي کیږي. بګ، په لاره کې، نه دی ټاکل شوی.
او په پای کې، د X ادعا وکړئ. د لیکلو په وخت کې، موږ چمتو یو چې دا ټولو 14 نورو یا لږ کاري سټیټډ پلي کولو ته وړاندې کړو چې موږ یې موندلی شو. راځئ تصور وکړو چې یو واحد زیربنا دومره وده کړې چې د 4 ملیون MPS منل نور کافي ندي. یا حتی که دا لا وده نه وي کړې، مګر میټریکونه لا دمخه ستاسو لپاره خورا مهم دي چې حتی په چارټونو کې لنډ، 2-3 دقیقې ډوب کولی شي دمخه مهم شي او د مدیرانو ترمنځ د نه منلو وړ خپګان لامل شي. څرنګه چې د خپګان درملنه یو بې شکره کار دی، تخنیکي حلونو ته اړتیا ده.
لومړی ، د خطا زغم ، نو په سرور کې ناڅاپه ستونزه په دفتر کې د رواني زومبي اپوکلپس لامل نه کیږي. دوهم، اندازه کول د 4 ملیون MPS څخه ډیر د منلو وړ وي، پرته له دې چې د لینکس شبکې سټیک ته ژور کیندل شي او په آرامۍ سره د اړتیا وړ اندازې ته "په پراخه کچه" وده وکړي.
څرنګه چې موږ د اندازه کولو لپاره خونه درلوده، موږ پریکړه وکړه چې د غلط زغم سره پیل وکړو. "په اړه! د خطا زغم! دا ساده ده، موږ دا کولی شو، "موږ فکر وکړ او 2 سرورونه مو پیل کړل، په هر یو کې د بربیک کاپي پورته کړه. د دې کولو لپاره، موږ باید دواړه سرورونو ته د میټریکونو سره ټرافيک کاپي کړو او حتی د دې لپاره یې ولیکئ
که تاسو د ستونزې په اړه لږ فکر وکړئ او په ورته وخت کې د بیلچ سره واوره وخورئ، نو لاندې روښانه مفکوره به ذهن ته راشي: تاسو یو سټیټ ته اړتیا لرئ چې په توزیع شوي حالت کې کار وکړي. دا هغه یو دی چې په وخت او میټریکونو کې د نوډونو ترمنځ همغږي پلي کوي. "البته ، دا ډول حل شاید دمخه شتون ولري ،" موږ وویل او ګوګل ته لاړو…. او دوی هیڅ ونه موندل. د مختلف احصایو لپاره اسنادو ته له تګ وروسته (
او بیا موږ د "لوبې" سټیټډ - بایوینو په اړه یادونه وکړه ، کوم چې په Just for Fun hackathon کې لیکل شوی و (د پروژې نوم د هیکاتون له پیل دمخه د سکریپټ لخوا رامینځته شوی و) او پوه شو چې موږ په عاجل ډول خپل سټیټډ ته اړتیا لرو. د څه لپاره؟
- ځکه چې په نړۍ کې ډیر لږ سټیټ کلون شتون لري،
- ځکه چې دا ممکنه ده چې مطلوب یا مطلوب غلطی زغم او پیمانه کولو ته نږدې چمتو کړئ (د سرورونو ترمینځ د راټول شوي میټریکونو همغږي کول او د شخړو لیږلو ستونزې حل کول)
- ځکه چې دا ممکنه ده چې د میټریکونو محاسبه د بربیک په پرتله ډیر دقیق وي،
- ځکه چې تاسو کولی شئ نور تفصيلي احصایې پخپله راټول کړئ، کوم چې بربیک په عملي توګه موږ ته ندي چمتو کړي،
- ځکه چې ما د دې فرصت درلود چې زما د خپل هایپرپرفارمنس توزیع شوي پیمانه غوښتنلیک برنامه کړم ، کوم چې به په بشپړ ډول د بل ورته هایپر جوړښت جوړښت تکرار نکړي ... ښه ، بس.
په څه لیکل؟ البته، په Rust کې. ولې؟
- ځکه چې لا دمخه د پروټوټایپ حل شتون درلود ،
- ځکه چې د مقالې لیکوال لا دمخه په هغه وخت کې زنګ پیژني او لیواله و چې په خلاصې سرچینې کې د ځای په ځای کولو فرصت سره د تولید لپاره پدې کې یو څه ولیکي ،
- ځکه چې د GC سره ژبې زموږ لپاره مناسب ندي د ترلاسه شوي ترافیک طبیعت له امله (تقریبا ریښتیني وخت) او د GC وقفې په عملي ډول د منلو وړ ندي ،
- ځکه چې تاسو د C سره پرتله کولو اعظمي فعالیت ته اړتیا لرئ
- ځکه چې زنګ موږ ته بې ډاره همغږي چمتو کوي، او که موږ دا په C/C++ کې لیکل پیل کړل، نو موږ به د بربیک په پرتله حتی ډیر زیان منونکي، د بفر اوور فلو، د نسل شرایطو او نورو ډارونکي کلمو سره مخ شوي وای.
د زنګ په وړاندې یو دلیل هم شتون درلود. شرکت په زنګ کې د پروژو جوړولو تجربه نه درلوده، او اوس موږ په اصلي پروژه کې د کارولو پلان نه لرو. له همدې امله، جدي ویره وه چې هیڅ شی به کار ونه کړي، مګر موږ پریکړه وکړه چې یو فرصت واخلو او هڅه وکړو.
وخت تېر شو...
په نهایت کې ، د څو ناکامو هڅو وروسته ، لومړۍ کاري نسخه چمتو شوه. څه شوي دي؟ همداسې وشول.
هر نوډ خپل میټریکونه ترلاسه کوي او راټولوي، او د هغه ډولونو لپاره میټریکونه نه راټولوي چیرې چې د دوی بشپړ سیټ د وروستي راټولولو لپاره اړین وي. نوډونه د یو بل سره د یو ډول توزیع شوي لاک پروتوکول لخوا وصل شوي ، کوم چې تاسو ته اجازه درکوي د دوی په مینځ کې یوازینی یو غوره کړئ (دلته موږ ژړل) چې لوی ته د میټریک لیږلو وړ دی. دا ستونزه اوس مهال د حل په حال کې ده
د میټریکونو سره د UDP پاکټونه د ساده راؤنډ رابین له لارې د شبکې تجهیزاتو کې د نوډونو ترمینځ غیر متوازن دي. البته، د شبکې هارډویر د پاکټونو مینځپانګه نه تجزیه کوي او له همدې امله کولی شي په هر ثانیه کې له 4M پاکټونو څخه ډیر راوباسي ، د میټریکونو یادونه نه کوي چې په اړه یې هیڅ نه پوهیږي. که موږ په پام کې ونیسو چې میټریکونه په هر پاکټ کې په یو وخت کې نه راځي ، نو موږ پدې ځای کې د فعالیت کومې ستونزې نه وړاندوینه کوو. که چیرې یو سرور خراب شي، د شبکې وسیله په چټکۍ سره (د 1-2 ثانیو دننه) دا حقیقت کشفوي او د غورځیدلي سرور له گردش څخه لیرې کوي. د دې په پایله کې، غیر فعال (د بیلګې په توګه، غیر مشر) نوډونه په چارټونو کې د کمښت په پام کې نیولو پرته په عملي توګه فعال او بند کیدی شي. اعظمي چې موږ له لاسه ورکوو د میټریکونو برخه ده چې په وروستي ثانیه کې راغلي. د یو مشر ناڅاپه له لاسه ورکول/بندول/سوئچ کول به بیا هم یو کوچنی ګډوډي رامینځته کړي (د 30 ثانیو وقفه لاهم له همغږي څخه بهر ده) ، مګر که چیرې د نوډونو ترمینځ اړیکه شتون ولري ، نو دا ستونزې کم کیدی شي ، د مثال په توګه ، د ترکیب پاکټونو لیږلو سره .
د داخلي جوړښت په اړه لږ څه. غوښتنلیک، البته، څو اړخیز دی، مګر د تار کولو جوړښت د هغه څخه توپیر لري چې په بربیک کې کارول کیږي. په بربیک کې تارونه یو شان دي - هر یو د معلوماتو راټولولو او راټولولو لپاره مسؤل دي. په بایوینو کې، کارګران په دوو ډلو ویشل شوي دي: هغه کسان چې د شبکې مسؤل دي او هغه کسان چې د راټولولو مسولیت لري. دا څانګه تاسو ته اجازه درکوي په ډیر انعطاف سره د میټریک ډول پورې اړوند غوښتنلیک اداره کړئ: چیرې چې قوي راټولولو ته اړتیا وي ، تاسو کولی شئ راټولونکي اضافه کړئ ، چیرې چې د شبکې ترافیک ډیر شتون لري ، تاسو کولی شئ د شبکې جریانونو شمیر اضافه کړئ. اوس مهال، زموږ په سرورونو کې موږ په 8 شبکې او 4 راټولولو جریان کې کار کوو.
د شمېرنې (د راټولولو لپاره مسؤل) برخه خورا ستړي ده. د شبکې جریانونو لخوا ډک شوي بفرونه د شمیرنې جریانونو ترمینځ ویشل شوي ، چیرې چې دوی وروسته تجزیه او راټول شوي. د غوښتنې سره سم، نورو نوډونو ته د لیږلو لپاره میټریکونه ورکول کیږي. دا ټول، د نوډونو ترمنځ د معلوماتو لیږلو او د قونسل سره کار کولو په شمول، په غیر متناسب ډول ترسره کیږي، په چوکاټ کې پرمخ ځي
د پراختیا په جریان کې ډیرې ستونزې د شبکې برخې لخوا رامینځته شوي چې د میټریکونو ترلاسه کولو مسؤلیت لري. په جلا جلا ادارو کې د شبکې جریان جلا کولو اصلي هدف دا وه چې د جریان مصرف وخت کم کړي. نه د ساکټ څخه ډاټا لوستلو لپاره. د غیر متناسب UDP او منظم recvmsg کارولو اختیارونه په چټکۍ سره ورک شوي: لومړی د پیښې پروسس کولو لپاره خورا ډیر کارونکي ځای CPU مصرفوي ، دوهم د ډیری شرایطو سویچونو ته اړتیا لري. له همدې امله دا اوس کارول کیږي
تبصره
په ډیفالټ ترتیباتو کې، د بفر اندازه خورا لوی وي. که تاسو ناڅاپه پریکړه وکړئ چې سرور پخپله هڅه وکړئ، تاسو ممکن د دې حقیقت سره مخ شئ چې د لږ شمیر میټریکونو لیږلو وروسته، دوی به ګرافیټ ته ونه رسیږي، د شبکې جریان بفر کې پاتې کیږي. د لږ شمیر میټریکونو سره کار کولو لپاره ، تاسو اړتیا لرئ په ترتیب کې کوچني ارزښتونو ته د بفسیز او کاري قطار اندازه تنظیم کړئ.
په پای کې، د چارټ مینه والو لپاره ځینې چارټونه.
د هر سرور لپاره د راتلونکو میټریکونو شمیر په اړه احصایې: له 2 ملیون څخه ډیر MPS.
د یو نوډ غیر فعال کول او د راتلونکو میټریکونو بیا توزیع کول.
د وتلو میټریکونو احصایې: یوازې یو نوډ تل لیږي - د برید مالک.
د هر نوډ د عملیاتو احصایې، د سیسټم مختلف ماډلونو کې د غلطیتونو په پام کې نیولو سره.
د راتلونکو میټریکونو توضیحات (د میټریک نومونه پټ دي).
موږ په راتلونکي کې د دې ټولو سره څه کولو پلان لرو؟ البته، کوډ ولیکئ، لعنت...! پروژه په اصل کې پلان شوې وه چې خلاصې سرچینې وي او د خپل ژوند په اوږدو کې به همداسې پاتې وي. زموږ په سمدستي پلانونو کې زموږ د رافټ نسخې ته بدلول ، د پیر پروتوکول ډیر پورټ ایبل ته بدلول ، د اضافي داخلي احصایو معرفي کول ، د میټریک نوي ډولونه ، د بګ فکسونه او نور پرمختګونه شامل دي.
البته، هرڅوک د پروژې په پراختیا کې مرسته کولو ته ښه راغلاست ویل کیږي: PR، مسلې رامینځته کړئ، که امکان ولري موږ به ځواب ووایو، ښه کړو، او نور.
د دې په ویلو سره، دا ټول خلک دي، زموږ هاتیان واخلئ!
سرچینه: www.habr.com