Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Աշխատելով ՏՏ ոլորտում, սկսում ես նկատել, որ համակարգերն ունեն իրենց առանձնահատկությունը: Նրանք կարող են լինել ճկուն, լուռ, էքսցենտրիկ և խիստ: Նրանք կարող են գրավել կամ վանել: Այսպես թե այնպես, պետք է «բանակցել» նրանց հետ, մանևրել «որոգայթների» միջև և կառուցել նրանց փոխազդեցության շղթաներ։

Այսպիսով, մենք պատիվ ունեցանք կառուցելու ամպային հարթակ, և դրա համար մեզ անհրաժեշտ էր «համոզել» մի քանի ենթահամակարգերի աշխատել մեզ հետ: Բարեբախտաբար, մենք ունենք «API լեզու», անմիջական ձեռքեր և մեծ ոգևորություն:

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

Բարի գալուստ կատու:

Սկիզբն է ճանապարհորդության

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

Կային նաև մի շարք պահանջներ.

  • ծառայությանը անհրաժեշտ է հարմար անձնական հաշիվ.
  • հարթակը պետք է ինտեգրված լինի գոյություն ունեցող բիլինգի համակարգին.
  • ծրագրային ապահովում և սարքավորում՝ OpenStack + վոլֆրամի գործվածք (Open Contrail), որը մեր ինժեներները սովորել են բավականին լավ «եփել»:

Մենք ձեզ մեկ այլ անգամ կպատմենք այն մասին, թե ինչպես է հավաքվել թիմը, մշակվել է անձնական հաշվի միջերեսը և կայացվել են դիզայնի որոշումներ, եթե Հաբրա համայնքը հետաքրքրված է:
Գործիքները, որոնք մենք որոշեցինք օգտագործել.

  • Python + Flask + Swagger + SQLAlchemy - ամբողջովին ստանդարտ Python հավաքածու;
  • Vue.js frontend-ի համար;
  • Մենք որոշեցինք կատարել բաղադրիչների և ծառայությունների միջև փոխազդեցությունը՝ օգտագործելով Celery-ը AMQP-ի միջոցով:

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

Այսպիսով, եկեք սկսենք մեր ծանոթությունը:

Լուռ օրինագիծ - հաշիվ

Մենք վաղուց ենք ճանաչում այս տղային: Նա միշտ նստում էր կողքիս ու լուռ ինչ-որ բան հաշվում։ Երբեմն նա մեզ ուղարկում էր օգտատերերի հարցումներ, թողարկում հաճախորդների հաշիվ-ապրանքագրեր և կառավարում ծառայություններ: Սովորական աշխատասեր տղա։ Ճիշտ է, դժվարություններ կային։ Նա լուռ է, երբեմն մտախոհ և հաճախ՝ սեփական մտքի վրա։

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Billing-ը առաջին համակարգն է, որի հետ մենք փորձել ենք ընկերանալ: Եվ առաջին դժվարությունը, որին հանդիպեցինք, ծառայությունների մշակման ժամանակ էր։

Օրինակ, երբ ստեղծվում կամ ջնջվում է, առաջադրանքը մտնում է վճարման ներքին հերթ: Այսպիսով, ներդրվում է ծառայությունների հետ ասինխրոն աշխատանքի համակարգ։ Մեր ծառայությունների տեսակները մշակելու համար մենք պետք է «դնենք» մեր առաջադրանքները այս հերթի մեջ: Եվ այստեղ մենք բախվեցինք մի խնդրի՝ փաստաթղթերի պակասի:

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Դատելով ծրագրային ապահովման API-ի նկարագրությունից՝ դեռ հնարավոր է լուծել այս խնդիրը, բայց մենք ժամանակ չունեինք հակադարձ ճարտարագիտություն անելու, ուստի տրամաբանությունը դուրս հանեցինք և առաջադրանքների հերթ կազմակերպեցինք RabbitMQ-ի վերևում: Ծառայության վրա գործողությունը նախաձեռնվում է հաճախորդի կողմից իր անձնական հաշվից, վերածվում է Celery «առաջադրանքի» հետնամասում և կատարվում է բիլինգի և OpenStack-ի կողմից: Նեխուրը բավականին հարմար է դարձնում առաջադրանքները կառավարելը, կրկնությունները կազմակերպելը և կարգավիճակը վերահսկելը: Դուք կարող եք ավելին կարդալ «նեխուրի» մասին, օրինակ. այստեղ.

Բացի այդ, բիլինգը չխանգարեց մի նախագիծ, որը սպառվեց: Շփվելով ծրագրավորողների հետ՝ մենք պարզեցինք, որ վիճակագրությունը հաշվարկելիս (և մենք պետք է իրականացնենք հենց այսպիսի տրամաբանություն), գոյություն ունի դադարեցման կանոնների բարդ փոխկապակցվածություն։ Բայց այս մոդելները լավ չեն համապատասխանում մեր իրականությանը: Մենք դա իրականացրեցինք նաև Celery-ի առաջադրանքների միջոցով՝ տանելով ծառայության կառավարման տրամաբանությունը դեպի հետին պլան:

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

Մեկ այլ խնդիր լռությունն է։

Բիլլին լուռ պատասխանում է «Լավ» որոշ API հարցումների: Սա այն դեպքն էր, օրինակ, երբ մենք խոստացված վճարումների վճարումներ կատարեցինք թեստի ժամանակ (այդ մասին ավելի ուշ): Հարցումները ճիշտ են կատարվել, և մենք սխալներ չենք տեսել։

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Ես ստիպված էի ուսումնասիրել տեղեկամատյանները UI-ի միջոցով համակարգի հետ աշխատելիս: Պարզվեց, որ բիլինգն ինքն է կատարում նմանատիպ հարցումներ՝ փոխելով շրջանակը կոնկրետ օգտատիրոջ, օրինակ՝ ադմինիստրատորի, փոխանցելով այն su պարամետրով։

Ընդհանուր առմամբ, չնայած փաստաթղթերում առկա բացերին և API-ի փոքր թերություններին, ամեն ինչ բավականին լավ է անցել: Տեղեկամատյանները կարելի է կարդալ նույնիսկ մեծ ծանրաբեռնվածության դեպքում, եթե հասկանում եք, թե ինչպես են դրանք կառուցված և ինչ փնտրել: Տվյալների բազայի կառուցվածքը զարդարուն է, բայց բավականին տրամաբանական և որոշ առումներով նույնիսկ գրավիչ:

Այսպիսով, ամփոփելու համար, հիմնական խնդիրները, որոնք մենք հանդիպեցինք փոխգործակցության փուլում, կապված են որոշակի համակարգի ներդրման առանձնահատկությունների հետ.

  • չփաստաթղթավորված «առանձնահատկություններ», որոնք այս կամ այն ​​կերպ ազդել են մեզ վրա.
  • փակ աղբյուր (բիլինգը գրված է C++-ով), արդյունքում՝ անհնար է 1-ին խնդիրը լուծել այլ կերպ, քան «փորձություն և սխալ»:

Բարեբախտաբար, արտադրանքն ունի բավականին ընդարձակ API, և մենք ինտեգրել ենք հետևյալ ենթահամակարգերը մեր անձնական հաշվի մեջ.

  • Տեխնիկական աջակցության մոդուլ - ձեր անձնական հաշվից ստացված հարցումները «փոխանցվում են» սպասարկման հաճախորդների համար թափանցիկ վճարման համար.
  • ֆինանսական մոդուլ - թույլ է տալիս ընթացիկ հաճախորդներին հաշիվ-ապրանքագրեր տրամադրել, դուրս գրել և ստեղծել վճարային փաստաթղթեր.
  • ծառայության կառավարման մոդուլ. դրա համար մենք պետք է իրականացնեինք մեր սեփական կարգավորիչը: Համակարգի ընդլայնելիությունը ձեռնտու էր մեզ, և մենք Բիլիին «սովորեցրինք» ծառայության նոր տեսակ:
    Դա մի քիչ դժվարություն էր, բայց այսպես թե այնպես, կարծում եմ, որ ես ու Բիլլին իրար հետ կհասնենք։

Քայլելով վոլֆրամի դաշտերով – Վոլֆրամի գործվածք

Վոլֆրամի դաշտերը կետագծված են հարյուրավոր մետաղալարերով՝ դրանց միջով փոխանցելով հազարավոր բիթ տեղեկատվություն: Տեղեկատվությունը հավաքվում է «փաթեթների» մեջ, վերլուծվում, կառուցում բարդ երթուղիներ, ասես կախարդանքով:

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Սա երկրորդ համակարգի տիրույթն է, որի հետ մենք պետք է ընկերանայինք՝ վոլֆրամի գործվածք (TF), նախկինում՝ OpenContrail: Նրա խնդիրն է կառավարել ցանցային սարքավորումները՝ մեզ՝ որպես օգտագործողների, ապահովելով ծրագրային աբստրակցիա։ TF - SDN, ներառում է ցանցային սարքավորումների հետ աշխատելու բարդ տրամաբանությունը: Բուն տեխնոլոգիայի մասին լավ հոդված կա, օրինակ. այստեղ.

Համակարգը ինտեգրված է OpenStack-ի հետ (քննարկվում է ստորև) Նեյտրոնային հավելվածի միջոցով:

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը
OpenStack ծառայությունների փոխազդեցություն:

Օպերատիվ բաժնի տղաները մեզ ծանոթացրեցին այս համակարգի հետ։ Մենք օգտագործում ենք համակարգի API՝ մեր ծառայությունների ցանցային փաթեթը կառավարելու համար: Դա մեզ դեռ որևէ լուրջ խնդիր կամ անհարմարություն չի պատճառել (չեմ կարող խոսել ՕԷ-ի տղաների փոխարեն), բայց փոխազդեցության մեջ եղել են տարօրինակություններ:

Առաջինն այսպիսի տեսք ուներ. հրամանները, որոնք պահանջում էին մեծ քանակությամբ տվյալների արտածում SSH-ի միջոցով միանալիս, պարզապես «կախեցին» կապը, մինչդեռ VNC-ի միջոցով ամեն ինչ ճիշտ էր աշխատում:

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Նրանց համար, ովքեր ծանոթ չեն խնդրին, այն բավականին ծիծաղելի է թվում. ls /root-ը ճիշտ է աշխատում, մինչդեռ, օրինակ, վերին մասը «սառեցնում է» ամբողջությամբ։ Բարեբախտաբար, նախկինում էլ բախվել ենք նմանատիպ խնդիրների։ Որոշվեց՝ կարգավորելով MTU-ն հաշվողական հանգույցներից մինչև երթուղիչները երթուղու վրա: Ի դեպ, սա TF-ի խնդիր չէ։

Հաջորդ խնդիրը հենց անկյունում էր: Մի «գեղեցիկ» պահի մեջ երթուղայինի կախարդանքն անհետացավ հենց այնպես։ TF-ը դադարեցրել է սարքավորումների երթուղիների կառավարումը:

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Մենք աշխատեցինք Openstack-ի հետ ադմինիստրատորի մակարդակից և դրանից հետո անցանք անհրաժեշտ օգտվողի մակարդակին: SDN-ն, ըստ երևույթին, «գրավում» է այն օգտվողի շրջանակը, ում կողմից կատարվում են գործողությունները: Փաստն այն է, որ նույն ադմինիստրատորի հաշիվն օգտագործվում է TF-ին և OpenStack-ին միացնելու համար: Օգտագործողին անցնելու քայլին «կախարդանքն» անհետացավ։ Որոշվեց ստեղծել առանձին հաշիվ՝ համակարգի հետ աշխատելու համար։ Սա մեզ թույլ տվեց աշխատել՝ չխախտելով ինտեգրման գործառույթը:

Silicon Lifeforms - OpenStack

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

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

OpenStack-ը մեր հարթակի առանցքն է:

OpenStack-ն ունի մի քանի ենթահամակարգեր, որոնցից մենք ներկայումս առավել ակտիվ օգտագործում ենք Nova, Glance և Cinder: Նրանցից յուրաքանչյուրն ունի իր սեփական API-ն: Nova-ն պատասխանատու է հաշվողական ռեսուրսների և օրինակների ստեղծման համար, Cinder-ը պատասխանատու է ծավալների և դրանց նկարների կառավարման համար, Glance-ը պատկերային ծառայություն է, որը կառավարում է ՕՀ-ի ձևանմուշները և դրանց վրա մետատեղեկատվությունը:

Յուրաքանչյուր ծառայություն աշխատում է կոնտեյներով, և հաղորդագրության միջնորդը «սպիտակ նապաստակն» է՝ RabbitMQ:

Այս համակարգը մեզ տվեց ամենաանսպասելի դժվարությունը։

Եվ առաջին խնդիրը չուշացավ, երբ փորձեցինք լրացուցիչ ծավալ միացնել սերվերին։ Cinder API-ն կտրականապես հրաժարվեց կատարել այս առաջադրանքը: Ավելի ճիշտ, եթե հավատում եք OpenStack-ին, կապը հաստատված է, բայց վիրտուալ սերվերի ներսում սկավառակի սարք չկա:

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Մենք որոշեցինք շեղում կատարել և նույն գործողությունը պահանջեցինք Nova API-ից: Արդյունքն այն է, որ սարքը ճիշտ է միանում և հասանելի է սերվերի ներսում: Թվում է, որ խնդիրն առաջանում է, երբ բլոկ-պահեստավորումը չի արձագանքում Cinder-ին:

Մեզ մեկ այլ դժվարություն էր սպասում սկավառակների հետ աշխատելիս. Համակարգի ծավալը չհաջողվեց անջատել սերվերից:

Կրկին, OpenStack-ն ինքը «երդվում է», որ ոչնչացրել է կապը, և այժմ դուք կարող եք ճիշտ աշխատել ձայնի հետ առանձին: Բայց API-ն կտրականապես չէր ցանկանում գործողություններ կատարել սկավառակի վրա:

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Այստեղ մենք որոշեցինք ոչ թե առանձնապես կռվել, այլ փոխել մեր տեսակետը ծառայության տրամաբանության վերաբերյալ։ Եթե ​​կա օրինակ, պետք է լինի նաև համակարգի ծավալը։ Հետևաբար, օգտատերը դեռ չի կարող հեռացնել կամ անջատել համակարգի «սկավառակը»՝ առանց «սերվերը» ջնջելու։

OpenStack-ը համակարգերի բավականին բարդ հավաքածու է իր փոխազդեցության տրամաբանությամբ և զարդարուն API-ով: Մեզ օգնում են բավականին մանրամասն փաստաթղթերը և, իհարկե, փորձն ու սխալը (ուր կլինեինք մենք առանց դրա):

Փորձնական վազք

Անցյալ տարվա դեկտեմբերին մենք փորձնական գործարկում ենք իրականացրել։ Հիմնական խնդիրն էր մեր նախագիծը մարտական ​​ռեժիմով փորձարկել տեխնիկական և UX կողմից։ Հանդիսատեսը ընտրովի է հրավիրվել, իսկ թեստավորումը փակվել է։ Այնուամենայնիվ, մենք թողել ենք նաև մեր կայքում փորձարկման մուտքի իրավունք խնդրելու տարբերակը:

Թեստն ինքնին, իհարկե, զերծ չմնաց իր զվարճալի պահերից, քանի որ հենց այստեղ են մեր արկածները նոր սկսվում։

Նախ, մենք որոշ չափով սխալ գնահատեցինք նախագծի նկատմամբ հետաքրքրությունը և ստիպված եղանք արագորեն ավելացնել հաշվողական հանգույցներ հենց թեստի ընթացքում: Կլաստերի համար սովորական դեպք, բայց այստեղ էլ կային որոշ նրբերանգներ: TF-ի որոշակի տարբերակի փաստաթղթերը ցույց են տալիս միջուկի կոնկրետ տարբերակը, որի վրա փորձարկվել է vRouter-ի հետ աշխատանքը: Մենք որոշեցինք գործարկել հանգույցներ ավելի նոր միջուկներով: Արդյունքում, TF-ն հանգույցներից երթուղիներ չի ստացել: Ես ստիպված էի շտապ հետ գլորել միջուկները։

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Մեկ այլ հետաքրքրություն կապված է ձեր անձնական հաշվի «փոխել գաղտնաբառը» կոճակի գործունակության հետ:

Մենք որոշեցինք օգտագործել JWT՝ մեր անձնական հաշվի մուտքը կազմակերպելու համար, որպեսզի չաշխատենք նիստերի հետ: Քանի որ համակարգերը բազմազան են և լայնորեն ցրված, մենք կառավարում ենք մեր սեփական նշանը, որում մենք «փաթաթում ենք» նիստերը բիլինգից և նշանը OpenStack-ից: Երբ գաղտնաբառը փոխվում է, նշանը, իհարկե, «վատանում է», քանի որ օգտվողի տվյալները այլևս վավեր չեն, և այն պետք է վերաթողարկվի:

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը

Մենք մոռացանք այս կետի մասին, և պարզապես բավարար ռեսուրսներ չկային այս հատվածն արագ ավարտելու համար: Մենք պետք է անջատեինք ֆունկցիոնալությունը թեստը սկսելուց անմիջապես առաջ:
Ներկայումս մենք դուրս ենք գալիս օգտատիրոջից, եթե գաղտնաբառը փոխվել է:

Չնայած այս նրբերանգներին, թեստավորումը լավ անցավ: Մի երկու շաբաթվա ընթացքում մոտ 300 մարդ կանգ առավ։ Մենք կարողացանք ապրանքին նայել օգտատերերի աչքերով, փորձարկել այն գործողության մեջ և հավաքել բարձրորակ արձագանքներ:

Շարունակելի

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

Իհարկե, աշխատելու բան կա և՛ կոդի, և՛ համակարգի ինտեգրման ինտերֆեյսների վրա: Նախագիծը բավականին երիտասարդ է, բայց մենք լի ենք այն հուսալի և հարմարավետ ծառայության վերածելու հավակնություններով:

Մենք արդեն կարողացել ենք համոզել համակարգերին։ Բիլը պարտաճանաչորեն կատարում է հաշվումը, վճարումը և օգտատերերի հարցումները իր պահարանում: Վոլֆրամի դաշտերի «կախարդանքը» մեզ կայուն հաղորդակցություն է ապահովում: Եվ միայն OpenStack-ը երբեմն դառնում է քմահաճ՝ գոռալով նման բան. «WSREP-ը դեռ չի պատրաստել հանգույցը հավելվածի օգտագործման համար»: Բայց դա բոլորովին այլ պատմություն է...

Մենք վերջերս գործարկեցինք ծառայությունը:
Բոլոր մանրամասներին կարող եք ծանոթանալ մեր կայքում Առցանց.

Կիբերփանկով համեմված ամպային ծառայության ստեղծման պատմությունը
CLO զարգացման թիմ

Օգտակար հղումներ

OpenStack

Վոլֆրամի գործվածք

Source: www.habr.com

Добавить комментарий