ืžื•ื— + VPS ืขื‘ื•ืจ 30 ืจื•ื‘ืœ =?

ื–ื” ื›ืœ ื›ืš ื ื—ืžื“ ื›ืฉื›ืœ ื”ื“ื‘ืจื™ื ื”ืงื˜ื ื™ื ื”ื“ืจื•ืฉื™ื ื‘ื”ื™ืฉื’ ื™ื“: ืขื˜ ื•ืคื ืงืก ื˜ื•ื‘ื™ื, ืขื™ืคืจื•ืŸ ืžื—ื•ื“ื“, ืขื›ื‘ืจ ื ื•ื—, ื›ืžื” ื—ื•ื˜ื™ื ื ื•ืกืคื™ื ื•ื›ื•'. ื”ื“ื‘ืจื™ื ื”ืœื ื‘ื•ืœื˜ื™ื ื”ืœืœื• ืื™ื ื ืžื•ืฉื›ื™ื ืชืฉื•ืžืช ืœื‘, ืืœื ืžื•ืกื™ืคื™ื ื ื—ืžื” ืœื—ื™ื™ื. ืื•ืชื• ืกื™ืคื•ืจ ื”ื•ื ืขื ืืคืœื™ืงืฆื™ื•ืช ืžื•ื‘ื™ื™ืœ ื•ืฉื•ืœื—ืŸ ืขื‘ื•ื“ื” ืฉื•ื ื•ืช: ืœืฆื™ืœื•ืžื™ ืžืกืš ืืจื•ื›ื™ื, ืœื”ืงื˜ื ืช ื’ื•ื“ืœ ืชืžื•ื ื”, ืœื—ื™ืฉื•ื‘ ื›ืกืคื™ื ืื™ืฉื™ื™ื, ืžื™ืœื•ื ื™ื, ืžืชืจื’ืžื™ื, ืžืžื™ืจื™ื ื•ื›ื•'. ื™ืฉ ืœืš ืื—ื“ ื›ื–ื”? VPS - ืฉื–ื” ืœื ื™ืงืจ, ืชืžื™ื“ ื‘ื”ื™ืฉื’ ื™ื“ ื•ืžื‘ื™ื ื”ืจื‘ื” ื™ืชืจื•ื ื•ืช? ืœื, ืœื ื–ื” ืฉื™ืฉ ืœืš ื‘ื—ื‘ืจื” ืฉืœืš, ืืœื "ื›ื™ืก" ืžืฉืœืš. ื—ืฉื‘ื ื• ืฉืœืœื VPS ืงื˜ืŸ ื‘-2019 ื–ื” ืื™ื›ืฉื”ื• ืขืฆื•ื‘, ื‘ื“ื™ื•ืง ื›ืžื• ื‘ืœื™ ื”ืขื˜ ื”ื ื•ื‘ืข ื”ืจื’ื™ืœ ื‘ื”ืจืฆืื”. ืœืžื” ืœื”ื™ื•ืช ืขืฆื•ื‘? ื–ื” ืงื™ืฅ. ืื™ืš ื”ืงื™ืฅ? ืงื™ืฅ ืœืžื•ืžื—ื” IT: ื™ื•ืฉื‘ ื‘ื‘ื™ืช, ืขื•ื‘ื“ ืขืœ ื”ืคืจื•ื™ืงื˜ื™ื ื”ืื”ื•ื‘ื™ื ืขืœื™ืš ืœืœื ื—ืจื˜ื”. ื‘ื›ืœืœ, ื—ืฉื‘ื ื• ื•ืขืฉื™ื ื• ืืช ื–ื”.

ืžื•ื— + VPS ืขื‘ื•ืจ 30 ืจื•ื‘ืœ =?
ื”ืงื•ืžื•ื ื™ื–ื ื”ื’ื™ืข, ื—ื‘ืจื™ื.

ื”ื•ื ื›ื–ื” - ื”-VPS ืฉืœื ื• ืœืฉืœื•ืฉื™ื

ืงืจืื ื• ื”ืจื‘ื” ืžืืžืจื™ื ืฉืœ ืžืชื—ืจื™ื ื•ืžืฉืชืžืฉื™ื ืฉื›ืชื‘ื• ืœืคื ื™ 3-4 ืฉื ื™ื ืžื“ื•ืข ืื™ืŸ ืฆื•ืจืš ื‘-VPS ื–ื•ืœ. ื•ื‘ื›ืŸ, ื–ื” ื ื›ื•ืŸ, ืื– VPS "ื‘ืื’ื•ืจื”" ื”ื™ื” ืฉื™ื•ื•ืง ื˜ื”ื•ืจ ื•ืœื ื™ื›ื•ืœ ื”ื™ื” ืœื”ืฆื™ืข ื”ื–ื“ืžื ื•ื™ื•ืช ืขื‘ื•ื“ื” ืจื’ื™ืœื•ืช. ืื‘ืœ ื”ื–ืžื ื™ื ืžืฉืชื ื™ื, ื”ืขืœื•ืช ืฉืœ ืžืฉืื‘ื™ื ื•ื™ืจื˜ื•ืืœื™ื™ื ื”ื•ืคื›ืช ื ืžื•ื›ื” ื™ื•ืชืจ ื•ื™ื•ืชืจ, ื•ืชืžื•ืจืช 30 ืจื•ื‘ืœ ื‘ื—ื•ื“ืฉ ืื ื—ื ื• ืžื•ื›ื ื™ื ืœื”ืฆื™ืข ืืช ื–ื”:

  • ืžืขื‘ื“: Intel Xeon 2 GHz (ืœื™ื‘ื” ืื—ืช)
  • ืžืขืจื›ืช ืœื™ื ื•ืงืก (Debian, Ubuntu, CentOS ืœื‘ื—ื™ืจื”)
  • ื›ืชื•ื‘ืช IPv1 ื™ื™ืขื•ื“ื™ืช ืื—ืช
  • 10 GB ืฉืœ ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืขืœ ื›ื•ื ื ื™ SSD ืžื”ื™ืจื™ื ื‘ืจืžื” ืืจื’ื•ื ื™ืช
  • ื–ื™ื›ืจื•ืŸ RAM: 512 ืžื’ื”-ื‘ื™ื™ื˜
  • ื—ื™ื•ื‘ ืœืฉื ื™ื™ื”
  • ืชืขื‘ื•ืจื” ื‘ืœืชื™ ืžื•ื’ื‘ืœืช

ื”ืชืขืจื™ืฃ ื›ืคื•ืฃ ืœืžื’ื‘ืœื•ืช ื˜ื›ื ื™ื•ืช ื ื•ืกืคื•ืช, ืคืจื˜ื™ื ื‘ ื“ืฃ ื”ื”ืฆืขื” ื”ืžื’ื ื™ื‘ื” ืฉืœื ื• - VPS ืขื‘ื•ืจ 30 ืจื•ื‘ืœ. 

ืœืžื™ ืžืชืื™ื ื”ืฉืจืช ื”ื•ื™ืจื˜ื•ืืœื™ ื”ื–ื”? ื›ืŸ ื›ืžืขื˜ ืœื›ื•ืœื: ืžืชื—ื™ืœื™ื, ื—ื•ื‘ื‘ื™ื, ืžืคืชื—ื™ื ืžื ื•ืกื™ื, ื—ื•ื‘ื‘ื™ ืขืฉื” ื–ืืช ื‘ืขืฆืžืš ื•ืืคื™ืœื• ื›ืžื” ื—ื‘ืจื•ืช.

ืœืžื” ืžืชืื™ื ื”-VPS ื”ื–ื”?

ืื ื—ื ื• ื—ื•ืฉื‘ื™ื ืฉื”ืงื•ืจืื™ื ืฉืœ ื”ื‘ืจ ื‘ื”ื—ืœื˜ ื™ืžืฆืื• ืืช ื”ื“ืจืš ืฉืœื”ื ืœื”ืฉืชืžืฉ ื‘ืชืฆื•ืจื” ื”ื–ื•, ืื‘ืœ ื”ื—ืœื˜ื ื• ืœืืกื•ืฃ ืžื‘ื—ืจ ืจืขื™ื•ื ื•ืช ืžืฉืœื ื• - ืžื” ืื ืžื™ืฉื”ื• ืฆืจื™ืš ืืช ื–ื”, ืื‘ืœ ื”ื’ื‘ืจื™ื ืœื ื™ื•ื“ืขื™ื?

  • ื”ืฆื‘ ืืช ื”ืืชืจ ื”ืคืฉื•ื˜ ืฉืœืš, ืชื™ืง ืขื‘ื•ื“ื•ืช, ืงื•ืจื•ืช ื—ื™ื™ื ืขื ืงื•ื“ ื•ื›ื•'. ื›ืžื•ื‘ืŸ, ืืชืจ ื”ืื™ื ื˜ืจื ื˜ ื”ืžืขื•ืฆื‘ ืฉืœืš ืขื•ืฉื” ืจื•ืฉื ื—ื™ื•ื‘ื™ ืขืœ ื”ืžืขืกื™ืง. ื”ืฆื‘ ืื•ืชื• ื‘-VPS ืฉืœืš ื•ื”ื™ื” ืื—ืจืื™ ืœืื‘ื˜ื—ืช ื•ื™ืฆื™ื‘ื•ืช ื”ืืชืจ ื‘ืขืฆืžืš, ื•ืœื ืขืœ ื™ื“ื™ ืฆื•ื•ืช ืกืคืงื™ ื”ืื—ืกื•ืŸ ื”ืจื’ื™ืœื™ื.
  • ื”ืฉืชืžืฉ ื‘-VPS ืœืžื˜ืจื•ืช ื—ื™ื ื•ื›ื™ื•ืช: ืื™ืจื— ืืช ื”ืคืจื•ื™ืงื˜ ืฉืœืš, ืœืžื“ ืืช ื”ืชื›ื•ื ื•ืช ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืœ ื”ืฉืจืช ื•ื”ืฉืจืช, ื”ืชื ืกื” ื‘-DNS, ื”ืชืขืกืง ืขื ืืชืจ ื—ื™ื ื•ื›ื™ ืงื˜ืŸ.
  • ืœื˜ืœืคื•ื ื™ื”. ืœืคืขืžื™ื ื™ื–ื ื‘ื•ื“ื“, ืคืจื™ืœื ืกืจ ืื• ื—ื‘ืจื” ืงื˜ื ื” ืžืื•ื“ ื–ืงื•ืงื™ื ื ื•ืืฉื•ืช ืœื˜ืœืคื•ื ื™ื” IP, ื•ื”ืžืคืขื™ืœื™ื ืฉืœ ื”ื˜ืœืคื•ื ื™ื” ื”ื–ื• ืžืื•ื“ ื—ืžื“ื ื™ื. ื–ื” ืคืฉื•ื˜: ืื ื—ื ื• ืœื•ืงื—ื™ื ืืช ื”ืฉืจืช ืฉืœื ื•, ืงื•ื ื™ื ืžืกืคืจ ืžืžืคืขื™ืœ ื˜ืœืคื•ื ื™ื” IP, ืžืงื™ืžื™ื ืžืจื›ื–ื™ื” ื•ื™ืจื˜ื•ืืœื™ืช ื•ื™ื•ืฆืจื™ื ืžืกืคืจื™ื ืคื ื™ืžื™ื™ื (ื‘ืžื™ื“ืช ื”ืฆื•ืจืš). ื”ื—ื™ืกื›ื•ืŸ ืขืฆื•ื.
  • ื”ืฉืชืžืฉ ื‘ืฉืจืช ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ื™ื™ืฉื•ืžื™ื ืฉืœืš.
  • ื”ืฉืชืžืฉ ื‘ืฉืจืช ืœื ื™ืกื•ื™ื™ ืขืฉื” ื–ืืช ื‘ืขืฆืžืš, ื›ื•ืœืœ ืฉืœื™ื˜ื” ื•ืื™ืกื•ืฃ ื ืชื•ื ื™ื ืžื—ื™ื™ืฉื ื™ ืžืขืจื›ืช ื‘ื™ืช ื—ื›ื.
  • ื“ืจืš ื™ื•ืฆืืช ื“ื•ืคืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื”ื™ื ืœื”ืฆื™ื‘ ืขื•ื–ืจ ืžืกื—ืจ ื‘ื‘ื•ืจืกื” ื•ื™ืจื˜ื•ืืœื™ืช, ืจื•ื‘ื•ื˜ ืžืกื—ืจ, ืขืœ ื”ืฉืจืช. ืืชื” ืชื”ื™ื” ืื—ืจืื™ ื‘ืื•ืคืŸ ืžืœื ืขืœ ื™ืฆื™ื‘ื•ืช ื•ืื‘ื˜ื—ืช ื”ืฉืจืช, ืžื” ืฉืื•ืžืจ ืฉืชืงื‘ืœ ืžื›ืฉื™ืจ ืžื‘ื•ืงืจ ืœืžืกื—ืจ ื‘ื‘ื•ืจืกื”. ื•ื‘ื›ืŸ, ืœืžืงืจื” ืฉืžื™ืฉื”ื• ืžืขื•ื ื™ื™ืŸ ืื• ืžืชื›ื ืŸ :)

ื™ืฉ ื™ื™ืฉื•ืžื™ื ืขื‘ื•ืจ VPS ื›ื–ื” ื‘ืชื—ื•ื ื”ืืจื’ื•ื ื™. ื‘ื ื•ืกืฃ ืœืฉื™ืจื•ืช ื”ื˜ืœืคื•ื ื™ ืฉื”ื•ื–ื›ืจ ื›ื‘ืจ, ืืชื” ื™ื›ื•ืœ ืœื™ื™ืฉื ื›ืžื” ื“ื‘ืจื™ื ืžืขื ื™ื™ื ื™ื. ืœื“ื•ื’ืžื”:

  • ืžืงื ืžืื’ืจื™ ืžื™ื“ืข ืงื˜ื ื™ื ื•ืžื™ื“ืข ืฉื™ื”ื™ื” ื ื’ื™ืฉ ืœืขื•ื‘ื“ื™ื ื”ื ื•ืกืขื™ื ื‘ืžืจื—ืง, ืœืžืฉืœ ื‘ืืžืฆืขื•ืช ftp. ื–ื” ื™ืืคืฉืจ ืœืš ืœื”ื—ืœื™ืฃ ื‘ืžื”ื™ืจื•ืช ืจื‘ื” ื ื™ืชื•ื—ื™ื ื˜ืจื™ื™ื, ืชืฆื•ืจื•ืช ืžืขื•ื“ื›ื ื•ืช ืœืื ืฉื™ ืžื›ื™ืจื•ืช, ืžืฆื’ื•ืช ื•ื›ื•'.
  • ืชืŸ ื’ื™ืฉื” ื–ืžื ื™ืช ืœืžืฉืชืžืฉื™ื ืื• ืœืงื•ื—ื•ืช ื›ื“ื™ ืœื”ื“ื’ื™ื ืชื•ื›ื ื” ืื• ืžื“ื™ื”.

ื ืกื™ืขืช ืžื‘ื—ืŸ VPS ืขื‘ื•ืจ 30 ืจื•ื‘ืœ - ื ืขืฉื” ื‘ืฉื‘ื™ืœืš

30 ืจื•ื‘ืœ ื–ื” ื›ืœ ื›ืš ืžืขื˜ ืฉืืชื” ืืคื™ืœื• ืœื ืจื•ืฆื” ืœื”ื•ืฆื™ื ื›ืจื˜ื™ืก ื›ื“ื™ ืœืฉืœื ื•ืœื‘ื“ื•ืง. ื’ื ืื ื—ื ื• ืœืคืขืžื™ื ื›ืœ ื›ืš ืขืฆืœื ื™ื, ืื‘ืœ ื”ืคืขื ืขืฉื™ื ื• ื”ื›ืœ ื‘ืฉื‘ื™ืœื›ื. ืœืคื ื™ ื”ืฉืงืช ื”ืฉืจืชื™ื ืœืงืจื‘, ืขืจื›ื ื• ื‘ื“ื™ืงื” ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื›ืœ ื”ืคืจื˜ื™ื ื•ืœื”ืจืื•ืช ืœืžื” ื”ืฉืจืชื™ื ืžืกื•ื’ืœื™ื ื‘ืชืขืจื™ืฃ ื–ื”. ื›ื“ื™ ืœืขืฉื•ืช ืืช ื–ื” ื™ื•ืชืจ ืžืขื ื™ื™ืŸ, ื”ื•ืกืคื ื• ืืงืกื˜ืจื™ื ื•ื‘ื“ืงื ื• ืื™ืš ื”ืชืฆื•ืจื” ื”ื–ื• ืชืชื ื”ื’ ืื ื”ืฆืคื™ืคื•ืช ื•ื”ืขื•ืžืก ื—ื•ืจื’ื™ื ืžื”ืขืจื›ื™ื ืฉื”ื’ื“ืจื ื•. 

ื”ืžืืจื— ื”ื™ื” ืชื—ืช ืขื•ืžืก ืฉืœ ืžืกืคืจ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืฉื‘ื™ืฆืขื• ืžืฉื™ืžื•ืช ืฉื•ื ื•ืช ืขืœ ื”ืžืขื‘ื“ ื•ื”ืฉืชืžืฉื• ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘ืชืช-ืžืขืจื›ืช ื”ื“ื™ืกืง. ื”ืžื˜ืจื” ื”ื™ื ืœื“ืžื•ืช ืฆืคื™ืคื•ืช ืžื™ืงื•ื ื’ื‘ื•ื”ื” ื•ืขื•ืžืก ื“ื•ืžื” ืื• ื’ื“ื•ืœ ืžื–ื” ืฉืœ ืงืจื‘.

ื‘ื ื•ืกืฃ ืœืขื•ืžืก ื”ืงื‘ื•ืข, ื”ืชืงื ื• 3 ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืฉืืกืคื• ืžื“ื“ื™ื ืกื™ื ืชื˜ื™ื™ื ื‘ืืžืฆืขื•ืช sysbench, ืฉืชื•ืฆืื•ืชื™ื”ื ื”ืžืžื•ืฆืขื•ืช ื ื™ืชื ื• ืœื”ืœืŸ, ื•-50 ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืฉื™ืฆืจื• ืขื•ืžืก ื ื•ืกืฃ. ืœื›ืœ ื”ืžื›ื•ื ื•ืช ื”ื•ื™ืจื˜ื•ืืœื™ื•ืช ืœื‘ื“ื™ืงื” ื”ื™ื™ืชื” ืื•ืชื” ืชืฆื•ืจื” (ืœื™ื‘ื” ืื—ืช, RAM 1 GB, SSD 512 GB), ืชืžื•ื ืช debian 10 ื”ืกื˜ื ื“ืจื˜ื™ืช ื ื‘ื—ืจื” ื›ืžืขืจื›ืช ื”ื”ืคืขืœื”, ื”ืžื•ืฆืขืช ืœืžืฉืชืžืฉื™ื ื‘-RUVDS.

ื”ืขื•ืžืก ื”ื™ื” ืžื“ื•ืžื” ื‘ืื•ืคื™ื• ื•ื‘ื’ื•ื“ืœื• ื“ื•ืžื” ืœืœื—ื™ืžื”:

  • ื›ืžื” ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื”ื•ืฉืงื• ืขื ืขื•ืžืก ื ืžื•ืš
  • ื—ืœืง ืžื”ืžื›ื•ื ื•ืช ื”ืจื™ืฆื• ืกืงืจื™ืคื˜ ื‘ื“ื™ืงื” ื”ืžื“ืžื” ืืช ื”ืขื•ืžืก ืขืœ ื”ืžืขื‘ื“ (ื‘ืืžืฆืขื•ืช ื›ืœื™ ื”ืฉื™ืจื•ืช ืœื—ืฅ)
  • ื‘ื—ืœืง ื”ื ื•ืชืจ ืฉืœ ื”ืžื›ื•ื ื•ืช ื”ื•ื™ืจื˜ื•ืืœื™ื•ืช, ื”ืจืฆื ื• ืกืงืจื™ืคื˜ ืฉื”ืฉืชืžืฉ ื‘-dd ื›ื“ื™ ืœื”ืขืชื™ืง ื ืชื•ื ื™ื ืžื ืชื•ื ื™ื ืžื•ื›ื ื™ื ืžืจืืฉ ืœื“ื™ืกืง ืขื ืžื’ื‘ืœื” ืฉื”ื•ื’ื“ืจื” ื‘ืืžืฆืขื•ืช pv (ื ื™ืชืŸ ืœืจืื•ืช ื“ื•ื’ืžืื•ืช ื›ืืŸ ะธ ื›ืืŸ).

ื›ืžื• ื›ืŸ, ื›ื–ื›ื•ืจ, ื”ื™ื• ืœื ื• ืฉืœื•ืฉ ืžื›ื•ื ื•ืช ืฉืืกืคื• ืžื“ื“ื™ื ืกื™ื ืชื˜ื™ื™ื.

ื‘ื›ืœ ืžื›ื•ื ื”, ื”ื•ืคืขืœ ืกืงืจื™ืคื˜ ื‘ืื•ืคืŸ ืžื—ื–ื•ืจื™ ื›ืœ 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, ืืš ื”ืขืจื›ื™ื ื”ืžืžื•ืฆืขื™ื ืœื›ืœ ืชืงื•ืคืช ื”ื‘ื“ื™ืงื” ื ืœืงื—ื• ืžื›ืœ ื”ืžื›ื•ื ื•ืช, ืืช ื”ืชื•ืฆืื” ื ื™ืชืŸ ืœืจืื•ืช ื›ืืŸ:

Sysbanch-avg.txtsysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 10000

Test execution summary:
total time: 19.2244s
total number of events: 10000
total time taken by event execution: 19.2104
per-request statistics:
min: 1.43ms
avg: 1.92ms
max: 47.00ms
approx. 95 percentile: 3.02ms

Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 19.2104/0.00

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing memory operations speed test
Memory block size: 1K

Memory transfer size: 102400M

Memory operations type: write
Memory scope type: global
Threads started!
Done.

Operations performed: 104857600 (328001.79 ops/sec)

102400.00 MB transferred (320.32 MB/sec)

Test execution summary:
total time: 320.9155s
total number of events: 104857600
total time taken by event execution: 244.8399
per-request statistics:
min: 0.00ms
avg: 0.00ms
max: 139.41ms
approx. 95 percentile: 0.00ms

Threads fairness:
events (avg/stddev): 104857600.0000/0.00
execution time (avg/stddev): 244.8399/0.00

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Extra file open flags: 0
128 files, 16Mb each
2Gb total file size
Block size 16Kb
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing sequential write (creation) test
Threads started!
Done.

Operations performed: 0 Read, 131072 Write, 128 Other = 131200 Total
Read 0b Written 2Gb Total transferred 2Gb (320.1Mb/sec)
20251.32 Requests/sec executed

Test execution summary:
total time: 6.9972s
total number of events: 131072
total time taken by event execution: 5.2246
per-request statistics:
min: 0.01ms
avg: 0.04ms
max: 96.76ms
approx. 95 percentile: 0.03ms

Threads fairness:
events (avg/stddev): 131072.0000/0.00
execution time (avg/stddev): 5.2246/0.00

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Extra file open flags: 0
128 files, 16Mb each
2Gb total file size
Block size 16Kb
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing sequential read test
Threads started!
Done.

Operations performed: 131072 Read, 0 Write, 0 Other = 131072 Total
Read 2Gb Written 0b Total transferred 2Gb (91.32Mb/sec)
5844.8 Requests/sec executed

Test execution summary:
total time: 23.1054s
total number of events: 131072
total time taken by event execution: 22.9933
per-request statistics:
min: 0.00ms
avg: 0.18ms
max: 295.75ms
approx. 95 percentile: 0.77ms

Threads fairness:
events (avg/stddev): 131072.0000/0.00
execution time (avg/stddev): 22.9933/0.00

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Extra file open flags: 0
128 files, 16Mb each
2Gb total file size
Block size 16Kb
Number of random requests for random IO: 10000
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Done.

Operations performed: 6000 Read, 4000 Write, 12800 Other = 22800 Total
Read 93.75Mb Written 62.5Mb Total transferred 156.25Mb (1341.5Kb/sec)
85.61 Requests/sec executed

Test execution summary:
total time: 152.9786s
total number of events: 10000
total time taken by event execution: 14.1879
per-request statistics:
min: 0.01ms
avg: 1.41ms
max: 210.22ms
approx. 95 percentile: 4.95ms

Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 14.1879/0.00

ื”ืชื•ืฆืื•ืช ื”ืŸ ืื™ื ื“ื™ืงื˜ื™ื‘ื™ื•ืช, ืืš ืขื“ื™ื™ืŸ ืื™ืŸ ืœืจืื•ืช ื‘ื”ืŸ QoS. 

ืžื›ื•ื ื•ืช ื”ื™ื•ืฆืจื•ืช ืขื•ืžืก ื ื•ืกืฃ

Soft

  • apt-get ืขื“ื›ื•ืŸ
  • apt- ืœืงื‘ืœ ืฉื“ืจื•ื’
  • apt-get ืœื”ืชืงื™ืŸ ืคื™ื™ืชื•ืŸ-ืคื™ืค
  • 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

ื‘ืกื™ืก ื‘ื“ื™ืงื” ืงื˜ืŸ:

ื˜ื‘ืœืชื™ 

RowsCount 

ื’ื•ื“ืœ ื ืชื•ื ื™ื (MB)

ื’ื•ื“ืœ ืื™ื ื“ืงืก (KB)

ืžื—ืœืงื•ืช 

9

0.02

16.00

dept_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. insertSalary: ืžื•ืกื™ืฃ ืžืฉื›ื•ืจืช

ืžืงื•ืจ ืฉื™ืจื•ืช (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.

ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉืžืกื“ ื”ื ืชื•ื ื™ื ืงื˜ืŸ ืžืื•ื“, ื”ืคืงื•ื“ื”:

mysql -e "SHOW ENGINE INNODB STATUS"

ืžืจืื” ืฉ:

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

ืœื”ืœืŸ ื–ืžื ื™ ื”ืชื’ื•ื‘ื” ื”ืžืžื•ืฆืขื™ื ืœื‘ืงืฉื•ืช:

ืชื•ื•ื™ืช

ืžึฐืžื•ึผืฆึธืข

ื—ืฆื™ื•ืŸ

90% ืงื•

95% ืงื•

99% ืงื•

ื“ืงื•ืช

ืžืงืก

getEmployee

37.64

12.57

62.28

128.5

497.57

5

4151.78

getState

17

7.57

30.14

58.71

193

3

2814.71

patchEmployee

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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”