2017 දී, අපි Alfa-Bank හි ආයෝජන ව්යාපාරයේ ගණුදෙණු හරය දියුණු කිරීමේ තරඟයකින් ජයග්රහණය කර වැඩ ආරම්භ කළෙමු (HyLoad++ 2018 හි ආයෝජන ව්යාපාරයේ හරය පිළිබඳ වාර්තාවක් සමඟ.
සංවර්ධන ක්රියාවලියේදී, පද්ධතිය පරිණාමය වී ක්රියාකාරීත්වය ලබා ගත් අතර, යම් අවස්ථාවක දී අපි දැඩි ලෙස අර්ථ දක්වා ඇති කාර්යයන් පරාසයක් විසඳීම සඳහා නිර්මාණය කරන ලද යෙදුම් මෘදුකාංගයකට වඩා වැඩි යමක් ස්ඵටිකීකරණය කරන බව අපට වැටහුණි: අපි සාර්ථක විය. ස්ථීර ගබඩා කිරීම සමඟ බෙදා හරින ලද යෙදුම් ගොඩනැගීම සඳහා පද්ධතිය. අප ලබාගත් අත්දැකීම් නව නිෂ්පාදනයක් සඳහා පදනම විය -
TDG ගෘහ නිර්මාණ ශිල්පය සහ සංවර්ධන ක්රියාවලියේදී අප වෙත පැමිණි විසඳුම් ගැන කතා කිරීමට මට අවශ්යය, ප්රධාන ක්රියාකාරිත්වයට ඔබව හඳුන්වා දීමට සහ අපගේ නිෂ්පාදනය සම්පූර්ණ විසඳුම් ගොඩනැගීම සඳහා පදනම බවට පත්වන්නේ කෙසේදැයි පෙන්වීමට මට අවශ්යය.
වාස්තු විද්යාත්මකව, අපි පද්ධතිය වෙනම බෙදුවෙමු භූමිකාවන්, ඒ සෑම එකක්ම යම් යම් පරාසයක ගැටළු විසඳීම සඳහා වගකිව යුතුය. තනි ධාවන යෙදුම් අවස්ථාවක් භූමිකාව වර්ග එකක් හෝ කිහිපයක් ක්රියාත්මක කරයි. පොකුරක් තුළ එකම ආකාරයේ භූමිකාවන් කිහිපයක් තිබිය හැකිය:
සම්බන්ධකය
බාහිර ලෝකය සමඟ සන්නිවේදනය සඳහා සම්බන්ධකය වගකිව යුතුය; එහි කර්තව්යය වන්නේ ඉල්ලීම පිළිගැනීම, එය විග්රහ කිරීම සහ මෙය සාර්ථක වුවහොත්, සැකසීම සඳහා දත්ත ආදාන සකසනය වෙත යැවීමයි. අපි HTTP, SOAP, Kafka, FIX ආකෘති සඳහා සහය දෙමු. IBM MQ සඳහා සහය සමඟින් නව ආකෘති සඳහා සරලව සහය එක් කිරීමට ගෘහ නිර්මාණ ශිල්පය ඔබට ඉඩ සලසයි. ඉල්ලීම විග්රහ කිරීම අසාර්ථක වුවහොත්, සම්බන්ධකය දෝෂයක් ලබා දෙනු ඇත; එසේ නොමැති නම්, එය තවදුරටත් සැකසීමේදී දෝෂයක් ඇති වුවද, ඉල්ලීම සාර්ථකව ක්රියාවට නැංවූ බවට ප්රතිචාර දක්වනු ඇත. මෙය විශේෂයෙන් සිදු කර ඇත්තේ ඉල්ලීම් නැවත කරන්නේ කෙසේදැයි නොදන්නා පද්ධති සමඟ වැඩ කිරීම සඳහා ය - නැතහොත්, ඊට පටහැනිව, එය නොපසුබටව කරන්න. දත්ත නැති කර නොගැනීම සඳහා, අළුත්වැඩියා පෝලිමක් භාවිතා කරනු ලැබේ: වස්තුව මුලින්ම එයට ඇතුල් වන අතර එය සාර්ථක සැකසුම් ඉවත් කිරීමෙන් පසුව පමණි. පරිපාලකයාට අලුත්වැඩියා පෝලිමේ ඉතිරිව ඇති වස්තූන් පිළිබඳ ඇඟවීම් ලබා ගත හැකි අතර, මෘදුකාංග දෝෂයක් හෝ දෘඪාංග දෝෂයක් ඉවත් කිරීමෙන් පසුව, නැවත උත්සාහ කරන්න.
ආදාන සකසනය
ආදාන සකසනය ලාක්ෂණික ලක්ෂණ අනුව ලැබුණු දත්ත වර්ගීකරණය කර සුදුසු ප්රොසෙසර කැඳවයි. හෑන්ඩ්ලර් යනු වැලි පෙට්ටියක ක්රියාත්මක වන ලුවා කේතයකි, එබැවින් ඒවාට පද්ධතියේ ක්රියාකාරිත්වයට බලපෑම් කළ නොහැක. මෙම අදියරේදී, දත්ත අවශ්ය ආකෘතියට අඩු කළ හැකි අතර, අවශ්ය නම්, අවශ්ය තර්කය ක්රියාත්මක කළ හැකි අත්තනෝමතික කාර්යයන් ගණනාවක් දියත් කළ හැකිය. උදාහරණයක් ලෙස, Tarantool Data Grid මත ගොඩනගා ඇති MDM (Master Data Management) නිෂ්පාදනයේ, නව පරිශීලකයෙකු එකතු කිරීමේදී, ඉල්ලීම සැකසීම මන්දගාමී නොකිරීමට, අපි වෙනම කාර්යයක් ලෙස රන් වාර්තාවක් නිර්මාණය කිරීම දියත් කරමු. සෑන්ඩ්බොක්ස් දත්ත කියවීම, වෙනස් කිරීම සහ එකතු කිරීම සඳහා වන ඉල්ලීම් සඳහා සහය දක්වයි, ගබඩා ආකාරයේ සහ ප්රතිඵලයේ එකතු කිරීමේ (සිතියම/අඩු කිරීම) සියලු භූමිකාවන් මත යම් කාර්යයක් කිරීමට ඔබට ඉඩ සලසයි.
හසුරුවන්නන් ගොනු වල විස්තර කළ හැක:
sum.lua
local x, y = unpack(...)
return x + y
ඉන්පසුව, වින්යාසය තුළ ප්රකාශ කර ඇත:
functions:
sum: { __file: sum.lua }
ඇයි ලුවා? Lua යනු ඉතා සරල භාෂාවකි. අපගේ අත්දැකීම් මත පදනම්ව, එය දැන ගැනීමෙන් පැය කිහිපයකට පසු, මිනිසුන් ඔවුන්ගේ ගැටලුව විසඳන කේතය ලිවීමට පටන් ගනී. තවද මේවා වෘත්තීය සංවර්ධකයින් පමණක් නොව, උදාහරණයක් ලෙස, විශ්ලේෂකයින් වේ. ඊට අමතරව, jit compiler එකට ස්තුතිවන්ත වෙන්න, Lua ඉතා ඉක්මනින් ක්රියාත්මක වේ.
ගබඞා
ගබඩාව ස්ථිර දත්ත ගබඩා කරයි. සුරැකීමට පෙර, දත්ත ක්රමයට එරෙහිව දත්ත වලංගු වේ. පරිපථය විස්තර කිරීම සඳහා අපි දිගු ආකෘතියක් භාවිතා කරමු
{
"name": "User",
"type": "record",
"logicalType": "Aggregate",
"fields": [
{ "name": "id", "type": "string"},
{"name": "first_name", "type": "string"},
{"name": "last_name", "type": "string"}
],
"indexes": ["id"]
}
මෙම විස්තරය මත පදනම්ව, Tarantula DBMS සඳහා DDL (Data Definition Language) ස්වයංක්රීයව ජනනය වේ.
අසමමුහුර්ත දත්ත අනුවර්තනය සඳහා සහය දක්වයි (සමමුහුර්ත එකක් එකතු කිරීමට සැලසුම් ඇත).
ප්රතිදාන සකසනය
සමහර විට නව දත්ත පැමිණීම පිළිබඳව බාහිර පාරිභෝගිකයින්ට දැනුම් දීම අවශ්ය වේ; මේ සඳහා ප්රතිදාන ප්රොසෙසර භූමිකාව ඇත. දත්ත සුරැකීමෙන් පසු, එය අදාළ හසුරුවන්නා වෙත ලබා දිය හැකිය (උදාහරණයක් ලෙස, පාරිභෝගිකයාට අවශ්ය පෝරමයට ගෙන ඒම සඳහා) - පසුව යැවීම සඳහා සම්බන්ධකය වෙත යවන්න. මෙහි අලුත්වැඩියා පෝලිමක් ද භාවිතා වේ: කිසිවකු වස්තුව පිළි නොගත්තේ නම්, පරිපාලකයාට පසුව නැවත උත්සාහ කළ හැක.
පරිමාණ කිරීම
සම්බන්ධකය, ආදාන සකසනය සහ ප්රතිදාන ප්රොසෙසර භූමිකාවන් අස්ථායී වන අතර, අපට අවශ්ය භූමිකා වර්ගය සක්රීය කර නව යෙදුම් අවස්ථා එකතු කිරීමෙන් පද්ධතිය තිරස් අතට පරිමාණය කිරීමට ඉඩ සලසයි. තිරස් පරිමාණය සඳහා ගබඩාව භාවිතා වේ
දත්ත ගුණාංග
වස්තූන් ඉතා විශාල විය හැකි අතර අනෙකුත් වස්තූන් අඩංගු විය හැක. සියලු පරායත්තතා සහිත වස්තුවක් එක් අතථ්ය බාල්දියක ගබඩා කිරීමෙන් දත්ත එකතු කිරීමේ සහ යාවත්කාලීන කිරීමේ පරමාණුක බව අපි සහතික කරමු. මෙය භෞතික සේවාදායකයන් කිහිපයක් හරහා වස්තුව "පැතිරීම" වළක්වයි.
අනුවාදනය සඳහා සහය දක්වයි: වස්තුවක සෑම යාවත්කාලීනයක්ම නව අනුවාදයක් සාදන අතර, අපට සෑම විටම කාල පෙත්තක් ගෙන එදා ලෝකය පෙනෙන්නේ කෙසේදැයි බැලීමට හැකිය. දිගු ඉතිහාසයක් අවශ්ය නොවන දත්ත සඳහා, අපට අනුවාද ගණන සීමා කළ හැකිය, නැතහොත් එකක් පමණක් ගබඩා කළ හැකිය - නවතම එක - එනම්, නිශ්චිත වර්ගයක් සඳහා අනුවාද කිරීම අවශ්යයෙන්ම අක්රීය කරන්න. ඔබට කාලය අනුව ඉතිහාසය සීමා කළ හැකිය: උදාහරණයක් ලෙස, වසර 1 ට වඩා පැරණි යම් ආකාරයක වස්තූන් මකා දමන්න. සංරක්ෂිත කිරීම සඳහා ද සහය දක්වයි: අපට නියමිත වේලාවට වඩා පැරණි වස්තු බෑම, පොකුරේ ඉඩ නිදහස් කර ගත හැක.
කාර්යයන්
සිත්ගන්නාසුලු විශේෂාංග අතර, කාලසටහනකට අනුව, පරිශීලකයාගේ ඉල්ලීම පරිදි හෝ වැලිපිල්ලෙන් වැඩසටහන් දියත් කිරීමේ හැකියාව සඳහන් කිරීම වටී:
මෙන්න අපි තවත් භූමිකාවක් දකිමු - ධාවකය. මෙම භූමිකාව අස්ථායී වන අතර, මෙම භූමිකාව සමඟ අමතර යෙදුම් අවස්ථා අවශ්ය පරිදි පොකුරට එක් කළ හැක. ධාවකයාගේ වගකීම වන්නේ කාර්යයන් සම්පූර්ණ කිරීමයි. සඳහන් කළ පරිදි, වැලිපිල්ලෙන් නව කාර්යයන් උත්පාදනය කළ හැකිය; ඒවා ගබඩාවේ පෝලිමක සුරකින අතර පසුව ධාවකය මත ක්රියාත්මක වේ. මෙම වර්ගයේ කාර්යය Job ලෙස හැඳින්වේ. අපට Task නමින් කාර්ය වර්ගයක් ද ඇත - මේවා කාලසටහනකට (cron syntax භාවිතයෙන්) හෝ ඉල්ලුම මත ධාවනය වන පරිශීලක-නිර්වචනය කළ කාර්යයන් වේ. එවැනි කාර්යයන් දියත් කිරීමට සහ නිරීක්ෂණය කිරීමට, අපට පහසු කාර්ය කළමනාකරු ඇත. මෙම ක්රියාකාරීත්වය ලබා ගැනීමට නම්, ඔබ උපලේඛන භූමිකාව සබල කළ යුතුය; මෙම භූමිකාවට රාජ්යයක් ඇත, එබැවින් එය පරිමාණය නොකෙරේ, කෙසේ වෙතත්, අවශ්ය නොවේ; ඒ අතරම, අනෙකුත් සියලුම භූමිකාවන් මෙන්, ස්වාමියා හදිසියේම ප්රතික්ෂේප කළහොත් එය වැඩ කිරීමට පටන් ගන්නා අනුරුවක් තිබිය හැකිය.
ලොගර්
තවත් භූමිකාවක් ලොගර් ලෙස හැඳින්වේ. එය පොකුරේ සියලුම සාමාජිකයින්ගෙන් ලඝු-සටහන් එකතු කරන අතර වෙබ් අතුරු මුහුණත හරහා ඒවා උඩුගත කිරීම සහ බැලීම සඳහා අතුරු මුහුණතක් සපයයි.
සේවා
පද්ධතිය සේවා නිර්මාණය කිරීම පහසු කරවන බව සඳහන් කිරීම වටී. වින්යාස ගොනුව තුළ, වැලිපිල්ල තුළ ක්රියාත්මක වන පරිශීලක-ලිඛිත හසුරුවකට යවනු ලබන ඉල්ලීම් මොනවාදැයි ඔබට සඳහන් කළ හැක. මෙම හසුරුවන්නෙහි, ඔබට, උදාහරණයක් ලෙස, යම් ආකාරයක විශ්ලේෂණාත්මක විමසුමක් ධාවනය කර ප්රතිඵලය ආපසු ලබා දිය හැක.
සේවාව වින්යාස ගොනුවේ විස්තර කර ඇත:
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 ප්රොටෝකෝලය සඳහා සහය ක්රියාත්මක කළෙමු. සිප්කින් වැනි මෙම ප්රොටෝකෝලය සඳහා සහාය දක්වන මෙවලම් වෙත ඉල්ලුම මත තොරතුරු යැවීමට පද්ධතියට හැකිය, එමඟින් ඉල්ලීම ක්රියාත්මක වූ ආකාරය තේරුම් ගැනීමට ඔබට ඉඩ සලසයි:
ස්වාභාවිකවම, පද්ධතිය Prometheus භාවිතයෙන් එකතු කළ හැකි සහ Grafana භාවිතයෙන් දෘශ්යමාන කළ හැකි අභ්යන්තර ප්රමිතික සපයයි.
යොදවන්න
Tarantool Data Grid RPM පැකේජවලින් හෝ ලේඛනාගාරයකින් යෙදවිය හැක, බෙදාහැරීමේ හෝ Ansible වෙතින් උපයෝගිතා භාවිතා කරමින්, Kubernetes සඳහා සහයද ඇත (
ව්යාපාරික තර්කනය (වින්යාස කිරීම, හසුරුවන්න) ක්රියාවට නංවන යෙදුම UI හරහා සංරක්ෂිතයක ආකාරයෙන් හෝ අප විසින් සපයන ලද API හරහා ස්ක්රිප්ට් එකක් භාවිතයෙන් යොදවා ඇති Tarantool Data Grid පොකුරට පටවනු ලැබේ.
නියැදි යෙදුම්
Tarantool Data Grid භාවිතයෙන් සෑදිය හැකි යෙදුම් මොනවාද? ඇත්ත වශයෙන්ම, බොහෝ ව්යාපාරික කාර්යයන් කෙසේ හෝ දත්ත ප්රවාහය සැකසීම, ගබඩා කිරීම සහ ප්රවේශ වීම සම්බන්ධ වේ. එමනිසා, ඔබට ආරක්ෂිතව ගබඩා කර ප්රවේශ විය යුතු විශාල දත්ත ප්රවාහයන් තිබේ නම්, අපගේ නිෂ්පාදනයට ඔබට සංවර්ධන කාලය විශාල ප්රමාණයක් ඉතිරි කර ඔබේ ව්යාපාර තර්කනය කෙරෙහි අවධානය යොමු කළ හැකිය.
උදාහරණයක් ලෙස, අපට දේපල වෙලඳපොල පිළිබඳ තොරතුරු රැස් කිරීමට අවශ්ය වේ, එවිට අනාගතයේදී, උදාහරණයක් ලෙස, අපට හොඳම දීමනා පිළිබඳ තොරතුරු ලැබෙනු ඇත. මෙම අවස්ථාවේදී, අපි පහත සඳහන් කාර්යයන් ඉස්මතු කරමු:
- විවෘත මූලාශ්රවලින් තොරතුරු රැස් කරන රොබෝවරු අපගේ දත්ත මූලාශ්ර වනු ඇත. ඔබට ඕනෑම භාෂාවකින් සූදානම් කළ විසඳුම් හෝ ලිවීමේ කේතය භාවිතයෙන් මෙම ගැටළුව විසඳා ගත හැකිය.
- ඊළඟට, Tarantool Data Grid විසින් දත්ත පිළිගෙන සුරකිනු ඇත. විවිධ මූලාශ්රවලින් දත්ත ආකෘතිය වෙනස් නම්, ඔබට Lua හි කේතය ලිවිය හැකි අතර එය තනි ආකෘතියකට පරිවර්තනය කරයි. පෙර-සැකසුම් අදියරේදී, ඔබට අනුපිටපත් පිරිනැමීම් පෙරීමට හෝ දත්ත ගබඩාවේ වෙළඳපොලේ වැඩ කරන නියෝජිතයින් පිළිබඳ තොරතුරු අතිරේකව යාවත්කාලීන කිරීමටද හැකි වනු ඇත.
- දැන් ඔබට දැනටමත් දත්ත පිරවිය හැකි සහ දත්ත තේරීම් කළ හැකි පොකුරක් තුළ පරිමාණය කළ හැකි විසඳුමක් තිබේ. එවිට ඔබට නව ක්රියාකාරිත්වය ක්රියාත්මක කළ හැකිය, උදාහරණයක් ලෙස, දත්ත සඳහා ඉල්ලීමක් කරන සේවාවක් ලියන්න සහ දිනකට වඩාත්ම වාසිදායක දීමනාව ලබා දෙනු ඇත - මෙය වින්යාස ගොනුවේ පේළි කිහිපයක් සහ කුඩා Lua කේතයක් අවශ්ය වේ.
ඊළඟට කුමක්ද?
අපගේ ප්රමුඛතාවය වන්නේ භාවිතයේ පහසුව වැඩිදියුණු කිරීමයි
ආරක්ෂිත කරුණු සම්බන්ධයෙන් ද අපි දැඩි අවධානයක් යොමු කරනවා. මේ වන විට අපි රුසියාවේ FSTEC විසින් සහතික කිරීම සිදු කරමින් සිටින්නේ ඉහළ මට්ටමේ ආරක්ෂාව තහවුරු කිරීමට සහ පුද්ගලික දත්ත තොරතුරු පද්ධති සහ රජයේ තොරතුරු පද්ධතිවල භාවිතා කරන මෘදුකාංග නිෂ්පාදන සහතික කිරීම සඳහා වන අවශ්යතා සපුරාලීම සඳහා ය.
මූලාශ්රය: www.habr.com