OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠŸΡ€Π΅ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ стСнограмата Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΡ‚ конфСрСнцията HighLoad ++ 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: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π’ΡƒΠΊ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ. OpenResty Π΅ ΡΡŠΠ±Ρ€Π°Π» ΠΊΡƒΠΏ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ luash, Ρ‚Π°ΠΊΠ° ΠΈ Π΅Π½Π΄ΠΆΠΈΠ½ΠΈ. И ΠΈΠΌΠ°Ρ‚Π΅ всичко Π³ΠΎΡ‚ΠΎΠ²ΠΎ - Ρ€Π°Π·Π³ΡŠΡ€Π½Π°Ρ‚ΠΎ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π‘Ρ‚ΠΈΠ³Π° с тСкстовСтС, Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към ΠΊΠΎΠ΄Π°. Π•Ρ‚ΠΎ ΠΌΠ°Π»ΠΊΠΎ Hello World:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Какво ΠΈΠΌΠ° Ρ‚Π°ΠΌ? Ρ‚ΠΎΠ²Π° Π΅ мСстополоТСниСто Π½Π° Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅. НС сС притСснявамС, Π½Π΅ пишСм собствСн ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚, Π½Π΅ Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ някакъв Π³ΠΎΡ‚ΠΎΠ² - Π²Π΅Ρ‡Π΅ Π³ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² NGINX, ΠΆΠΈΠ²Π΅Π΅ΠΌ Π΄ΠΎΠ±Ρ€Π΅ ΠΈ ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΎ.

content_by_lua_block Π΅ Π±Π»ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ обслуТвамС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Lua скрипт. Π’Π·ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° двигатСля remote_addr ΠΈ Π³ΠΎ ΠΏΡŠΡ…Π½Π΅Ρ‚Π΅ Π² string.format. Π’ΠΎΠ²Π° Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ sprintf, само Π² Lua, само ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. И Π³ΠΎ Π΄Π°Π²Π°ΠΌΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Но ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ към рСалния свят. Π’ производството Π½ΠΈΠΊΠΎΠΉ Π½Π΅ внСдрява Hello World. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΎΡ‚ΠΈΠ²Π° Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ някъдС Π΄Ρ€ΡƒΠ³Π°Π΄Π΅ ΠΈ ΠΏΡ€Π΅Π· ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Ρ‡Π°ΠΊΠ° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€.

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ΠŸΡ€ΠΎΡΡ‚ΠΎ сСди ΠΈ Ρ‡Π°ΠΊΠ°. НС Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΄ΠΎΠΉΠ΄Π°Ρ‚ 100.000 XNUMX ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, Π½ΠΈ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ. Π—Π°Ρ‚ΠΎΠ²Π° Π½Π΅ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΅Π΄Π½ΠΎ просто ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π©Π΅ Ρ‚ΡŠΡ€ΡΠΈΠΌ снимки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΊΠΈ. Π‘Π°ΠΌΠΎ Π½ΠΈΠ΅ Π½Π΅ просто Ρ‰Π΅ Ρ‚ΡŠΡ€ΡΠΈΠΌ, Π° Ρ‰Π΅ Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ Π΄ΡƒΠΌΠΈ ΠΈ Π°ΠΊΠΎ потрСбитСлят Π΅ Ρ‚ΡŠΡ€ΡΠΈΠ» β€žΠΊΠΎΡ‚Π΅Π½Ρ†Π°β€œ, Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ ΠΊΠΎΡ‚ΠΊΠΈ, ΠΏΡƒΡ…Ρ‡Π΅Ρ‚Π° ΠΈ Ρ‚.Π½. ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° заявката Π² Π±Π΅ΠΊΠ΅Π½Π΄Π°. ИзглСТда Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π”Π²Π° Ρ€Π΅Π΄Π° Π²ΠΈ позволяват Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ GET ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π±Π΅Π· услоТнСния. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ информация ΠΎΡ‚ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ с Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π° Π΄ΡƒΠΌΠ° ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° SQL заявка. Всичко Π΅ просто. ИзглСТда Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π‘Π²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° resty.mysql, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°. НС Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° инсталирамС Π½ΠΈΡ‰ΠΎ, всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ. ΠŸΠΎΡΠΎΡ‡Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ SQL заявка:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Малко Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π’ΡƒΠΊ 10 Π΅ Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ‚Π°. Π’Π°Π΄ΠΈΠΌ 10 ΠΏΠ»ΠΎΡ‡ΠΈ, ΠΌΡŠΡ€Π·ΠΈ Π½ΠΈ, Π½Π΅ искамС Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅. Π’ SQL Π·Π°Π±Ρ€Π°Π²ΠΈΡ… Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ изобраТСния Π·Π° всички заявки. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΊΡƒΠΏ заявки ΠΈ попълвамС Lua Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° reqs, ΠΈ ΠΏΡ€Π°Π²ΠΈ ngx.location.capture_multi.

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Всички Ρ‚Π΅Π·ΠΈ заявки Π²ΡŠΡ€Π²ΡΡ‚ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½ΠΈ сС Π²Ρ€ΡŠΡ‰Π°Ρ‚. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° рСакция Π½Π° Π½Π°ΠΉ-бавния. Ако всички стрСлямС Π·Π° 50 милисСкунди ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ…ΠΌΠ΅ сто заявки, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π·Π° 50 милисСкунди.

Въй ΠΊΠ°Ρ‚ΠΎ смС ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈ ΠΈ Π½Π΅ искамС Π΄Π° пишСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° HTTP ΠΈ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅, Ρ‰Π΅ Π½Π°ΠΊΠ°Ρ€Π°ΠΌΠ΅ NGINX Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ всичко вмСсто нас. ΠšΠ°ΠΊΡ‚ΠΎ видяхтС, имашС заявка Π·Π° url/fetch, Π•Ρ‚ΠΎ Π³ΠΎ:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

НиС ΠΏΡ€Π°Π²ΠΈΠΌ прости proxy_pass, посочвамС къдС Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π°ΠΌΠ΅, ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈ всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π° нас.

Но Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ, всС ΠΎΡ‰Π΅ трябва Π΄Π° Π΄Π°Π΄Π΅ΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° потрСбитСля. Най-простата идСя Π΅ Π΄Π° сСриализиратС всичко Π² JSON, лСсно, Π² Π΄Π²Π° Ρ€Π΅Π΄Π°. Π”Π°Π²Π°ΠΌΠ΅ Content-Type, Π΄Π°Π²Π°ΠΌΠ΅ JSON.

Но ΠΈΠΌΠ° Π΅Π΄Π½Π° трудност: потрСбитСлят Π½Π΅ иска Π΄Π° Ρ‡Π΅Ρ‚Π΅ JSON. Врябва Π΄Π° ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅ΠΌ front-end Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ. Понякога Π½Π΅ Π½ΠΈ сС иска Π΄Π° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ. Π”Π°, ΠΈ SEO спСциалиститС Ρ‰Π΅ ΠΊΠ°ΠΆΠ°Ρ‚, Ρ‡Π΅ Π°ΠΊΠΎ Ρ‚ΡŠΡ€ΡΠΈΠΌ снимки, Ρ‚ΠΎΠ³Π°Π²Π° Π½Π΅ ΠΈΠΌ ΠΏΡƒΠΊΠ°. И Π°ΠΊΠΎ ΠΈΠΌ Π΄Π°Π΄Π΅ΠΌ някакво ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, Ρ‚Π΅ Ρ‰Π΅ ΠΊΠ°ΠΆΠ°Ρ‚, Ρ‡Π΅ Π½Π°ΡˆΠΈΡ‚Π΅ Ρ‚ΡŠΡ€ΡΠ°Ρ‡ΠΊΠΈ Π½Π΅ индСксират Π½ΠΈΡ‰ΠΎ.

Какво Π΄Π° правя с Π½Π΅Π³ΠΎ? Π Π°Π·Π±ΠΈΡ€Π° сС, Π½ΠΈΠ΅ Ρ‰Π΅ Π΄Π°Π΄Π΅ΠΌ Π½Π° потрСбитСля HTML. Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ с ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π΅ Π΅ comme il faut, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ искамС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ шаблони. Има Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ‚ΠΎΠ²Π° lua-resty-template.

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π‘ΠΈΠ³ΡƒΡ€Π½ΠΎ стС Π²ΠΈΠΆΠ΄Π°Π»ΠΈ Ρ‚Ρ€ΠΈΡ‚Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΈ Π±ΡƒΠΊΠ²ΠΈ OPM. OpenResty ΠΈΠ΄Π²Π° със собствСн ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС ΠΊΡƒΠΏ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΏΠΎ-спСциално, lua-resty-template. Π’ΠΎΠ²Π° Π΅ проста машина Π·Π° шаблони, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅ Π½Π° Django. Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ ΠΈ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ замСстванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° всичко Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π’Π·Π΅Ρ…ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ…ΠΌΠ΅ шаблона ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π² Π΄Π²Π° Ρ€Π΅Π΄Π°. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, ΠΈΠΌΠ° ΠΊΠΎΡ‚ΠΊΠΈ. Въй ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ…ΠΌΠ΅ заявката, Ρ‚ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΈ морски ΠΊΠΎΡ‚Π΅Π½Ρ†Π°. Никога Π½Π΅ сС Π·Π½Π°Π΅, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π³ΠΎ Π΅ Ρ‚ΡŠΡ€ΡΠΈΠ», Π½ΠΎ Π½Π΅ Π΅ могъл Π΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΌΠΎΠ»Π±Π°Ρ‚Π° си.

Всичко Π΅ Π³ΠΎΡ‚ΠΈΠ½ΠΎ, Π½ΠΎ Π½ΠΈΠ΅ смС Π² процСс Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ всС ΠΎΡ‰Π΅ Π½Π΅ искамС Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅. Π”Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ оторизация. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, Π½Π΅ΠΊΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ NGINX ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° заявката ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° OpenResty:

  • ΠŸΡŠΡ€Π²Π° Ρ„Π°Π·Π° - Π΄ΠΎΡΡ‚ΡŠΠΏ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ потрСбитСлят Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ Π΄ΠΎΠΉΠ΄Π΅ ΠΈ Π½ΠΈΠ΅ Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ ΠΏΠΎ Π·Π°Π³Π»Π°Π²ΠΊΠΈ, ΠΏΠΎ IP адрСс, ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π΄Π°Π½Π½ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π³ΠΎ ΠΎΡ‚Ρ€Π΅ΠΆΠ΅Ρ‚Π΅, Π°ΠΊΠΎ Π½Π΅ Π½ΠΈ харСсва. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° оторизация ΠΈΠ»ΠΈ Π°ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ заявки, ΠΌΠΎΠΆΠ΅ΠΌ лСсно Π΄Π° Π³ΠΈ Π½Π°Ρ€Π΅ΠΆΠ΅ΠΌ Π½Π° Ρ‚Π°Π·ΠΈ Ρ„Π°Π·Π°.
  • Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΌ ΠΎΡ‚Π½ΠΎΠ²ΠΎ. ΠŸΡ€Π΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° някои Π΄Π°Π½Π½ΠΈ Π·Π° заявка.
  • ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅. НиС прСдоставямС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π½Π° потрСбитСля.
  • Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ Π·Π° Π·Π°Π³Π»Π°Π²ΠΊΠ°. ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡ‚Π΅ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅. Ако смС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ proxy_pass, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅ΠΌ някои Π·Π°Π³Π»Π°Π²ΠΊΠΈ, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π³ΠΈ Π΄Π°Π΄Π΅ΠΌ Π½Π° потрСбитСля.
  • Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ Π·Π° тялото. МоТСм Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ тялото.
  • Π²Π»Π΅Π·Π΅Ρ‚Π΅ - Π΄ΡŠΡ€Π²ΠΎΠ΄ΠΎΠ±ΠΈΠ². Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС записват рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² elasticsearch Π±Π΅Π· Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ слой.

ΠΠ°ΡˆΠ΅Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π©Π΅ Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ към Ρ‚ΠΎΠ²Π° location, ΠΊΠΎΠΉΡ‚ΠΎ описахмС ΠΏΡ€Π΅Π΄ΠΈ, ΠΈ поставСтС слСдния ΠΊΠΎΠ΄ Ρ‚Π°ΠΌ:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π“Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π·Π° бисквитка. Ако Π½Π΅, Ρ‚ΠΎΠ³Π°Π²Π° Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ са Ρ…ΠΈΡ‚Ρ€ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС досСтят, Ρ‡Π΅ трябва Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π·Π° бисквитка. Π—Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎ поставим ΠΈ Π² Redis:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ΠšΠΎΠ΄ΡŠΡ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Redis Π΅ ΠΌΠ½ΠΎΠ³ΠΎ прост ΠΈ Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ всички Π²Ρ…ΠΎΠ΄ΠΎΠ²Π΅ / ΠΈΠ·Ρ…ΠΎΠ΄ΠΈ, ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Ρ‚ΡƒΠΊ, Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°. Ако ΠΏΠΈΡˆΠ΅Ρ‚Π΅ синхронСн ΠΊΠΎΠ΄, Ρ‚ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΈ асинхронно. ΠšΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ gevent, само Π΄ΠΎΠ±Ρ€Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ.

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π”Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ самата авторизация:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

КазвамС, Ρ‡Π΅ трябва Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ΠΌ тялото Π½Π° заявката. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ POST Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° Π²Ρ…ΠΎΠ΄ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° са ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ. Ако Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Ρ‚ΠΎΠ³Π°Π²Π° Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. И Π°ΠΊΠΎ са ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° записвамС Ρ‚ΠΎΠΊΠ΅Π½Π° Π² Redis:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

НС забравяйтС Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ бисквитката, Ρ‚ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ сС ΠΏΡ€Π°Π²ΠΈ Π½Π° Π΄Π²Π° Ρ€Π΅Π΄Π°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ Π΅ прост, спСкулативСн. Π Π°Π·Π±ΠΈΡ€Π° сС, Π½ΠΈΠ΅ няма Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ услуга, която ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠΎΡ‚ΠΊΠΈ Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π°. Но ΠΊΠΎΠΉ Π½ΠΈ Π·Π½Π°Π΅. Π’Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π² производството.

  • ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡ‚ΠΈΡ‡Π΅Π½ Π±Π΅ΠΊΠ΅Π½Π΄. Понякога трябва Π΄Π° Π΄Π°Π΄Π΅ΠΌ доста Π΄Π°Π½Π½ΠΈ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π°: някъдС трябва Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π΄Π°Ρ‚Π°Ρ‚Π°, някъдС трябва Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ някакъв списък, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ са Π½Π° сайта Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ брояч ΠΈΠ»ΠΈ статистика. НСщо Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ. Някои ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ лСсно. Π’ΠΎΠ²Π° Ρ‰Π΅ бъдС Π±ΡŠΡ€Π·ΠΎ, лСсно ΠΈ страхотно.
  • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. Понякога искамС Π΄Π° Π²Π³Ρ€Π°Π΄ΠΈΠΌ Ρ€Π΅ΠΊΠ»Π°ΠΌΠΈ Π² Π½Π°ΡˆΠ°Ρ‚Π° страница ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠΈ с 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 с правилния ΠΌΠΎΠ΄ΡƒΠ» ΠΈ нашия ΠΊΠΎΠ΄ ΠΈ всичко Π²Π΅Π΄Π½Π°Π³Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ.
  • Голяма ΠΈ ΠΎΡ‚Π·ΠΈΠ²Ρ‡ΠΈΠ²Π° общност.

НС съм Ρ€Π°Π·ΠΊΠ°Π·Π²Π°Π» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ сС ΠΏΡ€Π°Π²ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡΡ‚Π°, ΠΎΠΊΠ°Π·Π° сС ΠΌΠ½ΠΎΠ³ΠΎ дълга история.

Бпасибо за вниманиС!

Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ

Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ ΠŸΡ€ΠΎΡ‚Π°ΡΠΎΠ² - OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€