ΠΠ°ΠΊ ΠΏΡΠΈΡΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ΅Π»ΠΎΡΠΈ ΠΏΠΎΠ΄ ΡΡΠΊΠΎΠΉ: Ρ
ΠΎΡΠΎΡΠΎ ΠΏΠΈΡΡΡΠ°Ρ ΡΡΡΠΊΠ° ΠΈ Π±Π»ΠΎΠΊΠ½ΠΎΡ, Π·Π°ΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΊΠ°ΡΠ°Π½Π΄Π°Ρ, ΡΠ΄ΠΎΠ±Π½Π°Ρ ΠΌΡΡΠΊΠ°, ΠΏΠ°ΡΠ° Π»ΠΈΡΠ½ΠΈΡ
ΠΏΡΠΎΠ²ΠΎΠ΄ΠΎΠ² ΠΈ Ρ.Π΄. ΠΡΠΈ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΡΠ΅ ΡΡΡΠΊΠΈ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡ Π½Π° ΡΠ΅Π±Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ, Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΠΌΡΠΎΡΡΠ°. Π’Π°ΠΊΠ°Ρ ΠΆΠ΅ ΠΈΡΡΠΎΡΠΈΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠΌΠΈ ΠΈ Π΄Π΅ΡΠΊΡΠΎΠΏΠ½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ: Π΄Π»Ρ Π΄Π»ΠΈΠ½Π½ΡΡ
ΡΠΊΡΠΈΠ½ΡΠΎΡΠΎΠ², Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΡΡΠ° Π»ΠΈΡΠ½ΡΡ
ΡΠΈΠ½Π°Π½ΡΠΎΠ², ΡΠ»ΠΎΠ²Π°ΡΠΈ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠΈ, ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΡΡ ΠΈ Ρ.Π΄. Π Π΅ΡΡΡ Π»ΠΈ Ρ Π²Π°Ρ ΡΠ°ΠΊΠΎΠΉ
ΠΠΎΠΌΠΌΡΠ½ΠΈΠ·ΠΌ Π½Π°ΡΡΡΠΏΠΈΠ», ΡΠΎΠ²Π°ΡΠΈΡΠΈ
ΠΠ½ ΡΠ°ΠΊΠΎΠΉ ΡΠ²ΠΎΠΉ β Π½Π°Ρ VPS Π·Π° ΡΡΠΈΠ΄ΡΠ°ΡΠΊΡ
ΠΡ Π½Π°ΡΠΈΡΠ°Π»ΠΈΡΡ ΡΡΠ°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ 3-4 Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ ΠΏΠΈΡΠ°Π»ΠΈ ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ Π½Π΅ Π½ΡΠΆΠ΅Π½ Π½Π΅Π΄ΠΎΡΠΎΠ³ΠΎΠΉ VPS. ΠΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎΠ³Π΄Π° VPS Β«Π·Π° ΠΊΠΎΠΏΠ΅ΠΉΠΊΠΈΒ» Π±ΡΠ» ΡΠΈΡΡΠΎΠΉ Π²ΠΎΠ΄Ρ ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³ΠΎΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠ³ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΌΠ΅Π½ΡΡΡΡΡ, ΡΡΠΎΠΈΠΌΠΎΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΡΡ Π½ΠΈΠΆΠ΅ ΠΈ Π·Π° 30 ΡΡΠ±Π»Π΅ΠΉ Π² ΠΌΠ΅ΡΡΡ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π²ΠΎΡ ΡΡΠΎ:
- ΠΡΠΎΡΠ΅ΡΡΠΎΡ: Intel Xeon 2 ΠΠΡ (1 ΡΠ΄ΡΠΎ)
- Π‘ΠΈΡΡΠ΅ΠΌΠ° Linux (Debian, Ubuntu, CentOS Π½Π° Π²ΡΠ±ΠΎΡ)
- 1 Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ IPv4-Π°Π΄ΡΠ΅Ρ
- 10 ΠΠ± Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π½Π° Π±ΡΡΡΡΡΡ SSD-Π΄ΠΈΡΠΊΠ°Ρ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΏΠ°ΠΌΡΡΡ: 512 ΠΠ±
- ΠΠΎΡΠ΅ΠΊΡΠ½Π΄Π½Π°Ρ ΡΠ°ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
- ΠΠ΅Π·Π»ΠΈΠΌΠΈΡΠ½ΡΠΉ ΡΡΠ°ΡΠΈΠΊ
ΠΠ° ΡΠ°ΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π½Π°
ΠΠΎΠΌΡ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ ΡΠ°ΠΊΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ? ΠΠ° ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ΠΌ: Π½ΠΎΠ²ΠΈΡΠΊΠ°ΠΌ, ΡΠ½ΡΡΠ·ΠΈΠ°ΡΡΠ°ΠΌ, ΠΎΠΏΡΡΠ½ΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ, DIY-ΡΠ°Π½Π°ΡΠ°ΠΌ ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΌ.
ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΡΠ°ΠΊΠΎΠΉ VPS?
ΠΡ Π΄ΡΠΌΠ°Π΅ΠΌ, ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ Π₯Π°Π±ΡΠ° ΡΠΎΡΠ½ΠΎ Π½Π°ΠΉΠ΄ΡΡ ΡΠ²ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π½ΠΎ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΡΠ²ΠΎΡ ΠΏΠΎΠ΄Π±ΠΎΡΠΊΡ ΠΈΠ΄Π΅ΠΉ β Π° ΡΠΎ Π²Π΄ΡΡΠ³ ΠΊΠΎΠΌΡ-ΡΠΎ Π½Π°Π΄ΠΎ, Π° ΠΌΡΠΆΠΈΠΊΠΈ ΠΈ Π½Π΅ Π·Π½Π°ΡΡ?
- Π Π°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠ°ΠΉΡ, ΠΏΠΎΡΡΡΠΎΠ»ΠΈΠΎ, ΡΠ΅Π·ΡΠΌΠ΅ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΏΡΠΎΡ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΡΠΉ ΡΠ°ΠΉΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΠΎΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅. Π Π°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° ΡΠ²ΠΎΡΠΌ VPS ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΠΉΡΠ΅ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ°ΠΉΡΠ° ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, Π° Π½Π΅ ΡΠΈΠ»Π°ΠΌΠΈ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΠΎΠ±ΡΡΠ½ΡΡ Ρ ΠΎΡΡΠΈΠ½Π³ΠΎΠ².
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ VPS Π΄Π»Ρ ΡΡΠ΅Π±Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ: ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈΠ·ΡΡΠΈΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ DNS, ΠΏΠΎΠΊΠΎΠ²ΡΡΡΡΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΡΡΠ΅Π±Π½ΡΠΉ ΡΠ°ΠΉΡ.
- ΠΠ»Ρ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΠΈ. ΠΠ½ΠΎΠ³Π΄Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΠ΅Π»Ρ, ΡΡΠΈΠ»Π°Π½ΡΠ΅ΡΡ ΠΈΠ»ΠΈ ΠΎΡΠ΅Π½Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΡΠ°ΠΉΠ½Π΅ Π½ΡΠΆΠ½Π° IP-ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΡ, Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠΎΠΉ ΡΠ°ΠΌΠΎΠΉ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΠΈ Π²Π΅ΡΡΠΌΠ° ΠΆΠ°Π΄Π½ΡΠ΅. ΠΡΡ ΠΏΡΠΎΡΡΠΎ: Π±Π΅ΡΡΠΌ ΡΠ²ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ, ΠΏΠΎΠΊΡΠΏΠ°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° IP-ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΠΈ, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΠ’Π‘ ΠΈ ΡΠΎΠ·Π΄Π°ΡΠΌ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° (ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ). ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΊΠΎΠ»ΠΎΡΡΠ°Π»ΡΠ½Π°Ρ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ DIY-ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ², Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠ±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ Ρ Π΄Π°ΡΡΠΈΠΊΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ°.
- ΠΠ΅ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ β ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π±ΠΈΡΠΆΠ΅Π²ΠΎΠΉ ΡΠΎΡΠ³ΠΎΠ²Π»ΠΈ, ΡΠΎΡΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠ±ΠΎΡΠ°. ΠΡ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π° Π·Π½Π°ΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΡΠ³ΠΎΠ² Π½Π° ΡΠΎΠ½Π΄ΠΎΠ²Ρ ΡΡΠ½ΠΊΠ°Ρ . ΠΡ Π²Π΄ΡΡΠ³ ΠΊΡΠΎ ΡΠ²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΈΠ»ΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ π
ΠΡΡΡ ΡΠ°ΠΊΠΎΠΌΡ VPS ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ΅ΡΠ΅. ΠΡΠΎΠΌΠ΅ ΡΠΆΠ΅ Π½Π°Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΡΡΡΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
- Π Π°Π·ΠΌΠ΅ΡΠ°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠΎΠ²ΠΎΡΠ½ΡΠΌ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ°ΠΌ Π½Π° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ftp. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠ²Π΅ΠΆΠ΅ΠΉ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΎΠΉ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΆΠ½ΠΈΠΊΠΎΠ², ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ Ρ.Π΄.
- ΠΠ°Π²Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΌΡΠ»ΡΡΠΈΠΌΠ΅Π΄ΠΈΠ°.
Π’Π΅ΡΡ-Π΄ΡΠ°ΠΉΠ² VPS Π·Π° 30 ΡΡΠ±Π»Π΅ΠΉ β ΡΠ΄Π΅Π»Π°Π»ΠΈ Π·Π° Π²Π°Ρ
30 ΡΡΠ±Π»Π΅ΠΉ ΡΡΠΎ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°Π»ΠΎ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΎΡ ΠΎΡΠ° Π΄ΠΎΡΡΠ°Π²Π°ΡΡ ΠΊΠ°ΡΡΠΎΡΠΊΡ, ΡΡΠΎΠ±Ρ ΠΎΠΏΠ»Π°ΡΠΈΡΡ ΠΈ ΠΏΠΎΡΠ΅ΡΡΠΈΡΡ. ΠΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠΎΠΆΠ΅ ΡΠ°ΠΊΠΈΠ΅ Π»Π΅Π½ΠΈΠ²ΡΠ΅, Π½ΠΎ Π² ΡΡΠΎΡ ΡΠ°Π· ΡΠ΄Π΅Π»Π°Π»ΠΈ Π²ΡΡ Π·Π° Π²Π°Ρ. ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π² Π±ΠΎΠΉ ΠΌΡ ΠΏΡΠΎΠ²Π΅Π»ΠΈ ΡΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, Π½Π° ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°ΡΠΈΡΠ΅. Π§ΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅, ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠΊΡΡΡΠΈΠΌΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π±Ρ ΠΏΠΎΠ²Π΅Π΄ΡΡ ΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π΅ΡΠ»ΠΈ ΠΏΠ»ΠΎΡΠ½ΠΎΡΡΡ ΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠ° Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.Β
Π₯ΠΎΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΡΡ ΠΏΠΎΠ΄ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄ΠΈΡΠΊΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ. Π¦Π΅Π»Ρ β ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΠΎΠΊΡΡ ΠΏΠ»ΠΎΡΠ½ΠΎΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ Π½Π°Π³ΡΡΠ·ΠΊΡ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌΡΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΡΡ, ΡΠ΅ΠΌ Π±ΠΎΠ΅Π²Π°Ρ.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ 3 Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠΎΠ±ΠΈΡΠ°ΡΡΠΈΠ΅ ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ sysbench, ΡΡΡΠ΅Π΄Π½Π΅Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ²Π΅Π»ΠΈ Π½ΠΈΠΆΠ΅, ΠΈ 50 Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ. ΠΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (1 ΡΠ΄ΡΠΎ, RAM 512 ΠΠ±, SSD 10ΠΠ±), Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΡΠ±ΡΠ°Π½ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π· debian 9.6, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π½Π° RUVDS.
ΠΠ°Π³ΡΡΠ·ΠΊΡ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΏΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΡ ΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Π΅ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌΡΡ Ρ Π±ΠΎΠ΅Π²ΠΎΠΉ:
- Π§Π°ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Π±ΡΠ»ΠΈ Π·Π°ΠΏΡΡΠ΅Π½Ρ Ρ Π½ΠΈΠ·ΠΊΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ
- Π§Π°ΡΡΡ ΠΌΠ°ΡΠΈΠ½ Β«ΠΊΡΡΡΠΈΠ»ΠΈΒ» ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΈΠΌΠΈΡΠΈΡΡΡΡΠΈΠΉ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΠ»ΠΈΡΡ
stress ) - ΠΠ° ΠΎΡΡΠ°Π²ΡΠ΅ΠΉΡΡ ΡΠ°ΡΡΠΈ Π²ΠΈΡΡΡΠ°Π»ΠΎΠΊ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ dd Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π½Π° Π΄ΠΈΡΠΊ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ, Π·Π°Π΄Π°Π½Π½ΡΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pv (ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ
Π·Π΄Π΅ΡΡ ΠΈΠ·Π΄Π΅ΡΡ ).
ΠΡΡ, ΠΊΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Ρ Π½Π°Ρ Π±ΡΠ»ΠΈ ΡΡΠΈ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠΎΠ±ΠΈΡΠ°ΡΡΠΈΠ΅ ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ.
ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π· Π² 15 ΠΌΠΈΠ½ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ sysbench Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π΄ΠΈΡΠΊΠ°.
CΠΊΡΠΈΠΏΡ 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.Β
ΠΠ°ΡΠΈΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ
Π‘ΠΎΡΡ:
- apt-get update
- apt-get upgrade
- apt-get install python-pip
- pip install 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
Π’Π΅ΡΡΠΎΠ²Π°Ρ Π±Π°Π·Π° ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ°:
TableΒ
RowsCountΒ
Data size (MB)
Index size (KB)
departmentsΒ
9
0.02
16.00
dept_empΒ
331143Β
11.52
5648.00
dept_managerΒ
24Β
0.02
16.00
employeesΒ
299379Β
14.52
0.00
salariesΒ
2838426Β
95.63
0.00Β
titlesΒ
442783Β
19.56
0.00
ΠΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΠΊΠΎΠ»Π΅Π½ΠΊΠ΅ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅, ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ΅ΡΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
- getState: Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ°ΡΡΡ
- getEmployee: Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ· Π±Π°Π·Ρ employee (+salaries, +titles)
- patchEmployee: ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠΎΠ»Ρ employee
- insertSalary: Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΡΠ°Π²ΠΊΡ salary
ΠΡΡ ΠΎΠ΄Π½ΠΈΠΊ ΡΠ΅ΡΠ²ΠΈΡΠ° (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
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΡΡΠ΅Π΄Π½Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΡΠ²Π΅ΡΠ° Π½Π° Π·Π°ΠΏΡΠΎΡΡ:
Label
Average
Median
90% Line
95% Line
99% Line
Min
Max
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
putSalary
167.21
86.93
315.34
501.07
1927.12
7
6722.44
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π΄Π°Π½Π½ΡΠΌ ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΡΡΠ΄ΠΈΡΡ ΠΎ ΡΠΎΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π°Π½Π½ΡΠΉ VPS ΠΏΠΎΠ΄ Π²Π°ΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈ Π² ΡΠ΅Π»ΠΎΠΌ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΡΠ΅ΠΌΠΈ ΠΊΠ΅ΠΉΡΠ°ΠΌΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π½Π°ΠΌ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π² ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ.Π’Π°ΠΊ ΡΡΠΎ Π½Π°Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ²Π½ΠΎ Π½Π΅ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΠΉ. ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΠΌ ΡΠ°ΠΌΠΈΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄Ρ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ Π·Π° 30 ΡΡΠ±Π»Π΅ΠΉ Π½Π° Π²Π°ΡΠΈΡ
ΡΠ΅Π°Π»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
ΠΈ Π·Π°Π΄Π°ΡΠ°Ρ
ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
ΡΠ²ΠΎΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com