ඉලාස්ටික් සෙවුම් සමඟ හයිලෝඩ් ව්‍යාපෘතියක ප්‍රශස්තකරණය පූරණය කරන්න

හේයි හබ්ර්! මගේ නම Maxim Vasiliev, මම FINCH හි විශ්ලේෂකයෙකු සහ ව්‍යාපෘති කළමනාකරුවෙකු ලෙස සේවය කරමි. අද මම ඔබට කියන්නට කැමතියි, ElasticSearch භාවිතයෙන්, අපට විනාඩි 15ක් තුළ ඉල්ලීම් මිලියන 6ක් සැකසීමට සහ අපගේ සේවාදායකයෙකුගේ වෙබ් අඩවියේ දෛනික පැටවීම් ප්‍රශස්ත කිරීමට අපට හැකි වූයේ කෙසේද? අවාසනාවකට, අපට නම් නොමැතිව කිරීමට සිදුවනු ඇත, අපට NDA එකක් ඇති බැවින්, ලිපියේ අන්තර්ගතය මෙයින් පීඩාවට පත් නොවනු ඇතැයි අපි බලාපොරොත්තු වෙමු. අපි යමු.

ව්යාපෘතිය ක්රියාත්මක වන ආකාරය

අපගේ පසුතලය මත, අපි අපගේ සේවාලාභියාගේ වෙබ් අඩවි සහ ජංගම යෙදුමේ කාර්ය සාධනය සහතික කරන සේවාවන් නිර්මාණය කරමු. සාමාන්ය ව්යුහය රූප සටහනෙහි දැකිය හැකිය:

ඉලාස්ටික් සෙවුම් සමඟ හයිලෝඩ් ව්‍යාපෘතියක ප්‍රශස්තකරණය පූරණය කරන්න

වැඩ කිරීමේ ක්‍රියාවලියේදී, අපි ගනුදෙනු විශාල සංඛ්‍යාවක් ක්‍රියාවට නංවන්නෙමු: මිලදී ගැනීම්, ගෙවීම්, පරිශීලක ශේෂයන් සමඟ මෙහෙයුම්, ඒ සඳහා අපි ලඝු-සටහන් විශාල ප්‍රමාණයක් ගබඩා කරමු, මෙන්ම මෙම දත්ත බාහිර පද්ධති වෙත ආනයනය කර අපනයනය කරන්නෙමු.

අපි සේවාදායකයාගෙන් දත්ත ලබාගෙන එය පරිශීලකයාට මාරු කරන විට ප්‍රතිලෝම ක්‍රියාවලි ද ඇත. මීට අමතරව, ගෙවීම් සහ ප්රසාද වැඩසටහන් සමඟ වැඩ කිරීම සඳහා තවමත් ක්රියාවලීන් පවතී.

කෙටි පසුබිම

මුලදී, අපි එකම දත්ත ගබඩාව ලෙස PostgreSQL භාවිතා කළෙමු. DBMS සඳහා එහි සම්මත වාසි: ගනුදෙනු පැවතීම, සංවර්ධිත දත්ත නියැදි භාෂාවක්, ඒකාබද්ධ කිරීම සඳහා පුළුල් පරාසයක මෙවලම්; හොඳ කාර්ය සාධනයක් සමඟ ඒකාබද්ධව සෑහෙන කාලයක් තිස්සේ අපගේ අවශ්‍යතා තෘප්තිමත් කරයි.

අපි සම්පුර්ණයෙන්ම සියලුම දත්ත Postgres හි ගබඩා කළෙමු: ගනුදෙනුවල සිට ප්‍රවෘත්ති දක්වා. නමුත් පරිශීලකයින් සංඛ්යාව වර්ධනය වූ අතර, ඒ සමඟ ඉල්ලීම් සංඛ්යාව.

අවබෝධය සඳහා, ඩෙස්ක්ටොප් අඩවියේ පමණක් 2017 වසරේ සැසි වාර ගණන මිලියන 131 ක් වේ. ඉල්ලීම් විශාල සංඛ්යාවක් ලැබෙනු ඇත.

ව්‍යාපෘතිය වර්ධනය වන විට, Postgres හට තවදුරටත් බර සමඟ කටයුතු කිරීමට නොහැකි විය; අපට දිගටම කරගෙන යාමට නොහැකි විය - විවිධ විමසුම් විශාල ප්‍රමාණයක් දර්ශනය වූ අතර, ඒ සඳහා අපට ප්‍රමාණවත් දර්ශක සංඛ්‍යාවක් නිර්මාණය කිරීමට නොහැකි විය.

අපගේ අවශ්‍යතා සපයන සහ PostgreSQL හි බර ඉවත් කරන වෙනත් දත්ත ගබඩාවල අවශ්‍යතාවයක් ඇති බව අපි තේරුම් ගත්තෙමු. Elasticsearch සහ MongoDB හැකි විකල්ප ලෙස සැලකේ. දෙවැන්න පහත සඳහන් කරුණු අහිමි විය:

  1. දර්ශකවල දත්ත ප්‍රමාණය වර්ධනය වන විට මන්දගාමී සුචිගත කිරීමේ වේගය. ඉලාස්ටික් සමඟ, වේගය දත්ත ප්රමාණය මත රඳා නොපවතී.
  2. සම්පූර්ණ පෙළ සෙවීමක් නැත

ඒ නිසා අපි අපි වෙනුවෙන් ඉලාස්ටික් තෝරාගෙන සංක්රමණය සඳහා සූදානම් විය.

ඉලාස්ටික් වෙත සංක්රමණය

1. අපි විකුණුම් සෙවුම් සේවාවේ සිට සංක්‍රමණය ආරම්භ කළෙමු. අපගේ සේවාදායකයාට විකුණුම් ලකුණු 70 ක් පමණ ඇති අතර මේ සඳහා වෙබ් අඩවියේ සහ යෙදුමේ වර්ග කිහිපයක් සෙවීම අවශ්‍ය වේ:

  • නගරයේ නම අනුව පෙළ සෙවීම
  • යම් ස්ථානයක සිට දී ඇති අරයක් තුළ භූ ගවේෂණය. උදාහරණයක් ලෙස, පරිශීලකයාට තම නිවසට ආසන්නතම විකුණුම් ස්ථාන මොනවාදැයි බැලීමට අවශ්‍ය නම්.
  • ලබා දී ඇති චතුරස්‍රයකින් සොයන්න - පරිශීලකයා සිතියම මත චතුරස්රයක් අඳින අතර, මෙම අරයේ ඇති සියලුම ලක්ෂ්‍ය ඔහුට පෙන්වනු ලැබේ.
  • අමතර පෙරහන් මගින් සොයන්න. විකිණුම් ලක්ෂ්‍ය වර්ගීකරණයෙන් එකිනෙකට වෙනස් වේ

අපි සංවිධානය ගැන කතා කරන්නේ නම්, Postgres හි අපට සිතියම සහ ප්‍රවෘත්ති යන දෙකටම දත්ත මූලාශ්‍රයක් ඇති අතර, Elastic Snapshots මුල් දත්ත වලින් ලබා ගනී. කාරණය නම්, මුලින් Postgres හට සියලු නිර්ණායක මගින් සෙවීම සමඟ සාර්ථකව කටයුතු කළ නොහැකි වීමයි. බොහෝ දර්ශක තිබුනා පමණක් නොව, ඒවා අතිච්ඡාදනය විය හැක, එබැවින් Postgres උපලේඛකයා නැති වූ අතර කුමන දර්ශකය භාවිතා කළ යුතුද යන්න තේරුම් ගැනීමට නොහැකි විය.

2. ඊළඟට පේළියේ තිබුණේ ප්‍රවෘත්ති අංශයයි. ප්‍රකාශන සෑම දිනකම වෙබ් අඩවියේ දිස්වන අතර එමඟින් පරිශීලකයා තොරතුරු ප්‍රවාහයේදී නැති නොවන පරිදි දත්ත නිකුත් කිරීමට පෙර වර්ග කළ යුතුය. සෙවීම යනු මෙයයි: ඔබට පෙළ ගැළපීම මගින් වෙබ් අඩවිය සෙවිය හැකි අතර ඒ සමඟම අමතර පෙරහන් සම්බන්ධ කරන්න, ඒවා ඉලාස්ටික් හරහා ද සාදා ඇත.

3. ඉන්පසුව අපි ගනුදෙනු සැකසීම ගෙන ගියෙමු. පරිශීලකයින්ට වෙබ් අඩවියේ යම් නිෂ්පාදනයක් මිලදී ගත හැකි අතර ත්‍යාග දිනුම් ඇදීමට සහභාගී විය හැකිය. එවැනි මිලදී ගැනීම් වලින් පසුව, අපි විශේෂයෙන් සති අන්ත සහ නිවාඩු දිනවල දත්ත විශාල ප්රමාණයක් සකස් කරමු. සංසන්දනය කිරීම සඳහා, සාමාන්‍ය දිනවල මිලදී ගැනීම් සංඛ්‍යාව මිලියන 1,5-2 අතර කොහේ හරි නම්, නිවාඩු දිනවල එම අගය මිලියන 53 දක්වා ළඟා විය හැකිය.

ඒ අතරම, දත්ත කෙටිම කාලය තුළ සැකසිය යුතුය - පරිශීලකයින් දින කිහිපයක් සඳහා ප්රතිඵලය බලා සිටීමට කැමති නැත. Postgres හරහා එවැනි කාලසීමාවන් සාක්ෂාත් කර ගැනීමට ක්‍රමයක් නොමැත - අපට බොහෝ විට අගුලු ලැබුණි, අපි සියලු ඉල්ලීම් ක්‍රියාවට නංවන අතරතුර, පරිශීලකයින්ට ඔවුන්ට ත්‍යාග ලැබුණිද නැද්ද යන්න පරීක්ෂා කිරීමට නොහැකි විය. මෙය ව්‍යාපාර සඳහා එතරම් ප්‍රසන්න නොවේ, එබැවින් අපි සැකසීම Elasticsearch වෙත ගෙන ගියෙමු.

ආවර්තිතා

දැන් යාවත්කාලීන කිරීම් පහත සඳහන් කොන්දේසි අනුව සිදුවීම් මත වින්‍යාස කර ඇත:

  1. විකුණුම් ස්ථාන. අපට බාහිර මූලාශ්‍රයකින් දත්ත ලැබුණු විගස, අපි වහාම යාවත්කාලීන කිරීම ආරම්භ කරමු.
  2. පුවත්. වෙබ් අඩවියේ ඕනෑම ප්‍රවෘත්තියක් සංස්කරණය කළ වහාම එය ඉලාස්ටික් වෙත ස්වයංක්‍රීයව යවනු ලැබේ.

මෙහිදී නැවතත් ඉලාස්ටික් වල වාසි ගැන සඳහන් කිරීම වටී. Postgres හි, ඉල්ලීමක් යැවීමේදී, එය සියලු වාර්තා අවංකව සකසන තෙක් ඔබ බලා සිටිය යුතුය. ඔබට ඉලාස්ටික් වෙත වාර්තා 10ක් යැවිය හැකි අතර සියලුම ෂැඩ්ස් හරහා වාර්තා බෙදා හරින තෙක් බලා නොසිට වහාම වැඩ ආරම්භ කළ හැක. ඇත්ත වශයෙන්ම, සමහර Shard හෝ Replica දත්ත වහාම නොපෙනේ, නමුත් සියල්ල ඉතා ඉක්මනින් ලබා ගත හැකිය.

ඒකාබද්ධ කිරීමේ ක්රම

ඉලාස්ටික් සමඟ ඒකාබද්ධ කිරීමට ක්රම දෙකක් තිබේ:

  1. TCP හරහා ස්වදේශික සේවාදායකයෙකු හරහා. ස්වදේශීය ධාවකය ක්‍රමයෙන් අභාවයට යමින් පවතී: එය තවදුරටත් සහාය නොදක්වයි, එය ඉතා අපහසු වාක්‍ය ඛණ්ඩයක් ඇත. එමනිසා, අපි එය ප්රායෝගිකව භාවිතා නොකරන අතර එය සම්පූර්ණයෙන්ම අත්හැර දැමීමට උත්සාහ කරමු.
  2. JSON ඉල්ලීම් සහ Lucene සින්ටැක්ස් යන දෙකම භාවිතා කළ හැකි HTTP අතුරු මුහුණතක් හරහා. අන්තිම එක ඉලාස්ටික් භාවිතා කරන පෙළ එන්ජිමකි. මෙම අනුවාදයේ, අපට HTTP හරහා JSON ඉල්ලීම් හරහා කණ්ඩායම් කිරීමේ හැකියාව ලැබේ. අපි භාවිතා කිරීමට උත්සාහ කරන විකල්පය මෙයයි.

HTTP අතුරුමුහුණතට ස්තූතියි, අපට HTTP සේවාලාභියාගේ අසමමුහුර්ත ක්රියාත්මක කිරීමක් සපයන පුස්තකාල භාවිතා කළ හැකිය. අපට විශාල ප්‍රවර්ධනයේ දිනවලදී බොහෝ සෙයින් උපකාරී වූ ඉහළ කාර්ය සාධනයක් ඇති කරන Batch සහ අසමමුහුර්ත API වලින් ප්‍රයෝජන ගත හැකිය (පහත ඒ ගැන වැඩි විස්තර)

සංසන්දනය කිරීම සඳහා අංක කිහිපයක්:

  • Postgres bounty පරිශීලකයින් කණ්ඩායම් කිරීමකින් තොරව නූල් 20 කින් සුරැකීම: තත්පර 460713 කින් වාර්තා 42 ක්
  • ඉලාස්ටික් + නූල් 10 ක් සඳහා ප්‍රතික්‍රියාශීලී සේවාදායකයා + මූලද්‍රව්‍ය 1000 ක් සඳහා කණ්ඩායම: තත්පර 596749 කින් වාර්තා 11
  • ඉලාස්ටික් + නූල් 10 ක් සඳහා ප්‍රතික්‍රියාශීලී සේවාදායකයා + මූලද්‍රව්‍ය 1000 සඳහා කණ්ඩායම: මිනිත්තු 23801684 කින් 4 ඇතුළත් කිරීම්

දැන් අපි පුස්තකාලය කුමක් වුවත්, JSON Batch / Batch ලෙස ගොඩනඟා ඕනෑම HTTP සේවාලාභියෙකු හරහා යවන HTTP ඉල්ලීම් කළමණාකරුවෙකු ලියා ඇත. ඔබට ඉල්ලීම් සමමුහුර්තව හෝ අසමමිතිකව යැවීමටද තෝරාගත හැක.

සමහර ඒකාබද්ධ කිරීම් වලදී, අපි තවමත් නිල ප්‍රවාහන සේවාලාභියා භාවිතා කරයි, නමුත් මෙය ඊළඟ ප්‍රතිනිර්මාණය කිරීමේ කාරණයක් පමණි. මෙම අවස්ථාවෙහිදී, Spring WebClient පදනම මත ගොඩනගා ඇති අභිරුචි සේවාදායකයක් සැකසීම සඳහා භාවිතා වේ.

ඉලාස්ටික් සෙවුම් සමඟ හයිලෝඩ් ව්‍යාපෘතියක ප්‍රශස්තකරණය පූරණය කරන්න

විශාල ප්රවර්ධනය

වසරකට වරක්, ව්‍යාපෘතිය පරිශීලකයින් සඳහා විශාල ප්‍රවර්ධනයක් සත්කාරකත්වය දරයි - මෙය එකම හයිලෝඩ් වේ, මන්ද මේ අවස්ථාවේ දී අපි මිලියන ගණනක් පරිශීලකයින් සමඟ එකවර වැඩ කරන්නෙමු.

සාමාන්‍යයෙන් නිවාඩු දිනවල උපරිම බර පැටවීම සිදු වේ, නමුත් මෙම ප්‍රවර්ධනය සම්පූර්ණයෙන්ම වෙනස් මට්ටමක පවතී. පසුගිය වසරේ, ප්‍රවර්ධන දිනයේ, අපි භාණ්ඩ ඒකක 27ක් අලෙවි කළෙමු. දත්ත පැය භාගයකට වඩා වැඩි කාලයක් සකසන ලද අතර, පරිශීලකයින් සඳහා අපහසුතාවයක් ඇති විය. පරිශීලකයන් සහභාගීත්වය සඳහා ත්යාග ලැබුණු නමුත්, ක්රියාවලිය වේගවත් කළ යුතු බව පැහැදිලි විය.

2019 ආරම්භයේදී, අපට ElasticSearch අවශ්‍ය බව අපි තීරණය කළෙමු. වසරක් පුරා, අපි ඉලාස්ටික් හි ලැබුණු දත්ත සැකසීම සහ ජංගම යෙදුමේ සහ වෙබ් අඩවියේ API හි ඒවා නිකුත් කිරීම සංවිධානය කළෙමු. එහි ප්රතිඵලයක් වශයෙන්, ඊළඟ වසරේ උද්ඝෝෂනය අතරතුර, අපි සකස් කළා මිනිත්තු 15ක් තුළ ඇතුළත් කිරීම් 131ක්.

භාණ්ඩ මිලදී ගැනීමට සහ උසස්වීම්වල ත්‍යාග ඇඳීමට සහභාගී වීමට කැමති බොහෝ දෙනෙක් අප සතුව ඇති බැවින් මෙය තාවකාලික පියවරකි. දැන් අපි ඉලාස්ටික් වෙත යාවත්කාලීන තොරතුරු යවමු, නමුත් අනාගතයේදී අපි පසුගිය මාස සඳහා සංරක්ෂිත තොරතුරු ස්ථිර ගබඩාවක් ලෙස Postgres වෙත මාරු කිරීමට සැලසුම් කරමු. එහි සීමාවන් ද ඇති ඉලාස්ටික් දර්ශකය අවහිර නොකිරීමට.

නිගමනය/නිගමන

මේ මොහොතේ, අපි අපට අවශ්‍ය සියලුම සේවාවන් ඉලාස්ටික් වෙත මාරු කර ඇති අතර දැනට මෙය විරාම කර ඇත. දැන් අපි Postgres හි ප්‍රධාන ස්ථීර ගබඩාව මත ඉලාස්ටික් හි දර්ශකයක් ගොඩනඟමු, එය පරිශීලක භාරය භාර ගනී.

අනාගතයේදී, දත්ත ඉල්ලීම ඉතා විවිධ වන අතර අසීමිත තීරු ගණනක් සඳහා සොයන බව අපට වැටහෙන්නේ නම් සේවා මාරු කිරීමට අපි සැලසුම් කරමු. මෙය තවදුරටත් Postgres සඳහා කාර්යයක් නොවේ.

අපට ක්‍රියාකාරීත්වය තුළ සම්පූර්ණ පෙළ සෙවීම අවශ්‍ය නම් හෝ අපට විවිධ සෙවුම් නිර්ණායක රාශියක් තිබේ නම්, මෙය ඉලාස්ටික් බවට පරිවර්තනය කළ යුතු බව අපි දැනටමත් දනිමු.

⌘⌘⌘

කියවීමට ස්තූතියි. ඔබේ සමාගමත් ElasticSearch භාවිතා කරන්නේ නම් සහ එහිම ක්‍රියාත්මක කිරීමේ අවස්ථා තිබේ නම්, අපට කියන්න. අනිත් අය කොහොමද කියලා දැනගන්න එක රසවත් වේවි 🙂

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න