2017 թվականին մենք հաղթեցինք Alfa-Bank-ի ներդրումային բիզնեսի գործարքային միջուկը զարգացնելու մրցույթում և սկսեցինք աշխատանքը (HighLoad++ 2018-ում՝ ներդրումային բիզնեսի հիմնական մասին զեկույցով։
Մշակման գործընթացում համակարգը զարգացավ և ձեռք բերեց ֆունկցիոնալություն, և ինչ-որ պահի մենք հասկացանք, որ մենք բյուրեղացնում ենք ավելին, քան պարզապես կիրառական ծրագրակազմը, որը ստեղծվել է խնդիրների խստորեն սահմանված շրջանակը լուծելու համար. մեզ հաջողվեց: համակարգ՝ մշտական պահեստով բաշխված հավելվածների կառուցման համար. Մեր ձեռք բերած փորձը հիմք է հանդիսացել նոր արտադրանքի.
Ես ուզում եմ խոսել TDG ճարտարապետության և այն լուծումների մասին, որոնց մենք եկել ենք մշակման գործընթացում, ներկայացնել ձեզ հիմնական ֆունկցիոնալությունը և ցույց տալ, թե ինչպես մեր արտադրանքը կարող է հիմք դառնալ ամբողջական լուծումներ ստեղծելու համար:
Ճարտարապետական առումով մենք համակարգը բաժանեցինք առանձինների դերերը, որոնցից յուրաքանչյուրը պատասխանատու է խնդիրների որոշակի շրջանակի լուծման համար։ Գործող հավելվածի մեկ օրինակն իրականացնում է մեկ կամ մի քանի դերի տեսակներ: Կլաստերում կարող են լինել նույն տեսակի մի քանի դերեր.
միակցիչ
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-ի և
Աջակցվում է տվյալների ասինխրոն կրկնօրինակումը (նախատեսվում է ավելացնել համաժամանակյա մեկը):
Ելքային պրոցեսոր
Երբեմն անհրաժեշտ է ծանուցել արտաքին սպառողներին նոր տվյալների ժամանման մասին, դրա համար կա Output պրոցեսորի դերը: Տվյալները պահպանելուց հետո դրանք կարող են փոխանցվել համապատասխան մշակողին (օրինակ՝ սպառողի պահանջած ձևին բերելու համար) - և այնուհետև փոխանցվել միակցիչին՝ ուղարկելու համար: Այստեղ օգտագործվում է նաև վերանորոգման հերթ. եթե ոչ ոք չի ընդունել օբյեկտը, ապա ադմինիստրատորը կարող է ավելի ուշ փորձել:
Scaling
Միակցիչը, մուտքային պրոցեսորը և ելքային պրոցեսորի դերերը անհամապատասխան են, ինչը թույլ է տալիս մեզ հորիզոնական մասշտաբավորել համակարգը՝ պարզապես ավելացնելով նոր հավելվածների օրինակներ, որոնց դերի ցանկալի տեսակը միացված է: Պահպանումը օգտագործվում է հորիզոնական մասշտաբի համար
Տվյալների հատկությունները
Օբյեկտները կարող են լինել շատ մեծ և պարունակել այլ առարկաներ: Մենք ապահովում ենք տվյալների ավելացման և թարմացման ատոմականությունը՝ բոլոր կախվածություններով օբյեկտը պահելով մեկ վիրտուալ դույլով: Սա կանխում է օբյեկտի «տարածումը» մի քանի ֆիզիկական սերվերների վրա:
Տարբերակումը աջակցվում է. օբյեկտի յուրաքանչյուր թարմացում ստեղծում է նոր տարբերակ, և մենք միշտ կարող ենք ժամանակ հատկացնել և տեսնել, թե ինչպիսի տեսք ուներ աշխարհն այն ժամանակ: Տվյալների համար, որոնք երկար պատմության կարիք չունեն, մենք կարող ենք սահմանափակել տարբերակների քանակը կամ նույնիսկ պահել միայն մեկը՝ վերջինը, այսինքն՝ ըստ էության անջատել տարբերակների տարբերակը որոշակի տեսակի համար: Դուք կարող եք նաև սահմանափակել պատմությունը ժամանակով. օրինակ՝ ջնջել 1 տարուց ավելի հին որոշակի տեսակի բոլոր օբյեկտները: Արխիվացումը նույնպես աջակցվում է. մենք կարող ենք բեռնաթափել նշված ժամանակից ավելի հին օբյեկտները՝ ազատելով տարածք կլաստերում:
խնդիրները
Հետաքրքիր առանձնահատկությունների շարքում հարկ է նշել առաջադրանքները ժամանակացույցով, օգտագործողի խնդրանքով կամ ծրագրային կերպով ավազարկղից գործարկելու ունակությունը.
Այստեղ մենք տեսնում ենք մեկ այլ դեր՝ վազորդ: Այս դերը քաղաքացիություն չունի, և անհրաժեշտության դեպքում այս դերով հավելվածի լրացուցիչ օրինակներ կարող են ավելացվել կլաստերին: Վազողի պարտականությունն է կատարել առաջադրանքները: Ինչպես նշվեց, հնարավոր է նոր առաջադրանքներ ստեղծել ավազարկղից; դրանք պահվում են հերթում պահեստավորման ժամանակ, այնուհետև գործարկվում են վազողի վրա: Այս տեսակի առաջադրանքը կոչվում է Աշխատանք: Մենք ունենք նաև առաջադրանքների տեսակ, որը կոչվում է 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-ը, որը թույլ կտա հասկանալ, թե ինչպես է կատարվել հարցումը.
Բնականաբար, համակարգը ապահովում է ներքին չափումներ, որոնք կարելի է հավաքել Պրոմեթևսի միջոցով և պատկերացնել Grafana-ի միջոցով:
Տեղակայել
Tarantool Data Grid-ը կարող է տեղակայվել RPM փաթեթներից կամ արխիվից՝ օգտագործելով բաշխման կամ Ansible-ի օգտակար ծրագիրը, կա նաև Kubernetes-ի աջակցություն (
Հավելվածը, որն իրականացնում է բիզնես տրամաբանությունը (կոնֆիգուրացիա, մշակիչներ) բեռնվում է տեղակայված Tarantool Data Grid կլաստերի մեջ՝ արխիվի տեսքով UI-ի միջոցով կամ օգտագործելով սկրիպտը մեր կողմից տրամադրված API-ի միջոցով:
Փիլիսոփայության սկզբնաղբյուրներ
Ի՞նչ հավելվածներ կարելի է ստեղծել Tarantool Data Grid-ի միջոցով: Փաստորեն, բիզնես առաջադրանքների մեծ մասը ինչ-որ կերպ կապված է տվյալների հոսքի մշակման, պահպանման և մուտք գործելու հետ: Հետևաբար, եթե դուք ունեք տվյալների մեծ հոսքեր, որոնք պետք է ապահով պահվեն և հասանելի լինեն, ապա մեր արտադրանքը կարող է ձեզ խնայել զարգացման շատ ժամանակ և կենտրոնանալ ձեր բիզնեսի տրամաբանության վրա:
Օրինակ՝ մենք ցանկանում ենք տեղեկատվություն հավաքել անշարժ գույքի շուկայի մասին, որպեսզի ապագայում, օրինակ, ունենանք լավագույն առաջարկների մասին տեղեկատվություն։ Այս դեպքում մենք ընդգծում ենք հետևյալ խնդիրները.
- Բաց աղբյուրներից տեղեկատվություն հավաքող ռոբոտները կլինեն մեր տվյալների աղբյուրները: Դուք կարող եք լուծել այս խնդիրը՝ օգտագործելով պատրաստի լուծումներ կամ գրել կոդ ցանկացած լեզվով։
- Հաջորդը, Tarantool Data Grid-ը կընդունի և կպահի տվյալները: Եթե տարբեր աղբյուրներից ստացված տվյալների ձևաչափը տարբեր է, ապա կարող եք Lua-ում գրել կոդ, որը կկատարի փոխակերպումը մեկ ձևաչափի: Նախնական մշակման փուլում դուք նաև կկարողանաք, օրինակ, զտել կրկնօրինակ առաջարկները կամ լրացուցիչ թարմացնել տեղեկատվությունը բազայում շուկայում աշխատող գործակալների մասին:
- Այժմ դուք արդեն ունեք մասշտաբային լուծում կլաստերի մեջ, որը կարող է լրացվել տվյալների հետ և կատարել տվյալների ընտրություն: Այնուհետև կարող եք իրականացնել նոր ֆունկցիոնալություն, օրինակ՝ գրել ծառայություն, որը կդիմի տվյալների հարցում և կտա ամենաշահավետ առաջարկը օրական. սա կպահանջի մի քանի տող կոնֆիգուրացիայի ֆայլում և մի փոքր Lua կոդ:
Ինչ հաջորդ?
Մեր առաջնահերթությունն է զարգացնել օգտագործման հեշտությունը
Մենք մեծ ուշադրություն ենք դարձնում նաև անվտանգության հարցերին։ Հենց հիմա մենք սերտիֆիկացում ենք Ռուսաստանի FSTEC-ի կողմից՝ հաստատելու անվտանգության բարձր մակարդակը և բավարարելու անձնական տվյալների տեղեկատվական համակարգերում և պետական տեղեկատվական համակարգերում օգտագործվող ծրագրային ապահովման արտադրանքի հավաստագրման պահանջները:
Source: www.habr.com