ඔබගේ වෙබ් යෙදුමට සම්බන්ධතා ගණන වැඩි වීම, වැඩි වේගයක් කියා සිතනවාද? AWS Aurora හි 1,000 සම්බන්ධතා අතර, එක් මොහොතක ක්රියාත්මක වන්නේ කෙල්ලක් 13 ක් පමණ බව නවතම විශ්ලේෂණයක් පෙන්වා දීලා.
අපි 100 පෝඩ් (pods) සමග විශාල වෙබ් කෘලර් (web crawler) එකක් ධාවනය කරයි. එක් පෝඩ් එකට සමානව 10 PostgreSQL (Aurora) සම්බන්ධතා තිබෙන අතර, පීක් කාලයේ සම්බන්ධතා ගණන 1,000 ක් දක්නට ලැබේ. නමුත් CPU භාවිතය 95% දක්වා ගොඩක් ඉහල යන තැන, සම්බන්ධතා ගණන වැඩි වීම හේතුවක් ලෙස හිතුවේ අපි.
ඇත්ත වශයෙන් බැලුවොත්, 1,000 සම්බන්ධතා අතර, එකවර ක්රියාත්මක වන්නේ පමණක් 13 ක් පමණයි. ඉතිරි සම්බන්ධතා 99% කාලයක් නිශ්ක්රිය (idle) තත්ත්වයේ පවති. PostgreSQL හි සම්බන්ධතාවයක් වුවමනා පසුබැසීමක් වන බැවින්, ඒවාට මතක, සෙමාව, OS scheduler ආදී සම්පත් අවශ්ය වේ. ඒ නිසා CPU එක වැඩි පරිමාණයෙන් “සම්බන්ධතා කළමනාකරණය” සඳහා පාවෙයි, සැබැවින්ම දත්ත ලිවීම සඳහා නොවේ.
ඉන්පසු අපි සොයාගත් කරුණක් නම්, AWS විසින් නියම කරන max_connections සීමාව මතක පරිමාණය අනුව ගණනය කරයි. 64 GB RAM එකක instance එකට හුදෙක් මතකය පමණක් පදනම් කරගෙන දස ගණනක් හෝ දස දහසක් සම්බන්ධතා ඉඩ දෙනවා. එය “ඇති විය හැකි සම්බන්ධතා ගණන” බවයි, “එකවර ක්රියාත්මක විය හැකි වැඩ බර” නොව.
ඒ නිසා max_connections යනු රෝගීන් කට්ටලයට (waiting room) පුළුල් පුටු ගණනක් වගේ – ඉඩ ඉතා වැඩි, නමුත් වෛද්ය (CPU) ගණන අඩු නම් රෝගීන්ට සැත්කම් ලැබෙන්නේ අඩු වේ. අපි පුළුල් රෝගී කට්ටලයක් පුරවා, නමුත් සැත්කම් නොලැබීමෙන් අපේ පද්ධතිය අඩු කාර්යක්ෂමතාවක් පෙන්වා දුන්නා.
මෙම අවස්ථාවේ Universal Scalability Law සහ Little’s Law යන සංකල්ප දෙකක් උපකාරී වේ. L = λ × W (Little’s Law) අනුව, ක්රියාත්මක සම්බන්ධතා (L) = පැමිණීමේ අනුපාතය (λ) × සම්පූර්ණ කිරීමේ කාලය (W). එම නිසා, සම්බන්ධතා සංඛ්යාව වැඩිකරනුවට වඩා, සක්රිය සම්බන්ධතා සංඛ්යාව (active concurrency) වැඩි කිරීමයි ප්රධාන අරමුණ.
ශ්රී ලංකාවට ඇති වැදගත්කම
- ඉගෙනුම්: ශ්රී ලංකාවේ විශ්ව විද්යාල සිසුන්ට සත්ය සමාන්තරතාවය (scalability) පිළිබඳ ප්රායෝගික අවබෝධයක් ලැබේ.
- විකාශකයින්: අධික සම්බන්ධතා නිසා සිදු වන CPU overhead ගැන දැනුවත් වීම, වඩා කාර්යක්ෂම cloud architecture සැලසුම් කිරීමට උපකාරී වේ.
- ව්යාපාරිකයෝ: AWS Aurora හෝ RDS භාවිතා කරන සමාගම්ට, “max_connections” සීමාව මතක පදනමක් බව තේරුම් ගත හැකි අතර, අවශ්ය පරිදි connection pool හඳුන්වා දීමෙන් වියදම අඩු කර, කාර්යක්ෂමතාව වැඩි කළ හැක.
ඉදිරියේදී, සම්බන්ධතා ගණන තරමක් අඩු කර, සක්රිය සම්බන්ධතා සංඛ්යාව වැඩි කිරීම, Little’s Law සහ Universal Scalability Law යන මූලික සංකල්ප භාවිතයෙන් පද්ධතියේ කාර්යක්ෂමතාවය වැඩි කරගත හැකිය. මේක අලුත් ලෝඩ් ටෙස්ට් (load test) විකල්පයක් ලෙස සැලකිය හැක.