ΠΡΠ½ΠΎΠ²ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡΡΠ° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° ΠΏΡΠ΅Π· 2016 Π³., ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ Π² ΠΏΠΎΠ΄ΠΌΠΎΡΠΊΠΎΠ²Π½ΠΎΡΠΎ Π‘ΠΊΠΎΠ»ΠΊΠΎΠ²ΠΎ Π½Π° 7β8 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ ΠΌΠΈΠ½Π°Π»Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π°. ΡΠ°Π·ΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΡΠΈΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° NGINX Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° OpenResty ΠΈ Lua.
ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅, Π°Π· ΡΡΠΌ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡ ΠΡΠΎΡΠ°ΡΠΎΠ², ΡΠ°Π±ΠΎΡΡ Π² Parallels. Π©Π΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΌΠ°Π»ΠΊΠΎ Π·Π° ΡΠ΅Π±Π΅ ΡΠΈ. ΠΡΠ΅Π· ΡΡΠΈ ΡΠ΅ΡΠ²ΡΡΡΠΈ ΠΎΡ ΠΆΠΈΠ²ΠΎΡΠ° ΡΠΈ ΠΏΠΈΡΠ° ΠΊΠΎΠ΄. Π‘ΡΠ°Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡ Π΄ΠΎ ΠΌΠΎΠ·ΡΠΊΠ° Π½Π° ΠΊΠΎΡΡΠΈΡΠ΅ Π² Π±ΡΠΊΠ²Π°Π»Π½ΠΈΡ ΡΠΌΠΈΡΡΠ»: ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΡΠ½ΡΠ²Π°ΠΌ ΠΊΠΎΠ΄. Π§Π΅ΡΠ²ΡΡΡ ΠΎΡ ΠΆΠΈΠ²ΠΎΡΠ° ΡΠΈ ΡΡΠΌ Π² ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΏΠΈΡΠ΅ΠΉΠΊΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠΈΠ²Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ. ΠΠΎΠ΄, Ρ ΠΊΠΎΠΉΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΎΡ Π²Π°Ρ ΡΠ°Π±ΠΎΡΡΡ, Π½ΠΎ Π΄ΠΎΡΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·ΠΈΡΠ°Ρ.
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π»ΠΎΡΠΎ Π±Π΅ΡΠ΅. ΠΠΎΠ³Π°ΡΠΎ Π±ΡΡ ΠΌΠ°Π»ΡΠΊ Π΄ΠΆΡΠ½ΠΈΠΎΡ, Π΄ΠΎΠΉΠ΄ΠΎΡ ΠΈ ΠΌΠΈ Π΄Π°Π΄ΠΎΡ Π° Π΄Π²ΡΡΠ΅ΡΠ°Π±Π°ΠΉΡΠΎΠ²ΠΈ Π±Π°Π·ΠΈ. Π‘Π΅Π³Π° ΡΡΠΊ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΈΠΌ Π΅ highload. Π₯ΠΎΠ΄ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ, ΠΏΠΈΡΠ°Ρ : βΠ₯Π΅ΠΉ, ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ΡΠ΅, ΠΈΠΌΠ°ΡΠ΅ Π»ΠΈ big data, Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΡΠΏΠ΅Ρ? ΠΠΎΠ»ΠΊΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠ° Π²Π°ΡΠΈΡΠ΅ Π±Π°Π·ΠΈ?β ΠΡΠ³ΠΎΠ²Π°ΡΡΡ Π°: βΠΠΌΠ°ΠΌΠ΅ 100 Π³ΠΈΠ³Π°Π±Π°ΠΉΡΠ°!β ΠΠ· ΠΊΠ°Π·Π²Π°Ρ : βΠ‘ΡΠΏΠ΅Ρ, 100 Π³ΠΈΠ³Π°Π±Π°ΠΉΡΠ°!β Π Π·Π° ΡΠ΅Π±Π΅ ΡΠΈ ΠΌΠΈΡΠ»Π΅Ρ ΠΊΠ°ΠΊ Π΄Π° Π·Π°Π΄ΡΡΠΆΠ° ΠΏΠΎΠΊΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠΈ. ΠΠΈΡΠ»ΠΈΡ ΡΠΈ, Π΄Π°, ΡΠ΅Π±ΡΡΠ° ΡΠ° Π³ΠΎΡΠΈΠ½ΠΈ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π²ΡΡΡΠ°Ρ ΠΈ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ Ρ ΡΠ΅Π·ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΅ΡΠ°Π±Π°ΠΉΡΠ½ΠΈ Π±Π°Π·ΠΈ. Π ΡΠΎΠ²Π° Π±Π΅ΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ Π±ΡΡ Π΄ΠΆΡΠ½ΠΈΠΎΡ. ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ Π»ΠΈ ΡΠΈ ΠΊΠ°ΠΊΡΠ² ΡΠ΄Π°Ρ Π΅ ΡΠΎΠ²Π°?
ΠΠ½Π°Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 20 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈ Π΅Π·ΠΈΠΊΠ°. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΡΠΎ, Ρ ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°. ΠΠ°Π²Π°Ρ ΡΠΈ ΠΊΠΎΠ΄ Π½Π° Erlang, Π½Π° C, Π½Π° C++, Π½Π° Lua, Π½Π° Python, Π½Π° Ruby, Π½Π° Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ ΠΈ ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡ Ρ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°. Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ, ΡΡΡΠ±Π²Π°ΡΠ΅. ΠΠ΅ ΡΡΠΏΡΡ
Π΄Π° ΠΏΡΠ΅Π±ΡΠΎΡ ΡΠΎΡΠ½ΠΎ, Π½ΠΎ ΠΈΠ·Π³ΡΠ±ΠΈΡ
ΡΠΌΠ΅ΡΠΊΠ°ΡΠ° Π½ΡΠΊΡΠ΄Π΅ ΡΠ»Π΅Π΄ 20.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΈΡΡΡΡΠ²Π°ΡΠΈ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Parallels ΠΈ Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅, Π½ΡΠΌΠ° Π΄Π° Π³ΠΎΠ²ΠΎΡΡ Π·Π° ΡΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ ΡΠΌΠ΅ Π²Π΅Π»ΠΈΠΊΠΈ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΠΌ. Π©Π΅ ΠΊΠ°ΠΆΠ° ΡΠ°ΠΌΠΎ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ 13 ΠΎΡΠΈΡΠ° ΠΏΠΎ ΡΠ²Π΅ΡΠ°, ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 300 ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π² ΠΠΎΡΠΊΠ²Π°, Π’Π°Π»ΠΈΠ½ ΠΈ ΠΠ°Π»ΡΠ°. ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡ Π½Π° ΠΠ°Π»ΡΠ°, Π°ΠΊΠΎ Π·ΠΈΠΌΠ°ΡΠ° Π΅ ΡΡΡΠ΄Π΅Π½Π° ΠΈ ΠΈΡΠΊΠ°Ρ Π΄Π° Π·Π°ΡΠΎΠΏΠ»ΠΈΡ Π³ΡΡΠ±Π° ΡΠΈ.
ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π½Π°ΡΠΈΡΡ ΠΎΡΠ΄Π΅Π» ΠΏΠΈΡΠ΅ Π½Π° Python 2. ΠΠ°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ ΡΠ΅ Ρ Π±ΠΈΠ·Π½Π΅Ρ ΠΈ Π½ΡΠΌΠ°ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Π²Π½Π΅Π΄ΡΡΠ²Π°ΠΌΠ΅ ΠΌΠΎΠ΄Π½ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π·Π°ΡΠΎΠ²Π° ΡΡΡΠ°Π΄Π°ΠΌΠ΅. ΠΠΌΠ°ΠΌΠ΅ Django, Π·Π°ΡΠΎΡΠΎ ΡΠ°ΠΌ ΠΈΠΌΠ° Π²ΡΠΈΡΠΊΠΎ, Π° ΠΈΠ·Π»ΠΈΡΠ½ΠΎΡΠΎ ΡΠΌΠ΅ ΠΈΠ·Ρ Π²ΡΡΠ»ΠΈΠ»ΠΈ. Π‘ΡΡΠΎ MySQL, Redis ΠΈ NGINX. ΠΠΌΠ° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ Π³ΠΎΡΠΈΠ½ΠΈ Π½Π΅ΡΠ°. ΠΠΌΠ°ΠΌΠ΅ MongoDB, ΠΈΠΌΠ°ΠΌΠ΅ Π·Π°ΠΉΡΠΈ, ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΎ β Π½ΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠΎΡ ΡΠ°Π±ΠΎΡΠ° ΠΈ Π½Π΅ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌ Ρ ΡΠΎΠ²Π°.
OpenResty
Π Π°Π·ΠΊΠ°Π·Π°Ρ Π·Π° ΡΠ΅Π±Π΅ ΡΠΈ. ΠΠ΅ΠΊΠ° ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ Π΄Π½Π΅Ρ:
- ΠΠ°ΠΊΠ²ΠΎ Π΅ OpenResty ΠΈ Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Ρ ΡΠ°Π½ΠΈ?
- ΠΠ°ΡΠΎ Π΄Π° ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Python, NodeJS, PHP, Go ΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΈ Π½Π΅ΡΠ°, Ρ ΠΊΠΎΠΈΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΠΌΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ?
- Π ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΎΡ ΠΆΠΈΠ²ΠΎΡΠ°. ΠΡΠΆΠ½ΠΎ ΠΌΠΈ Π±Π΅ΡΠ΅ Π΄Π° ΡΡΠΊΡΠ°ΡΡ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ° ΡΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ, Π·Π°ΡΠΎΡΠΎ ΡΡ Π±Π΅ΡΠ΅ Ρ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ 3,5 ΡΠ°ΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΌΠ°Π»ΠΊΠΎ.
OpenResty Π΅ NGINX. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π΅Π³ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠ»Π½ΠΎΡΠ΅Π½Π΅Π½ ΡΠ΅Π± ΡΡΡΠ²ΡΡ, ΠΊΠΎΠΉΡΠΎ Π΅ Π΄ΠΎΠ±ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π±ΡΡΠ·ΠΎ. ΠΠΈΡΠ»Ρ, ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ Π½Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ NGINX Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ. ΠΡΠΈΡΠΊΠΈ Π·Π½Π°Π΅ΡΠ΅, ΡΠ΅ Π΅ Π±ΡΡΠ· ΠΈ ΡΡΠΏΠ΅Ρ. Π Π½Π΅Π³ΠΎ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅/ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΊΠΎΠ»Π΅Π»ΠΎΡΠΎ, ΠΊΠ°ΠΊΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ Π° Π² Python Ρ gevent. Gevent Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½, Π½ΠΎ Π°ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ Π½Π° C ΠΈ Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΡΠΊΠ°, ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ±ΡΡΠΊΠ°ΡΠ΅ ΠΏΡΠΈ Π΄Π΅Π±ΡΠ³Π²Π°Π½Π΅ΡΠΎ ΠΌΡ. ΠΠ· ΠΈΠΌΠ°Ρ ΠΎΠΏΠΈΡ: ΠΎΡΠ½Π΅ ΠΌΠΈ ΡΠ΅Π»ΠΈ Π΄Π²Π° Π΄Π½ΠΈ, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄. ΠΠΊΠΎ Π½ΡΠΊΠΎΠΉ Π½Π΅ Π±Π΅ΡΠ΅ ΠΈΡΡΠ»Π΅Π΄Π²Π°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π΄ΠΌΠΈΡΠΈ, Π½Π΅ Π±Π΅ΡΠ΅ Π³ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π» Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ Google Π½Π΅ Π³ΠΎ Π±Π΅ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΡ ΠΌΠ΅ Π΄Π° Π±ΡΠ΄Π΅ΠΌ Π½Π°ΠΈΡΡΠΈΠ½Π° Π² Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΠ΅.
Π NGINX Π²Π΅ΡΠ΅ ΡΠ° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΡΠ°ΡΠΈΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅Π½Ρ. ΠΠ΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ΅Π²ΠΎΠΆΠΈΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ Π½Π°ΡΠΈΠ½, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ Π·Π°Π±Π°Π²Ρ Π½Π΅ΡΠΎ ΠΈΠ»ΠΈ Π΄Π° Π·Π°Π³ΡΠ±ΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ. Nginx Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ, Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ β WSGI, PHP-FPM, Gunicorn, Unicorn. ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Nginx, Π΄Π°Π²Π°ΡΠ΅ Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈΡΠ΅ ΠΈ ΡΠ΅ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Π½Π΅Π³ΠΎ. Nginx ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅. ΠΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ Π·Π° ΡΠΎΠ²Π°. ΠΡΠ°ΡΠΊΠΎ, ΡΠΎΠΉ ΠΈΠΌΠ° ΡΠ°Π·Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΌΠΎ Π΅ ΠΏΡΠΈΠ΅Π» Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Ρ Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΠ» ΠΈ Π½Π°ΠΊΡΠ°Ρ Π΅ ΠΏΡΠ΅Π΄Π°Π» ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
Nginx Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½, Π½ΠΎ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ: Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π³ΡΠ²ΠΊΠ°Π² Π΄ΠΎΡΠΈ Ρ Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π²Π³ΡΠ°Π΄ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π°. Π’Π°Π·ΠΈ ΠΌΠΎΡΠ½ΠΎΡΡ Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π°. ΠΠ°ΡΠΎΠ²Π° Ρ ΠΎΡΠ°ΡΠ° ΠΎΡ Taobao ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΠΎΡΠ΅ΠΌ Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π²Π³ΡΠ°Π΄ΠΈΡ Π° Lua Π² Π½Π΅Π³ΠΎ. ΠΠ°ΠΊΠ²ΠΎ Π΄Π°Π²Π° ΡΠΎΠ²Π°?
- Π Π°Π·ΠΌΠ΅Ρ. Π’ΠΎΠΉ Π΅ ΠΌΠ°Π»ΡΠΊ. LuaJIT Π΄Π°Π²Π° ΠΎΠΊΠΎΠ»ΠΎ 100-200 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΠ° overhead ΠΏΠΎ ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ overhead ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ.
- Π‘ΠΊΠΎΡΠΎΡΡ. ΠΠ½ΡΠ΅ΠΏΡΠ΅ΡΠ°ΡΠΎΡ LuaJIT Π² ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π΅ Π±Π»ΠΈΠ·ΡΠΊ Π΄ΠΎ C; Π² Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΏΡΠΎΡΠ²ΡΠ²Π° Ρ Java, Π° Π² Π΄ΡΡΠ³ΠΈ - Ρ Π½Π°Π΄ΠΌΠΈΠ½Π°Π²Π°. ΠΡΠΊΠΎΠ³Π° ΡΠΎΠΉ ΡΠ΅ ΡΡΠΈΡΠ°ΡΠ΅ Π·Π° state of the art, Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΡ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ. Π‘Π΅Π³Π° ΠΈΠΌΠ° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΈ, Π½ΠΎ ΡΠ΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ V8. ΠΡΠΊΠΎΠΈ JavaScript ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΈ ΠΈ Java HotSpot ΡΠ° ΠΏΠΎ-Π±ΡΡΠ·ΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠΈ, Π½ΠΎ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΌΠ΅ΡΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ ΠΎΡΡΠ°Π²Π°Ρ Π½Π°Π·Π°Π΄.
- ΠΠ΅ΡΠ½ΠΎ ΡΡΠ²ΠΎΡΠ²Π°Π½Π΅. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅, Π΄Π° ΡΠ΅ΡΠ΅ΠΌ, ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° Π½Π° Perl ΠΈ Π½Π΅ ΡΡΠ΅ Booking, Π½ΡΠΌΠ° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Perl ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ. ΠΠ°ΡΠΎΡΠΎ Π³ΠΈ Π½ΡΠΌΠ°, Π²ΡΠΈΡΠΊΠΈ ΡΠ° Π²Π·Π΅ΡΠΈ, Π° ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠΌ ΠΎΡΠ½Π΅ΠΌΠ° Π²ΡΠ΅ΠΌΠ΅ ΠΈ Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ Π½Π° Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΡΡΠΎ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΈ ΠΏΡΠ΅ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠ°ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅. ΠΡΠΈ Lua Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ. Lua ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΡΡΠ΅Π½ ΠΎΡ Π²ΡΠ΅ΠΊΠΈ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π·Π° ΡΡΠΈ Π΄Π½ΠΈ. ΠΠ° ΠΌΠ΅Π½ ΠΌΠΈ ΠΎΡΠ½Π΅ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²Π° ΡΠ°ΡΠ°, Π·Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²Ρ. Π‘Π»Π΅Π΄ Π΄Π²Π° ΡΠ°ΡΠ° Π²Π΅ΡΠ΅ ΠΏΠΈΡΠ΅Ρ ΠΊΠΎΠ΄ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ. Π‘Π»Π΅Π΄ ΡΠ΅Π΄ΠΌΠΈΡΠ° ΡΠΎΠΉ Π·Π°ΠΌΠΈΠ½Π° Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:

Π’ΡΠΊ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ°. Π OpenResty ΡΠ° ΡΡΠ±ΡΠ°Π½ΠΈ ΠΊΡΠΏ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠ°ΠΊΡΠΎ Π»ΡΠ°ΡΠ½ΠΈ, ΡΠ°ΠΊΠ° ΠΈ ΠΎΡ NGINX. Π Π²ΡΠΈΡΠΊΠΎ Π΅ Π³ΠΎΡΠΎΠ²ΠΎ - Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π°ΡΠ΅ ΠΈ ΡΠ°Π±ΠΎΡΠΈ.
ΠΡΠΈΠΌΠ΅ΡΠΈ
ΠΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Ρ Π»ΠΈΡΠΈΠΊΠ°ΡΠ°, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ ΠΊΠΎΠ΄Π°. ΠΡΠΎ Π΅Π΄ΠΈΠ½ ΠΌΠ°Π»ΡΠΊ Hello World:

ΠΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ° ΡΡΠΊ? Π’ΠΎΠ²Π° Π΅ NGINX ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠΈΠ΅ Π½Π΅ ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΠΌΠ΅, Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΡΠΎΡΡΠΈΠ½Π³, Π½Π΅ Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΡΠΎΠ² ΠΊΠ°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² NGINX, ΠΆΠΈΠ²Π΅Π΅ΠΌ Π΄ΠΎΠ±ΡΠ΅ ΠΈ Π»Π΅Π½ΠΈΠ²ΠΎ.
content_by_lua_block β ΡΠΎΠ²Π° Π΅ Π±Π»ΠΎΠΊ, ΠΊΠΎΠΉΡΠΎ ΡΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ ΡΡΠ΅Π· Lua ΡΠΊΡΠΈΠΏΡ. ΠΠ·ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΎΡ NGINX remote_addr ΠΈ Ρ Π²ΠΌΡΠΊΠ²Π°ΠΌΠ΅ Π² string.format. Π’ΠΎΠ²Π° Π΅ ΡΡΡΠΎΡΠΎ ΠΊΠ°ΡΠΎ sprintf, ΡΠ°ΠΌΠΎ ΡΠ΅ Π½Π° Lua, ΡΠ°ΠΌΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. Π ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:

ΠΠΎ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ Π² ΡΠ΅Π°Π»Π½ΠΈΡ ΡΠ²ΡΡ. Π ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π° Hello World. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ Π΄ΡΡΠ³Π°Π΄Π΅ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ°ΠΊΠ° ΠΎΡΠ³ΠΎΠ²ΠΎΡ.

ΠΡΠΎΡΡΠΎ ΡΠ΅Π΄ΠΈ ΠΈ ΡΠ°ΠΊΠ°. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅. ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ΄Π²Π°Ρ 100,000 ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, ΡΡΠ°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π½ΠΎ. ΠΠ°ΡΠΎΠ²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π©Π΅ ΡΡΡΡΠΈΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΊΠΎΡΠΊΠΈ. ΠΠΎ Π½ΡΠΌΠ° Π΄Π° ΡΡΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊΠ°, ΡΠ΅ ΡΠ°Π·ΡΠΈΡΠΈΠΌ ΠΊΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ Π΄ΡΠΌΠΈ ΠΈ Π°ΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π΅ ΡΡΡΡΠΈΠ» 'ΠΊΠΎΡΠ΅Π½ΡΠ°', ΡΠ΅ ΠΌΡ Π½Π°ΠΌΠ΅ΡΠΈΠΌ ΠΊΠΎΡΠΊΠΈ, ΠΏΡΡ
ΠΊΠ°Π²ΠΈ ΠΈ Π΄Ρ. ΠΏΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΡΠΊΠ΅Π½Π΄Π°. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:

ΠΠ²Π΅ ΡΠ΅Π΄Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ GET-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π°, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΎΡ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΠΎ ΠΊΠ»ΡΡΠΎΠ²Π° Π΄ΡΠΌΠ° ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ SQL-Π·Π°ΠΏΠΈΡ. ΠΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:

Π‘Π²ΡΡΠ·Π²Π°ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° resty.mysql, ΠΊΠΎΡΡΠΎ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ°. ΠΠ΅ Π½ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Π½ΠΈΡΠΎ, Π²ΡΠΈΡΠΊΠΎ Π΅ Π³ΠΎΡΠΎΠ²ΠΎ. Π£ΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΠΌ ΠΈ ΠΏΡΠ°Π²ΠΈΠΌ SQL-Π·Π°ΠΏΠΈΡ:

Π’ΡΠΊ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΡΡΡΠ°ΡΠ½ΠΎ, Π½ΠΎ Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ. Π’ΡΠΊ 10 β Π΅ Π»ΠΈΠΌΠΈΡΡΡ. ΠΠ·Π²Π»ΠΈΡΠ°ΠΌΠ΅ 10 Π·Π°ΠΏΠΈΡΠ°, ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΈ ΡΠΌΠ΅, Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅. ΠΠ° Π»ΠΈΠΌΠΈΡΠ° Π² SQL Π·Π°Π±ΡΠ°Π²ΠΈΡ
.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π½Π°ΠΌΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π²ΡΠΈΡΠΊΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ. Π‘ΡΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΡ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΏΡΠ»Π²Π°ΠΌΠ΅ Lua-ΡΠ°Π±Π»ΠΈΡΠ°, Π½Π°ΡΠ΅ΡΠ΅Π½Π° reqs, ΠΈ ΠΏΡΠ°Π²ΠΈΠΌ ngx.location.capture_multi.

ΠΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΎΡΠΈΠ²Π°Ρ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅, ΠΈ Π½ΠΈ ΡΠ΅ Π²ΡΡΡΠ°Ρ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ. ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π΅ ΡΠ°Π²Π½ΠΎ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π½Π°ΠΉ-Π±Π°Π²Π½ΠΈΡ. ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΈΡΠ΅ Π½ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π΄ΠΎΠΉΠ΄Π°Ρ Π·Π° 50 ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΈ ΡΠΌΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠΈΠ»ΠΈ ΡΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ Π½ΠΈ ΠΈΠ΄Π²Π° Π·Π° 50 ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΌΠ΅ ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΈ ΠΈ Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° HTTP ΠΈ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅, ΡΠ΅ Π½Π°ΠΊΠ°ΡΠ°ΠΌΠ΅ NGINX Π΄Π° ΡΠ²ΡΡΡΠΈ Π²ΡΠΈΡΠΊΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π½Π°Ρ. ΠΠ°ΠΊΡΠΎ Π²ΠΈΠ΄ΡΡ
ΡΠ΅, ΡΠ°ΠΌ ΠΈΠΌΠ°ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ ΠΊΡΠΌ url/fetch, Π΅ΡΠΎ Π³ΠΎ:

ΠΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΡΡ proxy_pass, ΡΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°, ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ, ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ.
ΠΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΠ°ΠΉ-ΠΏΡΠΎΡΡΠ°ΡΠ° ΠΈΠ΄Π΅Ρ Π΅ Π²ΡΠΈΡΠΊΠΎ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ° Π² JSON, Π»Π΅ΡΠ½ΠΎ Π΅, Π·Π° Π΄Π²Π΅ ΡΠ΅Π΄Π°. ΠΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Content-Type, ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ JSON.
ΠΠΎ ΠΈΠΌΠ° Π΅Π΄Π½Π° ΡΡΡΠ΄Π½ΠΎΡΡ: ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π½Π΅ ΠΈΡΠΊΠ° Π΄Π° ΡΠ΅ΡΠ΅ JSON. Π’ΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΈΠ²Π»ΠΈΡΠ°ΠΌΠ΅ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π½Π΅ Π½ΠΈ ΡΠ΅ ΠΈΡΠΊΠ° Π΄Π° Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΡΠ½Π°ΡΠ°Π»ΠΎ. Π SEO ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈΡΠ΅ ΡΠ΅ ΠΊΠ°ΠΆΠ°Ρ, ΡΠ΅ Π°ΠΊΠΎ ΡΡΡΡΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠΎ Π΅ Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΡΡ . Π Π°ΠΊΠΎ ΠΈΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π½ΡΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅, ΡΠ΅ ΡΠ΅ ΠΊΠ°ΠΆΠ°Ρ, ΡΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΡΡΡΠ°ΡΠΊΠΈ Π½ΠΈΡΠΎ Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Ρ.
ΠΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ Ρ ΡΠΎΠ²Π°? Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ HTML. Π ΡΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π΅ Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΎ, Π·Π°ΡΠΎΠ²Π° ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈ. ΠΠ° ΡΠΎΠ²Π° ΠΈΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° lua-resty-template.

ΠΠ΅ΡΠΎΡΡΠ½ΠΎ Π²Π΅ΡΠ΅ ΡΡΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΡΠΈΡΠ΅ ΡΡΡΠ°ΡΠ½ΠΈ Π±ΡΠΊΠ²ΠΈ OPM. OpenResty ΠΈΠ΄Π²Π° Ρ ΡΠ²ΠΎΠΉ ΠΏΠ°ΠΊΠ΅ΡΠ΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ, ΡΡΠ΅Π· ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΎΡΠ΅ ΠΊΡΠΏ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡ lua-resty-template. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡ ΡΠ°Π±Π»ΠΎΠ½Π΅Π½ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π», Π±Π»ΠΈΠ·ΡΠΊ Π΄ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ Π½Π° Django. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π³ΠΎΡΠ΅-Π΄ΠΎΠ»Ρ ΡΠ°ΠΊΠ°:

Π‘ΡΠ±ΡΠ°Ρ
ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΠ°Ρ
ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° Π² Π΄Π²Π΅ Π»ΠΈΠ½ΠΈΠΈ. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, ΠΏΠΎΠ»ΡΡΠΈ ΠΊΠΎΡΠ΅Π½ΡΠ°. ΠΠΎΠ½Π΅ΠΆΠ΅ ΡΠ°Π·ΡΠΈΡΠΈΡ
ΠΌΠ΅ Π·Π°ΠΏΠΈΡΠΈΡΠ΅, ΡΠΎΠΉ ΠΏΠΎΠ»ΡΡΠΈ ΠΈ ΠΌΠΎΡΡΠΊΠΎ ΠΊΠΎΡΠ΅. ΠΠΎΠΆΠ΅ Π±ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ²Π° Π΅ ΡΡΡΡΠΈΠ», Π½ΠΎ Π½Π΅ ΡΡΠΏΡ Π΄Π° ΡΠΎΡΠΌΡΠ»ΠΈΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΡΠΈ.
ΠΡΠΈΡΠΊΠΎ Π΅ ΡΡΠΏΠ΅Ρ, Π½ΠΎ Π½ΠΈΠ΅ ΡΠΌΠ΅ Π² ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΈ Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅. ΠΠ΅ΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π°, Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ NGINX ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π·Π°ΠΏΠΈΡΠ° Π² ΡΠ΅ΡΠΌΠΈΠ½ΠΈ Π½Π° OpenResty:
- ΠΡΡΠ²Π° ΡΠ°Π·Π°Β β access, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΡΡΠΊΠΌΠΎ Π΅ ΠΏΡΠΈΡΡΠΈΠ³Π½Π°Π» ΠΈ Π½ΠΈΠ΅ Π³ΠΎ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅, ΠΎΡΠ½ΠΎΠ²Π°Π²Π°ΠΉΠΊΠΈ ΡΠ΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΡΡΠ°, IP Π°Π΄ΡΠ΅ΡΠ° ΠΈ Π΄ΡΡΠ³ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΎΠΆΠ΅ΠΌ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°ΠΌΠ΅, Π°ΠΊΠΎ Π½Π΅ Π½ΠΈ Ρ Π°ΡΠ΅ΡΠ²Π°. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈΠ»ΠΈ, Π°ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΡΠΏΠΈΡΠ°ΠΌΠ΅ Π² ΡΠ°Π·ΠΈ ΡΠ°Π·Π°.
- rewrite. ΠΡΠ΅ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ.
- content. ΠΠ°Π²Π°ΠΌΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
- headers filter. ΠΠΎΠ΄ΠΌΠ΅Π½ΡΠΌΠ΅ Π·Π°Π³Π»Π°Π²ΠΈΡΡΠ° Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°. ΠΠΊΠΎ ΡΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ
proxy_pass, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ΠΏΠΈΡΠ΅ΠΌ Π½ΡΠΊΠΎΠΈ Π·Π°Π³Π»Π°Π²ΠΈΡ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. - body filter. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΠΌ ΡΡΠ»ΠΎΡΠΎ.
- logΒ β Π»ΠΎΠ³Π²Π°Π½Π΅. ΠΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π»ΠΎΠ³ΠΎΠ²Π΅ Π² elasticsearch Π±Π΅Π· Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ»ΠΎΠΉ.
ΠΠ°ΡΠ°ΡΠ° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:

Π©Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠ²Π° Π² location, ΠΊΠΎΠΉΡΠΎ ΠΎΠΏΠΈΡΠ°Ρ
ΠΌΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ, ΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΡΠ°ΠΊΡΠ² ΠΊΠΎΠ΄:

ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ cookie token. ΠΠΊΠΎ Π½ΡΠΌΠ°, ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°ΠΌΠ΅ ΠΊΡΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΡΠ° Ρ
ΠΈΡΡΠΈ ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ°Ρ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΡΡΠ°Π²ΡΡ cookie token. ΠΠ°ΡΠΎΠ²Π° ΡΠ΅ Π³ΠΎ ΡΠ»ΠΎΠΆΠΈΠΌ ΠΈ Π² Redis:

ΠΠΎΠ΄ΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Redis Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡ ΠΈ Π½Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ Π΄ΡΡΠ³ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ. ΠΡΠΈ ΡΠΎΠ²Π°, ΡΠ΅Π»ΠΈΡΡ Π²Ρ
ΠΎΠ΄/ΠΈΠ·Ρ
ΠΎΠ΄, ΠΊΠ°ΠΊΡΠΎ ΡΠ°ΠΌ, ΡΠ°ΠΊΠ° ΠΈ ΡΡΠΊ, Π΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρ. ΠΠΊΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π΅Π½ ΠΊΠΎΠ΄, ΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ. ΠΠ΅ΡΠΎ ΠΊΠ°ΡΠΎ Ρ gevent, ΡΠ°ΠΌΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ Π΄ΠΎΠ±ΡΠ΅.

ΠΠ΅ΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ°ΠΌΠ°ΡΠ° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ:

ΠΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΠ΅ΠΌ ΡΡΠ»ΠΎΡΠΎ Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ. ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ POST Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅, ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Π»ΠΎΠ³ΠΈΠ½ΡΡ ΠΈ ΠΏΠ°ΡΠΎΠ»Π°ΡΠ° ΡΠ° Π²Π΅ΡΠ½ΠΈ. ΠΠΊΠΎ Π½Π΅ ΡΠ° Π²Π΅ΡΠ½ΠΈ, ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°ΠΌΠ΅ ΠΊΡΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ. Π Π°ΠΊΠΎ ΡΠ° Π²Π΅ΡΠ½ΠΈ, Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ token Π² Redis:

ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ cookie, ΡΠΎΠ²Π° ΡΡΡΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Π·Π° Π΄Π²Π΅ Π»ΠΈΠ½ΠΈΠΈ:

ΠΡΠΈΠΌΠ΅ΡΡΡ Π΅ ΠΏΡΠΎΡΡ, ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅Π½. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½ΡΠΌΠ° Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° Π½Π° Ρ
ΠΎΡΠ°ΡΠ° ΠΊΠΎΡΠ΅Π½ΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅, ΠΊΠΎΠΉ Π·Π½Π°Π΅. ΠΠ΅ΠΊΠ° ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ.
- ΠΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ΅Π½ Π±Π΅ΠΊΠ΅Π½Π΄. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π½ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ ΡΡΠ²ΡΠ΅ΠΌ ΠΌΠ°Π»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ Π² Π±Π΅ΠΊΠ΅Π½Π΄Π°: ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π°ΡΠ°, ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π½ΡΠΊΠ°ΠΊΡΠ² ΡΠΏΠΈΡΡΠΊ, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΈΠΌΠ° Π² ΡΠ°ΠΉΡΠ°, Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π±ΡΠΎΡΡ ΠΈΠ»ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°. ΠΠ΅ΡΠΎ ΡΠ°ΠΊΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ. ΠΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡΠ΅ ΡΠ°ΡΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ. Π’ΠΎΠ²Π° ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ Π±ΡΡΠ·ΠΎ, Π»Π΅ΡΠ½ΠΎ ΠΈ Π΄ΠΎΠ±ΡΠ΅.
- ΠΡΠ΅Π΄ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΠΊΠ»Π°ΠΌΠ° Π² Π½Π°ΡΠ°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°, Π° ΡΠ°Π·ΠΈ ΡΠ΅ΠΊΠ»Π°ΠΌΠ° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΡΠ΅Π· API Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ ΡΡΠΊ. ΠΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π°ΠΌΠ΅ Π½Π°ΡΠΈΡ Π±Π΅ΠΊΠ΅Π½Π΄, ΠΊΠΎΠΉΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎΠ΄ Π½Π°ΡΠΈΡΠΊ. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈ ΡΡΠ±Π΅ΡΠ΅ΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΡΠΊ. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ³Π»ΠΎΠ±ΠΈΠΌ Π½ΡΠΊΠ°ΠΊΡΠ² JS ΠΈΠ»ΠΈ, ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ Π½Π΅ΡΠΎ, Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΠΌ Π½Π΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
- Π€Π°ΡΠ°Π΄Π° Π·Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·. Π’ΠΎΠ²Π° Π΅ ΡΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΡ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ
. ΠΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠΈΡ
Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Tenzor, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° Ρ Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎ ΠΎΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΎΡΡΠ΅ΡΠ½ΠΎΡΡ Π·Π° ΠΎΠΊΠΎΠ»ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° Π½Π° ΡΡΠΈΠ΄ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π»ΠΈΡΠ° Π² ΡΡΡΠ°Π½Π°ΡΠ°. ΠΠΈΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΡ
ΠΌΠ΅ ΡΡΠ»ΡΠ³Π°, ΠΊΡΠ΄Π΅ΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ°: ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈ.
OpenResty ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ Π»Π΅ΠΏΠΈΠ»ΠΎ Π·Π° Π²Π°ΡΠΈΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ Π΅Π΄ΠΈΠ½Π΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΡΠΈΡΠΊΠΎ ΠΈ Π΅Π΄ΠΈΠ½Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΡΠ°ΠΊΠ°, ΡΠ΅ ΡΡΠΊ ΠΈΠΌΠ°ΡΠ΅ Node.js, ΡΡΠΊ PHP, ΡΡΠΊ Python, ΡΡΠΊ Π½Π΅ΡΠΎ Π½Π° Erlang, ΡΠ°Π·Π±ΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΠΊΠΎΠ΄ Π΄Π° ΡΠ΅ ΠΏΠΈΡΠ΅ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅. ΠΠ°ΡΠΎΠ²Π° OpenResty ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ° Π½Π° ΡΡΠΎΠ½ΡΠ°. - Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ°. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ NGINX ΡΡΠΎΠΈ Π½Π° Π²Ρ ΠΎΠ΄Π° ΠΈ Π²ΡΠΈΡΠΊΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΏΡΠ΅Π· Π½Π΅Π³ΠΎ. ΠΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΠΎΠ²Π° ΠΌΡΡΡΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅ Π½Π΅ΡΠΎ Π²Π΅Π΄Π½Π°Π³Π° ΠΈ Π΄Π° Π³ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½ΡΠΊΡΠ΄Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² Elasticsearch, Logstash ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π² Π»ΠΎΠ³ ΠΈ ΠΏΠΎΡΠ»Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠΈΡΠ΅ Π½ΡΠΊΡΠ΄Π΅.
- ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½Π»Π°ΠΉΠ½ ΠΈΠ³ΡΠΈ ΡΡΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅. ΠΠ½Π΅Ρ Π² ΠΠ΅ΠΉΠΏΡΠ°ΡΠ½ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΡ ΠΠ»Π°Π΄ΡΡ ΡΠ΅ ΡΠ°Π·ΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π±ΡΡΠ·ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΊΠΎΡΠΈΠΏΠΈΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠ° ΠΈΠ³ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° OpenResty.
- Π€ΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ (WAF). Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅ Π½Π° ΠΌΠΎΠ΄Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ web application firewall ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΡΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΡΠ³ΠΈ, ΠΊΠΎΠΈΡΠΎ Π³ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° OpenResty ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½ web application firewall, ΠΊΠΎΠΉΡΠΎ Π»Π΅ΡΠ½ΠΎ ΠΈ Π±ΡΡΠ·ΠΎ ΡΠ΅ ΡΠΈΠ»ΡΡΠΈΡΠ° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄ Π²Π°ΡΠΈΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Python, Π·Π½Π°Π΅ΡΠ΅, ΡΠ΅ PHP ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΠ°Π½, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½Π΅ Π³ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΎΡ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°. ΠΠ½Π°Π΅ΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ MySQL ΠΈ Python. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ ΡΡΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΡΡ Π½ΡΠΊΠ°ΠΊΡΠ² directory traversal ΠΈ Π΄Π° ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΠ°Ρ Π½Π΅ΡΠΎ Π² Π±Π°Π·Π°ΡΠ°. ΠΠ°ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠ΅ ΠΎΠΏΠ°ΡΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π±ΡΡΠ·ΠΎ ΠΈ Π΅Π²ΡΠΈΠ½ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΎ Π½Π° ΡΡΠΎΠ½ΡΠ°.
- ΠΠ±ΡΠ΅ΡΡΠ²ΠΎ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ OpenResty Π΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° NGINX, ΡΠΎΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΈ Π±ΠΎΠ½ΡΡ β ΡΠΎΠ²Π° Π΅ NGINX ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°. Π’Ρ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΡΠΌΠ° ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΡΠ°ΡΡ ΠΎΡ Π²ΡΠΏΡΠΎΡΠΈΡΠ΅, Ρ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΡΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ, Π²Π΅ΡΠ΅ ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈ ΠΎΡ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° Π½Π° NGINX.
Lua ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ. ΠΡΠ΅ΡΠ° ΡΠ°Π·Π³ΠΎΠ²Π°ΡΡΡ Ρ ΠΌΠΎΠΌΡΠ΅ΡΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ Π΄ΠΎΠΉΠ΄ΠΎΡ Π° Π½Π° ΡΡΠ΅Π±Π½ΠΈΡ Π΄Π΅Π½ HighLoad++ ΠΈ ΡΡΡ , ΡΠ΅ ΡΠ°ΠΌΠΎ Tarantool Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Lua. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ°ΠΊΠ°, Π½Π° Lua ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ°. ΠΡΠΈΠΌΠ΅ΡΠΈ: OpenResty, XMPP ΡΡΡΠ²ΡΡ Prosody, ΠΈΠ³ΡΠ°Π»Π½ΠΈΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» Love2D, Lua ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Warcraft ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΌΠ΅ΡΡΠ°. ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Lua ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Ρ Π³ΠΎΠ»ΡΠΌΠΎ ΠΈ ΠΎΡΠ·ΠΈΠ²ΡΠΈΠ²ΠΎ ΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ. ΠΡΠΈΡΠΊΠΈΡΠ΅ ΠΌΠΈ Π²ΡΠΏΡΠΎΡΠΈ ΠΏΠΎ Lua Π±ΡΡ Π° ΡΠ΅ΡΠ΅Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΠΏΠΈΡΠ΅Ρ Π² ΡΠΏΠΈΡΡΠΊΠ° Π·Π° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅, Π±ΡΠΊΠ²Π°Π»Π½ΠΎ ΡΠ»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΡΠ°Π·ΡΡΠ½Π΅Π½ΠΈΡ. Π’ΠΎΠ²Π° Π΅ ΡΡΠΏΠ΅Ρ. ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, Π½Π΅ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ ΠΈΠΌΠ° ΡΠ°ΠΊΠΎΠ²Π° Π΄ΠΎΠ±ΡΠΎ Π΄ΡΡΠ΅Π²Π½ΠΎ ΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ.
ΠΠΌΠ° GitHub Π·Π° OpenResty, ΠΊΡΠ΄Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ issue, Π°ΠΊΠΎ Π½Π΅ΡΠΎ Π΅ ΡΡΡΠΏΠ΅Π½ΠΎ. ΠΠΌΠ° ΡΠΏΠΈΡΡΠΊ Π·Π° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² Google Groups, ΠΊΡΠ΄Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΠ΅ ΠΎΠ±ΡΠΈ Π²ΡΠΏΡΠΎΡΠΈ, ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠΏΠΈΡΡΠΊ Π½Π° ΠΊΠΈΡΠ°ΠΉΡΠΊΠΈ β Π°ΠΊΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅ΡΠ΅ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ, Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠΈΡΠ°ΠΉΡΠΊΠΈ.
Π Π΅Π·ΡΠΌΠ΅
- ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅, ΡΠ΅ ΡΡΠΏΡΡ Π΄Π° ΠΏΡΠ΅Π΄Π°ΠΌ, ΡΠ΅ OpenResty Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π΅Π½ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ, ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ Π·Π° ΡΠ΅Π±.
- ΠΠΌΠ° Π½ΠΈΡΡΠΊ ΠΏΡΠ°Π³ Π½Π° Π²Π»ΠΈΠ·Π°Π½Π΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ΡΡ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΡΠΎΠ·ΠΈ, Ρ ΠΊΠΎΠΉΡΠΎ ΠΏΠΈΡΠ΅ΠΌ, Π° Π΅Π·ΠΈΠΊΡΡ Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ΅Π½.
- ΠΡΠ΅Π΄Π»Π°Π³Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ I/O Π±Π΅Π· ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ²Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π·Π°ΠΏΠ»Π΅ΡΠ΅Π½ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΏΠΈΡΠ΅ΠΌ Π² NodeJS.
- ΠΠΌΠ° Π»Π΅ΡΠ΅Π½ Π΄Π΅ΠΏΠ»ΠΎΠΉ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΠΈ ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠΎ NGINX Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΌΠΎΠ΄ΡΠ» ΠΈ Π½Π°ΡΠΈΡΡ ΠΊΠΎΠ΄, ΠΈ Π²ΡΠΈΡΠΊΠΎ Π²Π΅Π΄Π½Π°Π³Π° ΡΠ°Π±ΠΎΡΠΈ.
- ΠΠΎΠ»ΡΠΌΠΎ ΠΈ ΠΎΡΠ·ΠΈΠ²ΡΠΈΠ²ΠΎ ΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ.
ΠΠ΅ ΡΠ°Π·ΠΊΠ°Π·Π°Ρ Π² Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ ΠΊΠ°ΠΊ ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅, Π·Π°ΡΠΎΡΠΎ ΡΡΠ°Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΠ»Π³Π° ΠΈΡΡΠΎΡΠΈΡ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ!

ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
