OpenResty: kushandura NGINX kuita yakazara-yakazara application server

OpenResty: kushandura NGINX kuita yakazara-yakazara application serverIsu tinoburitsa zvakare zvinyorwa zvemushumo kubva kumusangano YakakwiraLoad ++ 2016, iyo yakaitirwa muSkolkovo pedyo neMoscow munaNovember 7-8 gore rakapera. Vladimir Protasov inotaurira maitiro ekuwedzera NGINX kushanda neOpenResty uye Lua.

Mhoroi mose, zita rangu ndinonzi Vladimir Protasov, ndinoshandira Parallels. Ndichakuudza zvishoma nezvangu. Ndinopedza zvikamu zvitatu zvehupenyu hwangu kunyora kodhi. Ndakava programmer kusvika pakadzika mupfungwa chaiyo: Ini dzimwe nguva ndinoona kodhi muzviroto zvangu. Chikamu chechina chehupenyu kukura kwemaindasitiri, kunyora kodhi inoenda yakananga mukugadzirwa. Code iyo vamwe venyu vanoshandisa asi vasingaizive.

Kuti ndikuzivise kuipa kwazvakaita. Pandakanga ndiri mudiki, ndakapinda uye vakandipa aya maviri terabyte database. Iko zvino kwave kuno kumunhu wese kurodha. Ndakaenda kumisangano ndikabvunza kuti: β€œVarume, ndiudzei, mune data hombe, zvese zvakanaka here? Une mabhesi mangani ipapo? Vakandipindura kuti: β€œTine gigabytes 100!” Ndakati: "Zvakanaka, 100 gigabytes!" Uye ndakafunga zvangu kuti ndochengetedza sei chiso che poker. Iwe unofunga, hongu, vakomana vakatonhorera, uye wobva wadzoka uye tinker neaya akawanda-terabyte dhatabhesi. Uye uku kuve junior. Unogona here kufungidzira kuti kurova kwakadii?

Ndinoziva mitauro inodarika makumi maviri. Izvi ndizvo zvandaifanira kufunga mukufamba kwebasa. Ivo vanokupa kodhi muErlang, muC, muC ++, muLua, muPython, muRuby, mune chimwe chinhu, uye unofanira kuzvicheka zvese. Kazhinji, ndaifanira kudaro. Zvakanga zvisingakwanisi kuverenga nhamba chaiyo, asi pane imwe nzvimbo inenge 20 nhamba yacho yakarasika.

Sezvo munhu wese ari pano achiziva chinonzi Parallels uye zvatinoita, ini handisi kuzotaura nezvekuti tinotonhorera uye zvatinoita. Ini ndichakuudza chete kuti tine mahofisi e13 pasi rose, vanopfuura vashandi ve300, kubudirira muMoscow, Tallinn neMalta. Kana uchida, unogona kutora uye kutamira kuMerita, kana kuchitonhora muchando uye unofanira kudziyisa musana wako.

Kunyanya, dhipatimendi redu rinonyora muPython 2. Isu tiri mubhizinesi uye hatina nguva yekuzivisa matekinoroji emafashoni, saka tinotambura. Tine Django, nekuti ine zvese, uye takatora yakawandisa tikairasa. Zvakare MySQL, Redis uye NGINX. Tinewo zvimwe zvakawanda zvinofadza. Tine MongoDB, tine tsuro dzinomhanya mhanya, isu hatina chero chinhu - asi haisi yangu, uye ini handizviite.

OpenResty

Ndakataura nezvangu. Ngationei zvandichataura nhasi:

  • Chii chinonzi OpenResty uye chinodyiwa nei?
  • Sei kudzorera vhiri kana tine Python, NodeJS, PHP, Go uye zvimwe zvinhu zvinotonhorera izvo munhu wese anofara nazvo?
  • Uye mienzaniso mishoma yehupenyu chaihwo. Ndaifanira kucheka mushumo wacho zvakanyanya, nokuti ndakaiwana kwemaawa 3,5, saka pachava nemienzaniso mishoma.

OpenResty ndeye NGINX. Kutenda kwaari, isu tine yakazara-yakazara web server, iyo yakanyorwa zvakanaka, inoshanda nekukurumidza. Ndinofunga vazhinji vedu tinoshandisa NGINX mukugadzira. Imi mose munoziva kuti anokurumidza uye anotonhorera. Ivo vakagadzira inotonhorera synchronous I / O mairi, saka isu hatidi kutenderera chero chinhu nenzira imwechete iyo gevent yakafambiswa muPython. Gevent inotonhorera, inotonhorera, asi kana iwe ukanyora C-kodhi uye chimwe chinhu chikatadza ne gevent, iwe unopenga kuigadzirisa. Ndakanga ndine ruzivo: zvakatora mazuva maviri akazara kuti ndione kuti chii chakakanganisika ipapo. Kana mumwe munhu asina kuchera kwemavhiki mashomanana zvisati zvaitika, haana kuwana dambudziko, haana kunyora paInternet, uye Google haana kuiwana, saka tingadai takapenga zvachose.

NGINX inotoita caching uye static content. Iwe haufanirwe kunetseka nezvekuti ungazviita sei semunhu, kuti urege kunonoka pane imwe nzvimbo, kuti usarasikirwe netsanangudzo pane imwe nzvimbo. Nginx yakanakira kuendesa, haufanire kufunga nezve yekutora - WSGI, PHP-FPM, Gunicorn, Unicorn. Nginx yakaiswa, yakapihwa maadmins, vanoziva kushanda nayo. Nginx inogadzira zvikumbiro nenzira yakarongeka. Ndichataura nezvazvo pave paya. Muchidimbu, ane chikamu paakangogamuchira chikumbiro, paakagadzirisa uye paakapa zvirimo kumushandisi.

Nginx inotonhorera, asi pane dambudziko rimwe chete: haichinjike zvakakwana kunyangwe neaya ese anotonhorera maficha akasundirwa nevakomana mugadziriso, zvisinei nekuti inogona kugadzirwa. Simba iri harina kukwana. Naizvozvo, vakomana vanobva kuTaobao pane imwe nguva, ndinofunga makore masere apfuura, vakavaka Lua mairi. Anopa chii?

  • zera. Idiki. LuaJIT inopa kumwe kwakatenderedza 100-200 kilobytes yekuyeuka pamusoro uye kushoma kuita pamusoro.
  • Speed. Muturikiri weLuaJIT ari pedyo neC mumamiriro ezvinhu akawanda, mune mamwe mamiriro ezvinhu anorasikirwa neJava, mune mamwe anodarika. Kwenguva yakati, yaionekwa seyeunyanzvi, iyo inotonhorera JIT compiler. Ikozvino kune anotonhorera, asi anorema kwazvo, semuenzaniso, iwoyo V8. Vamwe vaturikiri veJS neJava HotSpot vanokurumidza pane dzimwe nzvimbo, asi vachiri kurasikirwa pane dzimwe nzvimbo.
  • Zviri nyore kudzidza. Kana iwe uine, taura, Perl codebase uye iwe hausi Kubhuka, hauwane Perl programmers. Nemhaka yokuti havapo, vakatorwa vose, uye inguva refu uye yakaoma kuvadzidzisa. Kana iwe uchida vagadziri vechimwe chinhu, ivo vanogona zvakare kudzidziswa kana kuwanikwa. Panyaya yeLua, zvese zviri nyore. Lua inogona kudzidzwa chero junior mumazuva matatu. Zvakanditorera maawa maviri kuti ndizvinzwisise. Maawa maviri gare gare, ndakanga ndatonyora kodhi mukugadzira. Papera rinenge vhiki, akabva angonanga kukugadzira ndokuenda.

Nekuda kweizvozvo, zvinoita seizvi:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Pane zvakawanda pano. OpenResty yakaunganidza boka remamodule, ese ari luash uye injini. Uye iwe une zvese zvakagadzirira - kutumirwa uye kushanda.

mienzaniso

Zvakwana zvemashoko, ngatienderere mberi kune kodhi. Heino diki Hello World:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Chii chiripo? iyi ndiyo nzvimbo yeinjini. Hatinetseke, hatinyore nzira yedu pachedu, isu hatitore imwe yakagadzirira-yakagadzirwa - isu tatova nayo muNGINX, tinorarama zvakanaka uye neusimbe.

content_by_lua_block ibhuroko rinotaura kuti tiri kushandira zvirimo tichishandisa Lua script. Tinotora injini yakasiyana remote_addr ndokutsveta mukati string.format. Izvi zvakafanana ne sprintf, muLua chete, ndizvo chete. Uye tinozvipa kune mutengi.

Nekuda kweizvozvo, ichaita seizvi:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Asi kudzokera kunyika chaiyo. Mukugadzira, hapana anoshandisa Hello World. Chikumbiro chedu chinowanzoenda kune dhatabhesi kana kumwewo uye kazhinji inomirira mhinduro.

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Ingogara uye kumirira. Hazvina kunyanya kunaka. Kana 100.000 vashandisi vauya, zvakatiomera kwazvo. Naizvozvo, ngatishandisei nyore application semuenzaniso. Tichatsvaga mifananidzo, semuenzaniso, makati. Isu chete isu hatizongotsvaga chete, isu tichawedzera mazwi akakosha uye, kana mushandisi akatsvaga "kittens", isu tichawana katsi, fluffies, zvichingodaro. Kutanga isu tinoda kuwana iyo yekukumbira data pane backend. Zvinoita seizvi:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Mitsetse miviri inokutendera kuti utore GET paramita, hapana zvinonetsa. Zvino isu, semuenzaniso, tinowana ruzivo urwu kubva kune dhatabhesi ine tafura nekiyi izwi uye kuwedzera tichishandisa yakajairika SQL query. Zvose zviri nyore. Zvinoita seizvi:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Isu tinobatanidza raibhurari resty.mysql, yatinayo kare mukiti. Hatidi kuisa chero chinhu, zvese zvagadzirira. Rondedzera nzira yekubatanidza uye kuita mubvunzo weSQL:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Zvinotyisa zvishoma, asi zvinoshanda. Pano 10 ndiyo inogumira. Tinobudisa zvinyorwa gumi, tine usimbe, hatidi kuratidza zvakawanda. MuSQL, ndakakanganwa nezve muganhu.

Ipapo tinowana mifananidzo yemibvunzo yese. Isu tinounganidza boka rezvikumbiro uye tinozadza tafura yeLua inonzi reqs, uye ita ngx.location.capture_multi.

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Zvose izvi zvikumbiro zvinoenda pamwe chete, uye mhinduro dzinodzoserwa kwatiri. Nguva yekumhanya yakaenzana nenguva yekupindura yeanononoka. Kana isu tose tikapfura kumashure mu50 milliseconds, uye isu takatumira zvikumbiro zana, zvino tichawana mhinduro mu50 milliseconds.

Sezvo isu tiri simbe uye tisingadi kunyora HTTP kubata uye caching, tichaita kuti NGINX iite zvose kwatiri. Sezvamaona, pane chikumbiro chekuti url/fetch, heunoi:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Isu tinoita zviri nyore proxy_pass, tsanangura kuti cache, sei kuzviita, uye zvese zvinoshanda kwatiri.

Asi izvi hazvina kukwana, isu tichiri kuda kupa iyo data kumushandisi. Pfungwa yakareruka ndeyekuisa zvese kuJSON, zviri nyore, mumitsara miviri. Isu tinopa Zvemukati-Type, tinopa JSON.

Asi pane imwe yakaoma: mushandisi haadi kuverenga JSON. Isu tinofanirwa kukwezva vanogadzira kumberi. Dzimwe nguva hatinzwi kuda kuzviita pakutanga. Hongu, uye SEO nyanzvi dzichataura kuti kana isu tichitsvaga mifananidzo, saka havana hanya. Uye kana tikavapa zvimwe zvemukati, ivo vanozoti yedu yekutsvaga injini haina index chero chinhu.

Kuita sei nazvo? Zvechokwadi, tichapa mushandisi HTML. Kugadzira nezvibato hazvisi comme il faut, saka tinoda kushandisa matemplate. Pane raibhurari yeizvi lua-resty-template.

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Iwe unofanirwa kunge waona mavara matatu anotyisa OPM. OpenResty inouya neyayo pasuru maneja, kuburikidza iyo iwe yaunogona kuisa boka remamodule akasiyana, kunyanya, lua-resty-template. Iyo iri nyore template injini yakafanana neDjango matemplate. Ikoko iwe unogona kunyora kodhi uye kuita shanduko inochinja.

Nekuda kweizvozvo, zvese zvinotaridzika seizvi:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Takatora iyo data ndokupa template zvakare mumitsara miviri. Mushandisi anofara, ane katsi. Sezvo takawedzera chikumbiro, akagamuchirawo chisimbiso chemvere dzekatsi. Haungamboziva, pamwe aitsvaga, asi akatadza kurongedzera chikumbiro chake nemazvo.

Zvese zvakanaka, asi isu tiri mukusimudzira, uye isu hatisati tichida kuratidza vashandisi. Ngatiitei mvumo. Kuti tiite izvi, ngationei kuti NGINX inobata sei chikumbiro maererano neOpenResty:

  • Chikamu chekutanga - upindo, apo mushandisi achangouya, uye takamutarisa nemusoro, ne IP kero, nedzimwe data. Unogona kucheka nekukasika kana isu tisingade. Izvi zvinogona kushandiswa kubvumidzwa, kana kana tikagamuchira zvikumbiro zvakawanda, tinogona kuzvitema zviri nyore pachikamu ichi.
  • nyora zvekare. Kunyorazve imwe data yekukumbira.
  • gutsikana. Isu tinopa zvemukati kumushandisi.
  • sefa yemusoro. Chinja misoro yemhinduro. Kana takashandisa proxy_pass, tinogona kunyora zvakare mamwe misoro tisati taipa kumushandisi.
  • body filter. Tinogona kushandura muviri.
  • danda - kutema miti. Izvo zvinokwanisika kunyora matanda mu elasticsearch pasina imwe yekuwedzera layer.

Mvumo yedu ichaita seizvi:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Tichazviwedzera kune izvozvo location, yatakatsanangura kare, uye isa kodhi inotevera ipapo:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Isu tinotarisa kuti tione kana tine cookie token. Kana zvisina kudaro, tinokanda mvumo. Vashandisi vane hunyengeri uye vanogona kufungidzira kuti cookie tokeni inoda kusetwa. Naizvozvo, isu tichaiisa zvakare muRedis:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Iyo kodhi yekushanda neRedis iri nyore uye haina kusiyana nemimwe mitauro. Panguva imwecheteyo, zvese zvekupinza / kuburitsa, chii chiripo, chii chiri pano, hachisi kuvharira. Kana iwe ukanyora synchronous kodhi, saka inoshanda asynchronously. Senge na gevent, wakaita zvakanaka chete.

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Ngatiite mvumo pachayo:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Tinoti tinofanira kuverenga mutumbi wekukumbira. Isu tinogashira POST nharo, tarisa kuti login uye password ndeyechokwadi. Kana zvisizvo, tinokanda mvumo. Uye kana vari chokwadi, saka tinonyora chiratidzo kuRedis:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Usakanganwa kuseta kuki, izvi zvinoitwawo mumitsara miviri:

OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Muenzaniso uri nyore, unofungidzira. Hongu, hatingaite sevhisi inoratidza katsi kuvanhu. Asi ndiani anotiziva. Saka ngatitarisei zvinogona kuitwa mukugadzira.

  • Minimalist backend. Dzimwe nguva isu tinofanirwa kupa yakati wandei data kune yekumashure: kumwe kwatinoda kutsiva zuva, kumwe kwatinoda kuratidza imwe mhando yerondedzero, taura kuti vangani vashandisi vari pasaiti izvozvi, screw pane counter kana nhamba. Chinhu chidiki kwazvo. Zvimwe zvimedu zvidiki zvinogona kugadzirwa zviri nyore. Izvi zvichakurumidza, zviri nyore uye zvikuru.
  • Data preprocessing. Dzimwe nguva isu tinoda kumisa ads mune yedu peji, uye isu tinotora aya ads nezvikumbiro zveAPI. Izvi zviri nyore kuita pano. Isu hatitakure backend yedu, iyo iri kutoshanda nesimba. Unogona kutora uye kuunganidza pano. Tinogona kuumba imwe JS kana, pane kudaro, kuregedzera, kufanogadzirisa chimwe chinhu tisati tachipa kumushandisi.
  • Facade ye microservice. Iyi inyaya yakanaka kwazvo, ndakazviita. Izvi zvisati zvaitika, ndaishandira Tenzor, kambani inoona nezvemagetsi inopa kushuma kweinenge hafu yemasangano epamutemo munyika. Isu takaita sevhisi, zvinhu zvakawanda zvinoitwa ipapo tichishandisa nzira imwechete: nzira, mvumo, nezvimwe.
    OpenResty inogona kushandiswa seglue kune yako microservices kuti ipe mukana mumwe chete kune zvese uye imwe chete interface. Sezvo microservices inogona kunyorwa nenzira yekuti une Node.js pano, une PHP pano, une Python pano, pane chimwe chinhu cheErlang pano, tinonzwisisa kuti hatidi kunyora kodhi imwechete kwese kupi. Naizvozvo, OpenResty inogona kubatirwa kumberi.

  • Statistics uye analytics. Kazhinji NGINX iri pamusuwo, uye zvikumbiro zvese zvinopfuura nazvo. Imo munzvimbo ino kuti zviri nyore kuunganidza. Iwe unogona pakarepo kuverenga chimwe chinhu uye kuchikanda pane imwe nzvimbo, semuenzaniso, iyo Elasticsearch imwe chete, Logstash, kana kungoinyora kurogi uye wozotumira kune imwe nzvimbo.
  • Multi-User Systems. Semuenzaniso, mitambo yepamhepo zvakare yakanaka kwazvo kuita. Nhasi muCape Town Alexander Gladysh achakuudza nzira yekukurumidza prototype mutambo wevazhinji uchishandisa OpenResty.
  • Kumbira kusefa (WAF). Ikozvino zvave fashoni kugadzira ese marudzi ese ewebhu application firewalls, kune akawanda masevhisi anovapa. Nerubatsiro rweOpenResty, unogona kuzviitira iwe web application firewall, iyo inongoita uye nyore kusefa zvikumbiro zvinoenderana nezvaunoda. Kana iwe uine Python, saka iwe unonzwisisa kuti PHP haizonyatso kubaiwa kwauri, kunze kwekunge, chokwadi, iwe uchiiburitsa chero kupi kubva kune iyo console. Iwe unoziva kuti une MySQL uye Python. Pamwe, pano ivo vanogona kuedza kuita imwe mhando yedhairekitori traversal uye kupinza chimwe chinhu mudhatabhesi. Naizvozvo, unogona kusefa zvikumbiro zvembeveve nekukurumidza uye zvakachipa kumberi chaiko.
  • Nharaunda. Sezvo OpenResty yakavakirwa paNGINX, ine bhonasi - izvi ndizvo NGINX nharaunda. Yakakura kwazvo, uye yakawanda yemibvunzo yauchava nayo pakutanga yakatopindurwa nenharaunda yeNGINX.

    Lua vagadziri. Nezuro ndakataura nevakomana vakauya kuHighLoad ++ zuva rekudzidzira ndokunzwa kuti Tarantool chete yakanyorwa muLua. Izvi hazvina kudaro, zvinhu zvakawanda zvakanyorwa muLua. Mienzaniso: OpenResty, Prosody XMPP server, Love2D game injini, Lua yakanyorwa muWarcraft nekumwewo. Kune akawanda evagadziri veLua, vane nharaunda yakakura uye inoteerera. Mibvunzo yangu yese yeLua yakapindurwa mukati memaawa mashoma. Paunonyorera kune rondedzero yetsamba, chaizvo mumaminitsi mashoma pane zvatove neboka remhinduro, vanotsanangura kuti chii uye sei, chii chii. Zvakanaka. Sezvineiwo, nzanga ine mutsa yakadaro haisi kwose kwose.
    OpenResty ine GitHub, kwaunogona kuvhura nyaya kana chimwe chinhu chaputsika. Pane rondedzero yetsamba paGoogle Mapoka paunogona kukurukura nyaya dzakajairwa, pane tsamba yekutumira muChinese - haumboziva, pamwe hautaure Chirungu, asi iwe une ruzivo rweChinese.

Migumisiro

  • Ndinovimba ndakakwanisa kuburitsa kuti OpenResty iri nyore kwazvo web framework.
  • Iyo ine yakaderera chikumbaridzo chekupinda, sezvo iyo kodhi yakafanana nezvatinonyora, mutauro wacho uri nyore uye minimalistic.
  • Inopa asynchronous I/O isina callbacks, isu hatizove nema noodles sezvatinogona dzimwe nguva kunyora muNodeJS.
  • Iyo ine nyore kutumira, nekuti isu tinongoda NGINX chete neiyo module yakakodzera uye kodhi yedu, uye zvese zvinokurumidza kushanda.
  • Nharaunda huru uye inoteerera.

Handina kutaura zvakadzama kuti routing inoitwa sei, yakave nyaya refu kwazvo.

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


Vladimir Protasov - OpenResty: kushandura NGINX kuita yakazara-yakazara application server

Source: www.habr.com

Voeg