Π’ΠΎΠ»ΠΊΠΎΠ²Π° Π΅ Ρ
ΡΠ±Π°Π²ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΠΌΠ°Π»ΠΊΠΈ Π½Π΅ΡΠ° ΡΠ° ΠΏΠΎΠ΄ ΡΡΠΊΠ°: Π΄ΠΎΠ±ΡΠ° Ρ
ΠΈΠΌΠΈΠΊΠ°Π»ΠΊΠ° ΠΈ Π±Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ, ΠΏΠΎΠ΄ΠΎΡΡΡΠ΅Π½ ΠΌΠΎΠ»ΠΈΠ², ΡΠ΄ΠΎΠ±Π½Π° ΠΌΠΈΡΠΊΠ°, Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΊΠ°Π±Π΅Π»Π° ΠΈ Ρ.Π½. Π’Π΅Π·ΠΈ Π½Π΅Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΈ Π½Π΅ΡΠ° Π½Π΅ ΠΏΡΠΈΠ²Π»ΠΈΡΠ°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ, Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΡΡ ΠΊΠΎΠΌΡΠΎΡΡ ΠΊΡΠΌ ΠΆΠΈΠ²ΠΎΡΠ°. Π‘ΡΡΠ°ΡΠ° ΠΈΡΡΠΎΡΠΈΡ Π΅ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΈ Π½Π°ΡΡΠΎΠ»Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: Π·Π° Π΄ΡΠ»Π³ΠΈ Π΅ΠΊΡΠ°Π½Π½ΠΈ ΡΠ½ΠΈΠΌΠΊΠΈ, Π·Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΊΠ°ΡΡΠΈΠ½Π°, Π·Π° ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° Π»ΠΈΡΠ½ΠΈ ΡΠΈΠ½Π°Π½ΡΠΈ, ΡΠ΅ΡΠ½ΠΈΡΠΈ, ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠΈ, ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΡΠΈ ΠΈ Π΄Ρ. ΠΠΌΠ°Ρ Π»ΠΈ Π΅Π΄ΠΈΠ½?
ΠΠΎΠΌΡΠ½ΠΈΠ·ΠΌΡΡ Π΄ΠΎΠΉΠ΄Π΅, Π΄ΡΡΠ³Π°ΡΠΈ.
Π’ΠΎΠΉ Π΅ ΡΠ°ΠΊΡΠ² - Π½Π°ΡΠΈΡΡ VPS Π·Π° ΡΡΠΈΠ΄Π΅ΡΠ΅Ρ
ΠΡΠΎΡΠ΅ΡΠΎΡ ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΈΡΠ°Ρ Π° ΠΏΡΠ΅Π΄ΠΈ 3-4 Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π·Π° ΡΠΎΠ²Π° Π·Π°ΡΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΅Π²ΡΠΈΠ½ VPS. Π, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠ°, ΡΠΎΠ³Π°Π²Π° VPS "Π·Π° ΡΡΠΎΡΠΈΠ½ΠΊΠ°" Π±Π΅ΡΠ΅ ΡΠΈΡΡ ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈ Π½ΠΎΡΠΌΠ°Π»Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ°. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π°ΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ, ΡΠ΅Π½Π°ΡΠ° Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ ΡΡΠ°Π²Π° Π²ΡΠ΅ ΠΏΠΎ-Π½ΠΈΡΠΊΠ° ΠΈ Π·Π° 30 ΡΡΠ±Π»ΠΈ Π½Π° ΠΌΠ΅ΡΠ΅Ρ ΡΠΌΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠΌ ΡΠΎΠ²Π°:
- ΠΡΠΎΡΠ΅ΡΠΎΡ: Intel Xeon 2 GHz (1 core)
- Linux ΡΠΈΡΡΠ΅ΠΌΠ° (Debian, Ubuntu, CentOS ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ)
- 1 ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ IPv4 Π°Π΄ΡΠ΅Ρ
- 10 GB ΠΌΡΡΡΠΎ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π° Π±ΡΡΠ·ΠΈ SSD ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΎΡ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π΅Π½ ΠΊΠ»Π°Ρ
- RAM: 512 MB
- Π’Π°ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Π°
- ΠΠ΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΡΡΠ°ΡΠΈΠΊ
Π’Π°ΡΠΈΡΠ°ΡΠ° ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π°
ΠΠ° ΠΊΠΎΠ³ΠΎ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΡΠΎΠ·ΠΈ Π²ΠΈΡΡΡΠ°Π»Π΅Π½ ΡΡΡΠ²ΡΡ? ΠΠ° Π½Π° ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ: Π½Π°ΡΠΈΠ½Π°Π΅ΡΠΈ, Π΅Π½ΡΡΡΠΈΠ°ΡΡΠΈ, ΠΎΠΏΠΈΡΠ½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, ΡΠ΅Π½ΠΎΠ²Π΅ Π½Π° ΠΠ°ΠΏΡΠ°Π²ΠΈ ΡΠΈ ΡΠ°ΠΌ ΠΈ Π΄ΠΎΡΠΈ Π½ΡΠΊΠΎΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.
ΠΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΡΠΎΠ·ΠΈ VPS?
Π‘ΠΌΡΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Habr ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½ΠΎ ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΡΠ΅Π»Π΅ΠΊΡΠΈΡ ΠΎΡ ΠΈΠ΄Π΅ΠΈ - ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΠΈΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ ΡΠΎΠ²Π°, Π½ΠΎ ΠΌΡΠΆΠ΅ΡΠ΅ Π½Π΅ Π·Π½Π°ΡΡ?
- ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΡΠ²ΠΎΡ ΠΏΡΠΎΡΡ ΡΠ΅Π±ΡΠ°ΠΉΡ, ΠΏΠΎΡΡΡΠΎΠ»ΠΈΠΎ, Π°Π²ΡΠΎΠ±ΠΈΠΎΠ³ΡΠ°ΡΠΈΡ Ρ ΠΊΠΎΠ΄ ΠΈ Ρ.Π½. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π²Π°ΡΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΡΠ΅Π± ΡΠ°ΠΉΡ ΠΏΡΠ°Π²ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΎ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»Ρ. ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ Π½Π° Π²Π°ΡΠΈΡ VPS ΠΈ ΠΏΠΎΠ΅ΠΌΠ΅ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° ΠΈ ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ°ΠΉΡΠ° ΡΠ°ΠΌΠΈ, Π° Π½Π΅ ΠΎΡ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»Π° Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ Ρ ΠΎΡΡΠΈΠ½Π³ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ VPS Π·Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΠ΅Π»ΠΈ: Ρ ΠΎΡΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΈ, ΠΈΠ·ΡΡΠ°Π²Π°ΠΉΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ ΡΡΡΠ²ΡΡΠ½Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΠΉΡΠ΅ Ρ DNS, Π±ΡΡΠΊΠ°ΠΉΡΠ΅ Ρ ΠΌΠ°Π»ΡΠΊ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π΅Π½ ΡΠ°ΠΉΡ.
- ΠΠ° ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΡ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π΅Π½ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ°Ρ, ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΠΎΡΡΠ°ΡΠ½ΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ IP ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΡ, Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΡ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π°Π»ΡΠ½ΠΈ. ΠΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ: Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡ ΡΡΡΠ²ΡΡ, ΠΊΡΠΏΡΠ²Π°ΠΌΠ΅ Π½ΠΎΠΌΠ΅Ρ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π° IP ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΡ, Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΠΌΠ΅ Π²ΠΈΡΡΡΠ°Π»Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π½Π° ΡΠ΅Π½ΡΡΠ°Π»Π° ΠΈ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π²ΡΡΡΠ΅ΡΠ½ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° (Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ). Π‘ΠΏΠ΅ΡΡΡΠ²Π°Π½ΠΈΡΡΠ° ΡΠ° ΠΊΠΎΠ»ΠΎΡΠ°Π»Π½ΠΈ.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΡΡΠ²ΡΡΠ°, Π·Π° Π΄Π° ΡΠ΅ΡΡΠ²Π°ΡΠ΅ Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΡΡΠ²ΡΡΠ° Π·Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ βΠΠ°ΠΏΡΠ°Π²ΠΈ ΡΠΈ ΡΠ°ΠΌβ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½Π΅ ΠΈ ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ΅Π½Π·ΠΎΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠ΅Π½ Π΄ΠΎΠΌ.
- ΠΠ΅ΠΎΠ±ΠΈΡΠ°Π΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠ° Π°ΡΠΈΡΡΠ΅Π½Ρ Π·Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° Π±ΠΎΡΡΠΎΠ²Π° ΡΡΡΠ³ΠΎΠ²ΠΈΡ, ΡΠΎΠ±ΠΎΡ Π·Π° ΡΡΡΠ³ΠΎΠ²ΠΈΡ. ΠΠΈΠ΅ ΡΠ΅ Π½ΠΎΡΠΈΡΠ΅ ΠΏΡΠ»Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ Π·Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ° ΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΡΡΡΠ³ΠΎΠ²ΠΈΡ Π½Π° ΡΠΎΠ½Π΄ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°Π·Π°ΡΠΈ. Π, Π°ΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π° ΠΈΠ»ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠ° :)
ΠΠΌΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΠ°ΠΊΡΠ² VPS Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΡΡΠ΅ΡΠ°. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠ°ΡΠ° ΡΠ΅Π»Π΅ΡΠΎΠ½Π½Π° ΡΡΠ»ΡΠ³Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ Π½Π΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
- ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΠΌΠ°Π»ΠΊΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° ΠΏΡΡΡΠ²Π°ΡΠΈ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ ΠΎΡ ΡΠ°Π·ΡΡΠΎΡΠ½ΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ΅Π· ftp. Π’ΠΎΠ²Π° ΡΠ΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ·ΠΎ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ²Π΅ΠΆΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈ, Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π° ΡΡΡΠ³ΠΎΠ²ΡΠΈ, ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ Ρ.Π½.
- ΠΠ°ΠΉΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π΅Π½ Π΄ΠΎΡΡΡΠΏ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π·Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΠΎΡΡΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΌΠ΅Π΄ΠΈΡ.
VPS ΡΠ΅ΡΡ Π΄ΡΠ°ΠΉΠ² Π·Π° 30 ΡΡΠ±Π»ΠΈ - Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ Π·Π° Π²Π°Ρ
30 ΡΡΠ±Π»ΠΈ ΡΠ° ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ, ΡΠ΅ Π΄ΠΎΡΠΈ Π½Π΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΈΠ·Π²Π°Π΄ΠΈΡΠ΅ ΠΊΠ°ΡΡΠ°, Π·Π° Π΄Π° ΠΏΠ»Π°ΡΠΈΡΠ΅ ΠΈ ΡΠ΅ΡΡΠ²Π°ΡΠ΅. Π Π½ΠΈΠ΅ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠΌΠ΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΈ, Π½ΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΡ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΎ Π·Π° Π²Π°Ρ. ΠΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΡΠ½Π΅ΠΌ ΡΡΡΠ²ΡΡΠΈΡΠ΅ Π² Π±ΠΈΡΠΊΠ°, ΠΏΡΠΎΠ²Π΅Π΄ΠΎΡ ΠΌΠ΅ ΡΠ΅ΡΡ, Π·Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΈ ΡΡΡΠ²ΡΡΠΈΡΠ΅ ΠΏΡΠΈ ΡΠ°Π·ΠΈ ΡΠ°ΡΠΈΡΠ°. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΌΠ΅ Π΅ΠΊΡΡΡΠ΅ΠΌΠ½ΠΈ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡ ΠΌΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ ΡΠ΅ Π΄ΡΡΠΆΠΈ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π°ΠΊΠΎ ΠΏΠ»ΡΡΠ½ΠΎΡΡΡΠ° ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π°Π΄Π²ΠΈΡΠ°Π²Π°Ρ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΎΡ Π½Π°Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ.
Π₯ΠΎΡΡΡΡ Π±Π΅ΡΠ΅ ΠΏΠΎΠ΄ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π΄ΠΈΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π° Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°. Π¦Π΅Π»ΡΠ° Π΅ Π΄Π° ΡΠ΅ ΡΠΈΠΌΡΠ»ΠΈΡΠ° Π²ΠΈΡΠΎΠΊΠ° ΠΏΠ»ΡΡΠ½ΠΎΡΡ Π½Π° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, ΡΡΠ°Π²Π½ΠΈΠΌΠΎ ΠΈΠ»ΠΈ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠΎ ΠΎΡ Π±ΠΎΠΉΠ½ΠΎΡΠΎ.
Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ ΠΌΠ΅ 3 Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ±ΠΈΡΠ°Ρ Π° ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° sysbench, ΡΠΈΠΈΡΠΎ ΡΡΠ΅Π΄Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π±ΡΡ Π° Π΄Π°Π΄Π΅Π½ΠΈ ΠΏΠΎ-Π΄ΠΎΠ»Ρ, ΠΈ 50 Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ·Π΄Π°Π΄ΠΎΡ Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅. ΠΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈΠΌΠ°Ρ Π° Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (1 ΡΠ΄ΡΠΎ, RAM 512 GB, SSD 10 GB), ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° debian 9.6 Π±Π΅ΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½ΠΎ ΠΊΠ°ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° 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.
ΠΠ°ΡΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ·Π΄Π°Π²Π°Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅
Π‘ΠΎΡΡΡΠ΅Ρ:
- Π°ΠΏ-GET Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
- apt-get upgrade
- apt-get ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ 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
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; ΡΡ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ΅ΡΠΈΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
- getState: Π²ΡΡΡΠ° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ
- getEmployee: Π²ΡΡΡΠ° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ (+Π·Π°ΠΏΠ»Π°ΡΠΈ, +Π·Π°Π³Π»Π°Π²ΠΈΡ) ΠΎΡ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ
- patchEmployee: ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° Π·Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ
- 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 Π΄ΠΎ 500.
ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠ°, ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°:
mysql -e "SHOW ENGINE INNODB STATUS"
ΠΠΎΠΊΠ°Π·Π²Π° ΡΠ΅:
Buffer pool hit rate 923 / 1000, young-making rate 29 / 1000 not 32 / 1000
ΠΠΎ-Π΄ΠΎΠ»Ρ ΡΠ° ΡΡΠ΅Π΄Π½ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π° Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ:
ΠΡΠΈΠΊΠ΅Ρ
Π‘ΡΠ΅Π΄Π½ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΎ
ΠΠ΅Π΄ΠΈΠ°Π½Π°
90% Π»ΠΈΠ½ΠΈΡ
95% Π»ΠΈΠ½ΠΈΡ
99% Π»ΠΈΠ½ΠΈΡ
Min
ΠΌΠ°ΠΊΡ
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