ΠΡΠ΅ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΡΡΠ΅Π½ΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° 2016 Π³., ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ Π² Π‘ΠΊΠΎΠ»ΠΊΠΎΠ²ΠΎ ΠΊΡΠ°ΠΉ ΠΠΎΡΠΊΠ²Π° Π½Π° 7-8 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ ΠΌΠΈΠ½Π°Π»Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π°. ΡΠ°Π·ΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΡΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° NGINX Ρ OpenResty ΠΈ Lua.
ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ, ΠΊΠ°Π·Π²Π°ΠΌ ΡΠ΅ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡ ΠΡΠΎΡΠ°ΡΠΎΠ², ΡΠ°Π±ΠΎΡΡ Π·Π° Parallels. Π©Π΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΌΠ°Π»ΠΊΠΎ Π·Π° ΡΠ΅Π±Π΅ ΡΠΈ. ΠΡΠ΅ΠΊΠ°ΡΠ²Π°ΠΌ ΡΡΠΈ ΡΠ΅ΡΠ²ΡΡΡΠΈ ΠΎΡ ΠΆΠΈΠ²ΠΎΡΠ° ΡΠΈ Π² ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄. Π‘ΡΠ°Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡ Π΄ΠΎ ΠΌΠΎΠ·ΡΠΊΠ° Π½Π° ΠΊΠΎΡΡΠΈΡΠ΅ ΡΠΈ Π² Π±ΡΠΊΠ²Π°Π»Π½ΠΈΡ ΡΠΌΠΈΡΡΠ»: ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π²ΠΈΠΆΠ΄Π°ΠΌ ΠΊΠΎΠ΄ Π² ΡΡΠ½ΠΈΡΠ°ΡΠ° ΡΠΈ. ΠΠ΄Π½Π° ΡΠ΅ΡΠ²ΡΡΡ ΠΎΡ ΠΆΠΈΠ²ΠΎΡΠ° Π΅ ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅, ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠΈΠ²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ. ΠΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΎΡ Π²Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ, Π½ΠΎ Π½Π΅ Π³ΠΎ Π·Π½Π°ΡΡ.
ΠΠ° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π·Π»Π΅ Π±Π΅ΡΠ΅. ΠΠΎΠ³Π°ΡΠΎ Π±ΡΡ ΠΌΠ°Π»ΡΠΊ, Π²Π»ΡΠ·ΠΎΡ ΠΈ ΠΌΠΈ Π΄Π°Π΄ΠΎΡ Π° ΡΠ΅Π·ΠΈ Π΄Π²Π΅ ΡΠ΅ΡΠ°Π±Π°ΠΉΡΠΎΠ²ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π‘Π΅Π³Π° Π΅ ΡΡΠΊ Π·Π° Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΡΠΎΠΊΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅. ΠΡΠΈΠ΄ΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΈ ΠΏΠΎΠΏΠΈΡΠ°Ρ : βΠΠΎΠΌΡΠ΅ΡΠ°, ΠΊΠ°ΠΆΠ΅ΡΠ΅ ΠΌΠΈ, ΠΈΠΌΠ°ΡΠ΅ Π»ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Π΄Π°Π½Π½ΠΈ, Π²ΡΠΈΡΠΊΠΎ Π³ΠΎΡΠΈΠ½ΠΎ Π»ΠΈ Π΅? ΠΠΎΠ»ΠΊΠΎ Π±Π°Π·ΠΈ ΠΈΠΌΠ°ΡΠ΅ ΡΠ°ΠΌ? Π’Π΅ ΠΌΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡ Π°: "ΠΠΌΠ°ΠΌΠ΅ 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, ΡΠ΅ ΠΏΠΎΠ»ΡΠ΄Π΅Π΅ΡΠ΅ Π΄Π° Π³ΠΎ Π΄Π΅Π±ΡΠ³Π²Π°ΡΠ΅. ΠΠΌΠ°Ρ ΠΎΠΏΠΈΡ: ΠΎΡΠ½Π΅ ΡΠ΅Π»ΠΈ Π΄Π²Π° Π΄Π½ΠΈ, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π΅ ΠΎΠ±ΡΡΠΊΠ°Π»ΠΎ ΡΠ°ΠΌ. ΠΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° Π½Π΅ ΡΠ΅ Π±Π΅ΡΠ΅ ΡΠΎΠ²ΠΈΠ» Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π΄ΠΌΠΈΡΠΈ, Π½Π΅ Π±Π΅ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π½Π΅ Π³ΠΎ Π±Π΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π» Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ Π³ΡΠ³ΡΠ» Π½Π΅ Π³ΠΎ Π½Π°ΠΌΠ΅ΡΠΈ, ΡΠΎΠ³Π°Π²Π° ΡΡΠ²ΡΠ΅ΠΌ ΡΡΡ ΠΌΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ±ΡΡΠΊΠ°ΠΌΠ΅.
NGINX Π²Π΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. ΠΠ΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π΅ΡΠΊΠΈ, Π·Π° Π΄Π° Π½Π΅ Π·Π°Π±Π°Π²ΠΈΡΠ΅ Π½ΡΠΊΡΠ΄Π΅, Π·Π° Π΄Π° Π½Π΅ Π·Π°Π³ΡΠ±ΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½ΡΠΊΡΠ΄Π΅. Nginx Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅, Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ - WSGI, PHP-FPM, Gunicorn, Unicorn. Nginx Π±Π΅ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½, Π΄Π°Π΄Π΅Π½ Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΠ΅, ΡΠ΅ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Ρ Π½Π΅Π³ΠΎ. Nginx ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΏΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ Π½Π°ΡΠΈΠ½. Π©Π΅ Π³ΠΎΠ²ΠΎΡΡ Π·Π° ΡΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ, ΡΠΎΠΉ ΠΈΠΌΠ° ΡΠ°Π·Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠΊΡ-ΡΠΎ Π΅ ΠΏΡΠΈΠ΅Π» Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΠ» ΠΈ ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π΄Π°Π» ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
Nginx Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½, Π½ΠΎ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ: Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π³ΡΠ²ΠΊΠ°Π² Π΄ΠΎΡΠΈ Ρ Π²ΡΠΈΡΠΊΠΈ ΠΎΠ½Π΅Π·ΠΈ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΌΡΠ΅ΡΠ°ΡΠ° ΡΠ° Π²ΠΊΠ°ΡΠ°Π»ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°. Π’Π°Π·ΠΈ ΡΠΈΠ»Π° Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π°. ΠΠ°ΡΠΎΠ²Π° ΠΌΠΎΠΌΡΠ΅ΡΠ°ΡΠ° ΠΎΡ Taobao Π²Π΅Π΄Π½ΡΠΆ, ΠΌΠΈΡΠ»Ρ ΠΏΡΠ΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΠΎΡΠ΅ΠΌ Π³ΠΎΠ΄ΠΈΠ½ΠΈ, Π²Π³ΡΠ°Π΄ΠΈΡ Π° Lua Π² Π½Π΅Π³ΠΎ. ΠΠ°ΠΊΠ²ΠΎ Π΄Π°Π²Π° ΡΠΎΠΉ?
- ΡΠ°Π·ΠΌΠ΅Ρ. ΠΠ°Π»ΠΊΠΎ Π΅. LuaJIT Π΄Π°Π²Π° Π½ΡΠΊΡΠ΄Π΅ ΠΎΠΊΠΎΠ»ΠΎ 100-200 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ.
- Π‘ΠΊΠΎΡΠΎΡΡ. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡΡ LuaJIT Π΅ Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ C Π² ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π² Π½ΡΠΊΠΎΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π³ΡΠ±ΠΈ ΠΎΡ Java, Π² Π΄ΡΡΠ³ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡΠ΅Π²Π°ΡΠ²Π°. ΠΠ° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ ΡΠΌΡΡΠ°ΡΠ΅ Π·Π° Π½Π°ΠΉ-ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡ, Π½Π°ΠΉ-Π³ΠΎΡΠΈΠ½ΠΈΡ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ. Π‘Π΅Π³Π° ΠΈΠΌΠ° ΠΏΠΎ-Ρ Π»Π°Π΄Π½ΠΈ, Π½ΠΎ ΡΠ΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΡΠΈΡΡ V8. ΠΡΠΊΠΎΠΈ JS ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΈ ΠΈ Java HotSpot ΡΠ° ΠΏΠΎ-Π±ΡΡΠ·ΠΈ Π² Π½ΡΠΊΠΎΠΈ ΡΠΎΡΠΊΠΈ, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π³ΡΠ±ΡΡ Π² Π½ΡΠΊΠΎΠΈ ΡΠΎΡΠΊΠΈ.
- ΠΠ΅ΡΠ΅Π½ Π·Π° Π½Π°ΡΡΠ°Π²Π°Π½Π΅. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅, Π΄Π° ΡΠ΅ΡΠ΅ΠΌ, ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° Π½Π° Perl ΠΈ Π½Π΅ ΡΡΠ΅ Booking, Π½ΡΠΌΠ° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ Π½Π° Perl. ΠΠΎΠ½Π΅ΠΆΠ΅ Π³ΠΈ Π½ΡΠΌΠ°, Π²ΡΠΈΡΠΊΠΈ ΡΠ° ΠΎΡΠΊΠ°ΡΠ°Π½ΠΈ ΠΈ Π΅ Π΄ΡΠ»Π³ΠΎ ΠΈ ΡΡΡΠ΄Π½ΠΎ Π΄Π° Π³ΠΈ Π½Π°ΡΡΠΈΡ. ΠΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ Π·Π° Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ, ΠΌΠΎΠΆΠ΅ ΠΈ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠ°Ρ ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΡΡ. Π ΡΠ»ΡΡΠ°Ρ Ρ Lua Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ. Lua ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΡΠΈ ΠΎΡ Π²ΡΠ΅ΠΊΠΈ ΠΌΠ»Π°Π΄ΡΠΈ Π·Π° ΡΡΠΈ Π΄Π½ΠΈ. ΠΡΠ½Π΅ ΠΌΠΈ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²Π° ΡΠ°ΡΠ°, Π·Π° Π΄Π° Π³ΠΎ ΡΠ°Π·Π±Π΅ΡΠ°. ΠΠ²Π° ΡΠ°ΡΠ° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ Π²Π΅ΡΠ΅ ΠΏΠΈΡΠ΅Ρ ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ. ΠΠΊΠΎΠ»ΠΎ ΡΠ΅Π΄ΠΌΠΈΡΠ° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΡΠΎΠΉ ΠΎΡΠΈΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²ΠΎ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ ΠΈ ΡΠΈ ΡΡΡΠ³Π½Π°.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:

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

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

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

ΠΡΠΎΡΡΠΎ ΡΠ΅Π΄ΠΈ ΠΈ ΡΠ°ΠΊΠ°. ΠΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅. ΠΠΎΠ³Π°ΡΠΎ Π΄ΠΎΠΉΠ΄Π°Ρ 100.000 XNUMX ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, Π½ΠΈ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π½ΠΎ. ΠΠ°ΡΠΎΠ²Π° Π½Π΅ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΅Π΄Π½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ. Π©Π΅ ΡΡΡΡΠΈΠΌ ΡΠ½ΠΈΠΌΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΊΠΈ. Π‘Π°ΠΌΠΎ Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΡΡΡΡΠΈΠΌ, Π° ΡΠ΅ ΡΠ°Π·ΡΠΈΡΠΈΠΌ ΠΊΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ Π΄ΡΠΌΠΈ ΠΈ Π°ΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π΅ ΡΡΡΡΠΈΠ» βΠΊΠΎΡΠ΅Π½ΡΠ°β, ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΠΌ ΠΊΠΎΡΠΊΠΈ, ΠΏΡΡ
ΡΠ΅ΡΠ° ΠΈ Ρ.Π½. ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ Π·Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π² Π±Π΅ΠΊΠ΅Π½Π΄Π°. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:

ΠΠ²Π° ΡΠ΅Π΄Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ 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. Π’ΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅ΠΌ front-end ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π½Π΅ Π½ΠΈ ΡΠ΅ ΠΈΡΠΊΠ° Π΄Π° Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠΌ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ. ΠΠ°, ΠΈ SEO ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈΡΠ΅ ΡΠ΅ ΠΊΠ°ΠΆΠ°Ρ, ΡΠ΅ Π°ΠΊΠΎ ΡΡΡΡΠΈΠΌ ΡΠ½ΠΈΠΌΠΊΠΈ, ΡΠΎΠ³Π°Π²Π° Π½Π΅ ΠΈΠΌ ΠΏΡΠΊΠ°. Π Π°ΠΊΠΎ ΠΈΠΌ Π΄Π°Π΄Π΅ΠΌ Π½ΡΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅, ΡΠ΅ ΡΠ΅ ΠΊΠ°ΠΆΠ°Ρ, ΡΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΡΡΡΠ°ΡΠΊΠΈ Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Ρ Π½ΠΈΡΠΎ.
ΠΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²Ρ Ρ Π½Π΅Π³ΠΎ? Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½ΠΈΠ΅ ΡΠ΅ Π΄Π°Π΄Π΅ΠΌ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ HTML. ΠΠ΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠΈ Π½Π΅ Π΅ comme il faut, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈ. ΠΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠΎΠ²Π° lua-resty-template.

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

ΠΠ·Π΅Ρ
ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΡ
ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΎΡΠ½ΠΎΠ²ΠΎ Π² Π΄Π²Π° ΡΠ΅Π΄Π°. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, ΠΈΠΌΠ° ΠΊΠΎΡΠΊΠΈ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΡΠΈΡΠΈΡ
ΠΌΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΡΠΎΠΉ ΠΏΠΎΠ»ΡΡΠΈ ΠΈ ΠΌΠΎΡΡΠΊΠΈ ΠΊΠΎΡΠ΅Π½ΡΠ°. ΠΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΠ΅ Π·Π½Π°Π΅, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π³ΠΎ Π΅ ΡΡΡΡΠΈΠ», Π½ΠΎ Π½Π΅ Π΅ ΠΌΠΎΠ³ΡΠ» Π΄Π° ΡΠΎΡΠΌΡΠ»ΠΈΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΌΠΎΠ»Π±Π°ΡΠ° ΡΠΈ.
ΠΡΠΈΡΠΊΠΎ Π΅ Π³ΠΎΡΠΈΠ½ΠΎ, Π½ΠΎ Π½ΠΈΠ΅ ΡΠΌΠ΅ Π² ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅. ΠΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΡΠΎΡΠΈΠ·Π°ΡΠΈΡ. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, Π½Π΅ΠΊΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ NGINX ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° OpenResty:
- ΠΡΡΠ²Π° ΡΠ°Π·Π° - Π΄ΠΎΡΡΡΠΏ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΡΠΎΠΊΡ-ΡΠΎ Π΄ΠΎΠΉΠ΄Π΅ ΠΈ Π½ΠΈΠ΅ Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΠΏΠΎ Π·Π°Π³Π»Π°Π²ΠΊΠΈ, ΠΏΠΎ IP Π°Π΄ΡΠ΅Ρ, ΠΏΠΎ Π΄ΡΡΠ³ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π³ΠΎ ΠΎΡΡΠ΅ΠΆΠ΅ΡΠ΅, Π°ΠΊΠΎ Π½Π΅ Π½ΠΈ Ρ Π°ΡΠ΅ΡΠ²Π°. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΎΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈΠ»ΠΈ Π°ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΡΠ²ΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ Π½Π°ΡΠ΅ΠΆΠ΅ΠΌ Π½Π° ΡΠ°Π·ΠΈ ΡΠ°Π·Π°.
- ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°ΠΌ ΠΎΡΠ½ΠΎΠ²ΠΎ. ΠΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° Π·Π°ΡΠ²ΠΊΠ°.
- ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. ΠΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
- ΡΠΈΠ»ΡΡΡ Π·Π° Π·Π°Π³Π»Π°Π²ΠΊΠ°. ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅. ΠΠΊΠΎ ΡΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ
proxy_pass, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½ΡΠΊΠΎΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π³ΠΈ Π΄Π°Π΄Π΅ΠΌ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. - ΡΠΈΠ»ΡΡΡ Π·Π° ΡΡΠ»ΠΎΡΠΎ. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΡΡΠ»ΠΎΡΠΎ.
- Π²Π»Π΅Π·Π΅ΡΠ΅ - Π΄ΡΡΠ²ΠΎΠ΄ΠΎΠ±ΠΈΠ². ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² elasticsearch Π±Π΅Π· Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ»ΠΎΠΉ.
ΠΠ°ΡΠ΅ΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:

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

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

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

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

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

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

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

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