OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

OpenResty: liliu le NGINX i se faʻaumau talosaga atoaUa matou toe lomia faasalalau le tusitusiga o le lipoti o le konafesi Highload++ 2016, lea na faia i Skolkovo latalata i Moscow ia Novema 7-8 i le tausaga talu ai. Vladimir Protasov fa'amatala le fa'alauteleina o galuega NGINX ma OpenResty ma Lua.

Talofa tagata uma, o loʻu igoa o Vladimir Protasov, ou te faigaluega i Parallels. O le a ou faamatala atu ia te oe sina mea e uiga ia te au lava ia. Ou te faʻaaluina le tolu kuata o loʻu olaga i le tusitusi code. Na avea aʻu ma se fai polokalame i le totonugalemu i le uiga moni: o nisi taimi ou te vaʻai i code i aʻu miti. O le kuata o le olaga o le atinaʻeina o alamanuia, tusitusi code e alu saʻo i le gaosiga. O se fa'ailoga e fa'aogaina e nisi o 'outou ae e te le'i iloaina.

O lea ua e malamalama i le leaga na i ai. A o oʻu laʻititi laʻitiiti, na ou sau ma tuʻuina atu nei faʻamaumauga e lua-terabyte. O se uta maualuga mo tagata uma iinei i le taimi nei. Na ou alu i konafesi ma fesili: “Alii, taʻu mai ia te aʻu, e tele au faʻamatalaga, e manaia mea uma? E fia ni au faavae iina? Na latou tali mai iā te aʻu: “E 100 gigabytes!” Sa ou fai atu: “Malie, 100 gigabytes!” Ma sa ou mafaufau ia te au lava pe faapefea ona tausia ma le faaeteete loʻu foliga poker. E te manatu, ioe, e manaia tama, ona e toe foʻi lea ma faʻataʻitaʻi i nei faʻamaumauga tele-terabyte. Ma o le avea lea ma se talavou. E mafai ona e vaai faalemafaufau i le manaia o lenei mea?

E sili atu i le 20 gagana polokalame ou te iloa. O se mea lea sa tatau ona ou mafaufau i ai a o ou galue. Latou te tuʻuina atu ia te oe le code i Erlang, C, C ++, Lua, Python, Ruby, se isi mea, ma e tatau ona e tipi uma. I se tulaga lautele, sa tatau ona ou faia. Sa le mafai ona fuafua le numera saʻo, ae i se mea i le 20th na leiloa le numera.

Talu ai e iloa e tagata uma o loʻo iai le Parallels ma mea tatou te faia, o le a ou le talanoa e uiga i le manaia o tatou ma mea tatou te faia. O le a ou taʻu atu ia te oe o loʻo i ai a matou ofisa 13 i le salafa o le lalolagi, sili atu i le 300 tagata faigaluega, atinaʻe i Moscow, Tallinn ma Malta. Afai e te manaʻo ai, e mafai ona e ave ma alu i Malta pe a malulu i le taumalulu ma e manaʻomia lou faʻamafanafanaina o lou tua.

Aemaise lava, o loʻo tusia e le matou matagaluega i le Python 2. O loʻo matou i ai i pisinisi ma e leai se taimi e faʻatino ai tekinolosi faʻaonaponei, o lea matou te mafatia ai. Matou te faʻaaogaina Django aua o loʻo i ai mea uma, ma matou ave le mea e le manaʻomia ma lafo ese. Faʻapea foi MySQL, Redis ma NGINX. E tele fo'i isi mea manaia. E iai a matou MongoDB, e iai a matou lapiti e tamoʻe solo, e iai a matou mea uma - ae e le o aʻu, ma ou te le faia.

OpenResty

Sa ou fai atu e uiga ia te au lava. Sei o tatou mafaufau po o le a le mea o le a ou talanoa i ai i le aso:

  • O le a le OpenResty ma o le a le mea e 'ai ai?
  • Aisea e toe faʻafouina ai se isi uili pe a iai le Python, NodeJS, PHP, Go ma isi mea manaia e fiafia ai tagata uma?
  • Ma ni nai faataitaiga mai le olaga. Sa tatau ona ou tipiina tele le lipoti aua e 3,5 itula na ou alu ai, o lea o le a itiiti ni faataitaiga.

OpenResty ole NGINX. Fa'afetai ia te ia, o lo'o i ai a matou 'upega tafa'ilagi atoatoa e lelei ona tusia ma galue vave. Ou te manatu o le toʻatele oi tatou e faʻaaogaina NGINX i le gaosiga. E te iloa uma e saosaoa ma lelei. Na latou faia lelei le I / O i totonu, o lea tatou te le manaʻomia ai le taamilosaga o se mea, e pei lava ona latou faia i le Python. Gevent e manaia, lelei, ae afai e te tusia le C code ma e iai se mea e sese, ona faʻatasi ai lea ma Gevent o le ae faʻavalea le faʻaaogaina. Na ou maua le poto masani: e lua aso atoa e iloa ai le mea na tupu iina. Afai e leʻi eli solo se tasi mo ni nai vaiaso, maua le faʻafitauli, tusi i luga ole Initaneti, ma e leʻi mauaina e Google, semanu tatou te matua valea.

O le NGINX ua uma ona faʻapipiʻiina ma faʻamautu mea na faia. E te le manaʻomia le popole pe faʻafefea ona fai lenei mea faʻaletagata, ina ia e le faʻagesegese i lalo i se mea, ina ia e le leiloa faʻamatalaga i se mea. Nginx e faigofie tele e faʻapipiʻi, e te le manaʻomia le mafaufau i mea e ave - WSGI, PHP-FPM, Gunicorn, Unicorn. Na faʻapipiʻi Nginx, tuʻuina atu i le au pulega, latou te iloa le auala e galulue ai. Nginx faagasologa talosaga i se faiga faatulagaina. O le a ou talanoa e uiga i lenei mea i se taimi mulimuli ane. I se faapuupuuga, o loʻo i ai se vaega pe a naʻo le taliaina o le talosaga, pe a faʻatautaia, ma pe a tuʻuina atu mea i le tagata faʻaoga.

E manaia le Nginx, ae tasi lava le faʻafitauli: e le lava le fetuutuunai, e oʻo lava i foliga manaia uma na faʻapipiʻiina e tama i totonu o le config, e ui lava i le mea moni e mafai ona faʻatulagaina. E le lava lea mana. O le mea lena na mafua ai ona fausia e tama mai Taobao, i se taimi ua leva, e foliga mai o le valu tausaga talu ai, na fausia ai Lua i totonu. O le a le mea e aumai ai?

  • fua. E la'ititi. LuaJIT e tu'uina atu pe a ma le 100-200 kilobytes o manatua i luga a'e ma la'ititi fa'atinoga i luga.
  • Televave. O le fa'aliliu upu LuaJIT e latalata i le C i le tele o tulaga, i nisi tulaga e leiloa ia Java, i isi e sili atu. Mo sina taimi na manatu ai o le tulaga o faatufugaga, o le JIT compiler sili ona manaia. O lea ua i ai le malulu, ae e mamafa tele, mo se faʻataʻitaʻiga, tutusa V8. O nisi fa'aliliuupu JS ma Java HotSpot e televave i nisi itu, ae i nisi nofoaga latou te leiloa.
  • Faigofie ona a'oa'oina. Afai ei ai, fai mai, se Perl code base, ma e te le o Faʻasalalau, e te le mauaina Perl programmers. Ona e le o iai, na aveesea uma ai, ma e umi ma faigata le aʻoaʻoina o i latou. Afai e te manaʻo i tagata fai polokalame mo se isi mea, e mafai foi ona e toe aʻoaʻoina i latou pe suʻe. I le tulaga ia Lua, e faigofie mea uma. Soo se tamaititi e mafai ona aʻoaʻoina Lua i aso e tolu. E tusa ma le lua itula na ou iloa ai. Lua itula mulimuli ane ua uma ona ou tusia code i le gaosiga. Pe a ma le vaiaso mulimuli ane na alu saʻo loa i le gaosiga ma alu ese.

O le i'uga, e pei o lenei:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

E tele naua iinei. Ua aoina e OpenResty le tele o modules, e lua luah ma afi afi. Ma ua e saunia mea uma - faʻapipiʻi ma galue.

faataitaiga

Ua lava upu, se'i o tatou agai i le code. O se tama'i Talofa le Lalolagi:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

O le a le mea o iai? Ole nofoaga lea ole Engins. Matou te le popole, matou te le tusia a matou lava auala, matou te le faia se mea ua saunia - ua uma ona matou maua i le NGINX, matou te ola i se olaga lelei ma paie.

content_by_lua_block ose poloka o lo'o fa'apea mai o lo'o matou tautuaina mea e fa'aaoga ai le lua tusitusiga. Matou te ave le fesuiaiga o le Engins remote_addr ma tuu i totonu string.format. E tutusa lava ma sprintf, na'o Lua, na'o sa'o. Ma matou avatu i le kalani.

O le i'uga, o le a fa'apea:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Ae tatou toe foi i le lalolagi moni. E leai se tasi na te fa'aogaina Talofa le Lalolagi i le gaosiga. O la matou talosaga e masani ona alu i le database poʻo se isi mea ma o le tele o taimi e faʻatali mo se tali.

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Ua na o le nofonofo lava ma faatalitali. E le lelei tele. A oʻo mai le 100.000 tagata faʻaoga, e matua faigata lava mo i matou. Seʻi o tatou faʻaaogaina se faʻaoga faigofie e fai ma faʻataʻitaʻiga. O le a tatou suʻeina ata, mo se faʻataʻitaʻiga, o pusi. Ae o le a le gata ina matou suʻeina, matou te faʻalauteleina upu autu ma, afai e suʻe e le tagata faʻaoga "pusi," o le a matou maua pusi, pusi fulufulu, ma isi. Muamua, tatou te manaʻomia le mauaina o faʻamatalaga talosaga ile pito i tua. E pei o lenei:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

E lua laina e mafai ai ona e pikiina fa'amaufa'ailoga GET, leai ni fa'alavelave. Le isi, tatou fai mai, mai se faʻamaumauga ma se faʻailoga mo se upu autu ma faʻaopoopoga, matou te mauaina lenei faʻamatalaga e faʻaaoga ai se fesili masani a SQL. E faigofie. E pei o lenei:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Feso'ota'i le faletusi resty.mysql, lea ua uma ona tatou maua i totonu o le pusa. Matou te le manaʻomia le faʻapipiʻiina o se mea, ua saunia mea uma. Matou te faʻaalia pe faʻafefea ona faʻafesoʻotaʻi ma fai se fesili SQL:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

E fai si taufaafefe iinei, ae aoga mea uma. O le 10 lenei o le tapulaa. Matou te tosoina i fafo 10 faʻamatalaga, matou te paie, matou te le manaʻo e faʻaalia atili. Ua galo ia te au le tapula'a ile SQL.

O le isi matou maua ata mo fesili uma. Matou te aoina le tele o talosaga ma faʻatumu se laulau Lua e taʻua reqs, ma ua tatou faia ngx.location.capture_multi.

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

O nei talosaga uma e lafo tutusa, ma tali mai ia i matou. Ole taimi ole fa'agaioiga e tutusa ma le taimi ole tali ole taimi sili ona tuai. Afai matou te fana uma i le 50 milliseconds, ma matou auina atu le selau talosaga, ona matou maua lea o se tali i le 50 milliseconds.

Talu ai matou te paie ma matou te le manaʻo e tusi le HTTP ma le faʻaogaina o le cache, matou te faia le NGINX mea uma mo matou. E pei ona e vaai i ai, sa i ai se talosaga mo url/fetch, o ia lea:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Matou te faafaigofieina proxy_pass, matou te faʻaalia le mea e teu ai, pe faʻapefea ona fai, ma mea uma e aoga mo i matou.

Ae e le lava lea, e manaʻomia pea ona tuʻuina atu faʻamatalaga i le tagata faʻaoga. O le manatu sili ona faigofie o le faʻasalalau mea uma i le JSON, faigofie, i laina e lua. Matou te tuʻuina atu Content-Type, matou te tuʻuina atu JSON.

Ae e tasi le faigata: e le manaʻo le tagata faʻaoga e faitau JSON. Matou te manaʻomia le faatosinaina o tagata atinaʻe pito i luma. O nisi taimi tatou te le mananao e faia lenei mea i le taimi muamua. Ma o le a fai mai tagata tomai faapitoa SEO afai tatou te sailia ni ata, ona le afaina lea ia i latou. Ma afai tatou te tuʻuina atu ia i latou ni mea, o le a latou fai mai oa tatou masini suʻesuʻe e le faʻasinoina se mea.

O le a le mea e fai i ai? Ioe, o le a matou tuʻuina atu i le tagata faʻaoga HTML. O le gaosia i le lima e le o se mea faʻapitoa, o lea matou te mananaʻo e faʻaoga mamanu. E iai le faletusi mo lenei mea lua-resty-template.

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Masalo ua e va'ai i mata'itusi mata'utia e tolu OPM. OpenResty e sau ma lana lava pule o pusa, lea e mafai ai ona e faʻapipiʻiina se faʻaputuga o modules eseese, aemaise lava, lua-resty-template. Ole masini faʻataʻitaʻi faigofie lea, e tutusa ma Django templates. O iina e mafai ona e tusia ai le code ma fai suiga fesuisuiai.

O se taunuuga, o mea uma o le a foliga mai e pei o lenei:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Na matou ave faʻamaumauga ma tuʻuina atu le faʻataʻitaʻiga, toe lua laina. E fiafia le tagata faʻaoga, na ia mauaina pusi. Talu ai na matou faʻalauteleina le talosaga, na ia mauaina foi se faʻamaufaʻailoga fulufulu mo tamaʻi pusi. E te le iloa, masalo sa ia sailia tonu lenei mea, ae le mafai ona faʻatulagaina saʻo lana talosaga.

E manaia mea uma, ae o loʻo matou atinaʻe ma e le manaʻo e faʻaali atu i tagata faʻaoga. Tatou fai le faatagaga. Ina ia faia lenei mea, seʻi o tatou vaʻai pe faʻafefea ona faʻaogaina e NGINX le talosaga ile OpenResty terms:

  • Vaega muamua - sao, ina ua faatoa taunuu le tagata faʻaoga, ma matou tilotilo atu ia te ia i ulutala, i le tuatusi IP, ma isi faʻamatalaga. E mafai ona tatou tipi vave pe a tatou le fiafia i ai. E mafai ona fa'aoga lenei mea mo le fa'atagaina, pe afai tatou te mauaina le tele o talosaga, e faigofie ona tatou tipi ese i lenei vaega.
  • Toe tusi. Matou te toe tusia nisi faʻamatalaga o talosaga.
  • lotomalie. Matou te tuʻuina atu le anotusi i le tagata faʻaoga.
  • faamama ulutala. Matou te sui ulutala tali. Afai tatou te faaaogaina proxy_pass, e mafai ona tatou toe tusia nisi ulutala aʻo leʻi tuʻuina atu i le tagata faʻaoga.
  • faamama tino. E mafai ona tatou suia le tino.
  • log - ta'otoga. E mafai ona e tusia ogalaau i le elasticsearch e aunoa ma se faʻaopoopoga faʻaopoopo.

O la matou faatagaga o le a foliga pei o lenei:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

O le a matou faʻaopoopoina lenei mea i le tasi location, lea na matou faʻamatalaina muamua, ma tuʻu le code lea iina:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Matou te va'ai pe i ai sa matou fa'ailoga kuki. Afai e leai, ona matou talosaga atu lea mo se faatagaga. O tagata faʻaoga e faʻaʻoleʻole ma e mafai ona latou mateina e manaʻomia ona latou setiina se faʻailoga kuki. O le mea lea, matou te tuʻuina foi i Redis:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

O le code mo le galulue faatasi ma Redis e matua faigofie ma e leai se eseesega mai isi gagana. I le taimi lava e tasi, o mea uma e faʻaoga / faʻaogaina, iinei ma iina, e le o poloka. Afai e te tusia le code synchronous, e galue asynchronously. Toetoe lava pei gevent, ae fai lelei.

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Tatou faia le faatagaga lava ia:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Matou te fai atu e tatau ona matou faitau i le tino o le talosaga. Matou te maua fa'amatalaga POST ma siaki pe sa'o le saini ma le fa'aupuga. Afai e sese, ona matou luiina lea o oe mo le faatagaga. Ma afai e saʻo, ona tusi lea o le faailoga i Redis:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

Aua nei galo e seti le kuki, e faia foi i laina e lua:

OpenResty: liliu le NGINX i se faʻaumau talosaga atoa

O le faataitaiga e faigofie ma taumatemate. Ioe, matou te le faia se auaunaga e faʻaalia ai tagata pusi. Ae o ai na te iloaina i tatou. O lea sei o tatou agai i luga mea e mafai ona fai i le gaosiga.

  • Laititi pito pito i tua. O nisi taimi tatou te manaʻomia ai naʻo sina vaega o faʻamatalaga i le pito i tua: i se mea tatou te manaʻomia e faʻapipiʻi ai se aso, i se mea e manaʻomia ona tatou faʻaalia se lisi, fai mai pe toafia tagata o loʻo i luga o le saite i le taimi nei, faʻapipiʻi se faʻailoga poʻo fuainumera. O se mea itiiti. O nisi vaega laiti e mafai ona faigofie tele. O lenei mea o le a vave, faigofie ma sili.
  • Fa'asologa o fa'amaumauga. O nisi taimi matou te mananaʻo e faʻapipiʻi faʻasalalauga i totonu o la matou itulau, ma matou maua lenei faʻasalalauga e faʻaaoga ai talosaga API. E faigofie tele ona fai iinei. Matou te le utaina le matou pito i tua, lea ua leva ona nofo ma galue malosi. E mafai ona e pikiina ma aoina iinei. E mafai ona tatou fa'apipi'i fa'atasi nisi o le JS po'o le isi itu, tatala ma fa'agasolo muamua se mea a'o le'i tu'uina atu i le tagata fa'aoga.
  • Facade mo microservice. O se tulaga lelei tele foi lea, na ou faatinoina. A o lei faia lena mea, sa ou faigaluega i Tenzor, o se kamupani e feagai ma lipoti faaeletonika ma tuuina atu lipoti i le tusa ma le afa o faalapotopotoga faaletulafono i totonu o le atunuu. Na matou faia se auaunaga, e tele mea na faia iina e faʻaaoga ai le masini lava e tasi: taʻavale, faʻatagaina ma isi mea.
    OpenResty e mafai ona faʻaaogaina e fai ma kelu mo au microservices, maua ai se avanoa e tasi i mea uma ma se atinaʻe tasi. Talu ai e mafai ona tusia microservices i se auala e te maua ai Node.js iinei, PHP iinei, Python iinei, nisi Erlang mea iinei, matou te malamalama matou te le mananao e toe tusi le code tutusa i soo se mea. O le mea lea, OpenResty e mafai ona faʻapipiʻi i luma.
  • Fa'amaumauga ma au'ili'iliga. E masani lava o le NGINX o loʻo i le faitotoa, ma o talosaga uma e alu i ai. O le nofoaga lea e faigofie tele ona aoina. E mafai ona e fa'atatau vave se mea ma lafo i se mea, mo se fa'ata'ita'iga, Elasticsearch, Logstash, pe na'o le tusi i le ogalaau ona lafo lea i se mea.
  • Faiga fa'aoga tele. Mo se faʻataʻitaʻiga, o taʻaloga i luga ole laiga e lelei tele foi e fai. I aso nei i Cape Town, Alexander Gladysh o le a talanoa e uiga i le auala e vave faʻataʻitaʻi ai se taʻaloga multiplayer e faʻaaoga ai OpenResty.
  • Talosaga Filifiliga (WAF). O aso nei e masani ona fai ituaiga uma o upega tafaʻilagi afi; e tele auʻaunaga e maua ai. I le faʻaaogaina o le OpenResty, e mafai ona e faia oe lava o se 'upega tafaʻilagi faʻapipiʻi afi e faigofie ma faigofie ona faʻamamaina talosaga e tusa ai ma ou manaʻoga. Afai ei ai sau Python, ona e malamalama lea o le PHP e mautinoa lava e le tuiina i totonu ia te oe, seivagana, ioe, e te faʻaogaina i soo se mea mai le faʻamafanafanaga. E te iloa e iai sau MySQL ma Python. Masalo, atonu latou te taumafai e fai se ituaiga o faʻasalalauga faʻasalalau ma tui se mea i totonu o faʻamaumauga. O le mea lea, e mafai ona e fa'amama ese fesili ese vave ma taugofie i le pito i luma.
  • Nuu ma Afioaga Talu ai o OpenResty ua fausia i luga ole NGINX, o loʻo i ai se ponesi - lea NGINX nuu. E matua tele lava, ma o se vaega lelei o fesili o le ai ai i le taimi muamua ua uma ona foia e le NGINX community.

    Lua atia'e. O ananafi na ou talanoa ai ma tama na o mai i le HighLoad++ aso aʻoga ma faʻalogo e naʻo Tarantool na tusia i Lua. E le sa'o lea mea, e tele mea o lo'o tusia i le Lua. Faataitaiga: OpenResty, Prosody XMPP server, Love2D game engine, Lua tusia i Warcraft ma isi nofoaga. E to'atele le au fa'atupu Lua, o lo'o i ai le latou fa'alapotopotoga tele ma talileleia. Na tali uma a'u fesili Lua i totonu o ni nai itula. A e tusi i le lisi o meli, i totonu o ni nai minute o loʻo i ai le tele o tali, faʻamatalaina le mea ma pe faapefea, o le a. E manaia tele. Ae paga lea, o se nuu agalelei, faaleagaga e le o i ai i soo se mea.
    O loʻo i ai GitHub mo OpenResty, lea e mafai ai ona e tatalaina se faʻafitauli pe a malepe se mea. E iai le lisi o meli ile Google Groups, e mafai ona e talanoaina ai mataupu lautele, o loʻo i ai le lisi o meli ile gagana Saina - e te le iloa, atonu e te le tautala Igilisi, ae e te iloa Saina.

O taunuʻuga

  • Ou te faʻamoemoe na mafai ona ou faʻaalia o OpenResty o se faʻatulagaga sili ona faigofie e faʻatulagaina mo le upega tafaʻilagi.
  • E maualalo le pa e ulufale ai, talu ai o le code e tutusa ma mea tatou te tusia i totonu, o le gagana e fai si faigofie ma laititi.
  • E maua ai le I/O asynchronous e aunoa ma ni toe fo'i, e leai ni saimini e pei ona mafai ona tatou tusia i nisi taimi i NodeJS.
  • E faigofie ona faʻapipiʻiina, talu ai matou te manaʻomia le NGINX ma le module talafeagai ma la matou code, ma o mea uma e galue vave.
  • Nuu tele ma talileleia.

Ou te leʻi faʻamatalaina auʻiliʻili pe faʻafefea ona fai le auala, na foliga mai o se tala umi lava.

Faafetai mo lau gauai!

Taaalo i le vitio

Vladimir Protasov - OpenResty: liliu NGINX i se faʻaumau talosaga atoa

puna: www.habr.com

Faaopoopo i ai se faamatalaga