Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΡ Π·Π°Ρ
ΠΎΠ΄ΠΈΡ ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
Π½Π° PHP, ΡΠΈΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΠΎΡΡΡΠΈΡΡΡΡ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ,
ΠΠΈΠ½ΠΎΠ²Π½ΠΈΠΊ ΡΠΎΡΠΆΠ΅ΡΡΠ²Π° β ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° PHP, Π±Π°Π·ΠΈΡΡΡΡΠ΅Π΅ΡΡ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ symfony 2.3, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΊΠΎΡΠΎΡΡΠΉ Π² ΠΏΠ»Π°Π½Ρ Π±ΠΈΠ·Π½Π΅ΡΠ° ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΡ. ΠΠΎΠΌΠΈΠΌΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΈΠΉ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π²ΠΎΠ²ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Β«ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎΒ» Π² memcached: ΠΎΡΠ²Π΅ΡΠΎΠ² Π½Π° Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΠΠ ΠΈ API-ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ, ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ»Π°Π³ΠΎΠ², Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. Π ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ° memcached ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ, ΠΏΠΎΡΠ΅ΡΡ ΠΊΡΡΠ° Π²Π΅Π΄Π΅Ρ ΠΊ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌ: Π‘Π£ΠΠ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΡΠ΅ΡΠ°ΡΡ ΠΏΠΎ ΡΠ²Π°ΠΌ, API-ΡΠ΅ΡΠ²ΠΈΡΡ β Π±Π°Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΈ Ρ.Π΄. Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ Π΄Π΅ΡΡΡΠΊΠΈ ΠΌΠΈΠ½ΡΡ, Π° Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΠ²ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΆΡΡΠΊΠΎ ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ ΠΈΠ»ΠΈ Π²ΠΎΠ²ΡΠ΅ ΡΡΠ°Π½Π΅Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ.
ΠΠ°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠ°Π»ΠΎΠΉ ΠΊΡΠΎΠ²ΡΡ, Ρ.Π΅. Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ. Π‘Π΄Π΅Π»Π°ΡΡ ΠΊΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΌ ΠΊ ΠΎΡΠΊΠ°Π·Π°ΠΌ, Π½ΠΎ ΠΈ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ΅ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ.
Π§ΡΠΎ Π½Π΅ ΡΠ°ΠΊ Ρ ΡΠ°ΠΌΠΈΠΌ memcached?
ΠΠΎΠΎΠ±ΡΠ΅, ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ memcached Π΄Π»Ρ PHP Β«ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈΒ» ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ΅ΡΡΠΈΠΉ. ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ , ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ Π°Π΄ΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈΠ· Π³ΡΡΠΏΠΏΡ, Π° Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° failover’Π° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π²ΡΡΠΎΠΊΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π½ΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ Π΄Π°Π½Π½ΡΡ ).
Π‘ Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΠΈΠΉ Π΄Π΅Π»Π° ΠΎΠ±ΡΡΠΎΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅: ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ memcached.sess_number_of_replicas
, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ ΡΡΠ°Π·Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², Π° Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΊΠ°Π·Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° memcached Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΡΠ΄Π°Π²Π°ΡΡΡΡ Ρ Π΄ΡΡΠ³ΠΈΡ
. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π²Π΅ΡΠ½Π΅ΡΡΡ Π² ΡΡΡΠΎΠΉ Π±Π΅Π· Π΄Π°Π½Π½ΡΡ
(ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π±ΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΡΠ°ΡΡΠ°), ΡΠ°ΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·Ρ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΏΠΎΡΠ΅ΡΡ Π΄Π°Π½Π½ΡΡ
ΡΠ΅ΡΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Β«ΡΡ
ΠΎΠ΄ΠΈΡΡΒ» Π² Π΄ΡΡΠ³ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΌΠ°Ρ
Π°.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Ρ, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΊΡΡ Π΄ΠΎ Π³ΠΈΠ³Π°Π½ΡΡΠΊΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΌΡ ΠΈΠ· ΠΊΠΎΠ΄Π°, ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ . ΠΠ΄Π½Π°ΠΊΠΎ Π² Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΌ Ρ ΡΠ°Π½ΠΈΠΌΡΡ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ, Π΄Π° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ-Π΄Π²ΡΡ ΡΠ·Π»ΠΎΠ² Π²ΠΏΠΎΠ»Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΈΠ· ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π»ΠΈΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ memcached ΠΏΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΡΡΠ° Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π΄Π°ΠΆΠ΅ ΡΡΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡβ¦ ΠΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΡΠΎ Π΄ΡΠ΅Π²Π½ΠΎΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΡΠ»ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠ΄Π°Π²Π°Π»ΠΎΡΡ. ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π±ΡΠ²Π°ΡΡ ΠΎ ΠΏΠΎΡΠ΅ΡΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΡΠΈΠΉ: ΠΎΡ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°Π·Π»ΠΎΠ³ΠΈΠ½ΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ° Π΄Π΅ΡΠ³Π°Π»ΡΡ Π³Π»Π°Π·.
Π ΠΈΠ΄Π΅Π°Π»Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π»Π°ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ Π² memcached ΠΈ ΠΎΠ±Ρ
ΠΎΠ΄ ΡΠ΅ΠΏΠ»ΠΈΠΊ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΌΠ°Ρ
Π° ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³
mcrouter
ΠΡΠΎ ΡΠΎΡΡΠ΅Ρ Π΄Π»Ρ memcached, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Facebook Ρ ΡΠ΅Π»ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» memcached, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ memcached Π΄ΠΎ Π±Π΅Π·ΡΠΌΠ½ΡΡ
ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ². ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ mcrouter ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π²
- ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΠΈΡΡ;
- Π΄Π΅Π»Π°ΡΡ fallback Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π³ΡΡΠΏΠΏΡ Π² ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠ° Π΄Π΅Π»ΠΎ!
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ mcrouter
ΠΠ΅ΡΠ΅ΠΉΠ΄Ρ ΡΡΠ°Π·Ρ ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³Ρ:
{
"pools": {
"pool00": {
"servers": [
"mc-0.mc:11211",
"mc-1.mc:11211",
"mc-2.mc:11211"
},
"pool01": {
"servers": [
"mc-1.mc:11211",
"mc-2.mc:11211",
"mc-0.mc:11211"
},
"pool02": {
"servers": [
"mc-2.mc:11211",
"mc-0.mc:11211",
"mc-1.mc:11211"
},
"route": {
"type": "OperationSelectorRoute",
"default_policy": "AllMajorityRoute|Pool|pool00",
"operation_policies": {
"get": {
"type": "RandomRoute",
"children": [
"MissFailoverRoute|Pool|pool02",
"MissFailoverRoute|Pool|pool00",
"MissFailoverRoute|Pool|pool01"
]
}
}
}
}
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΈ ΠΏΡΠ»Π°? ΠΠΎΡΠ΅ΠΌΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΡ? ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
- Π Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ mcrouter Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΡΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π·Π°ΠΏΡΠΎΡ ΠΈΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠ± ΡΡΠΎΠΌ Π΅ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠΈΠΏ
OperationSelectorRoute
. - GET-Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ
RandomRoute
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΡΠ» ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΡΡΡ ΡΡΠ΅Π΄ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°children
. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌMissFailoverRoute
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΉΠ΄Π΅ΡΡΡ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π² ΠΏΡΠ»Π΅, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΡΠ²Π΅Ρ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΡΠΎ ΠΈ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. - ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ
MissFailoverRoute
Ρ ΠΏΡΠ»ΠΎΠΌ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΡΠΎ Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΈ Π±Ρ ΡΠΏΠ΅ΡΠ²Π° Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ memcached, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈ Π±Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎ ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠΌΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π» Π±Ρ ΠΊ ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΏΡΠ»Π° Ρ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ Π² ΡΠ°Π·Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. - ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ (Π° ΡΡΠΎ Π·Π°ΠΏΠΈΡΡ) ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
AllMajorityRoute
. ΠΠ°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡΡ Π½Π° Π²ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΏΡΠ»Π° ΠΈ ΠΆΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠΎΠ², ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, ΠΎΡ N/2 + 1 ΠΈΠ· Π½ΠΈΡ . ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡAllSyncRoute
Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ° ΠΎΡ Π²ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π³ΡΡΠΏΠΏΡ β Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡSERVER_ERROR
. Π₯ΠΎΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ mcrouter ΠΈ ΡΠ»ΠΎΠΆΠΈΡ Π΄Π°Π½Π½ΡΠ΅ Π² Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΊΡΡΠΈ, Π½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ PHP Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ notice.AllMajorityRoute
Π½Π΅ ΡΡΠΎΠ»Ρ ΡΡΡΠΎΠ³ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π΄ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΡΠ·Π»ΠΎΠ² ΠΈΠ· ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ Π±Π΅Π· Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΈΠ½ΡΡ ΡΡΠΎΠΉ ΡΡ Π΅ΠΌΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΡ Π² ΠΊΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Ρ, ΡΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ N Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ memcached β ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ Π² ΠΏΡΠ»Π΅. ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π² ΠΏΡΠ»Π°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎ Π΄Π²ΡΡ : ΠΆΠ΅ΡΡΠ²ΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π±ΠΎΠ»ΡΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ ΠΌΠ΅Π½ΡΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΎΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΊΠ»ΡΡΠ°ΠΌ.
NB: ΠΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ mcrouter ΠΌΠΎΠ³ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ
Π‘Π±ΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ mcrouter
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΈ ΡΠ°ΠΌ memcached) Ρ Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Kubernetes β ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ°ΠΌ ΠΆΠ΅ ΠΌΠ΅ΡΡΠΎ ΠΈ mcrouter. ΠΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ
NB: ΠΠΈΡΡΠΈΠ½Π³ΠΈ, ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠ΅ Π² ΡΡΠ°ΡΡΠ΅, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ
configVersion: 1
project: mcrouter
deploy:
namespace: '[[ env ]]'
helmRelease: '[[ project ]]-[[ env ]]'
---
image: mcrouter
from: ubuntu:16.04
mount:
- from: tmp_dir
to: /var/lib/apt/lists
- from: build_dir
to: /var/cache/apt
ansible:
beforeInstall:
- name: Install prerequisites
apt:
name: [ 'apt-transport-https', 'tzdata', 'locales' ]
update_cache: yes
- name: Add mcrouter APT key
apt_key:
url: https://facebook.github.io/mcrouter/debrepo/xenial/PUBLIC.KEY
- name: Add mcrouter Repo
apt_repository:
repo: deb https://facebook.github.io/mcrouter/debrepo/xenial xenial contrib
filename: mcrouter
update_cache: yes
- name: Set timezone
timezone:
name: "Europe/Moscow"
- name: Ensure a locale exists
locale_gen:
name: en_US.UTF-8
state: present
install:
- name: Install mcrouter
apt:
name: [ 'mcrouter' ]
β¦ ΠΈ Π½Π°Π±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ Helm-ΡΠ°ΡΡ. ΠΠ· ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ β Π·Π΄Π΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³Π° ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΅ΠΏΠ»ΠΈΠΊ (Π΅ΡΠ»ΠΈ Ρ ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΉ ΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β Π΄Π΅Π»ΠΈΡΠ΅ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ):
{{- $count := (pluck .Values.global.env .Values.memcached.replicas | first | default .Values.memcached.replicas._default | int) -}}
{{- $pools := dict -}}
{{- $servers := list -}}
{{- /* ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² Π΄Π²ΡΠΌΡ ΠΊΠΎΠΏΠΈΡΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ²: "0 1 2 0 1 2" */ -}}
{{- range until 2 -}}
{{- range $i, $_ := until $count -}}
{{- $servers = append $servers (printf "mc-%d.mc:11211" $i) -}}
{{- end -}}
{{- end -}}
{{- /* Π‘ΠΌΠ΅ΡΠ°ΡΡΡ ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ N ΡΡΠ΅Π·ΠΎΠ²: "[0 1 2] [1 2 0] [2 0 1]" */ -}}
{{- range $i, $_ := until $count -}}
{{- $pool := dict "servers" (slice $servers $i (add $i $count)) -}}
{{- $_ := set $pools (printf "MissFailoverRoute|Pool|pool%02d" $i) $pool -}}
{{- end -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mcrouter
data:
config.json: |
{
"pools": {{- $pools | toJson | replace "MissFailoverRoute|Pool|" "" -}},
"route": {
"type": "OperationSelectorRoute",
"default_policy": "AllMajorityRoute|Pool|pool00",
"operation_policies": {
"get": {
"type": "RandomRoute",
"children": {{- keys $pools | toJson }}
}
}
}
}
ΠΡΠΊΠ°ΡΡΠ²Π°Π΅ΠΌ Π² ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ:
# php -a
Interactive mode enabled
php > # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅
php > $m = new Memcached();
php > $m->addServer('mcrouter', 11211);
php > var_dump($m->set('test', 'value'));
bool(true)
php > var_dump($m->get('test'));
string(5) "value"
php > # Π Π°Π±ΠΎΡΠ°Π΅Ρ! Π’Π΅ΡΡΠΈΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΡΠΈΠΉ:
php > ini_set('session.save_handler', 'memcached');
php > ini_set('session.save_path', 'mcrouter:11211');
php > var_dump(session_start());
PHP Warning: Uncaught Error: Failed to create session ID: memcached (path: mcrouter:11211) in php shell code:1
Stack trace:
#0 php shell code(1): session_start()
#1 {main}
thrown in php shell code on line 1
php > # ΠΠ΅ Π·Π°Π²ΠΎΠ΄ΠΈΡΡΡβ¦ ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ session_id:
php > session_id("zzz");
php > var_dump(session_start());
PHP Warning: session_start(): Cannot send session cookie - headers already sent by (output started at php shell code:1) in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Unable to clear session lock record in php shell code on line 1
PHP Warning: session_start(): Failed to read session data: memcached (path: mcrouter:11211) in php shell code on line 1
bool(false)
php >
ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠ΅ΠΊΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½Π΅ Π΄Π°Π», ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ Β«
NB: ASCII-ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π² memcached ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ Ρ ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ. ΠΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΡΡΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ.
ΠΠ΅Π»ΠΎ Π² ΡΠ»ΡΠΏΠ΅: ΠΎΡΡΠ°Π»ΠΎΡΡ Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° ASCII-ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ Π²ΡΡ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρβ¦. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈΠ²ΡΡΠΊΠ° ΠΈΡΠΊΠ°ΡΡ ΠΎΡΠ²Π΅ΡΡ Π²
ΠΠ°, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ β memcached.sess_binary_protocol
. ΠΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠΈΠΈ Π½Π°ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΡΠ°Π»ΠΎΡΡ Π»ΠΈΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ mcrouter Π² pod Ρ PHP!
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ΄Π½ΠΈΠΌΠΈ Π»ΠΈΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π½Π°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°ΡΡ: Π²ΠΎΠΏΡΠΎΡ Ρ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡΡ memcached ΡΠ΅ΡΠ΅Π½, Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΡΡΠ° ΠΏΠΎΠ²ΡΡΠ΅Π½Π°. ΠΠΎΠΌΠΈΠΌΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ ΠΏΠ»ΡΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠΎ Π΄Π°Π»ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ ΠΌΠ°Π½Π΅Π²ΡΠ° ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡ Π½Π°Π΄ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ: ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π·Π΅ΡΠ², ΠΆΠΈΠ·Π½Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅ΡΡΡ. ΠΠ°, ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΠΈ ΡΠ²ΠΎΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Β«ΠΊΠΎΡΡΡΠ»Π΅ΠΌΒ», Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π΄Π΅Π½ΡΠ³ΠΈ, Ρ ΠΎΡΠΎΠ½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΡ β ΠΏΠΎΡΠ΅ΠΌΡ Π±Ρ ΠΈ Π½Π΅Ρ?
P.S.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«ΠΡΠ°ΠΊΡΠΈΠΊΠ° Ρ dappΒ» (Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ symfony-demo):
ΡΠ°ΡΡΡ 1 (ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ) ΠΈΡΠ°ΡΡΡ 2 (Π΄Π΅ΠΏΠ»ΠΎΠΉ Docker-ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π² Kubernetes Ρ ΠΏΠΎΠΌΠΎΡΡΡ Helm) ; - Β«
ΠΠ· ΠΆΠΈΠ·Π½ΠΈ Ρ Kubernetes: ΠΠ°ΠΊ HTTP-ΡΠ΅ΡΠ²Π΅Ρ ΠΈΡΠΏΠ°Π½ΡΠ΅Π² Π½Π΅ ΠΆΠ°Π»ΠΎΠ²Π°Π» Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com