ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ! Π ΡΠ²ΠΎΠ΅ΠΉ
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΎΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠΈΠΊ Π² Graphite+Whisper Π½Π° Graphite+ClickHouse, Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ Π΄Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°Ρ ΠΏΡΠΈΠ½ΡΡΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎ ΡΠ΅Ρ ΠΌΠΈΠ½ΡΡΠ°Ρ Whisper, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ ΠΆΠΈΠ»ΠΈ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Graphite+Whisper
1. ΠΡΡΠΎΠΊΠ°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ° Π½Π° Π΄ΠΈΡΠΊΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ
ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΊ Π½Π°ΠΌ ΠΏΡΠΈΠ»Π΅ΡΠ°Π»ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 1.5 ΠΌΠ»Π½ ΠΌΠ΅ΡΡΠΈΠΊ Π² ΠΌΠΈΠ½ΡΡΡ. Π‘ ΡΠ°ΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π΄ΠΈΡΠΊΠΎΠ²Π°Ρ ΡΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ Π±ΡΠ»Π° ΡΠ°Π²Π½Π° ~30%. Π ΡΠ΅Π»ΠΎΠΌ ΡΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ β Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ, Π±ΡΡΡΡΠΎ ΠΏΠΈΡΠ°Π»ΠΎΡΡ, Π±ΡΡΡΡΠΎ ΡΠΈΡΠ°Π»ΠΎΡΡβ¦ ΠΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠΊΠ° ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅ Π²ΡΠΊΠ°ΡΠΈΠ»Π° Π½ΠΎΠ²ΡΡ ΡΠΈΡΡ ΠΈ Π½Π΅ ΡΡΠ°Π»Π° ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π½Π°ΠΌ 10 ΠΌΠ»Π½ ΠΌΠ΅ΡΡΠΈΠΊ Π² ΠΌΠΈΠ½ΡΡΡ. ΠΠΎΡ ΡΠΎΠ³Π΄Π°-ΡΠΎ Π΄ΠΈΡΠΊΠΎΠ²Π°Ρ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄Π½Π°ΠΏΡΡΠ³Π»Π°ΡΡ, ΠΈ ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ 100% ΡΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΄Π°Π»ΠΎΡΡ Π±ΡΡΡΡΠΎ ΡΠ΅ΡΠΈΡΡ, Π½ΠΎ ΠΎΡΠ°Π΄ΠΎΡΠ΅ΠΊ ΠΎΡΡΠ°Π»ΡΡ.
2. ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΈ Π²ΡΠ΅, ΠΊΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ/ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Graphite+Whisper, ΠΌΡ Π»ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠ΅ΡΡΠΈΠΊ ΡΡΠ°Π·Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Graphite Ρ ΡΠ΅Π»ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ. Π Ρ ΡΡΠΈΠΌ ΠΎΡΠΎΠ±ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π±ΡΠ»ΠΎ β Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π½Π΅ ΠΏΠ°Π΄Π°Π». ΠΠ½ΠΎΠ³Π΄Π° ΠΌΡ ΡΡΠΏΠ΅Π²Π°Π»ΠΈ ΠΏΠΎΠ΄Π½ΡΡΡ ΡΠΏΠ°Π²ΡΠΈΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΠΎ, ΠΈ carbon-c-relay ΡΡΠΏΠ΅Π²Π°Π» Π·Π°Π»ΠΈΠ²Π°ΡΡ Π² Π½Π΅Π³ΠΎ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΈΠ· ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΡΡΠ°, Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅Ρ. Π ΡΠΎΠ³Π΄Π° Π² ΠΌΠ΅ΡΡΠΈΠΊΠ°Ρ Π±ΡΠ»Π° Π΄ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π·Π°ΡΡΠ³ΠΈΠ²Π°Π»ΠΈ rsync`ΠΎΠΌ. ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Π±ΡΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎΠΉ. Π‘ΠΏΠ°ΡΠ°Π»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΎΡΠ΅Π½Ρ ΡΠ΅Π΄ΠΊΠΎ. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π±ΡΠ°Π»ΠΈ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΡΠΈΠΊ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π»ΠΈ ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ Π½Π° ΡΠΎΡΠ΅Π΄Π½ΠΈΡ Π½ΠΎΠ΄Π°Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 5% ΡΠ»ΡΡΠ°Π΅Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ°Π·Π»ΠΈΡΠ°Π»ΠΈΡΡ, ΡΡΠΎ Π½Π°Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ°Π΄ΠΎΠ²Π°Π»ΠΎ.
3. ΠΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π² Graphite Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΠ΅, Π½ΠΎ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΌΠ΅ΡΡΠΈΠΊΠΈ (Π° ΡΠ΅ΠΏΠ΅ΡΡ Π΅ΡΡ ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΈΠ· Kubernetes), ΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π² ΠΌΠ΅ΡΡΠΈΠΊΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π° .wsp-ΡΠ°ΠΉΠ» ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Ρ ΡΡΠ΅ΡΠΎΠΌ Π²ΡΠ΅Π³ΠΎ retention ΠΏΠ΅ΡΠΈΠΎΠ΄Π°, ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠ΅Π΄Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΠΌΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π½Π°Ρ Π±ΡΠ» ΡΠ°Π²Π΅Π½ ~2ΠΠ±. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΠ³ΡΠ±Π»ΡΠ΅ΡΡΡ Π΅ΡΡ ΠΈ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΠΎΡΡΠ΅ΡΠΎΠ² ΠΏΠΎ Π½ΠΈΠΌ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΡΡΡΡ ΡΠΎΡΠ΅ΠΊ ΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ².
Π‘ΡΠ°Π·Ρ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΡΡΠΎ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π²ΡΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΡΠΎΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΈ Ρ ΡΠ°Π·Π½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π½ΠΎ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΊ Π²Π°ΠΌ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠ΅ΠΌ ΡΠΈΠ»ΡΠ½Π΅Π΅ ΠΎΠ½ΠΈ ΠΎΠ±ΠΎΡΡΡΡΡΡΡΡ.
ΠΠΌΠ΅Ρ Π²ΡΠ΅ Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ (Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ
Graphite+ClickHouse. ΠΠΆΠΈΠ΄Π°Π½ΠΈΡ
ΠΠΎΡΠ΅ΡΠΈΠ² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΡΠ°ΠΏΠΎΠ² ΡΠ΅Π±ΡΡ ΠΈΠ· Π―Π½Π΄Π΅ΠΊΡΠ°, ΠΏΡΠΎΡΠΈΡΠ°Π²
Π₯ΠΎΡΠ΅Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
- ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ Ρ 30% Π΄ΠΎ 5%;
- ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Ρ 1Π’Π± Π΄ΠΎ 100ΠΠ±;
- ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠΎ 100 ΠΌΠ»Π½ ΠΌΠ΅ΡΡΠΈΠΊ Π² ΠΌΠΈΠ½ΡΡΡ Π² ΡΠ΅ΡΠ²Π΅Ρ;
- ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ;
- Π½Π΅ ΡΠΈΠ΄Π΅ΡΡ Π½Π°Π΄ ΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π³ΠΎΠ΄ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π·Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π²ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΡΠΎΠΊ;
- ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π±Π΅Π· Π΄Π°ΡΠ½ΡΠ°ΠΉΠΌΠ°.
ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π°ΠΌΠ±ΠΈΡΠΈΠΎΠ·Π½ΠΎ, ΠΏΡΠ°Π²Π΄Π°?
Graphite+ClickHouse. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Graphite ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΈΡ
Π² ClickHouse, Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΡΠ΄ΠΎΠ² Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π»ΠΈΠ· ClickHouse ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ 1.1.54253. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½ΠΈΠΌ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: Π² Π»ΠΎΠ³ΠΈ ΡΡΠΏΠ°Π»ΠΎ Π³ΠΎΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΈ Π±ΡΠ»ΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΡΡΠΎ Ρ Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°ΡΡ. Π ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ Ρ
ΠΠ»Ρ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ClickHouse Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½
Graphite+ClickHouse. Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ°Π±Π»ΠΈΡ
βgraphiteβ β Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π½Π°ΠΌΠΈ Π΄Π»Ρ ΡΠ°Π±Π»ΠΈΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°.
βgraphite.metricsβ β ΡΠ°Π±Π»ΠΈΡΠ° Ρ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ ReplicatedReplacingMergeTree (ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΡΠ΅ΠΌΡΠΉ
CREATE TABLE graphite.metrics ( Date Date, Level UInt32, Path String, Deleted UInt8, Version UInt32 ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.metrics', βr1β, Date, (Level, Path), 8192, Version);
βgraphite.dataβ β ΡΠ°Π±Π»ΠΈΡΠ° Ρ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ ReplicatedGraphiteMergeTree (ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΡΠ΅ΠΌΡΠΉ
CREATE TABLE graphite.data ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32 ) ENGINE = ReplicatedGraphiteMergeTree('/clickhouse/tables/replicator/graphite.data', 'r1', Date, (Path, Time), 8192, 'graphite_rollup')
βgraphite.date_metricsβ β ΡΠ°Π±Π»ΠΈΡΠ°, Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ, Ρ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ ReplicatedReplacingMergeTree. Π ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° Π²ΡΠ΅Ρ
ΠΌΠ΅ΡΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈΡΡ Π·Π° ΡΡΡΠΊΠΈ. ΠΡΠΈΡΠΈΠ½Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅
CREATE MATERIALIZED VIEW graphite.date_metrics ( Path String, Level UInt32, Date Date) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.date_metrics', 'r1', Date, (Level, Path, Date), 8192) AS SELECT toUInt32(length(splitByChar('.', Path))) AS Level, Date, Path FROM graphite.data
βgraphite.data_statβ β ΡΠ°Π±Π»ΠΈΡΠ°, Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ, Ρ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ ReplicatedAggregatingMergeTree (ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΡΠ΅ΠΌΡΠΉ
CREATE MATERIALIZED VIEW graphite.data_stat ( Date Date, Prefix String, Timestamp UInt32, Count AggregateFunction(count)) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/replicator/graphite.data_stat', 'r1', Date, (Timestamp, Prefix), 8192) AS SELECT toStartOfMonth(now()) AS Date, replaceRegexpOne(Path, '^([^.]+.[^.]+.[^.]+).*$', '1') AS Prefix, toUInt32(toStartOfMinute(toDateTime(Timestamp))) AS Timestamp, countState() AS Count FROM graphite.data GROUP BY Timestamp, Prefix
Graphite+ClickHouse. Π‘Ρ Π΅ΠΌΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
Graphite+ClickHouse. ΠΠΈΠ³ΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΠ°ΠΊ ΠΌΡ ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΉ ΠΎΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ Π½Π° ClickHouse Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π±Π΅Π· Π΄Π°ΡΠ½ΡΠ°ΠΉΠΌΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ Π²ΡΡ Π½Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π½Π° Π½ΠΎΠ²ΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π‘Π΄Π΅Π»Π°Π»ΠΈ ΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ.
-
Π carbon-c-relay Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠ΅ΡΡΠΈΠΊ Π² carbon-clickhouse ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΡΡΠ°ΡΡΠ²ΡΡΡΠΈΡ Π² ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ClickHouse ΡΠ°Π±Π»ΠΈΡ.
-
ΠΠ°ΠΏΠΈΡΠ°Π»ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΊΡΠΈΠΏΡ Π½Π° python, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ whisper-dump Π²ΡΡΠΈΡΡΠ²Π°Π» Π²ΡΠ΅ .wsp-ΡΠ°ΠΉΠ»Ρ ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ» ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ carbon-clickhouse Π² 24 ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΡΡΠΈΠΊ Π² carbon-clickhouse, Π΄ΠΎΡΡΠΈΠ³Π°Π»ΠΎ Π² 125 ΠΌΠ»Π½/ΠΌΠΈΠ½., ΠΈ ClickHouse Π΄Π°ΠΆΠ΅ Π½Π΅ Π²ΡΠΏΠΎΡΠ΅Π».
-
Π‘ΠΎΠ·Π΄Π°Π»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ DataSource Π² Grafana Ρ ΡΠ΅Π»ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π΄Π°ΡΠ±ΠΎΡΠ΄Π°Ρ . ΠΡΡΠ²ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² carbonapi. ΠΠΎΠΏΠΈΡΠ°Π»ΠΈ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ PR`Ρ Π°Π²ΡΠΎΡΠ°ΠΌ carbonapi (ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌ ΡΠΏΠ°ΡΠΈΠ±ΠΎ).
- ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ°ΡΡΠ΅ΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ Ρ graphite-api (API ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Graphite+Whisper) Π½Π° carbonapi.
Graphite+ClickHouse. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ
-
ΡΠ½ΠΈΠ·ΠΈΠ»ΠΈ ΡΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ Ρ 30% Π΄ΠΎ 1%;
- ΡΠ½ΠΈΠ·ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Ρ 1 Π’Π± Π΄ΠΎ 300 ΠΠ±;
- ΠΈΠΌΠ΅Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠΎ 125 ΠΌΠ»Π½ ΠΌΠ΅ΡΡΠΈΠΊ Π² ΠΌΠΈΠ½ΡΡΡ Π² ΡΠ΅ΡΠ²Π΅Ρ (ΠΏΠΈΠΊΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ);
- ΠΏΠ΅ΡΠ΅Π²Π΅Π»ΠΈ Π²ΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π½Π° ΡΡΠΈΠ΄ΡΠ°ΡΠΈΡΠ΅ΠΊΡΠ½Π΄Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Ρ ΡΠ°Π½Π΅Π½ΠΈΡ;
- ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ;
- ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΠΈΡΡ Π±Π΅Π· Π΄Π°ΡΠ½ΡΠ°ΠΉΠΌΠ°;
- Π½Π° Π²ΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 7 Π½Π΅Π΄Π΅Π»Ρ.
Graphite+ClickHouse. ΠΡΠΎΠ±Π»Π΅ΠΌΡ
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΠΎΠ±ΠΎΡΠ»ΠΎΡΡ ΠΈ Π±Π΅Π· ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ°ΠΌΠ½Π΅ΠΉ. ΠΠΎΡ Ρ ΡΠ΅ΠΌ ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°.
- ClickHouse Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΠ΅ΡΠ΅ΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ Π½Π° Π»Π΅ΡΡ, ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°ΡΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° zookeeper Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅ ClickHouse β ΠΎΠ½ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΡΡ Π΄ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ clickhouse-server.
- ΠΠ΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ ClickHouse, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π°Ρ Π² graphite-clickhouse ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ClickHouse Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΎΡ ΡΠ°ΠΊ:
url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
- Π ClickHouse Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΡΡ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ ΡΠ΅Π»ΠΈΠ·ΠΎΠ², Π² Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²ΡΡΡΠ΅ΡΠΈΡΡΡΡ ΡΡΡΠΏΡΠΈΠ·Ρ: Π±ΡΠ΄ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ.
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π² kubernetes ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΡΠΈΠΊ Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌ ΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠΌ ΠΆΠΈΠ·Π½ΠΈ. Π’ΠΎΡΠ΅ΠΊ ΠΏΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΌΠ΅ΡΡΠΈΠΊΠ°ΠΌ Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΌΠ΅ΡΡΠΎΠΌ Π½Π΅Ρ. ΠΠΎ Π²ΠΎΡ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ClickHouse ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΈΡ
ΡΠ°ΠΌΡΡ
ΠΌΠ΅ΡΡΠΈΠΊ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ βmetricsβ. Π 90% ΡΠ»ΡΡΠ°Π΅Π² Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ Π½ΠΈΠΌ Π·Π° ΠΎΠΊΠ½ΠΎ (24 ΡΠ°ΡΠ°) ΠΎΡΡΡΡΡΡΠ²ΡΡΡ. Π Π²ΠΎΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΏΠΎΠΈΡΠΊ ΡΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
Π² ΡΠ°Π±Π»ΠΈΡΠ΅ βdataβ Π·Π°ΡΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅ ΡΠΏΠΈΡΠ°Π΅ΡΡΡ Π² ΡΠ°ΠΉΠΌΠ°ΡΡ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΌΡ ΡΡΠ°Π»ΠΈ Π²Π΅ΡΡΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π²ΡΡΡΠΊΡ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΏΠΎ ΠΌΠ΅ΡΡΠΈΠΊΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈΡΡ Π·Π° ΡΡΡΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΠΎΡΡΠ΅ΡΠΎΠ² (Π³ΡΠ°ΡΠΈΠΊΠΎΠ²) ΠΏΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌ, ΠΌΡ ΠΎΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΈΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π° Π½Π΅ Π·Π° Π²ΡΡ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎ Π² ΡΠ°Π·Ρ ΡΡΠΊΠΎΡΠΈΠ»ΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅ΡΠΎΠ² ΠΏΠΎ Π½ΠΈΠΌ. ΠΠ»Ρ Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ» ΡΠΎΠ±ΡΠ°Π½
graphite-clickhouse (fork) , Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ date_metrics.
Graphite+ClickHouse. Π’Π΅Π³ΠΈ
Π‘ Π²Π΅ΡΡΠΈΠΈ 1.1.0 Graphite ΡΡΠ°Π» ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ
Graphite+ClickHouse. ΠΠ΅ΡΠ΅ΠΊΡΠΎΡ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ
ΠΠ° Π±Π°Π·Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ, ΠΈ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ! ΠΠΎ ΠΎ Π½Π΅ΠΌ β Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ΡΡ, ΠΆΠΌΠΈΡΠ΅ ΡΡΡΠ΅Π»ΠΊΡ Π²Π²Π΅ΡΡ ΠΈ Π±ΡΠ΄ΡΡΠ΅ ΡΡΠ°ΡΡΠ»ΠΈΠ²Ρ!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com