ශ්‍රී ලංකාවේ නවතම තාක්ෂණික පුවත් 2026-07-26, Sunday
💻 ක්‍රමලේඛනය · 🕒 කියවීමට විනාඩි 2 · 👁 1

TTL සමඟ ලොක් කාලය අවසන් වුවත් දත්ත නස්ති වීමේ අවදානම – ෆෙන්සිං ටෝකන් විසඳුම

TTL සමඟ ලොක් කාලය අවසන් වුවත් දත්ත නස්ති වීමේ අවදානම – ෆෙන්සිං ටෝකන් විසඳුම

සමකාලීනව වැඩ කරන සේවා එකක, දෙදෙනාම එකම සම්පතකට ප්‍රවේශය ලැබීමට උත්සාහ කරනවා කියලා හිතන්න. එක සේවාදායකයා 10 තත්පර කාලයක් ඇති ලොක් එක ගත්තා, එතැනින් 12 තත්පර තාවකාලිකව නතර වෙලා, ලොක් කාලය ඉවර වුනා. ඒ අතරතුර, දෙවන සේවාදායකයා එකම ලොක් එක ගත්තා, වෙනස්කම් සම්පූර්ණ කරලා සුරකිලා. පළමු සේවාදායකයා නැවත ක්‍රියාත්මක වුනාම, ඔහුගේ පරණ ලියුම දෙවනගේ ලියුම මත අතිරේකව ලියයි. මෙය ලොක් සේවාව කෙලවරක් ගත නොවෙයි; එය ලොක් කාලය (TTL) නිසා සිදුවෙයි.

මෙවැනි සිදුවීමේ පසුබැසීම “ලීස්” (lease) නමින් හැඳින්වේ. ලීස් කියන්නේ සම්පත කවුරුන්ට කොච්චර කාලයක් සඳහා හිමිකම් තිබේ කියා කියන එක, එය කාලය ඉවර වුන පසු ඒ සම්පතට අදාළ ක්‍රියාවලිය නවතාදෙන්නේ නැත. එබැවින්, කාලය ඉවර වුන පසු පවා පරණ ලියුමක් ජාලය හරහා යාම හෝ CPU හි අඩුපාඩු නිසා ප්‍රතිකාර නොවීමක් විය හැක.

2012දී GitHub හි සිදු වූ විශාල outage එකේදී, පරිසරය අතර සම්බන්ධතා 90 තත්පරක් අවහිර වුණා. ඒක හේතුවෙන් කාලය ඉවර වුනු ලොක් එකක් “සක්‍රිය” බවට පත් වීම, සහ ඒකේ පසුපස ඇති පද්ධතිය “ඇත්” කියා වැරදි තේරුමක් ගන්නා ලදි. ඒ නිසා දත්ත සමග අසාමාන්‍ය ගැටළු ඇති වුණා, සහ ප්‍රතිසංස්කරණයට පස් පැය පමණ ගත වුණා.

ඉතින්, TTL එකක් පමණක් භාවිතා කරලා ලොක් එක “මැකී” යන්නේ නැත, ඒක “lease” බවට පත්වෙයි. සත්‍ය ලොක් එකක් සෑදීමට, සම්පතම තමන්ගේම “ෆෙන්සිං ටෝකන්” (fencing token) එකක් ලබා ගත යුතුය. මෙම ටෝකන් සෑම වරක් ලොක් එක ගත්තාම වැඩි වෙනවා, එමඟින් සම්පතට ලැබෙන ලියුම් පරණ ටෝකන් වලට වඩා නව ටෝකන් වලට පමණක් පිළිගන්නා බව තහවුරු කරයි.

Redis හි සාමාන්‍ය ලොක් පෑටර්න් එක SET key random-value NX PX ttl ලෙසයි. මෙහි random value එක “unlock” කරන විට එකම වටිනාකමක් තිබේදැයි පරීක්ෂා කරයි. ඒත් මෙය පරණ ලියුමක් නව ලියුමට මතක නොමැති බව තහවුරු නොකරයි. එය “අදාල ලොක් එකම මායිමද?” කියන ප්‍රශ්නයට පමණක් පිළිතුරයි.

ෆෙන්සිං ටෝකන් භාවිතා කරන විට, සම්පතට ලැබෙන සියලුම ලියුම් ඒ ටෝකන් සමඟ යවයි. PostgreSQL හි උදාහරණයක් ලෙස, UPDATE documents SET body = $1, fencing_token = $2 WHERE id = $3 AND fencing_token < $2 යන ප්‍රකාශය atomic ලෙස ක්‍රියාත්මක වේ. පරණ ටෝකන් (41) නව ටෝකන් (42) මත ලියුමක් කරන්නේ නැත; එමගින් දත්ත අහිමි වීම වැළැක්විය හැක.

අවධානය යොමු කළ යුතුය: “token > seen” වැනි පරීක්ෂණයක් කරලා පසු “update” කිරීමේදී, දෙදෙනාම පරීක්ෂා කරලා පසුකාලීනව ලියුම් කරන්නේ නම් තවත් ගැටළුවක් සිදුවේ. ඒ නිසා, එකම conditional update හෝ “fence row” එක lock කරලා සියලුම ව්‍යාපාරික වෙනස්කම් එක්වරම කරන්නේ වඩා ආරක්ෂිතයි.

ශ්‍රී ලංකාවට ඇති වැදගත්කම

ශ්‍රී ලංකාවේ තාක්ෂණික විද්‍යාව, startups, සහ ආයතනික සංවර්ධනය සඳහා මෙම තත්ත්වය අතිශය වැදගත් වේ. පහත පරිදි ප්‍රතිලාභ ලබා ගත හැක:

  • විකසකයින් – ලොක් කාලය ඉවර වුනාමද දත්ත අහිමි නොවන ආකාරයට කේත ලේඛන සැලසුම් කළ හැක.
  • ඉගෙනුම් ආයතන – විශාල පද්ධති අධ්‍යයනයේදී “lease vs lock” සංකල්පය පැහැදිලි කරයි.
  • ව්‍යාපාර – මූල්‍ය තොරතුරු, පාරිභෝගික දත්ත ආදීවල ආරක්ෂාව වැඩි කර, downtime එකෙන් සිදු වන අලාභය අඩු කරයි.
  • ආරක්ෂක කණ්ඩායම් – දුර්වලතා හඳුනාගැනීමේදී “fencing token” යෙදවීමේ ප්‍රායෝගික උදාහරණයක් ලෙස භාවිතා කළ හැක.

අවසානයේ, TTL එකක් “ලොක්” ලෙස නොව “lease” ලෙස පෙනෙන්නේ කුමක්දැයි අවබෝධ කරගැනීම, සහ ෆෙන්සිං ටෝකන් යෙදවීම, ශ්‍රී ලංකාවේ තාක්ෂණික පදනම ශක්තිමත් කරයි. ඉදිරියේදී මේ සංකල්පය හරහා වැඩි ආරක්ෂිත, විශ්වාසනීය පද්ධති නිර්මාණය කළ හැක.

💡 ඔබේ ඇප්ලිකේෂන් වල ෆෙන්සිං ටෝකන් දැන්ම ක්‍රියාත්මක කරන්න!
මූලාශ්‍රය මෙම ලිපිය AI මගින් රචිත මුල් සාරාංශයකි. සම්පූර්ණ වාර්තාව කියවන්න:
Dev.to ↗
#distributed-lock #fencing #TTL #Redis #PostgreSQL