Hacker News

Անհամաձայնություն. դեպքի ուսումնասիրություն կատարողականի օպտիմալացման մեջ

Անհամաձայնություն. դեպքի ուսումնասիրություն կատարողականի օպտիմալացման մեջ Տարաձայնությունների այս համապարփակ վերլուծությունը առաջարկում է դրա հիմնական բաղադրիչների և ավելի լայն հետևանքների մանրամասն ուսումնասիրություն: Ուշադրության հիմնական ոլորտները Քննարկումը կենտրոնացած է. Հիմնական մեխանիզմները և պ...

1 min read Via newsletter.fullstack.zip

Mewayz Team

Editorial Team

Hacker News

Discord. A Case Study in Performance Optimization

Discord-ի կատարողականի օպտիմալացման ճամփորդությունը հանդիսանում է ժամանակակից ծրագրային ապահովման տեխնիկայի ամենաուսանելի օրինակներից մեկը, որը ցույց է տալիս, թե ինչպես հարթակը կարող է մասշտաբավորվել հազարավորից մինչև հարյուր միլիոնավոր օգտատերեր՝ առանց արագության կամ հուսալիության զոհաբերելու: Ուսումնասիրելով Discord-ի ինժեներական որոշումները՝ տվյալների բազայի միգրացիաներից մինչև իրական ժամանակի հաղորդագրությունների ճարտարապետություն, ձեռնարկությունները կարող են ապացուցված ռազմավարություններ կորզել՝ ճնշման տակ աշխատող հարթակներ կառուցելու համար:

Ո՞ր հիմնական մեխանիզմներն են Power Discord-ի արդյունավետությունը մասշտաբով:

Discord-ի ենթակառուցվածքը կառուցված է կանխամտածված ինժեներական փոխզիջումների փիլիսոփայության վրա: Ի սկզբանե կառուցված Python-ի և MongoDB-ի վրա, պլատֆորմը արագորեն հանդիպեց խցանումների, քանի որ դրա օգտատերերի բազան պայթեց: Ինժեներական թիմը կարևոր ճարտարապետական որոշում կայացրեց՝ միաձույլ կույտից հեռանալ դեպի ծառայությունների վրա հիմնված ճարտարապետություն՝ հնարավորություն տալով առանձին բաղադրիչներին ինքնուրույն մասշտաբել:

Discord-ի կատարողականի հիմքում ընկած է Elixir-ի և Erlang BEAM վիրտուալ մեքենայի օգտագործումը իր իրական ժամանակի հաղորդագրությունների շերտի համար: BEAM VM-ը նպատակաուղղված է ստեղծվել միաժամանակյա, սխալ հանդուրժող համակարգերի համար, ճիշտ այն, ինչ պահանջում է օրական միլիարդավոր հաղորդագրություններ մշակող հարթակը: Միևնույն ժամանակ, Discord-ի API շերտը ի վերջո վերաշարադրվեց Rust-ում, առաջարկելով հիշողության անվտանգություն և գրեթե զրոյական գործունակություն, որը Python-ը պարզապես չէր կարող համապատասխանել մասշտաբով:

Արդյունքն այն է, որ մի համակարգ, որտեղ միլիոնավոր միաժամանակյա WebSocket կապեր են պահպանվում հաղորդագրությունների առաքման մինչև 50 ms ժամանակով, նույնիսկ առավելագույն օգտագործման ժամանակ: Սա պատահականություն չէր. դա կրկնվող պրոֆիլավորման, խցանումների նույնականացման և ամենասթրեսված համակարգի բաղադրիչների նպատակային վերագրումների արդյունք էր:

Ինչպե՞ս Discord-ը լուծեց տվյալների բազայի իր ամենահռչակավոր խոչընդոտը:

Discord-ի ամենահրապարակային փաստագրված ինժեներական մարտահրավերներից մեկը ներառում էր Cassandra-ն՝ բաշխված տվյալների բազան, որն օգտագործվում էր հաղորդագրությունների պատմությունը պահելու համար: Քանի որ պլատֆորմը մեծանում էր, ընթերցման հետաձգումը կտրուկ անկում ապրեց, ոչ թե այն պատճառով, որ Cassandra-ն վատ ընտրություն էր, այլ այն պատճառով, որ Discord-ի օգտագործման օրինաչափությունները հիմնովին փոխվել էին: Թեժ միջնորմները, որտեղ ընթերցումների անհամաչափ քանակությունը կենտրոնացած էր տվյալների որոշակի հանգույցների վրա, առաջացրեցին անկանխատեսելի դանդաղում:

Ինժեներական թիմի պատասխանը ուղենշային միգրացիա էր դեպի ScyllaDB՝ Cassandra-ի հետ համատեղելի տվյալների բազա՝ գրված C++-ով: Միգրացիան նվազեցրեց p99 ընթերցման հետաձգումը 40–125 մս-ից մինչև միանիշ միլիվայրկյան շատ դեպքերում: Ավելի կարևոր է, որ այն նվազեցրեց կլաստերի կառավարման գործառնական բարդությունը՝ ազատելով ինժեներական ռեսուրսները՝ կենտրոնանալով առանձնահատկությունների զարգացման վրա, այլ ոչ ենթակառուցվածքի հրդեհաշիջման վրա:

«Լավագույն կատարողականի օպտիմիզացումը միշտ չէ, որ տեխնիկապես ամենաբարդն է. այն նվազեցնում է բարդությունը՝ անմիջապես անդրադառնալով օգտագործողի ցավ պատճառող խցանմանը»: — Discord-ի տվյալների բազայի միգրացիայի պատմության կողմից հաստատված սկզբունք:

Այս դեպքը ցույց է տալիս կարևոր դաս ցանկացած աճող հարթակի համար. աճի մի փուլի համար ճիշտ գործիքը կարող է սխալ գործիք դառնալ հաջորդի համար: Շարունակական չափորոշիչները և միգրացիայի պատրաստակամությունը վատ պլանավորման նշաններ չեն, դրանք ինժեներական հասունության նշաններ են:

Ի՞նչ իրական աշխարհի իրականացման դասեր կարող են դիմել ձեռնարկությունները:

Discord-ի օպտիմալացման ճամփորդությունը զուտ տեսական չէր. այն արտադրեց մի շարք կրկնվող պրակտիկաներ, որոնք կիրառելի են ծրագրային ապահովման վրա հիմնված ցանկացած բիզնեսի համար: Առավել արդյունավետ միջոցները ներառում են.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →
  • Պրոֆիլը նախքան օպտիմիզացումը. Discord-ը հետևողականորեն հայտնաբերեց ճշգրիտ խոչընդոտները չափումների, այլ ոչ թե ենթադրությունների միջոցով՝ կանխելով անիմաստ ջանքերը ոչ կրիտիկական ուղիների վրա:
  • Ընտրեք միաժամանակության առաջին լեզուները I/O-ծանր աշխատանքային ծանրաբեռնվածության համար. Հաղորդագրությունների երթուղղման համար Elixir անցնելը զգալիորեն նվազեցրեց CPU-ի գերբեռնվածությունը՝ համեմատած շղթա յուրաքանչյուր կապի մոդելների հետ:
  • Առանձնացնել պահեստը հաշվարկից. Առանձնացնելով հաղորդագրությունների պահեստը իրական ժամանակի առաքման շերտից՝ Discord-ը հնարավորություն տվեց յուրաքանչյուր շերտին ինքնուրույն մասշտաբել՝ ելնելով իր հատուկ բեռնվածության օրինաչափությունից:
  • Ընդգրկեք աճող միգրացիան մեծ պայթյունի վերաշարադրումների նկատմամբ. Կարևոր համակարգերը փոխադրվեցին ծառայության կողմից՝ նվազեցնելով ռիսկը և թույլ տալով շարունակական վավերացում կատարել կատարողականի ձեռքբերումների համար:
  • Վաղ ներդրում կատարեք դիտարկելիության մեջ. Discord-ի կարողությունը արագ հայտնաբերել ռեգրեսիաները բխում է խորը ներդրումից բաշխված հետագծման, չափման վահանակների և նախազգուշացման ենթակառուցվածքներում, որոնք ստեղծվել են մինչև ճգնաժամերը:

Ինչպե՞ս է Discord-ի մոտեցումը համեմատվում արդյունաբերության այլընտրանքների հետ:

Discord-ի օպտիմալացման մոդելը էականորեն հակադրվում է Slack-ի և Microsoft Teams-ի նման հարթակների հետ նմանատիպ մարտահրավերներին: Slack-ը, օրինակ, մեծապես թեքվել է դեպի Node.js-ի վրա հիմնված stack-ը և WebSocket-ի կառավարումը հավելվածի շերտում՝ ընդունելով ավելի բարձր հիշողություն՝ ծրագրավորողների ծանոթության դիմաց: Microsoft-ի Azure ենթակառուցվածքի աջակցությամբ աշխատող թիմերը ձեռնարկեցին առաջին մոտեցումը.

Discord-ի տարբերակիչը նրա պատրաստակամությունն էր ընդունել ավելի քիչ հիմնական տեխնոլոգիաներ՝ Elixir, Rust, ScyllaDB, երբ այդ տեխնոլոգիաները ակնհայտորեն ավելի հարմար էին կոնկրետ խնդիրների համար: Տեխնոլոգիաների ընտրության այս պրագմատիկ, այլ ոչ թե գաղափարական մոտեցումը չափելի օգուտներ բերեց՝ չպահանջելով մեծածախ հարթակի վերաշարադրումը ժամանակի որևէ կետում:

Ձեռնարկությունների համար, ովքեր գնահատում են իրենց հարթակային կույտերը, Discord-ի օրինակը կտրականապես հակասում է «ռեզյումեի վրա հիմնված զարգացմանը»՝ ընտրելով տեխնոլոգիաներ իրենց ոլորտի հեղինակության համար, այլ ոչ թե համապատասխան խնդրին: Հարցը երբեք այն չէ, թե «ի՞նչն է հայտնի»։ բայց «ինչն է լուծում այս կոնկրետ կատարողական սահմանափակումը»:

Ի՞նչ էմպիրիկ ապացույցներ են ապացուցում Discord-ի օպտիմալացման ռազմավարությունները:

Discord-ի ինժեներական որոշումների արդյունքները փաստաթղթավորված են և չափելի: ScyllaDB-ի միգրացիայից հետո Discord-ը զեկուցեց հանգույցների քանակի 10 անգամ կրճատում՝ միաժամանակ բարելավելով ուշացումը: Rust API-ի վերաշարադրումը վերացրեց հիշողության հետ կապված սխալների ամբողջ կատեգորիաները՝ միաժամանակ նվազեցնելով ծառայության արձագանքման ժամանակը: Հաղորդագրությունների առաքումը մասշտաբով հետևողականորեն գործում է 50 մվ-ի շեմից ցածր՝ նույնիսկ հիմնական խաղային իրադարձությունների ժամանակ. պահեր, որոնք նախկինում լարել էին համակարգը մինչև իր սահմանները:

Մինչև 2023 թվականը Discord-ը օրական մշակում էր ավելի քան 4 միլիարդ րոպե ձայնային հաղորդակցություն ավելի քան 19 միլիոն ակտիվ սերվերների միջոցով: Սրանք ունայնության չափումներ չեն. դրանք վկայում են այն մասին, որ ինժեներական ճնշման տակ ընդունված ճարտարապետական որոշումները ժամանակի ընթացքում տվել են երկարակյաց, բարդ արդյունավետություն:

Հաճախակի տրվող հարցեր

Ինչո՞ւ Discord-ը Python-ից տեղափոխվեց Rust իր API շերտի համար:

Python's Global Interpreter Lock-ը (GIL) հիմնովին սահմանափակում է իրապես միաժամանակյա կոդ գործարկելու նրա կարողությունը՝ ստեղծելով թողունակության առաստաղներ, որոնք ավելի ու ավելի խնդրահարույց են դառնում, քանի որ Discord-ի API-ի հարցումների ծավալը մեծանում է: Rust-ն առաջարկում էր ծրագրավորողների համեմատելի արտադրողականություն համակարգերի մակարդակի կոդի համար՝ առանց գործարկման ժամանակի, աղբի հավաքման դադարների կամ Python-ի համաժամանակյա սահմանափակումների՝ արտադրելով API շերտ, որը և՛ ավելի արագ, և՛ կանխատեսելի էր ծանրաբեռնվածության ներքո:

Ո՞րն է կատարողականության օպտիմալացման ամենամեծ սխալը, որ թույլ են տալիս հարթակները մասշտաբով:

Ամենատարածված սխալը վաղաժամ և լայնորեն օպտիմիզացումն է, այլ ոչ թե դեգրադացիա առաջացնող կոնկրետ, չափված խցանման թիրախը: Արդյունավետության ճարտարագիտությունը ամենաարդյունավետն է, երբ հիմնված է պրոֆիլավորման տվյալների և օգտագործողի վրա ազդեցության չափումների վրա: Discord-ը հետևողականորեն հաջողվեց՝ բացահայտելով ամենաբարձր ազդեցության սահմանափակումը՝ տվյալների բազայի ուշացումը, API թողունակությունը, WebSocket-ի համաժամանակությունը, և հատուկ լուծելով այն՝ նախքան հաջորդին անցնելը:

Ինչպե՞ս կարող է բիզնես մակարդակի հարթակը կիրառել Discord-ի արդյունավետության դասերը՝ առանց ձեռնարկության ինժեներական ռեսուրսների:

Սկզբունքները արդյունավետորեն նվազում են: Ցանկացած հարթակ կարող է իրականացնել դիտարկելիության գործիքավորում, պրոֆիլի վերջնակետեր իրատեսական ծանրաբեռնվածության ներքո և կայացնել լրացուցիչ որոշումներ՝ հիմնվելով տվյալների վրա, այլ ոչ թե լռելյայնների վրա: Բոլորը մեկում պլատֆորմները, որոնք վերացական ենթակառուցվածքի բարդությունը (քեշավորումը, իրական ժամանակում հաղորդակցությունը և տվյալների պահպանումը հարթակի մակարդակում), թույլ են տալիս աճող բիզնեսներին օգտվել օպտիմիզացված ճարտարապետությունից՝ առանց այն ինքնուրույն վերակառուցելու կարիքի:


Discord-ի կատարողականի օպտիմալացման դեպքի ուսումնասիրությունը ապացուցում է, որ կայուն մասշտաբը ձեռք է բերվում կանխամտածված, տվյալների վրա հիմնված ճարտարապետական որոշումների միջոցով, այլ ոչ թե ռեսուրսներ նետելով խնդիրների վրա: Անկախ նրանից, թե դուք աշխատում եք կապի հարթակով, թե բազմամոդուլային բիզնեսի օպերացիոն համակարգով, սկզբունքները նույնն են՝ անխնա չափեք, խելամտորեն անջատվեք և ընտրեք գործիքներ, որոնք համապատասխանում են իրական խնդրին:

Եթե ձեր բիզնեսը փնտրում է հարթակ, որը կիրառում է այս սկզբունքները` կառավարելու արդյունավետությունը, մասշտաբայնությունը և գործառնական բարդությունը, որպեսզի կարողանաք կենտրոնանալ աճի վրա, ուսումնասիրեք Mewayz-ն այսօր: 207 ինտեգրված մոդուլներով, 138,000+ օգտվողներով և ամսական ընդամենը 19 դոլարից սկսած պլաններով՝ Mewayz-ը ստեղծվել է ձեր բիզնեսի համար առաջին իսկ օրվանից:

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime