ΠΡΠ½ΠΎΠ²ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡΡΠ° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° 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 Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ. ΠΡΠΈΡΠΊΠΈ Π·Π½Π°Π΅ΡΠ΅, ΡΠ΅ Π΅ Π±ΡΡΠ· ΠΈ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½. Π Π½Π΅Π³ΠΎ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΡΠ΄Π΅ΡΠ½ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΏΠΎΡΡΡΠΎΠ»ΠΈΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΌΠΈΡΠ»ΡΡΠ΅ Π½Π΅ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ Ρ gevent Π² Python. Gevent Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½, Π½ΠΎ Π°ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ Π½Π° C ΠΈ Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΡΠΊΠ°, Ρ gevent ΡΠ΅ ΠΈΠ·ΠΏΠ°Π΄Π½Π΅ΡΠ΅ Π² Π»ΡΠ΄ΠΎΡΡ, ΠΎΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ ΡΠ΅ Π΄Π° Π³ΠΎ Π΄Π΅Π±ΡΠ³Π²Π°ΡΠ΅. ΠΠΌΠ°Ρ ΠΎΠΏΠΈΡ: ΠΎΡΠ½Π΅ ΠΌΠΈ ΡΠ΅Π»ΠΈ Π΄Π²Π° Π΄Π½ΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π΅ ΠΎΠ±ΡΡΠΊΠ°Π»ΠΎ. ΠΠΊΠΎ Π½ΡΠΊΠΎΠΉ Π½Π΅ Π±Π΅ΡΠ΅ ΡΠ΅ ΡΠΎΠ²ΠΈΠ» ΠΌΠ΅ΡΠ΅ΡΠΈ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π°, Π½Π΅ Π±Π΅ΡΠ΅ ΠΎΡΠΊΡΠΈΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π½Π΅ Π±Π΅ Π½Π°ΠΏΠΈΡΠ°Π» Π² ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ Google Π½Π΅ Π³ΠΎ Π±Π΅ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΡ ΠΌΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠΊΠ°ΠΌΠ΅.
NGINX Π²Π΅ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΡΠ°ΡΠΈΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅Π½Ρ. ΠΠ΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎ ΡΠΌΠΈΡΠ»Π΅Π½ Π½Π°ΡΠΈΠ½, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΡΠΊΡΠ΄Π΅ Π΄Π° Π½Π΅ Π·Π°Π±Π°Π²Ρ, ΠΈΠ»ΠΈ Π΄Π° Π·Π°Π³ΡΠ±ΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ. Nginx Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ, Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΊΠΎΡ ΠΎΠΏΡΠΈΡ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ β WSGI, PHP-FPM, Gunicorn, Unicorn. ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Nginx, Π΄Π°Π²Π°ΡΠ΅ Π³ΠΎ Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈΡΠ΅, ΡΠ΅ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Π½Π΅Π³ΠΎ. Nginx ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅. ΠΠ° ΡΠΎΠ²Π° ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ, ΡΠΎΠΉ ΠΈΠΌΠ° ΡΠ°Π·Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΌΠΎ Π΅ ΠΏΡΠΈΠ΅Π» Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Ρ Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΠ» ΠΈ ΠΊΠΎΠ³Π°ΡΠΎ Π΅ ΠΏΡΠ΅Π΄Π°Π» ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
Nginx Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½, Π½ΠΎ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ: Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π³ΡΠ²ΠΊΠ°Π², Π΄ΠΎΡΠΈ ΠΈ Ρ Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π΅ΠΊΠΈΠΏΡΡ Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½. Π’Π°Π·ΠΈ ΠΌΠΎΡΠ½ΠΎΡΡ Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π°. ΠΠ°ΡΠΎΠ²Π° Ρ ΠΎΡΠ°ΡΠ° ΠΎΡ Taobao ΠΏΡΠ΅Π΄ΠΈ ΠΎΡΠ΅ΠΌ Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π²Π³ΡΠ°Π΄ΠΈΡ Π° Lua. ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΎΠ²Π°?
- Π Π°Π·ΠΌΠ΅Ρ. Π’ΠΎΠΉ Π΅ ΠΌΠ°Π»ΡΠΊ. LuaJIT Π΄Π°Π²Π° ΠΎΠΊΠΎΠ»ΠΎ 100-200 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΠ° ΠΎΠ²Π΅ΡΡ Π΅Π΄ ΠΏΠΎ ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΎΠ²Π΅ΡΡ Π΅Π΄ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ.
- Π‘ΠΊΠΎΡΠΎΡΡ. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡΡ LuaJIT Π² ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π΅ Π±Π»ΠΈΠ·ΡΠΊ Π΄ΠΎ C, Π² Π½ΡΠΊΠΎΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΎΡΡΠ°Π²Π° ΠΎΡ Java, Π° Π² Π΄ΡΡΠ³ΠΈ Ρ ΠΈΠ·ΠΏΡΠ΅Π²Π°ΡΠ²Π°. ΠΡΠΊΠΎΠ³Π° ΡΠ΅ ΡΠΌΡΡΠ°ΡΠ΅ Π·Π° state of the art, Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΡ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ. Π‘Π΅Π³Π° ΠΈΠΌΠ° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΈ, Π½ΠΎ ΡΠ΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ V8. ΠΡΠΊΠΎΠΈ JavaScript ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΈ ΠΈ Java HotSpot Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ»ΡΡΠ°ΠΈ ΡΠ° ΠΏΠΎ-Π±ΡΡΠ·ΠΈ, Π½ΠΎ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΌΠ΅ΡΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠ·ΠΎΡΡΠ°Π²Π°Ρ.
- ΠΠ΅ΡΠ½ΠΎ Π·Π° ΡΡΠ²ΠΎΡΠ²Π°Π½Π΅. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° Π½Π° Perl ΠΈ Π½Π΅ ΡΡΠ΅ Booking, Π½ΡΠΌΠ° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Perl ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ. ΠΠ°ΡΠΎΡΠΎ Π³ΠΈ Π½ΡΠΌΠ°, Π²ΡΠΈΡΠΊΠΈ ΡΠ° Π²Π·Π΅ΡΠΈ, Π° ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠΌ ΠΎΡΠ½Π΅ΠΌΠ° Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΡΡΠΈΠ»ΠΈΡ. ΠΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ Π½Π° Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΏΠ°ΠΊ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π½Π°Π²ΡΠ°Π²Π°ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅. Π ΡΠ»ΡΡΠ°Ρ Ρ Lua Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ. Lua ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΡΠΈ ΠΎΡ Π²ΡΠ΅ΠΊΠΈ Π΄ΠΆΡΠ½ΠΈΡΡ Π·Π° ΡΡΠΈ Π΄Π½ΠΈ. ΠΠ° ΠΌΠ΅Π½ ΠΌΠΈ ΠΎΡΠ½Π΅ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²Π° ΡΠ°ΡΠ°, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ°. Π‘Π»Π΅Π΄ Π΄Π²Π° ΡΠ°ΡΠ° Π²Π΅ΡΠ΅ ΠΏΠΈΡΠ΅Ρ ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ. Π‘Π»Π΅Π΄ ΠΎΠΊΠΎΠ»ΠΎ ΡΠ΅Π΄ΠΌΠΈΡΠ° ΡΠΎΠΉ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:

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

ΠΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ° ΡΡΠΊ? Π’ΠΎΠ²Π° Π΅ Π΅Π½Π΄ΠΆΠΈΠ½ΡΠΎΠ²ΡΠΊΠΈ location. ΠΠ΅ ΡΠ΅ ΡΡΠ΅Π²ΠΎΠΆΠΈΠΌ, Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ ΡΡΡΠΈΠ½Π³, Π½Π΅ Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΊΠ°ΠΊΡΠ² Π³ΠΎΡΠΎΠ² - Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π² NGINX, ΠΆΠΈΠ²Π΅Π΅ΠΌ Π΄ΠΎΠ±ΡΠ΅ ΠΈ ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΎ.
content_by_lua_block β ΡΠΎΠ²Π° Π΅ Π±Π»ΠΎΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Lua ΡΠΊΡΠΈΠΏΡ. ΠΠ·Π΅ΠΌΠ°ΠΌΠ΅ Π΅Π½Π΄ΠΆΠΈΠ½ΡΠΎΠ²Π°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° 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:
- ΠΡΡΠ²Π°ΡΠ° ΡΠ°Π·Π° Π΅ Π΄ΠΎΡΡΡΠΏ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΡΠΎΠΊΡ-ΡΠΎ Π΅ Π΄ΠΎΡΡΠ», ΠΈ Π½ΠΈΠ΅ ΡΠΌΠ΅ Π³ΠΎ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°Π»ΠΈ ΠΏΠΎ Π·Π°Π³Π»Π°Π²ΠΈΡ, ΠΏΠΎ IP Π°Π΄ΡΠ΅Ρ, ΠΏΠΎ Π΄ΡΡΠ³ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΎΠΆΠ΅ΠΌ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°ΠΌΠ΅, Π°ΠΊΠΎ Π½Π΅ Π½ΠΈ Ρ Π°ΡΠ΅ΡΠ²Π°. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅, ΠΈΠ»ΠΈ, Π°ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΡΠ²ΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ Π±Π»ΠΎΠΊΠΈΡΠ°ΠΌΠ΅ Π² ΡΠ°Π·ΠΈ ΡΠ°Π·Π°.
- rewrite. ΠΡΠ΅ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°.
- content. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
- headers filter. ΠΠΎΠ΄ΠΌΠ΅Π½ΡΠΌΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°. ΠΠΊΠΎ ΡΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ
proxy_pass, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ΠΏΠΈΡΠ΅ΠΌ Π½ΡΠΊΠΎΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. - body filter. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΠΌ ΡΡΠ»ΠΎΡΠΎ.
- logΒ β Π»ΠΎΠ³Π²Π°Π½Π΅. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ Π»ΠΎΠ³ΠΎΠ²Π΅ Π² elasticsearch Π±Π΅Π· Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ»ΠΎΠΉ.
ΠΠ°ΡΠ΅ΡΠΎ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:

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

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

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

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

ΠΠ°Π·Π²Π°ΠΌΠ΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΠ΅ΠΌ ΡΡΠ»ΠΎΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ POST Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Π»ΠΎΠ³ΠΈΠ½ΡΡ ΠΈ ΠΏΠ°ΡΠΎΠ»Π°ΡΠ° ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ. ΠΠΊΠΎ Π½Π΅ ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ, ΠΏΡΠ΅Ρ
Π²ΡΡΠ»ΡΠΌΠ΅ Π½Π° ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅. Π Π°ΠΊΠΎ ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ, Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ ΡΠΎΠΊΠ΅Π½Π° Π² 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 Π±ΡΡ Π° ΡΠ΅ΡΠ΅Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΠΏΠΈΡΠ΅Ρ Π² ΡΠΏΠΈΡΡΠΊΠ° Π·Π° ΡΠ°Π·ΠΏΡΠ°ΡΠ°Π½Π΅, Π±ΡΠΊΠ²Π°Π»Π½ΠΎ ΡΠ»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ ΠΊΡΠΏ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ, ΠΎΠ±ΡΡΠ½ΡΠ²Π°Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈ ΠΊΠ°ΠΊ, ΠΊΠ°ΠΊΠ²ΠΎ Π½Π° ΠΊΠ°ΠΊΠ²ΠΎ. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΎ. ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, Π½Π΅ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ ΠΈΠΌΠ° ΡΠ°ΠΊΠ°Π²Π° Π΄ΠΎΠ±ΡΠ° Π΄ΡΡΠ΅Π²Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡ.
ΠΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° OpenResty ΠΈΠΌΠ° GitHub, ΠΊΡΠ΄Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π°ΠΊΠΎ Π½Π΅ΡΠΎ Π΅ ΡΡΡΠΏΠ΅Π½ΠΎ. ΠΠΌΠ° ΡΠΏΠΈΡΡΠΊ Π·Π° ΡΠ°Π·ΠΏΡΠ°ΡΠ°Π½Π΅ Π² Google Groups, ΠΊΡΠ΄Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΠ΅ ΠΎΠ±ΡΠΈ Π²ΡΠΏΡΠΎΡΠΈ, ΠΈΠΌΠ° ΡΠ°Π·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠΈΡΠ°ΠΉΡΠΊΠΈ β ΠΊΠΎΠΉ Π·Π½Π°Π΅, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅ΡΠ΅ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ, Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠΈΡΠ°ΠΉΡΠΊΠΈ.
ΠΡΠΎΠ³
- ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅ ΡΡΠΏΡΡ Π΄Π° ΠΎΠ±ΡΡΠ½Ρ, ΡΠ΅ OpenResty Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π΅Π½ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΡΠ΅Π±.
- Π’ΠΎΠΉ ΠΈΠΌΠ° Π½ΠΈΡΡΠΊ ΠΏΡΠ°Π³ Π½Π° Π²Π»ΠΈΠ·Π°Π½Π΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ΡΡ ΠΏΡΠΈΠ»ΠΈΡΠ° Π½Π° ΡΠΎΠ²Π°, Ρ ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΈΡΠ΅ΠΌ, Π΅Π·ΠΈΠΊΡΡ Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ΅Π½.
- Π’ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ I/O Π±Π΅Π· ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ²Π΅, Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΠ±ΡΡΠΊΠ²Π°Π½Π΅, ΠΊΠ°ΠΊΡΠΎ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π² NodeJS.
- Π’ΠΎΠΉ ΠΈΠΌΠ° Π»Π΅ΡΠ½ΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΠΈ ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠΎ NGINX Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΌΠΎΠ΄ΡΠ» ΠΈ Π½Π°ΡΠΈΡΡ ΠΊΠΎΠ΄, ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ Π²Π΅Π΄Π½Π°Π³Π°.
- ΠΠΎΠ»ΡΠΌΠ° ΠΈ ΠΎΡΠ·ΠΈΠ²ΡΠΈΠ²Π° ΠΎΠ±ΡΠ½ΠΎΡΡ.
ΠΠ΅ ΡΠ°Π·ΠΊΠ°Π·Π°Ρ Π² Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ ΠΊΠ°ΠΊ ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, ΡΡΠ°Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΠ»Π³Π° ΠΈΡΡΠΎΡΠΈΡ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ!

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