2019 මුල් භාගයේදී ඇන්ඩ්රි බොරෝඩින්ගේ "WAL-G සමඟ උපස්ථ. 2019 දී අලුත් මොනවාද?" යන වාර්තාවේ පිටපත කියවීමට මම ඔබට යෝජනා කරමි.

හැමෝටම ආයුබෝවන්! මගේ නම ඇන්ඩ්රි බොරෝඩින්. මම Yandex හි සංවර්ධකයෙක්. මම 2016 සිට PostgreSQL ගැන උනන්දු වුණා, මම සංවර්ධකයින් සමඟ කතා කළාට පස්සේ ඔවුන් කිව්වා ඒක සරලයි කියලා—මූලාශ්ර කේතය ගන්න, එය සම්පාදනය කරන්න, එවිට එය ක්රියාත්මක වේවි. එතැන් සිට, මට විවිධ දේවල් ලිවීම නතර කිරීමට නොහැකි වී තිබෙනවා.
මම වැඩ කරන දේවල් වලින් එකක් තමයි උපස්ථ පද්ධතියක්. ඇත්ත වශයෙන්ම, Yandex හිදී, අපි ඉතා දිගු කාලයක් තිස්සේ PostgreSQL උපස්ථ පද්ධති සඳහා වැඩ කරමින් සිටිමු. අපි අපගේ උපස්ථ පද්ධති ගොඩනඟන ආකාරය පිළිබඳ වාර්තා හයකින් යුත් මාලාවක් ඔබට මාර්ගගතව සොයාගත හැකිය. තවද සෑම වසරකම ඒවා පරිණාමය වී, සංවර්ධනය වී, වඩාත් විශ්වාසදායක වේ.
නමුත් අද කතාව අපි කරපු දේවල් ගැන විතරක් නෙවෙයි, ඒ ඔක්කොම කොච්චර සරලද සහ මොනවද තියෙන්නේ කියන එක ගැනත්. WAL-G ගැන මගේ කතා ඔයාලා කී දෙනෙක් දැනටමත් බලලා තියෙනවද? ගොඩක් අය දැකලා නැති එක හොඳයි, මොකද මම සරලම දෙයින් පටන් ගන්නම්.

ඔබට PostgreSQL පොකුරක් තිබේ නම්, සහ සෑම කෙනෙකුටම ඒවායින් කිහිපයක් ඇති බව මම සිතමි, සහ හදිසියේම ඔබට තවමත් උපස්ථ පද්ධතියක් නොමැති නම්, ඔබට ඕනෑම S3 ගබඩාවක් හෝ Google Cloud අනුකූල ගබඩාවක් ලබා ගැනීමට අවශ්ය වේ.

උදාහරණයක් ලෙස, ඔබට අපගේ කුටියට පැමිණ S3 අනුකූල වන Yandex Object Storage සඳහා ප්රවර්ධන කේතයක් ලබා ගත හැකිය.

ඉන්පසු බකට් එකක් සාදන්න. මෙය හුදෙක් තොරතුරු සඳහා බහාලුමක් පමණි.

සේවා පරිශීලකයෙකු සාදන්න.

සේවා පරිශීලකයා සඳහා ප්රවේශ යතුරක් aws-s3-key එකක් සාදන්න.

WAL-G හි නවතම ස්ථාවර නිකුතුව බාගන්න.
අපගේ පූර්ව නිකුතු අපගේ නිකුතුවලට වඩා වෙනස් වන්නේ කෙසේද? බොහෝ විට කලින් නිකුත් කරන ලෙස මගෙන් ඉල්ලා සිටී. අනුවාදයක ප්රමාණවත් කාලයක් සඳහා දෝෂයක් නොමැති නම්, උදාහරණයක් ලෙස මාසයක්, මම එය නිකුත් කරමි. මෙය නොවැම්බර් නිකුතුවයි. මෙයින් අදහස් කරන්නේ සෑම මසකම අපට දෝෂයක් හමු වී ඇති බවයි, සාමාන්යයෙන් තීරණාත්මක නොවන ක්රියාකාරීත්වයකින්, නමුත් අපි තවමත් එය නිකුත් කර නැත. පෙර අනුවාදය නොවැම්බර් එක පමණි. එයට දන්නා දෝෂ නොමැත, එනම් ව්යාපෘතිය ඉදිරියට යත්ම දෝෂ එකතු කරන ලදී.

ඔබ WAL-G බාගත කළ පසු, ඔබට සරල "උපස්ථ ලැයිස්තුව" විධානය ක්රියාත්මක කළ හැකිය, පරිසර විචල්යයන් මාරු කරමින්. එය වස්තු ගබඩාවට සම්බන්ධ වී ඔබ සතුව ඇති උපස්ථ මොනවාදැයි නැවත වාර්තා කරයි. මුලදී, ඔබට කිසිදු උපස්ථයක් නොතිබිය යුතුය. මෙම ස්ලයිඩයේ අරමුණ වන්නේ ඒ සියල්ල තරමක් සරල බව පෙන්වීමයි. එය පරිසර විචල්යයන් පිළිගන්නා සහ උප විධාන ක්රියාත්මක කරන කොන්සෝල විධානයකි.

මෙයින් පසු, ඔබට ඔබේ පළමු උපස්ථය සෑදිය හැකිය. WAL-G හි "backup-push" සඳහන් කර WAL-G හි ඔබේ පොකුරේ pgdata ස්ථානය සඳහන් කරන්න. ඔබට තවමත් උපස්ථ පද්ධතියක් නොමැති නම්, "archive-mode" සක්රීය කිරීමට අවශ්ය බව PostgreSQL ඔබට කියනු ඇත.

මෙයින් අදහස් කරන්නේ ඔබ සැකසුම් වෙත ගොස් "archive_mode = on" සක්රීය කර "archive_command" එකතු කළ යුතු බවයි, එය WAL-G හි උප විධානයකි. නමුත් කිසියම් හේතුවක් නිසා, මිනිසුන් බොහෝ විට මෙම ත්රෙඩ් එකේ තීරු ස්ක්රිප්ට් භාවිතා කර WAL-G වටා එතුමක් නිර්මාණය කරයි. කරුණාකර එසේ නොකරන්න. WAL-G සතුව ඇති ක්රියාකාරීත්වය භාවිතා කරන්න. ඔබට යමක් මග හැරී ඇත්නම්, කරුණාකර මට දන්වන්න. . WAL-G උපකල්පනය කරන්නේ එය archive_command හි ක්රියාත්මක වන එකම වැඩසටහන බවයි.

අපි මූලික වශයෙන් WAL-G භාවිතා කරන්නේ Yandex දත්ත සමුදා කළමනාකරණයේ ඉහළ ලබා ගත හැකිතා පොකුරක් නිර්මාණය කිරීමටයි.

එය සාමාන්යයෙන් තනි මාස්ටර් එකක් සහ බහු අනුරූ සහිත ස්ථලකයක භාවිතා වන අතර, එය Yandex Object Storage වෙත උපස්ථ කරයි.

වඩාත් පොදු අවස්ථාව වන්නේ Point-in-Time Recovery භාවිතයෙන් පොකුරු පිටපත් නිර්මාණය කිරීමයි. කෙසේ වෙතත්, මෙම අවස්ථාවේදී, උපස්ථ පද්ධතියේ ක්රියාකාරිත්වය එතරම් වැදගත් නොවේ. අපට අවශ්ය වන්නේ උපස්ථයෙන් නව පොකුරක් නිර්මාණය කිරීමයි.

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

තවත් සමාන තත්වයක් වන්නේ සම්බන්ධතාවය නැති වූ දත්ත මධ්යස්ථානයකින් Cluster Master මාරු කිරීමෙන් පසු පැරණි Master නැවත ස්ථාපනය කිරීමේ අවශ්යතාවයයි.

- එහි ප්රතිඵලයක් ලෙස, උපස්ථ පද්ධතිය සඳහා අවශ්යතා සකස් කිරීමේදී, pg_basebackup වලාකුළෙහි භාවිතයට සුදුසු නොවන බව අපට වැටහුණි.
- අපට අවශ්ය වූයේ අපගේ දත්ත සම්පීඩනය කිරීමට හැකි වීමයි. නමුත් ඒ සමඟ එන උපස්ථ පද්ධතිය හැර වෙනත් ඕනෑම උපස්ථ පද්ධතියක් පාහේ දත්ත සම්පීඩනය සපයනු ඇත.
- අපි හැම දෙයක්ම සමාන්තරකරණය කිරීමට කැමති වුණේ cloud පරිශීලකයින් විශාල ප්රොසෙසර් කෝර් ප්රමාණයක් මිලදී ගන්නා නිසා. නමුත් යම් මෙහෙයුමකදී සමාන්තරකරණයක් නොමැති නම්, විශාල කෝර් සංඛ්යාවක් නිෂ්ඵල වේ.
- අපට සංකේතනය අවශ්ය වන්නේ බොහෝ විට එය අපගේ දත්ත නොවන අතර අපට එය සරල පෙළෙහි ගබඩා කළ නොහැකි බැවිනි. අහම්බෙන්, WAL-G සඳහා අපගේ දායකත්වය ආරම්භ වූයේ සංකේතනයෙනි. අපි WAL-G වෙත සංකේතනය එකතු කළෙමු, ඉන්පසු අපෙන් විමසන ලද්දේ, "අපෙන් කෙනෙකුට ව්යාපෘතිය සංවර්ධනය කිරීමට කැමතිද?" එතැන් සිට, මම වසරකට වැඩි කාලයක් WAL-G සමඟ වැඩ කරමින් සිටිමි.
- කාලයත් සමඟ, මිනිසුන්ට සමහර විට රාත්රියේදී වැදගත් නිෂ්පාදන වැඩ බරක් ඇති බවත්, මෙම වැඩ බරට බාධා කළ නොහැකි බවත් අපි සොයා ගත් නිසා, අපට සම්පත් අඩු කිරීම ද අවශ්ය විය. එබැවින්, අපි සම්පත් අඩු කිරීම එකතු කළෙමු.
- ලැයිස්තුගත කිරීම සහ කළමනාකරණය මෙන්ම.
- සහ සත්යාපනය.

අපි විවිධ මෙවලම් රාශියක් දෙස බැලුවෙමු. වාසනාවකට මෙන්, අපට PostgreSQL හි විශාල තේරීමක් තිබේ. ඒ සියල්ලෙහිම, අපට යමක් මග හැරී තිබුණි, කුඩා විශේෂාංගයක්, කුඩා වාසියක්.

පවතින පද්ධති සමාලෝචනය කිරීමෙන් පසුව, අපි WAL-G සංවර්ධනය කිරීමට තීරණය කළෙමු. එය එකල නව ව්යාපෘතියක් වූ අතර, වලාකුළු මත පදනම් වූ උපස්ථ පද්ධති යටිතල පහසුකම් දෙසට එහි සංවර්ධනයට බලපෑම් කිරීම තරමක් පහසු විය.

අපි අනුගමනය කරන ප්රධාන දෘෂ්ටිවාදය නම් WAL-G බලලයිකාවක් තරම් සරල විය යුතු බවයි.

WAL-G හි විධාන 4ක් ඇත. ඒවා නම්:
WAL-PUSH – සංරක්ෂිත පතුවළ.
WAL-FETCH - පතුවළක් ලබා ගැනීමට.
උපස්ථ-තල්ලු කරන්න - උපස්ථයක් සාදන්න.
BACKUP-FETCH - උපස්ථ පද්ධතියෙන් උපස්ථයක් ලබා ගන්න.

ඇත්ත වශයෙන්ම, WAL-G සතුව මෙම උපස්ථ කළමනාකරණය ද ඇත, එනම් මේ මොහොතේ තවදුරටත් අවශ්ය නොවන ඉතිහාසයේ වාර්තා සහ උපස්ථ ලැයිස්තුගත කිරීම සහ මකා දැමීම.

අපට වැදගත් වන එක් කාර්යයක් වන්නේ ඩෙල්ටා පිටපත් නිර්මාණය කිරීමේ කාර්යයයි.
ඩෙල්ටා උපස්ථ යනු අපි සම්පූර්ණ පොකුරේම සම්පූර්ණ උපස්ථයක් නිර්මාණය නොකරන බවයි, නමුත් පොකුරේ වෙනස් කරන ලද ගොනු වල වෙනස් කරන ලද පිටු පමණි. මෙය WAL භාවිතයෙන් ප්රතිසාධනය කිරීමේ හැකියාවට ක්රියාකාරීව බෙහෙවින් සමාන බව පෙනේ. කෙසේ වෙතත්, WAL තනි-නූල් වේ, එබැවින් අපට ඩෙල්ටා උපස්ථ සමාන්තරව ක්රියාත්මක කළ හැකිය. ඒ අනුව, අපට සෙනසුරාදා මූලික උපස්ථයක් සාදා ඇත්නම්, ඩෙල්ටා උපස්ථ දිනපතා සිදු කරනු ලබන අතර, බ්රහස්පතින්දා අසාර්ථක වීමක් සිදුවුවහොත්, අපට ඩෙල්ටා උපස්ථ හතරක් සහ WAL පැය 10 ක් ක්රියාත්මක කිරීමට අවශ්ය වේ. ඩෙල්ටා උපස්ථ සමාන්තරව ක්රියාත්මක වන බැවින් මෙය ආසන්න වශයෙන් සමාන කාලයක් ගතවනු ඇත.

LSN-පාදක ඩෙල්ටා යන්නෙන් අදහස් කරන්නේ උපස්ථයක් නිර්මාණය කිරීමේදී, එය වෙනස් වී ඇත්දැයි තීරණය කිරීම සඳහා අපි සෑම පිටුවක්ම ඒකාබද්ධ කර එහි LSN පෙර උපස්ථයේ LSN සමඟ සංසන්දනය කළ යුතු බවයි. වෙනස් වූ දත්ත අඩංගු විය හැකි ඕනෑම පිටුවක් ඩෙල්ටා උපස්ථයේ තිබිය යුතුය.

මා කී පරිදි, සමාන්තරකරණය කෙරෙහි විශාල අවධානයක් යොමු විය.

නමුත් PostgreSQL සංරක්ෂිත API අනුකූල වේ. PostgreSQL තනි WAL ගොනුවක් සංරක්ෂණය කරන අතර, ප්රතිසාධනය කරන විට, එය තනි WAL ගොනුවක් ඉල්ලා සිටී. නමුත් දත්ත සමුදාය "WAL-FETCH" විධානය භාවිතා කර තනි WAL ගොනුවක් ඉල්ලා සිටි පසු, අපි "WAL-PREFETCH" විධානය අමතන්නෙමු, එය ඊළඟ WAL අට සමාන්තරව වස්තු ගබඩාවෙන් දත්ත බාගත කිරීමට සූදානම් කරයි.
දත්ත සමුදාය අපෙන් තනි දත්ත ප්රවාහයක් සංරක්ෂණය කිරීමට ඉල්ලා සිටින විට, වෙනත් WAL ගොනු තිබේදැයි බැලීමට අපි archive_status පරීක්ෂා කරමු. අපි සමාන්තරව WAL ගොනු බාගත කිරීමට ද උත්සාහ කරමු. මෙය සැලකිය යුතු කාර්ය සාධන වර්ධනයක් සපයන අතර සංරක්ෂණය නොකළ WAL ගොනු ගණන සැලකිය යුතු ලෙස අඩු කරයි. බොහෝ උපස්ථ පද්ධති සංවර්ධකයින් මෙය අවදානම් පද්ධතියක් ලෙස සලකයි, මන්ද අපි PostgreSQL API නොවන කේතයේ අභ්යන්තරය පිළිබඳ අපගේ දැනුම මත රඳා සිටිමු. PostgreSQL archive_status ෆෝල්ඩරයක පැවැත්ම සහතික නොකරයි, එසේම WAL ගොනු සූදානම සංඥා වල අර්ථකථන හෝ ලබා ගත හැකි බව සහතික නොකරයි. කෙසේ වෙතත්, අපි මූලාශ්ර කේතය අධ්යයනය කර, මෙය එසේ බව දැක, එය සූරාකෑමට උත්සාහ කරමු. PostgreSQL වර්ධනය වන දිශාව ද අපි නිරීක්ෂණය කරමු; මෙම යාන්ත්රණය කැඩී ඇත්නම්, අපි එය භාවිතා කිරීම නවත්වන්නෙමු.

එහි පිරිසිදුම ආකාරයෙන්, LSN-පාදක WAL ඩෙල්ටා සඳහා පෙර උපස්ථයේ සිට ගොනු පද්ධතියේ මාදිලියේ කාලය වෙනස් වී ඇති ඕනෑම පොකුරු ගොනුවක් කියවීම අවශ්ය වේ. අපි මෙය සමඟ දිගු කාලයක්, වසරකට ආසන්න කාලයක් ජීවත් වුණා. අවසාන වශයෙන්, අපි WAL ඩෙල්ටා සමඟ පැමිණියෙමු.
මෙයින් අදහස් කරන්නේ අපි Master හි WAL සංරක්ෂණය කරන සෑම අවස්ථාවකම, අපි එය සම්පීඩනය, සංකේතනය සහ මාර්ගගතව යැවීම පමණක් නොව, එය කියවන බවයි. අපි එය විශ්ලේෂණය කර, එහි වාර්තා කියවා, කුමන බ්ලොක් වෙනස් වී ඇත්දැයි තේරුම් ගෙන, ඩෙල්ටා ගොනු සම්පාදනය කරමු.
ඩෙල්ටා ගොනුවක් WAL ගොනු පරාසයක් විස්තර කරයි, එම පරාසය තුළ කුමන බ්ලොක් වෙනස් කර ඇත්ද යන්න විස්තර කරයි. මෙම ඩෙල්ටා ගොනු ද සංරක්ෂණය කරනු ලැබේ.

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

එහි ප්රතිඵලයක් ලෙස, අපට තේරුම්ගත නොහැකි කොටස් _delta_partial ගොනු තුළ ගබඩා කිරීමට සිදු විය. අවසානයේදී, අපි අතීතයට ආපසු යන විට, අපි WAL වාර්තා කොටස් එකකට ඒකාබද්ධ කර, පසුව එය විග්රහ කර වෙනස් වූ දේ තේරුම් ගනිමු.
අපගේ විග්රහ ඉතිහාසයේ අවම වශයෙන් එක් කරුණක් හෝ අපට සිදුවූයේ කුමක්දැයි නොතේරෙන්නේ නම්, ඒ අනුව, ඊළඟ උපස්ථයේදී අපට සාමාන්ය LSN-පාදක ඩෙල්ටා සමඟ කළ ආකාරයටම, සම්පූර්ණ පොකුර නැවත කියවීමට බල කෙරෙනු ඇත.

අවසානයේ, අපගේ සියලු දුක් වේදනා අපව WAL-G විග්රහ පුස්තකාලය විවෘත මූලාශ්ර කිරීමට යොමු කළේය. මා දන්නා පරිදි, කිසිවෙකු තවමත් එය භාවිතා නොකරයි, නමුත් යමෙකුට අවශ්ය නම්, එය ලිවීමට සහ භාවිතා කිරීමට නිදහස් වන්න; එය විවෘත මූලාශ්රයකි. (යාවත්කාලීන කළ සබැඳිය) )

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

ග්රැෆ් මඟින් දේවල් බොහෝ සරලව පෙනෙනවා. මෙය අපගේ සැබෑ පොකුරු වලින් එකකින් බාගත කිරීමකි. අපට එදිනම සාදන ලද LSN-පාදක උපස්ථයක් ඇත. තවද LSN-පාදක ඩෙල්ටා උපස්ථය අලුයම 3:00 සිට අලුයම 5:00 දක්වා සිදු වූ බව අපට පෙනේ. සකසන මධ්යයන් අනුව මෙය පැටවීමයි. WAL ඩෙල්ටා උපස්ථයට මිනිත්තු 20 ක් පමණ ගත විය. එබැවින්, එය සැලකිය යුතු ලෙස වේගවත් විය, නමුත් වඩාත් තීව්ර ජාල ගමනාගමනය ද ඇතුළත් විය.

දත්ත සමුදා ඉතිහාසයේ කුමන බ්ලොක් වෙනස් කළේද සහ කුමන වේලාවකද යන්න පිළිබඳ තොරතුරු අප සතුව ඇති බැවින්, අපි තවත් ඉදිරියට ගොස් ක්රියාකාරීත්වය ඒකාබද්ධ කිරීමට තීරණය කළෙමු - “pg_prefaulter” ලෙස හඳුන්වන PostgreSQL දිගුවක්.

මෙයින් අදහස් කරන්නේ ස්ටෑන්ඩ්බයි එකේ ඇති දත්ත සමුදායක් ප්රතිසාධන විධානයක් ක්රියාත්මක කරන විට, එය ඊළඟ WAL ගොනුව ලබා ගැනීමට WAL-G ට පවසන බවයි. WAL ප්රතිසාධන ක්රියාවලිය ඊළඟට ප්රවේශ වන්නේ කුමන දත්ත අවහිර කරන්නේද යන්න සහ එම බ්ලොක් වලට කියවීමේ මෙහෙයුමක් ආරම්භ කරන්නේද යන්න පිළිබඳව අපට දළ අදහසක් ඇත. මෙය සිදු කරනු ලබන්නේ SSD පාලකවල ක්රියාකාරිත්වය වැඩි දියුණු කිරීම සඳහා ය. WAL පෙරළීම වෙනස් කළ යුතු පිටුවකට ළඟා වන බැවිනි. මෙම පිටුව පිටු හැඹිලියේ නොව තැටියේ ඇත. පිටු හැඹිලිය මෙම පිටුව පැමිණෙන තෙක් සමමුහුර්තව බලා සිටිනු ඇත. නමුත් WAL-G අසල ඇත, ඉදිරි මෙගාබයිට් සිය ගණනක WAL තුළ අපට ඇතැම් පිටු අවශ්ය වන බව දැන ඒවා සමාන්තරව උණුසුම් කිරීමට පටන් ගනී. එය සමාන්තරව ක්රියාත්මක කළ හැකි වන පරිදි බහු තැටි ප්රවේශයන් ආරම්භ කරයි. මෙය SSD ධාවකවල හොඳින් ක්රියා කරයි, නමුත් අවාසනාවකට මෙන්, එය දෘඪ තැටියක් සඳහා සම්පූර්ණයෙන්ම නුසුදුසුය, මන්ද අපි එයට බාධා කරන්නේ අපගේ ඉඟි සමඟ පමණි.
දැන් කේතයේ තියෙන්නේ මේකයි.

අපි එකතු කිරීමට කැමති විශේෂාංග තිබේ.

මෙම රූපයෙන් දැක්වෙන්නේ WAL-ඩෙල්ටා සඳහා සාපේක්ෂව කෙටි කාලයක් ගත වන බවයි. මෙය දිනක් පුරා දත්ත සමුදායේ සිදු වූ වෙනස්කම් කියවීමකි. අපට WAL-ඩෙල්ටා රාත්රියේදී පමණක් නොව ක්රියාත්මක කළ හැකිය, මන්ද එය තවදුරටත් සැලකිය යුතු බරක් පැටවීමේ ප්රභවයක් නොවන බැවිනි. එය මිල අඩු බැවින් අපට සෑම මිනිත්තුවකම WAL-ඩෙල්ටා කියවිය හැකිය. එක් මිනිත්තුවකින්, අපට පොකුරේ සිදුවී ඇති සියලුම වෙනස්කම් පරිලෝකනය කළ හැකිය. මෙය "ක්ෂණික WAL-ඩෙල්ටා" ලෙස හැඳින්විය හැක.

කාරණය වන්නේ පොකුරක් ප්රතිස්ථාපනය කිරීමේදී අපට අනුක්රමිකව නැවත ධාවනය කිරීමට සිදුවන ඉතිහාස ප්රමාණය අඩු කිරීමයි. මෙයින් අදහස් කරන්නේ PostgreSQL නැවත ධාවනය කරන WAL ප්රමාණය අඩු කළ යුතු බවයි, මන්ද මේ සඳහා සැලකිය යුතු කාලයක් ගතවේ.
නමුත් එපමණක් නොවේ. උපස්ථය අනුකූලතාවයට පැමිණීමට පෙර බ්ලොක් එකක් වෙනස් වන බව අපි දන්නේ නම්, අපට එය නොවෙනස්ව තැබිය හැකිය. මෙයින් අදහස් කරන්නේ අපට දැන් ගොනුවකට WAL-delta rollforward ප්රශස්තිකරණය ඇති බවයි. මෙයින් අදහස් කරන්නේ, උදාහරණයක් ලෙස, අඟහරුවාදා වගුවක් සම්පූර්ණයෙන්ම මකා දැමුවහොත් හෝ සමහර ගොනු වගුවකින් සම්පූර්ණයෙන්ම මකා දැමුවහොත්, සඳුදා අපි ඩෙල්ටා ඉදිරියට පෙරළා සෙනසුරාදා pg_basebackup ප්රතිස්ථාපනය කරන විට, අපි එම දත්ත පවා නිර්මාණය නොකරන බවයි.
අපට මෙම තාක්ෂණය පිටු මට්ටම දක්වා ව්යාප්ත කිරීමට අවශ්යයි. එනම්, ගොනුවක යම් කොටසක් සඳුදා වෙනස් වී බදාදා නැවත ලියනු ලැබුවහොත්, බ්රහස්පතින්දා ස්ථානයකට ප්රතිස්ථාපනය කරන විට, අපට පළමු පිටු අනුවාද කිහිපය තැටියට ලිවීමට අවශ්ය නොවේ.
නමුත් මෙය තවමත් අභ්යන්තරව ක්රියාකාරීව සාකච්ඡා කෙරෙන අදහසක්, නමුත් අපි තවමත් කේත අදියරට ළඟා වී නොමැත.

WAL-G සඳහා තවත් විශේෂාංගයක් එක් කිරීමට අපට අවශ්යයි. අපට විවිධ දත්ත සමුදායන් සඳහා සහාය වීමට අවශ්ය වන අතර උපස්ථ ස්ථාවර ආකාරයකින් කළමනාකරණය කිරීමට හැකි වීමට අවශ්ය නිසා අපට එය විස්තාරණය කළ හැකි කිරීමට අවශ්යයි. නමුත් ගැටළුව වන්නේ MySQL API රැඩිකල් ලෙස වෙනස් වීමයි. MySQL හි PITR භෞතික WAL ලොගය මත නොව බින්ලොගය මත පදනම් වේ. තවද මෙම බින්ලොගය සම්පූර්ණ බවත් එය සංරක්ෂණය කළ යුතු බවත් බාහිර පද්ධතියකට පවසන සංරක්ෂිත පද්ධතියක් අපට MySQL හි නොමැත. අපි දත්ත සමුදාය සමඟ කොහේ හරි ක්රෝන් කාර්යයක් ක්රියාත්මක කර සූදානම් යමක් තිබේදැයි පරීක්ෂා කළ යුතුය.
ඒ හා සමානව, MySQL ප්රතිස්ථාපනය කිරීමේදී, පද්ධතියට "මට එවැනි ගොනු අවශ්යයි" යැයි පැවසිය හැකි ප්රතිස්ථාපන විධානයක් නොමැත. පොකුර ප්රතිස්ථාපනය කිරීමට පෙර, ඔබට අවශ්ය ගොනු මොනවාදැයි ඔබ දැනගත යුතුය. ඔබට අවශ්ය ගොනු මොනවාදැයි ඔබ සොයා ගත යුතුය. නමුත් මෙම ගැටළු නිරාකරණය කර ගැනීමට හැකි විය හැකිය. (සටහන: MySQL දැනටමත් සහය දක්වයි.)

වාර්තාවේ, WAL-G ඔබට සුදුසු නොවන අවස්ථා ගැනද කතා කිරීමට මට අවශ්ය විය.

ඔබට සමමුහුර්ත අනුරුවක් නොමැති නම්, WAL-G අවසාන කොටසේ ආරක්ෂාව සහතික නොකරයි. තවද ලේඛනාගාරය ඉතිහාසයේ අවසාන කොටස් කිහිපයට වඩා පසුගාමී නම්, එය අවදානමකි. සමමුහුර්ත අනුරුවක් නොමැතිව, මම WAL-G භාවිතා කිරීම නිර්දේශ නොකරමි. සියල්ලට පසු, එය ප්රධාන වශයෙන් නිර්මාණය කර ඇත්තේ වලාකුළු ස්ථාපනයන් සඳහා වන අතර, ඒවාට සමමුහුර්ත අනුරුවක් සහිත ඉහළ ලබා ගත හැකි විසඳුමක් අවශ්ය වන අතර, එය අවසන් වරට කැපවූ බයිට් සංරක්ෂණය කිරීම සඳහා වගකිව යුතුය.

WAL-G සහ WAL-E දෙකම එකවර සූරාකෑමට උත්සාහ කරන පුද්ගලයින් මම බොහෝ විට දකිමි. WAL-G හට WAL-E උපස්ථයක් ප්රතිසාධනය කළ හැකි අතර WAL-E උපස්ථයක් ප්රතිසාධනය කළ හැකිය යන අර්ථයෙන් අපි පසුගාමී අනුකූලතාව පවත්වා ගනිමු. නමුත් පද්ධති දෙකම සමාන්තර wal-push භාවිතා කරන බැවින්, ඔවුන් එකිනෙකාගෙන් ගොනු සොරකම් කිරීමට පටන් ගනී. අපි මෙය WAL-G හි නිවැරදි කළත්, එය තවමත් WAL-E හි පවතිනු ඇත. WAL-E ලේඛනාගාර තත්ත්වය දෙස බලයි, සූදානම් ගොනු දකී, සහ ඒවා සංරක්ෂණය කරයි. PostgreSQL දෙවන වරටත් එය සංරක්ෂණය කිරීමට උත්සාහ නොකරන බැවින්, මෙම WAL ගොනුව පවතින බව අනෙකුත් පද්ධති නොදැන සිටියි.
WAL-G පැත්තෙන් අපි මෙතන මොනවද හදන්නේ? අපි PostgreSQL එකට මේ ගොනුව සමාන්තරව මකා දැමූ බව නොකියන අතර, PostgreSQL එය සංරක්ෂණය කරන ලෙස අපෙන් ඉල්ලා සිටින විට, මෙම මාදිලියේ කාලය සහ මෙම md5 සහිත මෙම ගොනුව දැනටමත් සංරක්ෂණය කර ඇති බව අපි දැනටමත් දනිමු, එබැවින් අපි කිසිවක් නොකර PostgreSQL ට "හරි, අපි ඉවරයි" යැයි සරලව කියමු.
නමුත් WAL-E පැත්තේ මෙම ගැටළුව විසඳා ගැනීමට අපහසුය, එබැවින් WAL-G සහ WAL-E යන දෙකෙහිම ගොනුවක් සංරක්ෂණය කරන සංරක්ෂිත විධානයක් නිර්මාණය කිරීම දැනට කළ නොහැක්කකි.
තවද, WAL-G දැන් ඔබට සුදුසු නොවන අවස්ථා තිබේ, නමුත් අපි එය නිසැකවම නිවැරදි කරන්නෙමු.
පළමුවෙන්ම, අපට දැනට බිල්ට්-ඉන් උපස්ථ සත්යාපනයක් නොමැත. උපස්ථ කිරීමේදී හෝ ප්රතිසාධනය කිරීමේදී අපි එය සත්යාපනය නොකරමු. ඇත්ත වශයෙන්ම, මෙය වලාකුළෙහි ක්රියාත්මක වේ. නමුත් එය ක්රියාත්මක කරනු ලබන්නේ හුදෙක් පූර්ව-පරීක්ෂා කිරීමෙන් සහ පොකුර ප්රතිසාධනය කිරීමෙන් පමණි. අපි පරිශීලකයින්ට මෙම ක්රියාකාරිත්වය ලබා දීමට කැමතියි. නමුත් සත්යාපනය මගින්, WAL-G හට පොකුර ප්රතිසාධනය කිරීමට, එය ආරම්භ කිරීමට සහ දුම් පරීක්ෂණ ක්රියාත්මක කිරීමට හැකි වනු ඇතැයි මම සිතමි: pg_dumpall /dev/null වෙත සහ දර්ශක සත්යාපනය කිරීමට amcheck.

දැනට, WAL-G හට එක WAL උපස්ථයක් කල් දැමීමට හැකියාවක් නැත. එනම්, අපි යම් කවුළුවකට සහය දක්වමු. උදාහරණයක් ලෙස, අවසාන දින හත තබා ගැනීම, අවසාන උපස්ථ දහය තබා ගැනීම, අවසාන සම්පූර්ණ උපස්ථ තුන තබා ගැනීම. බොහෝ විට, මිනිසුන් පැමිණ පවසන්නේ, "අලුත් අවුරුදු උදාවේ සිදු වූ දේ පිළිබඳ උපස්ථයක් අපට අවශ්ය වන අතර අපට එය සදහටම තබා ගැනීමට අවශ්යයි" යනුවෙනි. WAL-G තවමත් මෙයට සහය නොදක්වයි. (සටහන: මෙය දැනටමත් නිවැරදි කර ඇත. වැඩි විස්තර සඳහා, උපස්ථ-සලකුණු විකල්පය බලන්න )

තවද PITR වලංගුකරණයේදී සියලුම පතුවළ කොටස්වල පිටු චෙක්සම් සත්යාපනය හෝ අඛණ්ඩතා සත්යාපනය අප සතුව නොමැත.

මේ සියලු තොරතුරු භාවිතා කර Google Summer of Code සඳහා ව්යාපෘතියක් මම සකස් කළා. Go හි යමක් කේතනය කර G-සමාගමකින් ඩොලර් දහස් ගණනක් උපයා ගැනීමට කැමති දක්ෂ සිසුන් ඔබ දන්නවා නම්, කරුණාකර අපගේ ව්යාපෘතිය ඔවුන්ට නිර්දේශ කරන්න. මම ව්යාපෘතිය මෙහෙයවන්නම්, එවිට ඔවුන්ට එය සැබෑ කර ගැනීමට හැකි වනු ඇත. අපට සිසුන් නොමැති නම්, මෙම ගිම්හානයේදී මම එය තනිවම කරන්නෙමි.

ඒ වගේම අපි ක්රමයෙන් විසඳා ගැනීමට කටයුතු කරමින් සිටින තවත් බොහෝ සුළු ගැටළු තිබෙනවා. ඒ වගේම අපි තරමක් අමුතු දේවල් වලට මුහුණ දෙනවා.
උදාහරණයක් ලෙස, ඔබ WAL-G හිස් උපස්ථයක් ලබා දුන්නොත්, එය සරලවම බිඳ වැටෙනු ඇත. උදාහරණයක් ලෙස, ඔබ එයට හිස් ෆෝල්ඩරයක් උපස්ථ කිරීමට පැවසුවහොත්, එහි pg_control ගොනුවක් නොතිබෙනු ඇත. තවද එය යමක් තේරුම් නොගන්නා බව සිතනු ඇත. ඉතා මැනවින්, මෙම අවස්ථාවේදී, මෙවලම භාවිතා කරන ආකාරය පැහැදිලි කරමින් ඔබ පරිශීලකයාට නිසි පණිවිඩයක් ලිවිය යුතුය. නමුත් මෙය ක්රමලේඛනයේ විශේෂාංගයක් පවා නොවේ, නමුත් හොඳ, ප්රවේශ විය හැකි භාෂාවක විශේෂාංගයකි.
අපට නොබැඳි උපස්ථ හැකියාවන් නොමැත. දත්ත සමුදාය ක්රියා විරහිත නම්, අපට එය උපස්ථ කළ නොහැක. නමුත් එය ඉතා සරලයි. අපි උපස්ථ නම් කරන්නේ ඒවා ආරම්භ කරන ලද LSN අනුව ය. පහළට යොමු දත්ත සමුදායේ LSN පාලන ගොනුවෙන් කියවිය යුතුය. මෙය ක්රියාත්මක නොකළ විශේෂාංගයකි. බොහෝ උපස්ථ පද්ධතිවලට පහළට යොමු දත්ත සමුදායක් උපස්ථ කළ හැකිය. එය පහසුය.
අපි දැනට ප්රමාණවත් උපස්ථ ඉඩක් නිසි ලෙස හසුරුවන්නේ නැහැ. ඒ අපි සාමාන්යයෙන් විශාල උපස්ථ සමඟ වැඩ කරන නිසා. අපි තවම ඒකට හුරු වෙලා නැහැ. නමුත් කවුරුහරි දැන්ම Go හි වැඩසටහන්ගත කිරීමට කැමති නම්, කරුණාකර ප්රමාණවත් නොවන බකට් ඉඩ දෝෂ හැසිරවීම එක් කරන්න. මම අනිවාර්යයෙන්ම ඇදීමේ ඉල්ලීම පරීක්ෂා කරන්නම්.
අපට සැලකිලිමත් වන ප්රධානතම දෙය නම්, විවිධ අවස්ථා පරීක්ෂා කරන හැකි තරම් Docker ඒකාබද්ධ කිරීමේ පරීක්ෂණ අපට අවශ්ය වීමයි. දැනට, අපි සෑම commit එකකම මූලික අවස්ථා පමණක් පරීක්ෂා කරමු, නමුත් අපි commit by commit සඳහා සහාය දක්වන සියලුම ක්රියාකාරීත්වයන් පරීක්ෂා කිරීමට අපට අවශ්යයි. විශේෂයෙන්, උදාහරණයක් ලෙස, අපට PostgreSQL 9.4-9.5 සඳහා සහාය නොමැත. ප්රජාව PostgreSQL සඳහා සහය දක්වන නිසා අපි ඒවාට සහාය දෙමු, නමුත් සියල්ල තවමත් ක්රියාත්මක වන බව තහවුරු කරමින් commit මගින් අපි කැප නොවෙමු. මෙය තරමක් බරපතල අවදානමක් යැයි මම සිතමි.

අපි Yandex දත්ත සමුදා කළමනාකරණයේ පොකුරු දහසකට වඩා WAL-G ක්රියාත්මක කරන අතර, දිනකට ටෙරාබයිට් සිය ගණනක් දත්ත උපස්ථ කරමු.
අපේ කේතයේ TODO ගොඩක් තියෙනවා. ඔබ ක්රමලේඛනය ගැන උනන්දුවක් දක්වන්නේ නම්, අප හා එක්වන්න. අපි ඇදීමේ ඉල්ලීම් සහ ප්රශ්න එනතුරු බලා සිටිමු.

ඔබගේ ප්රශ්න
සුභ සන්ධ්යාවක්! ස්තූතියි! ඔබ WAL-ඩෙල්ටා භාවිතා කරන්නේ නම්, ඔබ බොහෝ විට සම්පූර්ණ පිටු ලිවීම් මත රඳා පවතිනු ඇතැයි මම සිතමි. එසේ නම්, ඔබ කිසියම් පරීක්ෂණයක් පවත්වා තිබේද? ඔබ හොඳ ප්රස්ථාරයක් පෙන්නුවා. ඔබ FPW අක්රිය කළහොත් එය කොතරම් නරකද?
අපි සම්පූර්ණ පිටු ලිවීම් සක්රීය කර ඇත; අපි එය අක්රිය කිරීමට උත්සාහ කර නැත. එනම්, සංවර්ධකයෙකු ලෙස මම එය අක්රිය කිරීමට උත්සාහ කර නැත. මෙය විමර්ශනය කළ පද්ධති පරිපාලකයින් එසේ කළා විය හැකිය. නමුත් අපට FPW අවශ්යයි. කිසිවෙකු පාහේ එය අක්රිය කරන්නේ නැත, මන්ද එසේ නොමැතිනම් අනුරුවකින් උපස්ථයක් ගැනීමට නොහැකි බැවිනි.
වාර්තාවට ස්තූතියි! මට ප්රශ්න දෙකක් තියෙනවා. පළමුවැන්න මේස අවකාශයන්ට කුමක් සිදුවේද යන්නයි.
අපි pull ඉල්ලීමක් එනකම් බලාගෙන ඉන්නවා. අපේ දත්ත සමුදායන් SSD සහ NMVE ධාවක මත ජීවත් වන අතර, අපට ඇත්තටම මෙම විශේෂාංගය අවශ්ය නොවේ. එය ක්රියාත්මක කිරීමට දැන් සැලකිය යුතු කාලයක් ගත කිරීමට මම සූදානම් නැහැ. මම එයට සහාය දැක්වීමට කැමතියි. සමහර අය එයට සහාය දී ඇත, නමුත් ඔවුන් එයට ගැලපෙන ආකාරයෙන් සහාය දී ඇත. ඔවුන් එය fork කර ඇත, නමුත් ඔවුන් pull ඉල්ලීමක් නොකරයි. (0.2.13 අනුවාදයේ එකතු කර ඇත)
දෙවන ප්රශ්නය. ඔබ ආරම්භයේදීම කිව්වා WAL-G උපකල්පනය කරන්නේ එය තනිවම ක්රියාත්මක වන බවත් එයට එතුම් අවශ්ය නොවන බවත්. මම දවටන භාවිතා කරනවා. මම ඒවා භාවිතා නොකළ යුත්තේ ඇයි?
අපිට ඕන ඒක බලලයිකා වගේ සරල වෙන්න. ඒ කියන්නේ ඔයාට බලලයිකා එකකට වඩා දෙයක් අවශ්ය නැහැ. අපිට ඕන පද්ධතිය සරල වෙන්න. ස්ක්රිප්ට් එකක ක්රියාත්මක කරන්න අවශ්ය ක්රියාකාරීත්වයක් තියෙනවා නම්, අපිට කියන්න - අපි ඒක Go වලින් ක්රියාත්මක කරන්නම්.
සුභ සන්ධ්යාවක්! වාර්තාවට ස්තූතියි! අපට WAL-G GPG විකේතනය සමඟ වැඩ කිරීමට නොහැකි විය. එය හොඳින් සංකේතනය කරයි, නමුත් විකේතනය කිරීම ප්රතික්ෂේප කරයි. අපට යමක් වැරදී තිබේද? තත්වය කණගාටුදායකයි.
GitHub එකේ ගැටලුවක් ඇති කරන්න, අපි ඒක විසඳගමු.
ඉතින් ඔබ මෙයට මුහුණ දී නැද්ද?
WAL-G ගොනුවක් යනු කුමක්දැයි නොතේරෙන විට, එය "සමහර විට එය සංකේතනය කර තිබේද?" යනුවෙන් අසන දෝෂ වාර්තා කිරීමේ ගැටලුවක් තිබේ, එය කිසිසේත්ම සංකේතනය නොවීම විය හැකිය. මට මේ සඳහා ලොග් වීම නිවැරදි කිරීමට අවශ්යයි. එය විකේතනය කළ යුතුය. අපි දැනට මෙම ගැටලුව සම්බන්ධයෙන් කටයුතු කරමින් සිටින්නේ පොදු සහ පෞද්ගලික යතුරු ලබා ගැනීමේ පද්ධතිය සංවිධානය කර ඇති ආකාරය අපට ඇත්තටම අකමැති බැවිනි. එහි යතුරු ලබා ගැනීම සඳහා අපි බාහිර GPG එකක් අමතන නිසා, අපි මෙම යතුරු රැගෙන ඒවා අභ්යන්තර GPG වෙත යවමු, එය PGP විවෘත කරයි, එය WAL-G බවට සම්පාදනය කර ඇත, පසුව අපි සංකේතනය ලෙස හඳුන්වමු. මේ සම්බන්ධයෙන් අපට පද්ධතිය වැඩිදියුණු කිරීමට අවශ්ය වන අතර Libsodium සංකේතනයට සහාය වීමට අවශ්ය වේ (0.2.15 අනුවාදයේ එකතු කර ඇත). ඇත්ත වශයෙන්ම, විකේතනය ක්රියාත්මක විය යුතුය, නමුත් අපි එය සොයා ගනිමු - අපට වචන කිහිපයකට වඩා වැඩි රෝග ලක්ෂණ අවශ්ය වේ. අපට යම් වේලාවක කථිකයාගේ කාමරයට ගොස් පද්ධතිය දෙස බැලිය හැකිය. (බාහිර GPG නොමැතිව PGP සංකේතනය — v0.2.9)
හායි! වාර්තාවට ස්තූතියි! මට ප්රශ්න දෙකක් තියෙනවා. pg_basebackup සහ WAL ලොග් සැපයුම්කරුවන් දෙදෙනෙකුට උපස්ථ කිරීමට මට අමුතු ආශාවක් තියෙනවා—එනම්, මට ඒවා එක් වලාකුළකට සහ තවත් වලාකුළකට උපස්ථ කිරීමට අවශ්යයි. මෙය කිරීමට ක්රමයක් තිබේද?
මෙය දැන් නොපවතී, නමුත් එය සිත්ගන්නා අදහසකි.
මම එක සැපයුම්කරුවෙකු විශ්වාස කරන්නේ නැහැ, ඒ වගේ දෙයක් තවත් සැපයුම්කරුවෙකු සමඟ ලබා ගැනීමට මම කැමතියි.
අදහස සිත්ගන්නා සුළුයි. තාක්ෂණිකව, එය ක්රියාත්මක කිරීම අපහසු නොවනු ඇත. අදහස නැති නොවන බවට වග බලා ගැනීම සඳහා, කරුණාකර GitHub හි ගැටලුවක් නිර්මාණය කළ හැකිද?
ඔව් ඇත්ත වශයෙන්ම.
ඊට පස්සේ, සිසුන් Google Summer of Code වෙත පැමිණෙන විට, අපි ඔවුන්ව ව්යාපෘතියට එකතු කරන්නෙමු, එවිට ඔවුන්ට වැඩිපුර වැඩ කිරීමට සහ ඒවායින් වැඩි ප්රයෝජන ලබා ගැනීමට හැකි වේ.
දෙවන ප්රශ්නය. GitHub එකේ ප්රශ්නයක් තියෙනවා. මම හිතන්නේ ඒක දැනටමත් වසා දමා ඇති. ප්රතිසාධනය අතරතුර භීතියක් ඇති වෙනවා. ඒක නිවැරදි කරන්න, ඔයා වෙනම ගොඩනැගීමක් නිර්මාණය කළා. ඒක ගැටළු වලම තියෙනවා. තනි නූලක පරිසර විචල්යයන් සැකසීමේ විකල්පයත් තියෙනවා. ඒක හරිම සෙමින් වැඩ කරන්නේ ඒ නිසා. අපි මීට පෙර මේ ගැටලුවට මුහුණ දී ඇති අතර, එය තවමත් විසඳා නැහැ.
ගැටළුව වන්නේ කිසියම් හේතුවක් නිසා අපි ඉහළ සමගාමී අනුපාතයකින් එයට ප්රවේශ වන විට ගබඩාව (CEPH) සම්බන්ධතාවය අතහැර දැමීමයි. මේ ගැන අපට කුමක් කළ හැකිද? නැවත උත්සාහ කිරීමේ තර්කය පහත පරිදි වේ: අපි නැවත ගොනුවක් බාගත කිරීමට උත්සාහ කරමු. එක් අවසර පත්රයකින් නිශ්චිත ගොනු සංඛ්යාවක් බාගත කර නොමැති නම්, එයට ප්රවේශ නොවූ සියල්ල සඳහා අපි දෙවන අවසර පත්රයක් සාදන්නෙමු. පුනරාවර්තනයකට අවම වශයෙන් එක් ගොනුවක් බාගත කරන තාක් කල්, අපි නැවත නැවත කරන්නෙමු, නැවත කරන්නෙමු, නැවත කරන්නෙමු. අපි නැවත උත්සාහ කිරීමේ තර්කනය පිරිපහදු කරමින් සිටිමු - ඝාතීය පසුබෑම. නමුත් ගබඩා පද්ධතිය මගින් සම්බන්ධතාවය සරලව අතහැර දැමීම ගැන කුමක් කළ යුතුද යන්න සම්පූර්ණයෙන්ම පැහැදිලි නැත. එනම්, අපි එක් නූලකින් උඩුගත කරන විට, එය මෙම සම්බන්ධතා අතහැර දමන්නේ නැත. අපට මෙහි වැඩිදියුණු කළ හැක්කේ කුමක්ද? අපට ජාල තෙරපුම තිබේ; අපට එක් එක් සම්බන්ධතාවය එය යවන බයිට් ගණන අනුව සීමා කළ හැකිය. එසේ නොමැතිනම්, වස්තු ගබඩාව අපට සමාන්තරව උඩුගත කිරීමට හෝ බාගත කිරීමට ඉඩ නොදෙන කාරණය සමඟ කටයුතු කරන්නේ කෙසේදැයි මම නොදනිමි.
SLA එකක් නැද්ද? එයාලට වධ හිංසා කරන්න ඉඩ දෙන විදිහ ගැන විස්තරයක් නැද්ද?
කාරණය නම්, මෙම ප්රශ්නය සමඟ මා වෙත පැමිණෙන පුද්ගලයින්ට සාමාන්යයෙන් තමන්ගේම ගබඩාවක් තිබීමයි. එබැවින්, කිසිවෙකු Amazon, Google Cloud හෝ Yandex Object Storage වෙතින් පැමිණෙන්නේ නැත.
සමහරවිට ප්රශ්නය තවදුරටත් ඔබට යොමු නොවන්නේද?
මේ අවස්ථාවේදී, ප්රශ්නය කාටද වැදගත් වෙන්නේ නැහැ. මෙය ආමන්ත්රණය කරන්නේ කෙසේද යන්න පිළිබඳ කිසියම් අදහසක් තිබේ නම්, අපි එය WAL-G හි කරමු. නමුත් මෙතෙක්, මෙය ආමන්ත්රණය කරන්නේ කෙසේද යන්න පිළිබඳව මට හොඳ අදහස් නොමැත. උපස්ථ ලැයිස්තුගත කිරීම වෙනස් ලෙස හසුරුවන සමහර වස්තු ගබඩා සේවා තිබේ. ඔබ ඔවුන්ගෙන් වස්තූන් ලැයිස්තුගත කරන ලෙස ඉල්ලා සිටින අතර, ඔවුන් ෆෝල්ඩරයක් එක් කරයි. WAL-G බියට පත් වේ - මෙහි ගොනුවක් නොවන දෙයක් තිබේ, මට එය ප්රතිසාධනය කළ නොහැක, එබැවින් උපස්ථය ප්රතිසාධනය කර නැත. ඉතින්, යථාර්ථයේ දී, ඔබට සම්පූර්ණයෙන්ම ප්රතිසාධනය කරන ලද පොකුරක් ඇත, නමුත් එය දෝෂ තත්වයක් ආපසු ලබා දෙන්නේ වස්තු ගබඩා කිරීම එය සම්පූර්ණයෙන්ම තේරුම් නොගත් අමුතු තොරතුරු කිහිපයක් ලබා දුන් බැවිනි.
මෙය සිදුවන්නේ තැපැල් වලාකුළෙහි ය.
ප්රතිනිෂ්පාදනයක් ගොඩනගා ගැනීමට හැකි නම්...
එය අඛණ්ඩව ප්රතිනිෂ්පාදනය කළ හැකිය...
රෙප්රො එකක් තියෙනවා නම්, මම හිතන්නේ අපි නැවත උත්සාහ කිරීමේ උපාය මාර්ග අත්හදා බලලා නැවත උත්සාහ කරන්නේ කොහොමද කියලා හොයාගෙන වලාකුළට අපෙන් අවශ්ය දේ තේරුම් ගනිමු. සමහර විට එය සම්බන්ධතා තුනක් සමඟ විශ්වාසදායක ලෙස සම්බන්ධතාවය අතහැර නොයනු ඇත, එබැවින් අපි එය තුන දක්වා ප්රවේශමෙන් වැඩි කරමු. දැන්, අපි සම්බන්ධතාවය ඉතා ඉක්මනින් අතහැර දමමු, එනම් මම 16-නූල් ප්රතිසාධනයක් ක්රියාත්මක කළහොත්, පළමු නැවත උත්සාහයෙන් පසු, නූල් අටක්, නූල් හතරක්, නූල් දෙකක් සහ එකක් ඇත. ඉන්පසු එය ගොනු එකින් එක තනි නූල් එකකට ඇද දමයි. බාගැනීම් සඳහා නූල් 7,5 හොඳම වැනි මැජික් අගයන් තිබේ නම්, අපි ඒවා සමඟ රැඳී සිටිමින් තවත් නූල් 7,5 ක් ධාවනය කිරීමට උත්සාහ කරමු. ඒක තමයි අදහස.
වාර්තාවට ස්තූතියි! WAL-G සඳහා සම්පූර්ණ වැඩ ප්රවාහය කෙබඳුද? උදාහරණයක් ලෙස, පිටුවකට ඩෙල්ටා දත්ත නොමැති මෝඩ අවස්ථාවක. අපි මූලික උපස්ථයක් ගෙන, පසුව මුහුණේ නිල් පැහැයට හැරෙන තුරු මුළු පරිමාවම සංරක්ෂණය කරමු. මට තේරෙන පරිදි, මෙහි බිඳවැටීමක් තිබේ. යම් අවස්ථාවක දී, පිටු වල ඩෙල්ටා උපස්ථයක් සෑදිය යුතුය. කිසියම් බාහිර ක්රියාවලියක් මෙය මෙහෙයවන්නේද, නැතහොත් මෙය සිදුවන්නේ කෙසේද?
ඩෙල්ටා උපස්ථ API එක හරිම සරලයි. සංඛ්යාවක් තියෙනවා—උපරිම ඩෙල්ටා පියවර, මම හිතන්නේ ඒක තමයි ඒකට කියන්නේ. පෙරනිමියෙන්, එය ශුන්යයි. මෙයින් අදහස් කරන්නේ ඔබ උපස්ථයක් තල්ලු කරන සෑම අවස්ථාවකම, එය සම්පූර්ණ උපස්ථයක් උඩුගත කරන බවයි. ඔබ එය 3 වැනි ඕනෑම ධන අංකයකට වෙනස් කළහොත්, ඊළඟ වතාවේ ඔබ උපස්ථයක් තල්ලු කරන විට, එය පෙර උපස්ථවල ඉතිහාසය දෙස බලයි. ඔබ 3-ඩෙල්ටා දාමය ඉක්මවා ගොස් නැති බව එය දකින අතර ඩෙල්ටාවක් නිර්මාණය කරයි.
ඉතින් අපි WAL-G ධාවනය කරන සෑම අවස්ථාවකම, එය සම්පූර්ණ උපස්ථයක් සෑදීමට උත්සාහ කරනවාද?
නැහැ, අපි WAL-G ක්රියාත්මක කරනවා, ඔබේ ප්රතිපත්ති එයට ඉඩ දුන්නොත් එය ඩෙල්ටාවක් සෑදීමට උත්සාහ කරනවා.
දළ වශයෙන් කිවහොත්, ඔබ එය සෑම විටම බිංදුව සමඟ ක්රියාත්මක කළහොත්, එය pg_basebackup මෙන් ක්රියා කරයිද?
නැහැ, එය සම්පීඩනය සහ සමාන්තරකරණය භාවිතා කරන නිසා එය තවමත් වේගයෙන් ක්රියා කරයි. Pg_basebackup ඔබට තල්ලුවක් ලබා දෙනු ඇත. WAL-G උපකල්පනය කරන්නේ ඔබ සංරක්ෂිතකරණය වින්යාස කර ඇති බවත් එය එසේ නොවේ නම් අනතුරු ඇඟවීමක් නිකුත් කරන බවත්ය.
Pg_basebackup පතුවළක් නොමැතිව ධාවනය කළ හැක.
ඔව්, එවිට ඒවා බොහෝ දුරට සමාන ලෙස ක්රියා කරනු ඇත. Pg_basebackup ගොනු පද්ධතියට පිටපත් කරයි. මාර්ගය වන විට, අපට සඳහන් කිරීමට අමතක වූ නව විශේෂාංගයක් තිබේ. අපට දැන් pg_basebackup සිට ගොනු පද්ධතියට උපස්ථ කළ හැකිය. මෙය අවශ්ය වන්නේ මන්දැයි මම නොදනිමි, නමුත් එය තිබේ.
උදාහරණයක් ලෙස, CephFS මත. සෑම කෙනෙකුටම Object Storage වින්යාස කිරීමට අවශ්ය නොවේ.
ඔව්, ඒ නිසා වෙන්න ඇති මේ විශේෂාංගය ගැන එයාලා ඇහුවේ, ඒ නිසා අපිට ඒක ක්රියාත්මක කරන්න පුළුවන් වුණා. අපි එහෙම කළා.
වාර්තාවට ස්තූතියි! ගොනු පද්ධතියකට පිටපත් කිරීම පිළිබඳව මට ප්රශ්නයක් තිබෙනවා. ඔබ දැනට දත්ත මධ්යස්ථානයක රාක්කයක් වැනි දුරස්ථ ගබඩාවකට පිටපත් කිරීමට සහාය දක්වනවාද?
මේ ආකාරයෙන් ප්රකාශ කළහොත්, එය දුෂ්කර ප්රශ්නයකි. ඔව්, අපි එයට සහාය දෙමු, නමුත් මෙම ක්රියාකාරීත්වය තවමත් කිසිදු නිකුතුවකට ඇතුළත් කර නොමැත. එනම්, සියලුම පූර්ව නිකුතු එයට සහය දක්වයි, නමුත් අවසාන අනුවාද එයට සහාය නොදක්වයි. මෙම ක්රියාකාරීත්වය 0.2 අනුවාදයේ එකතු කරන ලදී. අපි දන්නා සියලු දෝෂ නිවැරදි කළ පසු, එය නිසැකවම ඉක්මනින් අවසාන නිකුතුවේ ඇති වනු ඇත. නමුත් දැනට, එය කළ හැක්කේ පූර්ව නිකුතුවේ පමණි. පූර්ව නිකුතුවේ දෝෂ දෙකක් ඇත: WAL-E ප්රතිසාධනය සමඟ ගැටළුවක්, එය අප විසින් නිවැරදි කර නොමැත. නවතම පූර්ව නිකුතුවේ ඩෙල්ටා උපස්ථය සම්බන්ධයෙන් දෝෂයක් එක් කරන ලදී. එබැවින්, අපි සෑම කෙනෙකුටම අවසාන අනුවාද භාවිතා කිරීමට නිර්දේශ කරමු. පූර්ව නිකුතුව දෝෂ රහිත වූ පසු, අපි Google Cloud, S3-අනුකූල විශේෂාංග සහ ගොනු ගබඩාවට සහාය දක්වන බව අපට පැවසිය හැකිය.
හායි, වාර්තාවට ස්තූතියි. මට තේරෙන විදියට, WAL-G කියන්නේ බාර්ටෙන්ඩර් වගේ මධ්යගත පද්ධතියක් නෙවෙයි. ඔයා ඒ පැත්තට යන්න සැලසුම් කරනවද?
ගැටලුව වන්නේ අපි එම දිශාවෙන් ඈත් වී සිටීමයි. WAL-G දත්ත සමුදා සත්කාරකයේ, පොකුරු සත්කාරකයේ සහ සියලුම පොකුරු සත්කාරක මත පිහිටා ඇත. අපි පොකුරු දහස් ගණනකට මාරු වූ විට, අපට බොහෝ බාර්ටෙන්ඩර් ස්ථාපනයන් තිබුණි. ඒවායේ යමක් කැඩී යන සෑම අවස්ථාවකම එය විශාල ගැටළුවක්. ඒවා අලුත්වැඩියා කළ යුතු නිසා, සහ තවදුරටත් උපස්ථ නොමැති පොකුරු මොනවාදැයි අපට සොයා ගැනීමට අවශ්ය වේ. භෞතික දෘඪාංග උපස්ථ පද්ධති සඳහා WAL-G සංවර්ධනය කිරීමට මම සැලසුම් නොකරමි. ප්රජාවට මෙහි යම් ක්රියාකාරීත්වයක් අවශ්ය නම්, මම කිසිසේත්ම විරුද්ධ නොවෙමි.
ගබඩා කිරීම සඳහා අපට වගකිව යුතු කණ්ඩායම් ඇත. තවද අපගේ ලිපිගොනු ආරක්ෂිතව තබන කැපවූ පුද්ගලයින් සිටීම ගැන අපි එතරම් සතුටු නොවෙමු. යම් ගොනු සංඛ්යාවක අලාභයට ඔරොත්තු දීම සඳහා ඔවුන් සියලු ආකාරයේ දක්ෂ කේතීකරණ සිදු කරයි. ජාල ප්රතිදානය සඳහා ඔවුන් වගකිව යුතුය. ඔබට බාර්ටෙන්ඩර් කෙනෙකු සිටින විට, ඔබට හදිසියේම එකම සේවාදායකයක විශාල තදබදයක් සහිත කුඩා දත්ත සමුදායන් ඇති බව ඔබට පෙනී යා හැකිය. ඔබට ටොන් ගණනක් ඉඩ ඇති බව පෙනේ, නමුත් කෙසේ හෝ ජාලයට ඒ සියල්ල හැසිරවිය නොහැක. එය අනෙක් අතට විය හැකිය. ජාල ඉඩ ගොඩක් තිබේ, සකසන මධ්යයන් ඇත, නමුත් තැටි අවසන් වෙමින් පවතී. සියල්ල හසුරුවා ගැනීමේ මෙම අවශ්යතාවය අපට වෙහෙසට පත් විය, එබැවින් අපි දත්ත ගබඩා කිරීම කැපවූ පුද්ගලයින් විසින් කළමනාකරණය කරන වෙනම සේවාවක් බවට පත් කිරීමට මාරු විය.
ප.ලි. නව අනුවාදයක් නිකුත් කර ඇත. , එය ඔබට .walg.json වින්යාස ගොනුව භාවිතා කිරීමට ඉඩ සලසයි, එය පෙරනිමියෙන් Postgres නිවාස නාමාවලියෙහි පිහිටා ඇත. ඔබට bash ස්ක්රිප්ට් භාවිතා කිරීමෙන් වැළකී සිටිය හැක. උදාහරණයක් ලෙස .walg.json ගොනුව මෙම ගැටලුවේ ඇත.
වීඩියෝ:

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