2017లో, మేము ఆల్ఫా-బ్యాంక్ యొక్క పెట్టుబడి వ్యాపారం యొక్క లావాదేవీల కోర్ని అభివృద్ధి చేయడానికి పోటీని గెలుచుకున్నాము మరియు పని ప్రారంభించాము (హైలోడ్++ 2018లో పెట్టుబడి వ్యాపారం యొక్క ప్రధాన నివేదికతో
డెవలప్మెంట్ ప్రక్రియలో, సిస్టమ్ అభివృద్ధి చెందింది మరియు కార్యాచరణను పొందింది మరియు నిర్దిష్టమైన టాస్క్ల శ్రేణిని పరిష్కరించడానికి రూపొందించిన అప్లికేషన్ సాఫ్ట్వేర్ కంటే చాలా ఎక్కువ స్ఫటికీకరణ చేస్తున్నామని ఏదో ఒక సమయంలో మేము గ్రహించాము: మేము విజయం సాధించాము నిరంతర నిల్వతో పంపిణీ చేయబడిన అనువర్తనాలను రూపొందించడానికి వ్యవస్థ. మేము పొందిన అనుభవం కొత్త ఉత్పత్తికి ఆధారం -
నేను TDG ఆర్కిటెక్చర్ మరియు డెవలప్మెంట్ ప్రాసెస్లో మేము వచ్చిన పరిష్కారాల గురించి మాట్లాడాలనుకుంటున్నాను, ప్రధాన కార్యాచరణను మీకు పరిచయం చేయాలనుకుంటున్నాను మరియు పూర్తి పరిష్కారాలను రూపొందించడానికి మా ఉత్పత్తి ఎలా ఆధారం కాగలదో చూపించాలనుకుంటున్నాను.
వాస్తుపరంగా, మేము వ్యవస్థను విడిగా విభజించాము పాత్రలు, వీటిలో ప్రతి ఒక్కటి నిర్దిష్ట శ్రేణి సమస్యలను పరిష్కరించడానికి బాధ్యత వహిస్తుంది. ఒకే రన్నింగ్ అప్లికేషన్ ఉదాహరణ ఒకటి లేదా అంతకంటే ఎక్కువ పాత్ర రకాలను అమలు చేస్తుంది. క్లస్టర్లో ఒకే రకమైన అనేక పాత్రలు ఉండవచ్చు:
కనెక్టర్
బాహ్య ప్రపంచంతో కమ్యూనికేషన్ కోసం కనెక్టర్ బాధ్యత వహిస్తుంది; అభ్యర్థనను అంగీకరించడం, దానిని అన్వయించడం మరియు ఇది విజయవంతమైతే, ప్రాసెసింగ్ కోసం డేటాను ఇన్పుట్ ప్రాసెసర్కు పంపడం దీని పని. మేము HTTP, SOAP, Kafka, FIX ఫార్మాట్లకు మద్దతిస్తాము. ఆర్కిటెక్చర్ మిమ్మల్ని కొత్త ఫార్మాట్లకు సపోర్ట్ని జోడించడానికి అనుమతిస్తుంది, IBM MQకి త్వరలో మద్దతు లభిస్తుంది. అభ్యర్థనను అన్వయించడం విఫలమైతే, కనెక్టర్ లోపాన్ని అందిస్తుంది; లేకుంటే, అభ్యర్థన తదుపరి ప్రాసెసింగ్ సమయంలో లోపం సంభవించినప్పటికీ, అది విజయవంతంగా ప్రాసెస్ చేయబడిందని ప్రతిస్పందిస్తుంది. అభ్యర్థనలను ఎలా పునరావృతం చేయాలో తెలియని సిస్టమ్లతో పని చేయడానికి ఇది ప్రత్యేకంగా జరిగింది - లేదా, దీనికి విరుద్ధంగా, చాలా పట్టుదలగా చేయండి. డేటాను కోల్పోకుండా ఉండటానికి, మరమ్మత్తు క్యూ ఉపయోగించబడుతుంది: వస్తువు మొదట దానిలోకి వస్తుంది మరియు విజయవంతమైన ప్రాసెసింగ్ దాని నుండి తీసివేయబడిన తర్వాత మాత్రమే. అడ్మినిస్ట్రేటర్ మరమ్మతు క్యూలో మిగిలి ఉన్న వస్తువుల గురించి హెచ్చరికలను స్వీకరించవచ్చు మరియు సాఫ్ట్వేర్ లోపం లేదా హార్డ్వేర్ వైఫల్యాన్ని తొలగించిన తర్వాత, మళ్లీ ప్రయత్నించండి.
ఇన్పుట్ ప్రాసెసర్
ఇన్పుట్ ప్రాసెసర్ లక్షణ లక్షణాల ప్రకారం స్వీకరించిన డేటాను వర్గీకరిస్తుంది మరియు తగిన ప్రాసెసర్లకు కాల్ చేస్తుంది. హ్యాండ్లర్లు శాండ్బాక్స్లో రన్ అయ్యే లువా కోడ్, కాబట్టి అవి సిస్టమ్ పనితీరును ప్రభావితం చేయవు. ఈ దశలో, డేటాను అవసరమైన రూపానికి తగ్గించవచ్చు మరియు అవసరమైతే, అవసరమైన తర్కాన్ని అమలు చేయగల ఏకపక్ష సంఖ్యలో పనులను ప్రారంభించవచ్చు. ఉదాహరణకు, Tarantool డేటా గ్రిడ్లో నిర్మించిన MDM (మాస్టర్ డేటా మేనేజ్మెంట్) ఉత్పత్తిలో, కొత్త వినియోగదారుని జోడించేటప్పుడు, అభ్యర్థన యొక్క ప్రాసెసింగ్ను నెమ్మదించకుండా ఉండటానికి, మేము గోల్డెన్ రికార్డ్ను సృష్టించడాన్ని ప్రత్యేక పనిగా ప్రారంభిస్తాము. శాండ్బాక్స్ డేటాను చదవడం, మార్చడం మరియు జోడించడం కోసం అభ్యర్థనలకు మద్దతు ఇస్తుంది, నిల్వ రకం మరియు ఫలితం (మ్యాప్/తగ్గించడం) యొక్క అన్ని పాత్రలపై కొంత పనితీరును నిర్వహించడానికి మిమ్మల్ని అనుమతిస్తుంది.
హ్యాండ్లర్లను ఫైల్లలో వివరించవచ్చు:
sum.lua
local x, y = unpack(...)
return x + y
ఆపై, కాన్ఫిగరేషన్లో ప్రకటించబడింది:
functions:
sum: { __file: sum.lua }
ఎందుకు లువా? లువా చాలా సులభమైన భాష. మా అనుభవం ఆధారంగా, అది తెలిసిన కొన్ని గంటల తర్వాత, ప్రజలు తమ సమస్యను పరిష్కరించే కోడ్ను వ్రాయడం ప్రారంభిస్తారు. మరియు ఇవి ప్రొఫెషనల్ డెవలపర్లు మాత్రమే కాదు, ఉదాహరణకు, విశ్లేషకులు. అదనంగా, జిట్ కంపైలర్కు ధన్యవాదాలు, లువా చాలా త్వరగా నడుస్తుంది.
నిల్వ
నిల్వ నిరంతర డేటాను నిల్వ చేస్తుంది. సేవ్ చేయడానికి ముందు, డేటా స్కీమాకు వ్యతిరేకంగా డేటా ధృవీకరించబడుతుంది. సర్క్యూట్ను వివరించడానికి మేము పొడిగించిన ఆకృతిని ఉపయోగిస్తాము
{
"name": "User",
"type": "record",
"logicalType": "Aggregate",
"fields": [
{ "name": "id", "type": "string"},
{"name": "first_name", "type": "string"},
{"name": "last_name", "type": "string"}
],
"indexes": ["id"]
}
ఈ వివరణ ఆధారంగా, టరాన్టులా DBMS కోసం DDL (డేటా డెఫినిషన్ లాంగ్వేజ్) స్వయంచాలకంగా ఉత్పత్తి చేయబడుతుంది మరియు
అసమకాలిక డేటా ప్రతిరూపణకు మద్దతు ఉంది (సింక్రోనస్ని జోడించడానికి ప్రణాళికలు ఉన్నాయి).
అవుట్పుట్ ప్రాసెసర్
కొన్నిసార్లు కొత్త డేటా రాక గురించి బాహ్య వినియోగదారులకు తెలియజేయడం అవసరం; ఈ ప్రయోజనం కోసం, అవుట్పుట్ ప్రాసెసర్ పాత్ర ఉంది. డేటాను సేవ్ చేసిన తర్వాత, అది సంబంధిత హ్యాండ్లర్కు పంపబడుతుంది (ఉదాహరణకు, వినియోగదారుకు అవసరమైన ఫారమ్కు తీసుకురావడానికి) - ఆపై పంపడానికి కనెక్టర్కు పంపబడుతుంది. మరమ్మత్తు క్యూ కూడా ఇక్కడ ఉపయోగించబడుతుంది: ఎవరూ ఆబ్జెక్ట్ని అంగీకరించకపోతే, నిర్వాహకుడు తర్వాత మళ్లీ ప్రయత్నించవచ్చు.
స్కేలింగ్
కనెక్టర్, ఇన్పుట్ ప్రాసెసర్ మరియు అవుట్పుట్ ప్రాసెసర్ పాత్రలు స్థితిలేనివి, కావలసిన రోల్ రకం ప్రారంభించబడి కొత్త అప్లికేషన్ ఇన్స్టాన్స్లను జోడించడం ద్వారా సిస్టమ్ను అడ్డంగా స్కేల్ చేయడానికి అనుమతిస్తుంది. క్షితిజ సమాంతర స్కేలింగ్ కోసం నిల్వ ఉపయోగించబడుతుంది
డేటా లక్షణాలు
వస్తువులు చాలా పెద్దవి మరియు ఇతర వస్తువులను కలిగి ఉంటాయి. మేము ఒక వర్చువల్ బకెట్లో అన్ని డిపెండెన్సీలతో ఒక వస్తువును నిల్వ చేయడం ద్వారా డేటాను జోడించడం మరియు నవీకరించడం యొక్క పరమాణుత్వాన్ని నిర్ధారిస్తాము. ఇది అనేక భౌతిక సర్వర్లలో ఆబ్జెక్ట్ "వ్యాప్తి చెందకుండా" నిరోధిస్తుంది.
సంస్కరణకు మద్దతు ఉంది: ఆబ్జెక్ట్ యొక్క ప్రతి అప్డేట్ కొత్త వెర్షన్ను సృష్టిస్తుంది మరియు మనం ఎప్పుడైనా టైమ్ స్లైస్ తీసుకొని ప్రపంచం ఎలా ఉందో చూడవచ్చు. సుదీర్ఘ చరిత్ర అవసరం లేని డేటా కోసం, మేము సంస్కరణల సంఖ్యను పరిమితం చేయవచ్చు లేదా ఒకదాన్ని మాత్రమే నిల్వ చేయవచ్చు - తాజాది - అంటే, ఒక నిర్దిష్ట రకం కోసం సంస్కరణను తప్పనిసరిగా నిలిపివేయవచ్చు. మీరు చరిత్రను సమయానికి కూడా పరిమితం చేయవచ్చు: ఉదాహరణకు, 1 సంవత్సరం కంటే పాత నిర్దిష్ట రకం అన్ని వస్తువులను తొలగించండి. ఆర్కైవింగ్కు కూడా మద్దతు ఉంది: మేము పేర్కొన్న సమయం కంటే పాత వస్తువులను అన్లోడ్ చేయవచ్చు, క్లస్టర్లో స్థలాన్ని ఖాళీ చేయవచ్చు.
పనులు
ఆసక్తికరమైన లక్షణాలలో, షెడ్యూల్లో, వినియోగదారు అభ్యర్థన మేరకు లేదా శాండ్బాక్స్ నుండి ప్రోగ్రామ్లను ప్రారంభించగల సామర్థ్యాన్ని గమనించడం విలువ:
ఇక్కడ మనం మరొక పాత్రను చూస్తాము - రన్నర్. ఈ పాత్ర స్థితిలేనిది మరియు ఈ పాత్రతో కూడిన అదనపు అప్లికేషన్ ఉదంతాలు అవసరమైన విధంగా క్లస్టర్కు జోడించబడతాయి. రన్నర్ యొక్క బాధ్యత పనులను పూర్తి చేయడం. చెప్పినట్లుగా, శాండ్బాక్స్ నుండి కొత్త టాస్క్లను రూపొందించడం సాధ్యమవుతుంది; అవి స్టోరేజ్లో క్యూలో సేవ్ చేయబడతాయి మరియు తర్వాత రన్నర్పై అమలు చేయబడతాయి. ఈ రకమైన పనిని జాబ్ అంటారు. మేము టాస్క్ అనే టాస్క్ రకాన్ని కూడా కలిగి ఉన్నాము - ఇవి షెడ్యూల్లో (క్రాన్ సింటాక్స్ ఉపయోగించి) లేదా డిమాండ్పై అమలు చేసే వినియోగదారు నిర్వచించిన టాస్క్లు. అటువంటి టాస్క్లను ప్రారంభించడానికి మరియు ట్రాక్ చేయడానికి, మాకు అనుకూలమైన టాస్క్ మేనేజర్ ఉంది. ఈ కార్యాచరణ అందుబాటులో ఉండాలంటే, మీరు తప్పనిసరిగా షెడ్యూలర్ పాత్రను ప్రారంభించాలి; ఈ పాత్రకు ఒక స్థితి ఉంది, కాబట్టి ఇది స్కేల్ చేయదు, అయితే ఇది అవసరం లేదు; అదే సమయంలో, అన్ని ఇతర పాత్రల మాదిరిగానే, ఇది మాస్టర్ అకస్మాత్తుగా నిరాకరిస్తే పని చేయడం ప్రారంభించే ప్రతిరూపాన్ని కలిగి ఉంటుంది.
లాగర్
మరొక పాత్రను లాగర్ అంటారు. ఇది క్లస్టర్లోని సభ్యులందరి నుండి లాగ్లను సేకరిస్తుంది మరియు వెబ్ ఇంటర్ఫేస్ ద్వారా వాటిని అప్లోడ్ చేయడానికి మరియు వీక్షించడానికి ఇంటర్ఫేస్ను అందిస్తుంది.
సేవలు
సిస్టమ్ సేవలను సృష్టించడం సులభం చేస్తుందని పేర్కొనడం విలువ. కాన్ఫిగరేషన్ ఫైల్లో, శాండ్బాక్స్లో పనిచేసే వినియోగదారు-వ్రాత హ్యాండ్లర్కు ఏ అభ్యర్థనలు పంపబడతాయో మీరు పేర్కొనవచ్చు. ఈ హ్యాండ్లర్లో, మీరు ఉదాహరణకు, ఒక రకమైన విశ్లేషణాత్మక ప్రశ్నను అమలు చేసి, ఫలితాన్ని అందించవచ్చు.
సేవ కాన్ఫిగరేషన్ ఫైల్లో వివరించబడింది:
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 ప్రోటోకాల్కు మద్దతును అమలు చేసాము. సిస్టమ్ డిమాండ్పై సమాచారాన్ని జిప్కిన్ వంటి ఈ ప్రోటోకాల్కు మద్దతు ఇచ్చే సాధనాలకు పంపగలదు, ఇది అభ్యర్థన ఎలా అమలు చేయబడిందో అర్థం చేసుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది:
సహజంగానే, సిస్టమ్ ప్రోమేతియస్ని ఉపయోగించి సేకరించి గ్రాఫానాను ఉపయోగించి దృశ్యమానం చేయగల అంతర్గత మెట్రిక్లను అందిస్తుంది.
మోహరించేందుకు
టరాన్టూల్ డేటా గ్రిడ్ను RPM ప్యాకేజీలు లేదా ఆర్కైవ్ నుండి అమలు చేయవచ్చు, పంపిణీ లేదా అన్సిబుల్ నుండి యుటిలిటీని ఉపయోగించి, కుబెర్నెటీస్కు కూడా మద్దతు ఉంది (
వ్యాపార లాజిక్ను (కాన్ఫిగరేషన్, హ్యాండ్లర్లు) అమలు చేసే అప్లికేషన్ UI ద్వారా ఆర్కైవ్ రూపంలో లేదా మేము అందించిన API ద్వారా స్క్రిప్ట్ని ఉపయోగించి అమలు చేయబడిన Tarantool డేటా గ్రిడ్ క్లస్టర్లోకి లోడ్ చేయబడుతుంది.
నమూనా అప్లికేషన్లు
టరాన్టూల్ డేటా గ్రిడ్ని ఉపయోగించి ఏ అప్లికేషన్లను సృష్టించవచ్చు? వాస్తవానికి, చాలా వ్యాపార పనులు డేటా ఫ్లోను ప్రాసెస్ చేయడం, నిల్వ చేయడం మరియు యాక్సెస్ చేయడం వంటి వాటికి సంబంధించినవి. అందువల్ల, మీరు సురక్షితంగా నిల్వ చేయబడి మరియు యాక్సెస్ చేయవలసిన డేటా యొక్క పెద్ద స్ట్రీమ్లను కలిగి ఉంటే, మా ఉత్పత్తి మీకు చాలా అభివృద్ధి సమయాన్ని ఆదా చేస్తుంది మరియు మీ వ్యాపార తర్కంపై దృష్టి పెట్టవచ్చు.
ఉదాహరణకు, మేము రియల్ ఎస్టేట్ మార్కెట్ గురించి సమాచారాన్ని సేకరించాలనుకుంటున్నాము, తద్వారా భవిష్యత్తులో, ఉదాహరణకు, మేము ఉత్తమ ఆఫర్ల గురించి సమాచారాన్ని కలిగి ఉంటాము. ఈ సందర్భంలో, మేము ఈ క్రింది పనులను హైలైట్ చేస్తాము:
- ఓపెన్ సోర్స్ల నుండి సమాచారాన్ని సేకరించే రోబోట్లు మా డేటా సోర్స్లుగా ఉంటాయి. మీరు ఏ భాషలోనైనా రెడీమేడ్ సొల్యూషన్స్ లేదా రైటింగ్ కోడ్ ఉపయోగించి ఈ సమస్యను పరిష్కరించవచ్చు.
- తర్వాత, Tarantool డేటా గ్రిడ్ డేటాను అంగీకరిస్తుంది మరియు సేవ్ చేస్తుంది. వేర్వేరు మూలాల నుండి డేటా ఫార్మాట్ భిన్నంగా ఉంటే, మీరు లువాలో కోడ్ను వ్రాయవచ్చు, అది ఒకే ఫార్మాట్కి మార్చబడుతుంది. ప్రీ-ప్రాసెసింగ్ దశలో, మీరు డూప్లికేట్ ఆఫర్లను ఫిల్టర్ చేయవచ్చు లేదా డేటాబేస్లో మార్కెట్లో పనిచేసే ఏజెంట్ల గురించిన సమాచారాన్ని అదనంగా అప్డేట్ చేయవచ్చు.
- ఇప్పుడు మీరు ఇప్పటికే క్లస్టర్లో స్కేలబుల్ సొల్యూషన్ని కలిగి ఉన్నారు, దానిని డేటాతో నింపవచ్చు మరియు డేటా ఎంపికలను చేయవచ్చు. అప్పుడు మీరు కొత్త కార్యాచరణను అమలు చేయవచ్చు, ఉదాహరణకు, డేటా కోసం అభ్యర్థనను అందించే మరియు రోజుకు అత్యంత ప్రయోజనకరమైన ఆఫర్ను అందించే సేవను వ్రాయండి - దీనికి కాన్ఫిగరేషన్ ఫైల్లో కొన్ని పంక్తులు మరియు కొద్దిగా లువా కోడ్ అవసరం.
తరువాత ఏమిటి?
ఉపయోగించి అభివృద్ధి సౌలభ్యాన్ని మెరుగుపరచడం మా ప్రాధాన్యత
మేము భద్రతా సమస్యలపై కూడా చాలా శ్రద్ధ చూపుతాము. ప్రస్తుతం మేము అధిక స్థాయి భద్రతను నిర్ధారించడానికి మరియు వ్యక్తిగత డేటా సమాచార వ్యవస్థలు మరియు ప్రభుత్వ సమాచార వ్యవస్థలలో ఉపయోగించే సాఫ్ట్వేర్ ఉత్పత్తుల ధృవీకరణ అవసరాలను తీర్చడానికి రష్యాకు చెందిన FSTEC ద్వారా ధృవీకరణ పొందుతున్నాము.
మూలం: www.habr.com