සඳුදා හවස 4.30 ට, දුරස්ථ ඉදිකිරීම් පළාතේ රැකියාකරුවන් සියලුම සතියේ පැමිණිලි, ආරක්ෂා ලේඛන, උපකරණ වාර්තා එකවරම සබ්මට් කරයි. මේ එකම මොහොතේ දහස් ගණනක් තොරතුරු දත්ත ගබඩාවට ඇතුළත් වීම නිසා පද්ධතිය බරපතළ වෙලා බිඳ වැටුණා.
සාම්ප්රදායික relational database එකක් එකවර ලියන ඉල්ලීම් සියල්ලම සකස් කරන අතර, ඒ සමගම කළමනාකරුවන්ට වාර්තා කියවීමටත් තරගකාරී query ගොඩනැගීමටත් පටන් ගනී. සර්වරේ මතක පිරී, lock ගොඩනැගී, connections timeout වෙලා, අන්තර්ජාල භාවිතකරුවන්ට දෝෂ පණිවුඩ පෙන්වෙයි.
මෙම ගැටළුවට විසඳුමක් ලෙස අපි CQRS (Command Query Responsibility Segregation) ආකෘතියට මාරු වුණා. එය ව්යාපාරික රෙසිපි එකක් වගේ – ඇණවුම් ගැනීම, බේකරි කාර්යය, සහ සේවාදායකයාට බේකඩ් කෑම ලබා දීම වෙන වෙනම කණ්ඩායම්වලට බෙදා දෙනවා වගේ.
ඉන්පසු, ක්ෂේත්ර කාර්ය මණ්ඩලය ඇතුළත් කරන ලද සතියේ ලොග් එක තවම ප්රධාන දත්ත ගබඩාවට ලියන්නේ නැහැ. ඒ වෙනුවට Azure Service Bus queue එකට කෙටි පණිවිඩයක් එවයි. මේ queue එක මෘදුකාංගය සූදානම් වන තුරු ඉල්ලීම් ආරක්ෂා කරගෙන ඉඳී. පසුබැසීමේ workers ගණනාවක් queue එකෙන් පණිවිඩ ගෙන, වලංගුකරණය කර, දත්ත ගබඩාවට ලියයි. කළමනාකරුවන්ට වාර්තා කියවීමට cache එකක් භාවිතා කරයි – එය පූර්ණයෙන්ම කියවීම සඳහාම නිර්මාණය කර ඇත, ලියන ක්රියාවලියෙන් වෙනම.
මෙම සැලසුමෙන් සතියේ අවසානයේ ඇති බරපතළ පීක් එක පැය 5 මිනිත්තුකින් 15 මිනිත්තු පරිසරයට පරිවර්තනය වීම නිසා downtime නැති වුණා. නමුත් eventual consistency (අවසන් තොරතුරු තත්කාලිකව පෙන්වීම) නිසා කළමනාකරුවන් “Dashboard” එක හිස් බව දැකලා පද්ධතිය බිඳ වැටුනා කියලා සිතූහ. ඒ නිසා ඒම තොරතුරු නැවත නැවත සබ්මට් කරන ලද්දේ duplicate records ඇති කරලා queue වැඩි වෙලා තවත් ප්රශ්න උද්භව වුණා.
මෙම ගැටළුවට අපි unique tracking ID එකක් එක් කරලා duplicate submissions අවහිර කළා. එමෙන්ම web interface එකට processing status indicator එකක් එක් කරලා, පරිශීලකයාට “දත්ත සකස් වෙමින් පවතී” කියලා පෙන්වීමට හැකියාව ලැබුණා.
ශ්රී ලංකාවට ඇති වැදගත්කම
- විකසකයින් – CQRS මඟින් read/write වෙන් කිරීමෙන් scalability ගැලපෙන පද්ධති නිර්මාණය කළ හැකිය.
- ව්යාපාර – peak load අවස්ථා වල downtime නැතිව, සේවා විශ්වාසය වැඩි වේ.
- විශ්ව විද්යාල සිසුන් – cloud‑based queue, asynchronous processing වැනි concepts ඉගෙන ගැනීමට හොඳ උදාහරණයක්.
ඉතින්, ලේඛන පද්ධතියක scalability ගැලපීම සඳහා read/write paths වෙන් කිරීම ප්රයෝජනවත්, නමුත් real‑time updates අවශ්ය පරිශීලකයන්ට තොරතුරු ප්රතිචාරය සැලසීම අත්යවශ්ය බව මතක තබා ගත යුතුයි.