Tarantool Data Grid-ի ճարտարապետությունն ու հնարավորությունները

Tarantool Data Grid-ի ճարտարապետությունն ու հնարավորությունները

2017 թվականին մենք հաղթեցինք Alfa-Bank-ի ներդրումային բիզնեսի գործարքային միջուկը զարգացնելու մրցույթում և սկսեցինք աշխատանքը (HighLoad++ 2018-ում՝ ներդրումային բիզնեսի հիմնական մասին զեկույցով։ խոսեց Վլադիմիր Դրինկին, Ալֆա Բանկի ներդրումային բիզնեսի գործարքային միջուկի ղեկավար): Ենթադրվում էր, որ այս համակարգը պետք է համախմբեր գործարքների տվյալները տարբեր աղբյուրներից տարբեր ձևաչափերով, տվյալները բերեր միասնական ձևի, պահեր և ապահովեր դրանց մուտքը:

Մշակման գործընթացում համակարգը զարգացավ և ձեռք բերեց ֆունկցիոնալություն, և ինչ-որ պահի մենք հասկացանք, որ մենք բյուրեղացնում ենք ավելին, քան պարզապես կիրառական ծրագրակազմը, որը ստեղծվել է խնդիրների խստորեն սահմանված շրջանակը լուծելու համար. մեզ հաջողվեց: համակարգ՝ մշտական ​​պահեստով բաշխված հավելվածների կառուցման համար. Մեր ձեռք բերած փորձը հիմք է հանդիսացել նոր արտադրանքի. Tarantool տվյալների ցանց (TDG):

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

Ճարտարապետական ​​առումով մենք համակարգը բաժանեցինք առանձինների դերերը, որոնցից յուրաքանչյուրը պատասխանատու է խնդիրների որոշակի շրջանակի լուծման համար։ Գործող հավելվածի մեկ օրինակն իրականացնում է մեկ կամ մի քանի դերի տեսակներ: Կլաստերում կարող են լինել նույն տեսակի մի քանի դերեր.

Tarantool Data Grid-ի ճարտարապետությունն ու հնարավորությունները

միակցիչ

Connector-ը պատասխանատու է արտաքին աշխարհի հետ հաղորդակցվելու համար. նրա խնդիրն է ընդունել հարցումը, վերլուծել այն, և եթե դա հաջողվի, ապա ուղարկեք տվյալները մշակման մուտքային պրոցեսորին: Մենք աջակցում ենք HTTP, SOAP, Kafka, FIX ձևաչափերին: Ճարտարապետությունը թույլ է տալիս պարզապես ավելացնել աջակցություն նոր ձևաչափերի համար՝ շուտով IBM MQ-ի աջակցությունը: Եթե ​​հարցումը վերլուծելը ձախողվեց, միակցիչը կվերադարձնի սխալ. հակառակ դեպքում, նա կպատասխանի, որ հարցումը հաջողությամբ մշակվել է, նույնիսկ եթե դրա հետագա մշակման ընթացքում սխալ է տեղի ունեցել: Դա արվել է հատուկ այն համակարգերի հետ աշխատելու համար, որոնք չգիտեն, թե ինչպես կրկնել հարցումները, կամ, ընդհակառակը, դա անում են չափազանց համառորեն: Տվյալները չկորցնելու համար օգտագործվում է վերանորոգման հերթ. օբյեկտը նախ մտնում է դրա մեջ և միայն հաջող մշակումից հետո հանվում դրանից: Ադմինիստրատորը կարող է ծանուցումներ ստանալ վերանորոգման հերթում մնացած օբյեկտների մասին, և ծրագրային ապահովման սխալը կամ ապարատային ձախողումը վերացնելուց հետո նորից փորձել:

Ներածման պրոցեսոր

Input պրոցեսորը դասակարգում է ստացված տվյալները՝ ըստ բնորոշ հատկանիշների և կանչում համապատասխան պրոցեսորներ։ Handlers-ը Lua կոդն է, որն աշխատում է ավազատուփում, ուստի դրանք չեն կարող ազդել համակարգի աշխատանքի վրա: Այս փուլում տվյալները կարող են կրճատվել մինչև պահանջվող ձևը, և ​​անհրաժեշտության դեպքում գործարկել կամայական թվով առաջադրանքներ, որոնք կարող են իրականացնել անհրաժեշտ տրամաբանությունը: Օրինակ՝ Tarantool Data Grid-ի վրա կառուցված MDM (Master Data Management) պրոդուկտում նոր օգտատեր ավելացնելիս, որպեսզի չդանդաղեցնենք հարցման մշակումը, որպես առանձին առաջադրանք սկսում ենք ոսկե գրառման ստեղծումը։ Sandbox-ը աջակցում է տվյալների ընթերցման, փոփոխման և ավելացման հարցումներ, թույլ է տալիս կատարել որոշակի գործառույթներ պահեստավորման տեսակի բոլոր դերերի և արդյունքի համախմբման (քարտեզ/նվազեցում):

Գործող սարքերը կարող են նկարագրվել ֆայլերով.

sum.lua

local x, y = unpack(...)
return x + y

Եվ հետո, կազմաձևում հայտարարված է.

functions:
  sum: { __file: sum.lua }

Ինչու Լուա: Լուան շատ պարզ լեզու է։ Ելնելով մեր փորձից՝ դրա հետ ծանոթանալուց մի քանի ժամ հետո մարդիկ սկսում են գրել կոդ, որը լուծում է իրենց խնդիրը։ Եվ սրանք ոչ միայն պրոֆեսիոնալ մշակողներ են, այլ, օրինակ, վերլուծաբաններ։ Բացի այդ, jit կոմպիլյատորի շնորհիվ Լուան շատ արագ է աշխատում։

Պահեստ

Պահպանումը պահպանում է մշտական ​​տվյալները: Մինչև պահպանումը, տվյալները վավերացվում են տվյալների սխեմայի համաձայն: Շղթան նկարագրելու համար մենք օգտագործում ենք ընդլայնված ձևաչափ Ապաչի Ավրո. Օրինակ:

{
    "name": "User",
    "type": "record",
    "logicalType": "Aggregate",
    "fields": [ 
        { "name": "id", "type": "string"}, 
        {"name": "first_name", "type": "string"}, 
        {"name": "last_name", "type": "string"} 
    ], 
    "indexes": ["id"] 
}

Այս նկարագրության հիման վրա DDL (Տվյալների սահմանման լեզու) ինքնաբերաբար ստեղծվում է Tarantula DBMS-ի և GraphQL տվյալների հասանելիության սխեման:

Աջակցվում է տվյալների ասինխրոն կրկնօրինակումը (նախատեսվում է ավելացնել համաժամանակյա մեկը):

Ելքային պրոցեսոր

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

Scaling

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

Տվյալների հատկությունները

Օբյեկտները կարող են լինել շատ մեծ և պարունակել այլ առարկաներ: Մենք ապահովում ենք տվյալների ավելացման և թարմացման ատոմականությունը՝ բոլոր կախվածություններով օբյեկտը պահելով մեկ վիրտուալ դույլով: Սա կանխում է օբյեկտի «տարածումը» մի քանի ֆիզիկական սերվերների վրա:

Տարբերակումը աջակցվում է. օբյեկտի յուրաքանչյուր թարմացում ստեղծում է նոր տարբերակ, և մենք միշտ կարող ենք ժամանակ հատկացնել և տեսնել, թե ինչպիսի տեսք ուներ աշխարհն այն ժամանակ: Տվյալների համար, որոնք երկար պատմության կարիք չունեն, մենք կարող ենք սահմանափակել տարբերակների քանակը կամ նույնիսկ պահել միայն մեկը՝ վերջինը, այսինքն՝ ըստ էության անջատել տարբերակների տարբերակը որոշակի տեսակի համար: Դուք կարող եք նաև սահմանափակել պատմությունը ժամանակով. օրինակ՝ ջնջել 1 տարուց ավելի հին որոշակի տեսակի բոլոր օբյեկտները: Արխիվացումը նույնպես աջակցվում է. մենք կարող ենք բեռնաթափել նշված ժամանակից ավելի հին օբյեկտները՝ ազատելով տարածք կլաստերում:

խնդիրները

Հետաքրքիր առանձնահատկությունների շարքում հարկ է նշել առաջադրանքները ժամանակացույցով, օգտագործողի խնդրանքով կամ ծրագրային կերպով ավազարկղից գործարկելու ունակությունը.

Tarantool Data Grid-ի ճարտարապետությունն ու հնարավորությունները

Այստեղ մենք տեսնում ենք մեկ այլ դեր՝ վազորդ: Այս դերը քաղաքացիություն չունի, և անհրաժեշտության դեպքում այս դերով հավելվածի լրացուցիչ օրինակներ կարող են ավելացվել կլաստերին: Վազողի պարտականությունն է կատարել առաջադրանքները: Ինչպես նշվեց, հնարավոր է նոր առաջադրանքներ ստեղծել ավազարկղից; դրանք պահվում են հերթում պահեստավորման ժամանակ, այնուհետև գործարկվում են վազողի վրա: Այս տեսակի առաջադրանքը կոչվում է Աշխատանք: Մենք ունենք նաև առաջադրանքների տեսակ, որը կոչվում է Task. սրանք օգտագործողի կողմից սահմանված առաջադրանքներ են, որոնք աշխատում են ժամանակացույցով (օգտագործելով cron շարահյուսություն) կամ ըստ պահանջի: Նման առաջադրանքները գործարկելու և հետևելու համար մենք ունենք հարմար առաջադրանքների կառավարիչ: Որպեսզի այս գործառույթը հասանելի լինի, դուք պետք է միացնեք ժամանակացույցի դերը. այս դերն ունի վիճակ, ուստի այն չի ծավալվում, ինչը, սակայն, պարտադիր չէ. միևնույն ժամանակ, ինչպես մյուս բոլոր դերերը, այն կարող է ունենալ կրկնօրինակ, որը սկսում է աշխատել, եթե վարպետը հանկարծ հրաժարվի:

Անտառահատ

Մեկ այլ դեր կոչվում է լոգեր: Այն հավաքում է տեղեկամատյանները կլաստերի բոլոր անդամներից և ապահովում է ինտերֆեյս՝ դրանք վեբ ինտերֆեյսի միջոցով վերբեռնելու և դիտելու համար:

Ծառայություններ

Հարկ է նշել, որ համակարգը հեշտացնում է ծառայությունների ստեղծումը։ Կազմաձևման ֆայլում կարող եք նշել, թե որ հարցումներն են ուղարկվում օգտագործողի կողմից գրված մշակողին, որն աշխատում է ավազարկղում: Այս կարգավորիչում դուք կարող եք, օրինակ, գործարկել ինչ-որ վերլուծական հարցում և վերադարձնել արդյունքը:

Ծառայությունը նկարագրված է կազմաձևման ֆայլում.

services:
   sum:
      doc: "adds two numbers"
      function: sum
      return_type: int
      args:
         x: int
         y: int

GraphQL API-ն ստեղծվում է ավտոմատ կերպով, և ծառայությունը հասանելի է դառնում զանգահարելու համար.

query {
   sum(x: 1, y: 2) 
}

Սա կկանչի կարգավորողին sumորը կվերադարձնի արդյունքը.

3

Հարցումների պրոֆիլավորում և չափումներ

Համակարգի աշխատանքը և պրոֆիլավորման հարցումները հասկանալու համար մենք աջակցություն ենք իրականացրել OpenTracing արձանագրության համար: Համակարգը կարող է ըստ պահանջի տեղեկատվություն ուղարկել այս արձանագրությունն աջակցող գործիքներին, ինչպիսին է Zipkin-ը, որը թույլ կտա հասկանալ, թե ինչպես է կատարվել հարցումը.

Tarantool Data Grid-ի ճարտարապետությունն ու հնարավորությունները

Բնականաբար, համակարգը ապահովում է ներքին չափումներ, որոնք կարելի է հավաքել Պրոմեթևսի միջոցով և պատկերացնել Grafana-ի միջոցով:

Տեղակայել

Tarantool Data Grid-ը կարող է տեղակայվել RPM փաթեթներից կամ արխիվից՝ օգտագործելով բաշխման կամ Ansible-ի օգտակար ծրագիրը, կա նաև Kubernetes-ի աջակցություն (Tarantool Kubernetes օպերատոր).

Հավելվածը, որն իրականացնում է բիզնես տրամաբանությունը (կոնֆիգուրացիա, մշակիչներ) բեռնվում է տեղակայված Tarantool Data Grid կլաստերի մեջ՝ արխիվի տեսքով UI-ի միջոցով կամ օգտագործելով սկրիպտը մեր կողմից տրամադրված API-ի միջոցով:

Փիլիսոփայության սկզբնաղբյուրներ

Ի՞նչ հավելվածներ կարելի է ստեղծել Tarantool Data Grid-ի միջոցով: Փաստորեն, բիզնես առաջադրանքների մեծ մասը ինչ-որ կերպ կապված է տվյալների հոսքի մշակման, պահպանման և մուտք գործելու հետ: Հետևաբար, եթե դուք ունեք տվյալների մեծ հոսքեր, որոնք պետք է ապահով պահվեն և հասանելի լինեն, ապա մեր արտադրանքը կարող է ձեզ խնայել զարգացման շատ ժամանակ և կենտրոնանալ ձեր բիզնեսի տրամաբանության վրա:

Օրինակ՝ մենք ցանկանում ենք տեղեկատվություն հավաքել անշարժ գույքի շուկայի մասին, որպեսզի ապագայում, օրինակ, ունենանք լավագույն առաջարկների մասին տեղեկատվություն։ Այս դեպքում մենք ընդգծում ենք հետևյալ խնդիրները.

  1. Բաց աղբյուրներից տեղեկատվություն հավաքող ռոբոտները կլինեն մեր տվյալների աղբյուրները: Դուք կարող եք լուծել այս խնդիրը՝ օգտագործելով պատրաստի լուծումներ կամ գրել կոդ ցանկացած լեզվով։
  2. Հաջորդը, Tarantool Data Grid-ը կընդունի և կպահի տվյալները: Եթե ​​տարբեր աղբյուրներից ստացված տվյալների ձևաչափը տարբեր է, ապա կարող եք Lua-ում գրել կոդ, որը կկատարի փոխակերպումը մեկ ձևաչափի: Նախնական մշակման փուլում դուք նաև կկարողանաք, օրինակ, զտել կրկնօրինակ առաջարկները կամ լրացուցիչ թարմացնել տեղեկատվությունը բազայում շուկայում աշխատող գործակալների մասին:
  3. Այժմ դուք արդեն ունեք մասշտաբային լուծում կլաստերի մեջ, որը կարող է լրացվել տվյալների հետ և կատարել տվյալների ընտրություն: Այնուհետև կարող եք իրականացնել նոր ֆունկցիոնալություն, օրինակ՝ գրել ծառայություն, որը կդիմի տվյալների հարցում և կտա ամենաշահավետ առաջարկը օրական. սա կպահանջի մի քանի տող կոնֆիգուրացիայի ֆայլում և մի փոքր Lua կոդ:

Ինչ հաջորդ?

Մեր առաջնահերթությունն է զարգացնել օգտագործման հեշտությունը Tarantool տվյալների ցանց. Օրինակ, սա IDE է, որն աջակցում է ավազատուփում աշխատող պրոֆիլավորման և վրիպազերծման կարգավորիչներին:

Մենք մեծ ուշադրություն ենք դարձնում նաև անվտանգության հարցերին։ Հենց հիմա մենք սերտիֆիկացում ենք Ռուսաստանի FSTEC-ի կողմից՝ հաստատելու անվտանգության բարձր մակարդակը և բավարարելու անձնական տվյալների տեղեկատվական համակարգերում և պետական ​​տեղեկատվական համակարգերում օգտագործվող ծրագրային ապահովման արտադրանքի հավաստագրման պահանջները:

Source: www.habr.com

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