රූබල් 30 ක් සඳහා මොළය + VPS =?

ඔබට අවශ්‍ය කුඩා දේවල් සියල්ලම ඔබේ ඇඟිලි තුඩුවල තිබීම කොතරම් සතුටක්ද: හොඳ පෑනක් සහ සටහන් පොතක්, මුවහත් කළ පැන්සලක්, සුවපහසු මූසිකයක්, අමතර කේබල් කිහිපයක් යනාදිය. මෙම නොපෙනෙන දේවල් අවධානයට ලක් නොවී ගියත්, ඒවා ඔබේ ජීවිතයට සැනසීමක් එක් කරයි. විවිධ ජංගම සහ ඩෙස්ක්ටොප් යෙදුම් සම්බන්ධයෙන්ද එය එසේමයි: දිගු තිරපිටපත් ගැනීම, රූප ප්‍රමාණය අඩු කිරීම, පුද්ගලික මූල්‍ය නිරීක්ෂණය කිරීම, ශබ්ද කෝෂ, පරිවර්තක, පරිවර්තක ආදිය. ඔබට එකක් තිබේද? VPS — මිල අඩු, සැමවිටම අත ළඟ, සහ විශාල වටිනාකමක් ගෙන දෙන එකක්ද? නැහැ, ඔබේ සමාගම සතුව ඇති එක නොව, ඔබේම, "සාක්කුවේ" එකක්. 2019 දී කුඩා VPS එකක් නොමැතිව සිටීම ටිකක් දුකක් වනු ඇතැයි අපි සිතුවෙමු, හරියට දේශනයක් අතරතුර ඔබේ සුපුරුදු පෑන නොමැතිව සිටීම වගේ. ඒ ගැන දුක කුමක්ද? දැන් ගිම්හානයයි. හොඳයි, දැන් ගිම්හානයයි. තොරතුරු තාක්ෂණ වෘත්තිකයෙකුගේ ගිම්හානයයි: නිවසේ වාඩි වී, පසුතැවිල්ලේ හෝඩුවාවක් නොමැතිව ඔබේ ප්‍රියතම ව්‍යාපෘතිවල වැඩ කිරීම. ඉතින්, අපි ඒ ගැන සිතා එය කළෙමු.

රූබල් 30 ක් සඳහා මොළය + VPS =?
කොමියුනිස්ට්වාදය පැමිණ ඇත, සහෝදරවරුනි.

ඔහු හරිම පෞද්ගලිකයි - තිහකට අපේ VPS

මිල අඩු VPS එකක් අවශ්‍ය නොවන්නේ මන්දැයි යන්න පිළිබඳව තරඟකරුවන්ගෙන් සහ පරිශීලකයින්ගෙන් වසර තුන හතරකට පෙර අපි බොහෝ ලිපි කියවා ඇත්තෙමු. ඒ කාලයේ "ලාභ" VPS යනු පිරිසිදු අලෙවිකරණයක් වූ අතර කිසිදු සැබෑ ක්‍රියාකාරීත්වයක් ලබා දිය නොහැකි විය. නමුත් කාලය වෙනස් වෙමින් පවතී, අතථ්‍ය සම්පත්වල පිරිවැය අඩු වෙමින් පවතින අතර මසකට රූබල් 30 කට අපට මෙය ලබා දිය හැකිය:

  • සකසනය: Intel Xeon 2 GHz (1 core)
  • ලිනක්ස් පද්ධතිය (තෝරා ගැනීමට ඩේබියන්, උබුන්ටු, සෙන්ටොඑස්)
  • 1 කැපවූ IPv4 ලිපිනයක්
  • 10GB වේගවත්, ව්‍යවසාය පන්තියේ SSD ආචයනය
  • RAM: 512 MB
  • තත්පරයට බිල්පත් කිරීම
  • අසීමිත ගමනාගමනය

ගාස්තුව අතිරේක තාක්ෂණික සීමාවන්ට යටත් වේ, විස්තර පිටුව අපගේ විශිෂ්ට දීමනාව: රූබල් 30 කට VPS. 

එවැනි අතථ්‍ය සේවාදායකයකින් ප්‍රතිලාභ ලබන්නේ කවුද? සෑම කෙනෙකුම පාහේ: ආරම්භකයින්, උද්යෝගිමත් අය, පළපුරුදු සංවර්ධකයින්, DIY ලෝලීන් සහ සමහර සමාගම් පවා.

මේ VPS එක සුදුසු වෙන්නේ මොකටද?

මෙම වින්‍යාසය භාවිතා කිරීමට Habr පාඨකයින් නිසැකවම තමන්ගේම ක්‍රමයක් සොයා ගනු ඇතැයි අපි සිතමු, නමුත් අපි අපගේම අදහස් එකතුවක් එක් කිරීමට තීරණය කළෙමු - යමෙකුට එය අවශ්‍ය නම් සහ යාලුවනේ නොදන්නේ නම්?

  • ඔබේම සරල වෙබ් අඩවියක්, කළඹක්, කේතයක් සහිත CV යනාදිය සත්කාරකත්වය දරන්න. ඇත්ත වශයෙන්ම, හොඳින් සැලසුම් කරන ලද වෙබ් අඩවියක් සේවා යෝජකයින් කෙරෙහි ධනාත්මක හැඟීමක් ඇති කරයි. සාම්ප්‍රදායික සත්කාරක සේවා මත රඳා නොසිට, එය ඔබේම VPS මත සත්කාරකත්වය දරන අතර එහි ආරක්ෂාව සහ ස්ථාවරත්වය සඳහා ඔබම වගකිව යුතුය.
  • අධ්‍යාපනික අරමුණු සඳහා VPS එකක් භාවිතා කරන්න: ඔබේ ව්‍යාපෘතිය සත්කාරකත්වය දරන්න, සේවාදායකය සහ සේවාදායක මෙහෙයුම් පද්ධතිය ක්‍රියා කරන ආකාරය ඉගෙන ගන්න, DNS සමඟ අත්හදා බලන්න සහ කුඩා අධ්‍යාපනික වෙබ් අඩවියක් සාදන්න.
  • දුරකථන සඳහා. සමහර විට තනි හිමිකරුවෙකුට, නිදහස් සේවකයෙකුට හෝ ඉතා කුඩා සමාගමකට IP දුරකථන අවශ්‍ය වේ, නමුත් සපයන්නන් තරමක් කෑදරයි. එය සරලයි: ඔබේම සේවාදායකයක් ලබා ගන්න, IP දුරකථන සැපයුම්කරුවෙකුගෙන් අංකයක් මිලදී ගන්න, අතථ්‍ය PBX එකක් සකසන්න, සහ දිගු නිර්මාණය කරන්න (අවශ්‍ය නම්). ඉතිරිකිරීම් අතිමහත්ය.
  • ඔබගේ යෙදුම් පරීක්ෂා කිරීමට සේවාදායකය භාවිතා කරන්න.
  • ස්මාර්ට් නිවාස පද්ධති සංවේදක වලින් දත්ත කළමනාකරණය කිරීම සහ එකතු කිරීම ඇතුළුව, DIY අත්හදා බැලීම් සඳහා සේවාදායකය භාවිතා කරන්න.
  • අසාමාන්‍ය භාවිත අවස්ථාවක් වන්නේ ඔබේ සේවාදායකයේ අතථ්‍ය වෙළඳ සහායකයෙකු, වෙළඳ බොට් එකක් සත්කාරකත්වය සැපයීමයි. සේවාදායකයේ ස්ථායිතාව සහ ආරක්ෂාව සඳහා ඔබ සම්පූර්ණයෙන්ම වගකිව යුතුය, එනම් කොටස් වෙළඳපල වෙළඳාම සඳහා ඔබට සම්පූර්ණයෙන්ම පාලනය කළ හැකි මෙවලමක් ලැබෙනු ඇත. යමෙකු උනන්දුවක් දක්වන්නේ නම් හෝ එසේ කිරීමට සැලසුම් කරන්නේ නම් පමණි. 🙂

මෙම VPS සේවාව ආයතනික අංශයේ ද භාවිතා වේ. ඉහත සඳහන් කළ දුරකථන සේවාවට අමතරව, සිත්ගන්නාසුලු විශේෂාංග කිහිපයක් ක්‍රියාත්මක කළ හැකිය. උදාහරණයක් ලෙස:

  • උදාහරණයක් ලෙස, FTP හරහා සංචාරක සේවකයින්ට දුරස්ථව ප්‍රවේශ විය හැකි කුඩා දත්ත සමුදායන් සහ තොරතුරු සත්කාරකත්වය සපයන්න. මෙය යාවත්කාලීන විශ්ලේෂණ, විකුණුම් කණ්ඩායම් සඳහා යාවත්කාලීන කරන ලද වින්‍යාසයන්, ඉදිරිපත් කිරීම් ආදිය වේගයෙන් හුවමාරු කර ගැනීමට ඉඩ සලසයි.
  • මෘදුකාංග හෝ මාධ්‍ය නිරූපණය සඳහා පරිශීලකයින්ට හෝ සේවාදායකයින්ට තාවකාලික ප්‍රවේශය ලබා දෙන්න.

රූබල් 30 ක් සඳහා VPS පරීක්ෂණ ධාවකය - අපි ඔබ වෙනුවෙන් එය කර ඇත්තෙමු.

රූබල් 30ක් කියන්නේ හරිම පොඩි දෙයක්, ඒක ගෙවා පරීක්ෂා කරන්න ඔයාගේ කාඩ් එක එළියට ගන්නවත් කැමති නෑ. අපිත් සමහර වෙලාවට ඒ තරම් කම්මැලියි, නමුත් මේ පාර අපි ඔයා වෙනුවෙන් ඒ ඔක්කොම කරලා තියෙනවා. සර්වර් දියත් කරන්න කලින්, අපි හැම විස්තරයක්ම පරීක්ෂා කරලා මේ සැලැස්මත් එක්ක සර්වර් වලට කරන්න පුළුවන් දේ පෙන්නන්න පරීක්ෂණයක් කළා. දේවල් වඩාත් රසවත් කරන්න, අපි අන්ත පරීක්ෂණ කිහිපයක් එකතු කළා, ඝනත්වය සහ බර අපගේ නිශ්චිත සීමාවන් ඉක්මවා ගියහොත් මෙම වින්‍යාසය හැසිරෙන්නේ කෙසේදැයි පරීක්ෂා කළා. 

ධාරකය අථත්‍ය යන්ත්‍ර ගණනාවකින් පටවා ඇති අතර, ඒ සෑම එකක්ම විවිධ CPU-බන්ධිත කාර්යයන් ක්‍රියාත්මක කරන අතර තැටි උප පද්ධතිය සක්‍රියව භාවිතා කරයි. ඉලක්කය වූයේ ඉහළ ඝනත්ව යෙදවීම් සහ සැබෑ නිෂ්පාදන භාරයට සමාන හෝ ඊට වැඩි වැඩ බරක් අනුකරණය කිරීමයි.

නියත වැඩ බරට අමතරව, අපි sysbench භාවිතයෙන් කෘතිම මිනුම් එකතු කරන අථත්‍ය යන්ත්‍ර තුනක් ස්ථාපනය කළෙමු, ඒවායේ සාමාන්‍ය ප්‍රතිඵල පහත දැක්වේ, සහ අමතර වැඩ බරක් ජනනය කළ අථත්‍ය යන්ත්‍ර 50 ක්. සියලුම පරීක්ෂණ අථත්‍ය යන්ත්‍රවලට එකම වින්‍යාසය තිබුණි (තනි හරය, 512 GB RAM, 10 GB SSD), සහ RUVDS හි පරිශීලකයින්ට ලබා ගත හැකි සම්මත Debian 9.6 රූපය මෙහෙයුම් පද්ධතිය ලෙස තෝරා ගන්නා ලදී.

සටන් බරකට සමාන ස්වභාවයක් සහ විශාලත්වයක් ඇති බර අනුකරණය කරන ලදී:

  • සමහර අථත්‍ය යන්ත්‍ර අඩු බරකින් ක්‍රියාත්මක විය.
  • සමහර යන්ත්‍ර ප්‍රොසෙසරයේ බර අනුකරණය කරමින් (උපයෝගීතාව භාවිතා කරමින්) පරීක්ෂණ අවස්ථාවක් ක්‍රියාත්මක කළේය. මානසික ආතතිය)
  • ඉතිරි VM වල, අපි පෙර සූදානම් කළ දත්ත කට්ටලයකින් pv භාවිතයෙන් සීමිත කට්ටලයක් සහිත තැටියට දත්ත පිටපත් කිරීමට dd භාවිතා කරන ස්ක්‍රිප්ට් එකක් ධාවනය කළෙමු (උදාහරණ මෙතැනින් සොයාගත හැකිය). මෙහි и මෙහි).

තවද, ඔබට මතක ඇති පරිදි, අපට කෘතිම මිනුම් එකතු කරන යන්ත්‍ර තුනක් තිබුණි.

සෑම යන්ත්‍රයකම, සෑම මිනිත්තු 15 කට වරක් ස්ක්‍රිප්ට් එකක් චක්‍රීයව ක්‍රියාත්මක කරන ලද අතර, එය සකසනය, මතකය සහ තැටිය සඳහා සම්මත sysbench පරීක්ෂණ ක්‍රියාත්මක කරයි.

sysbench.sh ස්ක්‍රිප්ට් එක

#!/bin/bash
date +"%Y-%m-%d %H:%M:%S" >> /root/sysbench/results.txt
sysbench --test=cpu run >> /root/sysbench/results.txt
sysbench --test=memory run >> /root/sysbench/results.txt
sysbench --test=fileio --file-test-mode=seqwr run >> /root/sysbench/results.txt
sysbench --test=fileio --file-test-mode=seqrd run >> /root/sysbench/results.txt
sysbench --test=fileio --file-test-mode=rndrw run >> /root/sysbench/results.txt

පහසුව සඳහා ප්‍රතිඵල sysbench ආකෘතියෙන් ඉදිරිපත් කර ඇත, නමුත් සියලුම යන්ත්‍රවලින් සම්පූර්ණ පරීක්ෂණ කාලය සඳහා සාමාන්‍ය අගයන් ගනු ලැබේ. සාරාංශය මෙතැනින් දැකිය හැකිය:

සයිස්බෑන්ච්-සාමාන්‍ය.txtsysbench 0.4.12: multi-threaded system evaluation benchmark

පහත විකල්ප සමඟ පරීක්ෂණය ක්‍රියාත්මක කිරීම:
නූල් ගණන: 1

CPU කාර්ය සාධන මිණුම් ලකුණ සිදු කරමින්

නූල් ආරම්භ විය!
අමාරුයි.

CPU පරීක්ෂණයේදී පරීක්ෂා කරන ලද උපරිම ප්‍රථමක සංඛ්‍යාව: 10000

පරීක්ෂණ ක්‍රියාත්මක කිරීමේ සාරාංශය:
මුළු කාලය: තත්පර 19.2244
මුළු සිදුවීම් ගණන: 10000
සිදුවීම ක්‍රියාත්මක කිරීමට ගතවන මුළු කාලය: 19.2104
ඉල්ලීමකට සංඛ්‍යාලේඛන:
අවම: 1.43 මි.තත්.
සාමාන්‍යය: 1.92ms
උපරිමය: 47.00 මි.තත්.
ආසන්න වශයෙන්. 95 ප්‍රතිශතය: 3.02 ms

නූල් සාධාරණත්වය:
සිදුවීම් (සාමාන්‍ය/ස්ථාවර): 10000.0000/0.00
ක්රියාත්මක කිරීමේ කාලය (සාමාන්ය/ස්ථාවර): 19.2104/0.00

sysbench 0.4.12: බහු-නූල් පද්ධති ඇගයීම් මිණුම් ලකුණ

පහත විකල්ප සමඟ පරීක්ෂණය ක්‍රියාත්මක කිරීම:
නූල් ගණන: 1

මතක මෙහෙයුම් වේග පරීක්ෂණය සිදු කිරීම
මතක බ්ලොක් ප්‍රමාණය: 1K

මතක හුවමාරු ප්‍රමාණය: 102400M

මතක මෙහෙයුම් වර්ගය: ලියන්න
මතක විෂය පථ වර්ගය: ගෝලීය
නූල් ආරම්භ විය!
අමාරුයි.

සිදු කරන ලද මෙහෙයුම්: 104857600 (328001.79 ops/තත්පර)

102400.00 MB මාරු කරන ලදී (320.32 MB/තත්පර)

පරීක්ෂණ ක්‍රියාත්මක කිරීමේ සාරාංශය:
මුළු කාලය: තත්පර 320.9155
මුළු සිදුවීම් ගණන: 104857600
සිදුවීම ක්‍රියාත්මක කිරීමට ගතවන මුළු කාලය: 244.8399
ඉල්ලීමකට සංඛ්‍යාලේඛන:
අවම: 0.00 මි.තත්.
සාමාන්‍යය: 0.00ms
උපරිමය: 139.41 මි.තත්.
ආසන්න වශයෙන්. 95 ප්‍රතිශතය: 0.00 ms

නූල් සාධාරණත්වය:
සිදුවීම් (සාමාන්‍ය/ස්ථාවර): 104857600.0000/0.00
ක්රියාත්මක කිරීමේ කාලය (සාමාන්ය/ස්ථාවර): 244.8399/0.00

sysbench 0.4.12: බහු-නූල් පද්ධති ඇගයීම් මිණුම් ලකුණ

පහත විකල්ප සමඟ පරීක්ෂණය ක්‍රියාත්මක කිරීම:
නූල් ගණන: 1

අමතර ගොනු විවෘත කොඩි: 0
ගොනු 128ක්, එකකට 16 MB බැගින්
මුළු ගොනු ප්‍රමාණය 2 GB
බ්ලොක් ප්‍රමාණය 16 KB
වරින් වර FSYNC සක්‍රීය කර ඇත, fsync() ඉල්ලීම් 100 බැගින් ඇමතීම.
පරීක්ෂණය අවසානයේ fsync() ඇමතීම, සබල කර ඇත.
සමමුහුර්ත I/O මාදිලිය භාවිතා කිරීම
අනුක්‍රමික ලිවීමේ (නිර්මාණ) පරීක්ෂණය සිදු කිරීම
නූල් ආරම්භ විය!
අමාරුයි.

සිදු කරන ලද මෙහෙයුම්: 0 කියවීම, 131072 ලිවීම, 128 වෙනත් = 131200 එකතුව
කියවීම 0b ලිඛිත 2Gb මාරු කළ මුළු 2Gb (320.1Mb/sපරිසර)
20251.32 ඉල්ලීම්/තත්පරය ක්‍රියාත්මක කරන ලදී

පරීක්ෂණ ක්‍රියාත්මක කිරීමේ සාරාංශය:
මුළු කාලය: තත්පර 6.9972
මුළු සිදුවීම් ගණන: 131072
සිදුවීම ක්‍රියාත්මක කිරීමට ගතවන මුළු කාලය: 5.2246
ඉල්ලීමකට සංඛ්‍යාලේඛන:
අවම: 0.01 මි.තත්.
සාමාන්‍යය: 0.04ms
උපරිමය: 96.76 මි.තත්.
ආසන්න වශයෙන්. 95 ප්‍රතිශතය: 0.03 ms

නූල් සාධාරණත්වය:
සිදුවීම් (සාමාන්‍ය/ස්ථාවර): 131072.0000/0.00
ක්රියාත්මක කිරීමේ කාලය (සාමාන්ය/ස්ථාවර): 5.2246/0.00

sysbench 0.4.12: බහු-නූල් පද්ධති ඇගයීම් මිණුම් ලකුණ

පහත විකල්ප සමඟ පරීක්ෂණය ක්‍රියාත්මක කිරීම:
නූල් ගණන: 1

අමතර ගොනු විවෘත කොඩි: 0
ගොනු 128ක්, එකකට 16 MB බැගින්
මුළු ගොනු ප්‍රමාණය 2 GB
බ්ලොක් ප්‍රමාණය 16 KB
වරින් වර FSYNC සක්‍රීය කර ඇත, fsync() ඉල්ලීම් 100 බැගින් ඇමතීම.
පරීක්ෂණය අවසානයේ fsync() ඇමතීම, සබල කර ඇත.
සමමුහුර්ත I/O මාදිලිය භාවිතා කිරීම
අනුක්‍රමික කියවීමේ පරීක්ෂණයක් සිදු කිරීම
නූල් ආරම්භ විය!
අමාරුයි.

සිදු කරන ලද මෙහෙයුම්: 131072 කියවීම, 0 ලිවීම, 0 වෙනත් = 131072 එකතුව
කියවීම 2Gb ලිඛිත 0b මාරු කළ මුළු ප්‍රමාණය 2Gb (91.32Mb/sපරිසර)
5844.8 ඉල්ලීම්/තත්පරය ක්‍රියාත්මක කරන ලදී

පරීක්ෂණ ක්‍රියාත්මක කිරීමේ සාරාංශය:
මුළු කාලය: තත්පර 23.1054
මුළු සිදුවීම් ගණන: 131072
සිදුවීම ක්‍රියාත්මක කිරීමට ගතවන මුළු කාලය: 22.9933
ඉල්ලීමකට සංඛ්‍යාලේඛන:
අවම: 0.00 මි.තත්.
සාමාන්‍යය: 0.18ms
උපරිමය: 295.75 මි.තත්.
ආසන්න වශයෙන්. 95 ප්‍රතිශතය: 0.77 ms

නූල් සාධාරණත්වය:
සිදුවීම් (සාමාන්‍ය/ස්ථාවර): 131072.0000/0.00
ක්රියාත්මක කිරීමේ කාලය (සාමාන්ය/ස්ථාවර): 22.9933/0.00

sysbench 0.4.12: බහු-නූල් පද්ධති ඇගයීම් මිණුම් ලකුණ

පහත විකල්ප සමඟ පරීක්ෂණය ක්‍රියාත්මක කිරීම:
නූල් ගණන: 1

අමතර ගොනු විවෘත කොඩි: 0
ගොනු 128ක්, එකකට 16 MB බැගින්
මුළු ගොනු ප්‍රමාණය 2 GB
බ්ලොක් ප්‍රමාණය 16 KB
අහඹු IO සඳහා අහඹු ඉල්ලීම් ගණන: 10000
ඒකාබද්ධ අහඹු IO පරීක්ෂණය සඳහා කියවීමේ/ලිවීමේ අනුපාතය: 1.50
වරින් වර FSYNC සක්‍රීය කර ඇත, fsync() ඉල්ලීම් 100 බැගින් ඇමතීම.
පරීක්ෂණය අවසානයේ fsync() ඇමතීම, සබල කර ඇත.
සමමුහුර්ත I/O මාදිලිය භාවිතා කිරීම
සසම්භාවී r/w පරීක්ෂණය සිදු කිරීම
නූල් ආරම්භ විය!
අමාරුයි.

සිදු කරන ලද මෙහෙයුම්: 6000 කියවීම, 4000 ලිවීම, 12800 වෙනත් = 22800 එකතුව
කියවීම 93.75Mb ලිඛිත 62.5Mb මාරු කළ මුළු ප්‍රමාණය 156.25Mb (තත්පරයට 1341.5Kb)
85.61 ඉල්ලීම්/තත්පරය ක්‍රියාත්මක කරන ලදී

පරීක්ෂණ ක්‍රියාත්මක කිරීමේ සාරාංශය:
මුළු කාලය: තත්පර 152.9786
මුළු සිදුවීම් ගණන: 10000
සිදුවීම ක්‍රියාත්මක කිරීමට ගතවන මුළු කාලය: 14.1879
ඉල්ලීමකට සංඛ්‍යාලේඛන:
අවම: 0.01 මි.තත්.
සාමාන්‍යය: 1.41ms
උපරිමය: 210.22 මි.තත්.
ආසන්න වශයෙන්. 95 ප්‍රතිශතය: 4.95 ms

නූල් සාධාරණත්වය:
සිදුවීම් (සාමාන්‍ය/ස්ථාවර): 10000.0000/0.00
ක්රියාත්මක කිරීමේ කාලය (සාමාන්ය/ස්ථාවර): 14.1879/0.00
ප්‍රතිඵල ඇඟවුම් කරයි, නමුත් ඒවා QoS ලෙස නොගත යුතුය. 

අමතර බරක් නිර්මාණය කරන යන්ත්‍ර

මෘදුකාංග:

  • උචිත-හමුවීමක් යාවත්කාලීන
  • apt-get upgrade
  • apt-get install python-pip
  • pip ස්ථාපනය mysql-connector-python-rf

MariaDB ස්ථාපනය කළේ කෙසේද, කෙසේද මෙහි:

apt-get install libmariadbclient-dev
mysql -e "INSTALL PLUGIN blackhole SONAME 'ha_blackhole.so';" -- нужно для test_employees_sha

පරීක්ෂණ පදනම ලබාගෙන ඇත. මෙතනින්:

දක්වා ඇති පරිදි පාදම යොදවා ඇත. මෙහි:

mysql -t < employees.sql
mysql -t < test_employees_sha.sql

කුඩා පරීක්ෂණ පදනම:

වගුව 

පේළි ගණන 

දත්ත ප්‍රමාණය (MB)

දර්ශක ප්‍රමාණය (KB)

දෙපාර්තමේන්තු 

9

0.02

16.00

දෙපාර්තමේන්තුව_emp 

331143 

11.52

5648.00

දෙපාර්තමේන්තු_කළමනාකරු 

24 

0.02

16.00

සේවක 

299379 

14.52

0.00

වැටුප් 

2838426 

95.63

0.00 

මාතෘකා විය 

442783 

19.56

0.00

Python හි ක්ෂණිකව ලියා ඇති ප්‍රාථමික පරීක්ෂණ සේවාවක්, මෙහෙයුම් හතරක් සිදු කරයි:

  1. getState: තත්ත්වය ආපසු ලබා දෙයි
  2. getEmployee: දත්ත සමුදායෙන් සේවකයා (+ වැටුප්, + මාතෘකා) ආපසු ලබා දෙයි.
  3. patchEmployee: සේවක ක්ෂේත්‍ර වෙනස් කරයි
  4. වැටුප ඇතුළත් කරන්න: වැටුපක් ඇතුළත් කරයි

සේවා මූලාශ්‍රය (dbtest.py)

#!/usr/bin/python
import mysql.connector as mariadb
from flask import Flask, json, request, abort
from mysql.connector.constants import ClientFlag

app = Flask(__name__)

def getFields(cursor):
    results = {}
    column = 0
    for d in cursor.description:
        results[d[0]] = column
        column = column + 1
    return results

PAGE_SIZE = 30

@app.route("/")
def main():
    return "Hello!"

@app.route("/employees/<page>", methods=['GET'])
def getEmployees(page):
    offset = (int(page) - 1) * PAGE_SIZE
    connection = mariadb.connect(user='admin', password='q5XpRomdSr', database='employees')
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM employees LIMIT {} OFFSET {}".format(PAGE_SIZE, offset))
    return {'employees': [i[0] for i in cursor.fetchall()]}

@app.route("/employee/<id>", methods=['GET'])
def getEmployee(id):
    id = int(id)
    connection = mariadb.connect(user='admin', password='q5XpRomdSr', database='employees')
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM employees WHERE emp_no = {}".format(id))
    fields = getFields(cursor)
    employee = {}
    found = False
    for row in cursor.fetchall():
        found = True
        employee = {
            "birth_date": row[fields["birth_date"]],
            "first_name": row[fields["first_name"]],
            "last_name": row[fields["last_name"]],
            "gender": row[fields["gender"]],
            "hire_date": row[fields["hire_date"]]
        }
    if not found:
        abort(404)
    cursor.execute("SELECT * FROM salaries WHERE emp_no = {}".format(id))
    fields = getFields(cursor)
    salaries = []
    for row in cursor.fetchall():
        salary = {
            "salary": row[fields["salary"]],
            "from_date": row[fields["from_date"]],
            "to_date": row[fields["to_date"]]
        }
        salaries.append(salary)
    employee["salaries"] = salaries
    cursor.execute("SELECT * FROM titles WHERE emp_no = {}".format(id))
    fields = getFields(cursor)
    titles = []
    for row in cursor.fetchall():
        title = {
            "title": row[fields["title"]],
            "from_date": row[fields["from_date"]],
            "to_date": row[fields["to_date"]]
        }
        titles.append(title)
    employee["titles"] = titles
    return json.dumps({
        "status": "success",
        "employee": employee
    })

def isFieldValid(t, v):
    if t == "employee":
        return v in ["birdth_date", "first_name", "last_name", "hire_date"]
    else:
        return false

@app.route("/employee/<id>", methods=['PATCH'])
def setEmployee(id):
    id = int(id)
    content = request.json
    print(content)
    setList = ""
    data = []
    for k, v in content.iteritems():
        if not isFieldValid("employee", k):
            continue
        if setList != "":
            setList = setList + ", "
        setList = setList + k + "=%s"
        data.append(v)
    data.append(id)
    print(setList)
    print(data)
    connection = mariadb.connect(user='admin', password='q5XpRomdSr', database='employees', client_flags=[ClientFlag.FOUND_ROWS])
    cursor = connection.cursor()
    cursor.execute("UPDATE employees SET {} WHERE emp_no = %s".format(setList), data)
    connection.commit()
    if cursor.rowcount < 1:
        abort(404)
    return json.dumps({
        "status": "success"
    })

@app.route("/salary", methods=['PUT'])
def putSalary():
    content = request.json
    print(content)
    connection = mariadb.connect(user='admin', password='q5XpRomdSr', database='employees', client_flags=[ClientFlag.FOUND_ROWS])
    cursor = connection.cursor()
    data = [content["emp_no"], content["salary"], content["from_date"], content["to_date"]]
    cursor.execute("INSERT INTO salaries (emp_no, salary, from_date, to_date) VALUES (%s, %s, %s, %s)", data)
    connection.commit()
    return json.dumps({
        "status": "success"
    })


@app.route("/state", methods=['GET'])
def getState():
    return json.dumps({
        "status": "success",
        "state": "working"
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0',port='5002')

කරුණාකරලා! කිසිම අවස්ථාවක මෙම සේවාව ආදර්ශයක් හෝ මාර්ගෝපදේශයක් ලෙස නොගත යුතුය!

විශ්වාසදායක JMeter භාවිතයෙන් පරීක්ෂණ සිදු කරන ලදී. මිනිත්තු 15 සිට පැය 2 දක්වා කාලයක් පුරා බාධාවකින් තොරව පරීක්ෂණ මාලාවක් ක්‍රියාත්මක කරන ලදී. ඉල්ලීම්වල ප්‍රතිශතය වෙනස් වූ අතර ප්‍රතිදානය විනාඩියකට ඉල්ලීම් 300 සිට 600 දක්වා වෙනස් විය. නූල් ගණන 50 සිට 500 දක්වා විය.

පාදම ප්‍රමාණයෙන් ඉතා කුඩා බැවින්, විධානය:

mysql -e "SHOW ENGINE INNODB STATUS"

පෙන්නුම් කරන්නේ:

Buffer pool hit rate 923 / 1000, young-making rate 29 / 1000 not 32 / 1000

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

ලේබලය

සාමාන්ය

මධ්යධරණී

90% රේඛාව

95% රේඛාව

99% රේඛාව

යි

මැක්ස්

සේවකයා ලබා ගන්න

37.64

12.57

62.28

128.5

497.57

5

4151.78

ගෙට්ස්ටේට්

17

7.57

30.14

58.71

193

3

2814.71

පැච් සේවකයා

161.42

83.29

308

492.57

1845.14

5

6639.4

වැටුප

167.21

86.93

315.34

501.07

1927.12

7

6722.44

මෙම කෘතිම ප්‍රතිඵල මත පදනම්ව ඔබේ නිශ්චිත අවශ්‍යතා සඳහා මෙම VPS හි යෝග්‍යතාවය විනිශ්චය කිරීමට ඔබට අපහසු විය හැකිය. සමස්තයක් වශයෙන්, ලැයිස්තුගත කර ඇති ක්‍රම එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින් අප මුහුණ දුන් අවස්ථාවන්ට සීමා වේ. එබැවින්, අපගේ ලැයිස්තුව නිසැකවම සම්පූර්ණ නොවේ. ඔබේම නිගමනවලට එළඹීමට සහ ඔබේ සැබෑ ලෝක යෙදුම් සහ කාර්යයන් සමඟ 30-රූබල් සේවාදායකය පරීක්ෂා කිරීමට අපි ඔබව දිරිමත් කරන අතර, අදහස් දැක්වීමේදී මෙම වින්‍යාසය සඳහා ඔබේම විකල්ප යෝජනා කරන්න.

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

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