OpenResty: te huri i te NGINX hei tūmau tono tino

OpenResty: te huri i te NGINX hei tūmau tono tinoKei te whakaputa ano matou i nga tuhinga o te ripoata a te hui UtuWhakauru ++ 2016, i puta i Skolkovo e tata ana ki Moscow i te Noema 7-8 i tera tau. Vladimir Protasov he whakamarama me pehea te whakawhānui atu i nga mahi NGINX me OpenResty me Lua.

Kia ora koutou katoa, ko Vladimir Protasov toku ingoa, kei te mahi au i Parallels. Ka korero ahau ki a koe he iti mo au. E toru hauwhā o taku oranga e noho ana ahau ki te tuhi waehere. I noho ahau hei kaiwhakatakoto kaupapa i roto i te tikanga: i etahi wa ka kite ahau i te waehere i roto i aku moemoea. Ko te hauwhä o te oranga ko te whanaketanga ahumahi, te tuhi waehere ka haere tika ki te mahi. He waehere ka whakamahia e etahi o koutou engari kaore e mohio.

Na ka mohio koe ki te kino. I a au e tamariki ana, ka tae mai ahau, ka whakawhiwhia ahau ki enei putunga raraunga rua-terabyte. He kawenga nui mo te katoa i konei inaianei. I haere ahau ki nga huihuinga me te patai: "E tama, korero mai ki a au, he nui nga raraunga kei a koe, he pai nga mea katoa? E hia nga turanga kei reira? Ka whakahoki mai ratou ki ahau: "100 kikipaita ta matou!" Ka ki atu ahau: "He pai, 100 gigabytes!" A e whakaaro ana ahau me pehea te tiaki i taku kanohi poker. Ki to whakaaro, ae, he hauhautanga nga taangata, katahi ka hoki koe ki te tarai i enei papaapapa maha-terabyte. A he teina tenei. Ka taea e koe te whakaaro he aha tenei whiu?

Neke atu i te 20 nga reo hotaka e mohio ana ahau. He mea tenei me ata whakaaro ahau i a au e mahi ana. Ka hoatu e ratou he waehere ki a koe i Erlang, C, C ++, Lua, Python, Ruby, tetahi atu mea, a me tapahi katoa e koe. I roto i te whānui, i ahau ki. Kaore i taea te tatau te tau tika, engari i te takiwa o te 20 i ngaro te nama.

I te mea e mohio ana nga tangata katoa i reira he aha nga Parallels me ta matou mahi, e kore ahau e korero mo te hauhautanga o taatau me o taatau mahi. Ka korero noa ahau ki a koe kei a matou nga tari 13 huri noa i te ao, neke atu i te 300 nga kaimahi, te whanaketanga i Moscow, Tallinn me Malta. Ki te hiahia koe, ka taea e koe te tango me te neke ki Malta mena he makariri i te takurua, me whakamahana to tuara.

Ko te tikanga, ka tuhi to maatau tari ki te Python 2. Kei te pakihi matou, kaore he wa ki te whakatinana i nga hangarau huatau, na reira ka mamae matou. Ka whakamahia e matou a Django na te mea kei a ia nga mea katoa, ka tangohia e matou nga mea kaore i tika ka maka atu. Ano hoki a MySQL, Redis me NGINX. He maha atu ano nga mea hauhautanga. Kei a matou a MongoDB, kei a matou nga rapeti e rere ana, kei a matou nga mea katoa - engari ehara i a au, kaore au e mahi.

OpenResty

I korero ahau mo au ano. Kia mohio tatou he aha taku e korero ai i tenei ra:

  • He aha te OpenResty me te kai me te aha?
  • He aha te mea ka hanga ano i tetahi atu wira ina he Python, NodeJS, PHP, Haere me etahi atu mea pai e koa ana te katoa?
  • Me etahi tauira o te oranga. Me tino tapahi au i nga korero na te mea he 3,5 haora te roa, no reira kare e maha nga tauira.

Ko OpenResty he NGINX. He mihi ki a ia, kei a matou he tūmau tukutuku tino pai te tuhi me te mahi tere. Ki taku whakaaro ko te nuinga o tatou e whakamahi ana i te NGINX ki te whakaputa. E mohio ana koe he tere me te hauhautanga ia. I hangaia e ratou he I/O tino pai ki roto, no reira kaore matou e hiahia ki te huri i tetahi mea, pera i ta raatau mahi i roto i te Python. He hauhautanga, he rawe a Gevent, engari ki te tuhi koe i te waehere C ka he tetahi mea, na me Gevent ka porangi koe ki te patuiro. I whai wheako ahau: e rua nga ra katoa ki te mohio he aha te he i reira. Mena kaore he tangata i keri mo etahi wiki, ka kitea te raru, ka tuhia ki runga ipurangi, kaore ano a Google i kitea, ka porangi rawa tatou.

Kei te NGINX te keteroki me nga ihirangi pateko kua oti. Kaore koe e manukanuka me pehea te mahi a te tangata, kia kore ai koe e puhoi ki tetahi waahi, kia kore ai koe e ngaro nga kaiwhakaahua ki tetahi wahi. He tino watea a Nginx ki te tuku, kaore koe e whakaaro mo nga mea hei tango - WSGI, PHP-FPM, Gunicorn, Unicorn. I whakauruhia a Nginx, i hoatu ki nga kaiwhakahaere, e mohio ana ratou ki te mahi tahi. Ka tukatukahia e Nginx nga tono i runga i te hanganga. He iti nei taku korero mo tenei. I roto i te poto, he wahanga i te wa i whakaae noa ia ki te tono, i te wa i tukatukahia ai, i te wa i tukuna ai te ihirangi ki te kaiwhakamahi.

He hauhautanga a Nginx, engari kotahi ano te raru: kaore i te tino ngawari, ahakoa nga ahuatanga hauhautanga katoa i uru mai nga taangata ki roto i te whirihora, ahakoa nga mea ka taea te whirihora. Kaore e ranea tenei mana. Koinei te take i hangaia e nga taangata mai i Taobao, he wa roa kua pahure ake nei, te ahua nei e waru tau ki muri, i hanga a Lua ki roto. He aha tana e homai ai?

  • rahi. He iti. Ka hoatu e LuaJIT te 100-200 kiropaita o te mahara ki runga ake me te iti o te mahi i runga.
  • Tere. Ko te kaiwhakamaori LuaJIT e tata ana ki a C i roto i nga ahuatanga maha, i etahi waahi ka ngaro ki a Java, i etahi atu ka nui ake te mahi. Mo etahi wa i kiia ko te ahua o te toi, ko te tino whakahiato JIT. Inaianei he maamaa ake, engari he tino taumaha, hei tauira, ko taua V8 ano. Ko etahi kaiwhakamaori JS me Java HotSpot he tere ake i etahi waahi, engari i etahi waahi ka ngaro tonu.
  • He ngawari ki te ako. Mena kei a koe, me kii, he turanga waehere Perl, a kaore koe i te Rahui, kaore koe e kite i nga kaihōtaka Perl. No te mea karekau ratou, ka tangohia katoatia, he roa, he uaua hoki te whakaako i a ratou. Mena kei te pirangi koe ki nga kaihōtaka mo tetahi atu mea, me whakangungu ano koe ki te kimi ranei. Mo Lua, he ngawari nga mea katoa. Ka taea e tetahi teina te ako i a Lua i roto i nga ra e toru. Tata ki te rua haora te roa o taku whakaaro. E rua haora i muri mai kua tuhia e ahau he waehere i roto i te hanga. Tata ki te wiki i muri mai ka haere tika ia ki te whakaputanga ka wehe atu.

Ko te mutunga, he penei te ahua:

OpenResty: te huri i te NGINX hei tūmau tono tino

He nui kei konei. Kua kohia e OpenResty te maha o nga waahanga, te luash me te miihini. Na kei a koe nga mea katoa - kua tohatohahia me te mahi.

tauira

Kati nga kupu, me haere ki te waehere. Anei tetahi iti Hello World:

OpenResty: te huri i te NGINX hei tūmau tono tino

He aha kei reira? He waahi Engins tenei. Kaore matou e awangawanga, kaore matou e tuhi i a matou ake huarahi, kaore matou e tango i tetahi mea kua rite - kei a matou kei NGINX, kei te noho pai matou me te mangere.

content_by_lua_block he poraka e kii ana kei te mahi matou i nga ihirangi ma te whakamahi i te tuhinga Lua. Ka tangohia e matou te taurangi Engins remote_addr ka maka ki roto string.format. He rite tonu ki sprintf, i Lua anake, tika anake. Na ka hoatu e matou ki te kaihoko.

Ko te mutunga, ka penei te ahua:

OpenResty: te huri i te NGINX hei tūmau tono tino

Engari kia hoki ki te ao tūturu. Karekau he tangata e tuku ana i a Hello World ki te whakaputa. I te nuinga o te wa ka haere ta maatau tono ki te papaaarangi, ki tetahi atu waahi ranei, ko te nuinga o te waa ka tatari mo te whakautu.

OpenResty: te huri i te NGINX hei tūmau tono tino

Ka noho noa ia ka tatari. Kaore i te tino pai. Ka tae mai nga kaiwhakamahi 100.000, he tino uaua ki a maatau. Na me whakamahi he tono ngawari hei tauira. Ka kimi pikitia, hei tauira, mo nga ngeru. Engari kaore matou e rapu noa, ka whakawhānuihia e matou nga kupu matua, a, ki te rapu te kaiwhakamahi mo nga "kittens," ka kitea e matou nga ngeru, nga ngeru huruhuru, me etahi atu. Tuatahi, me whiwhi tatou i nga raraunga tono ki te tuara. Ko te ahua penei:

OpenResty: te huri i te NGINX hei tūmau tono tino

E rua nga rarangi ka taea e koe te tiki i nga tawhā GET, kaore he raruraru. I muri mai, me kii, mai i te paataka me te tohu mo te kupu matua me te toronga, ka whiwhi tatou i enei korero ma te whakamahi i te uiui SQL auau. He maamaa noa. Ko te ahua penei:

OpenResty: te huri i te NGINX hei tūmau tono tino

Te hono i te whare pukapuka resty.mysql, kei a maatau kei roto i te kete. Kaore matou e hiahia ki te whakauru i tetahi mea, kua rite nga mea katoa. Ka tohu matou me pehea te hono me te hanga patai SQL:

OpenResty: te huri i te NGINX hei tūmau tono tino

He iti te wehi i konei, engari ka pai nga mea katoa. Anei te 10 te rohe. Ka unuhia e matou nga whakaurunga 10, he mangere matou, kaore matou e hiahia ki te whakaatu atu. I wareware ahau ki te rohe o SQL.

Whai muri ka kitea he pikitia mo nga patai katoa. Ka kohia e matou he maha o nga tono ka whakakiia he ripanga Lua e kiia nei reqs, a ka mahi matou ngx.location.capture_multi.

OpenResty: te huri i te NGINX hei tūmau tono tino

Ko enei tono katoa ka tukuna whakarara, ka whakahokia mai nga whakautu ki a matou. Ko te wa mahi he rite ki te wa whakautu o te mea puhoi. Mena ka pupuhi katoa tatou i roto i te 50 milliseconds, a ka tukuna e matou he rau tono, katahi ka whiwhi whakautu i roto i te 50 milliseconds.

I te mea he mangere matou kaore e hiahia ki te tuhi HTTP me te whakahaere keteroki, ka mahia e matou a NGINX nga mea katoa mo matou. I kite koe, he tono mo url/fetch, anei ia:

OpenResty: te huri i te NGINX hei tūmau tono tino

Ka ngawari taatau proxy_pass, ka tohu matou ki hea te keteroki, me pehea te mahi, a ka pai nga mea katoa mo matou.

Engari kaore i te nui tenei, me tuku tonu nga raraunga ki te kaiwhakamahi. Ko te whakaaro ngawari ko te whakariterite i nga mea katoa i roto i te JSON, ngawari, ki nga raina e rua. Ka hoatu e matou te Ihirangi-Momo, ka hoatu e matou a JSON.

Engari he uaua tetahi: kaore te kaiwhakamahi e hiahia ki te panui JSON. Me kukume tatou i nga kaihanga o mua. I etahi wa kaore matou e pai ki te mahi i tenei i te tuatahi. A ka kii nga tohunga tohunga SEO mena kei te rapu pikitia tatou, kaore he mea nui ki a raatau. A, ki te hoatu e matou etahi ihirangi ki a raatau, ka kii ratou kaore o maatau miihini rapu e tohu i tetahi mea.

Me aha? Ko te tikanga, ka hoatu e matou te HTML kaiwhakamahi. Ko te whakaputa a-ringa ehara i te mea comme il faut, no reira ka hiahia matou ki te whakamahi tauira. He whare pukapuka mo tenei lua-resty-template.

OpenResty: te huri i te NGINX hei tūmau tono tino

Kua kite pea koe i nga reta whakamataku e toru OPM. Ka tae mai a OpenResty me tana ake kaiwhakahaere kete, ma reira ka taea e koe te whakauru i te tini o nga waahanga rereke, ina koa, lua-resty-template. He miihini tauira ngawari tenei, he rite ki nga tauira Django. I reira ka taea e koe te tuhi waehere me te mahi whakakapinga taurangi.

Ko te mutunga, ka penei te ahua o nga mea katoa:

OpenResty: te huri i te NGINX hei tūmau tono tino

I tangohia e matou nga raraunga me te whakaputa i te tauira, kia rua nga rarangi. Kei te harikoa te kaiwhakamahi, i whakawhiwhia e ia nga ngeru. I te mea i whakawhānuihia e matou te tono, i whakawhiwhia ano e ia he hiri huruhuru mo nga punua. Kaore koe e mohio, tera pea i rapua e ia tenei, engari kaore i taea te whakatakoto tika i tana tono.

He hauhautanga nga mea katoa, engari kei te whakawhanake tonu taatau kaore e hiahia ki te whakaatu ki nga kaiwhakamahi. Kia mahi tatou i te whakamanatanga. Hei mahi i tenei, tirohia me pehea te whakahaere a NGINX i te tono i roto i nga kupu OpenResty:

  • Ko te waahanga tuatahi uru, i te taenga mai o te kaiwhakamahi, a ka titiro matou ki a ia ma nga pane, ma te IP IP, me etahi atu raraunga. Ka taea e tatou te tapahi tonu ki te kore tatou e pai. Ka taea te whakamahi mo te whakamanatanga, mena ka whiwhi tatou i nga tono maha, ka taea e taatau te tapahi i tenei waahanga.
  • tuhia ano. Ka tuhi ano matou i etahi raraunga tono.
  • ihirangi. Ka tukuna e matou nga ihirangi ki te kaiwhakamahi.
  • tātari pane. Ka whakakapihia e matou nga pane whakautu. Mena i whakamahia e matou proxy_pass, ka taea e tatou te tuhi ano etahi pane i mua i te tuku ki te kaiwhakamahi.
  • tātari tinana. Ka taea e tatou te whakarereke i te tinana.
  • takiuru — takiuru. Ka taea e koe te tuhi i nga raarangi ki te elasticsearch kaore he paparanga taapiri.

Ka penei te ahua o to maatau whakamana:

OpenResty: te huri i te NGINX hei tūmau tono tino

Ka taapirihia e matou tenei ki tera location, i korerohia e matou i mua, ka hoatu te waehere e whai ake nei ki reira:

OpenResty: te huri i te NGINX hei tūmau tono tino

Ka titiro tatou mena he tohu pihikete kei a tatou. Mena kaore, ka tono matou mo te whakamana. He maminga nga kaiwhakamahi, ka taea e ratou te whakaaro me whakarite he tohu pihikete. Na reira, ka hoatu ano e matou ki Redis:

OpenResty: te huri i te NGINX hei tūmau tono tino

Ko te waehere mo te mahi tahi me Redis he tino ngawari, kaore he rereke i etahi atu reo. I te wa ano, ko nga whakauru / putanga katoa, i konei me tera, kaore i te aukati. Mena ka tuhia e koe te waehere tukutahi, ka mahi koretake. He rite tonu ki a gevent, engari he pai te mahi.

OpenResty: te huri i te NGINX hei tūmau tono tino

Ma tatou ano te whakamana:

OpenResty: te huri i te NGINX hei tūmau tono tino

E mea ana matou me panui te tinana o te tono. Ka whiwhi tohenga POST ka tirohia kei te tika te takiuru me te kupuhipa. Mena kei te he, ka tohe matou ki a koe mo te whakamanatanga. A, ki te tika, tuhia te tohu ki Redis:

OpenResty: te huri i te NGINX hei tūmau tono tino

Kaua e wareware ki te tautuhi i te pihikete, ka mahia ano tenei i nga rarangi e rua:

OpenResty: te huri i te NGINX hei tūmau tono tino

He ngawari te tauira me te whakaaro. Ko te tikanga, kaore matou e mahi i tetahi ratonga e whakaatu ana i nga tangata ngeru. Engari ko wai e mohio ana ki a tatou. Na, me haere taatau ki te mahi i roto i te whakaputa.

  • Whakamuri iti. I etahi wa ka hiahia matou ki te whakaputa i te iti o nga raraunga ki te tuara: ki tetahi waahi me whakauru he ra, ki tetahi waahi me whakaatu he rarangi, kii e hia nga kaiwhakamahi kei runga i te waahi inaianei, taapirihia he porotiti, tatauranga ranei. He mea iti rawa. Ko etahi waahanga iti ka taea te hanga tino ngawari. Ma tenei ka tere, ka ngawari, ka nui hoki.
  • Te tukatuka i mua i nga raraunga. I etahi wa ka hiahia matou ki te whakauru i nga panui ki to maatau wharangi, ka whiwhi matou i tenei panui ma te whakamahi i nga tono API. He tino ngawari tenei ki te mahi i konei. Kaore matou e utaina i to maatau tuara, kua noho kee me te whakapau kaha. Ka taea e koe te tiki ake ka kohia ki konei. Ka taea e tatou te whakahiato tahi i etahi JS, hei rereke ranei, wetewetehia me te tukatuka i tetahi mea i mua i te tuku ki te kaiwhakamahi.
  • Facade mo microservice. He take tino pai ano tenei, i whakatinanahia e au. I mua i tera, i mahi ahau i Tenzor, he kamupene e whakahaere ana i nga purongo hiko me te tuku purongo ki te haurua o nga hinonga ture o te motu. I hangaia e matou he ratonga, he maha nga mea i mahia ki reira ma te whakamahi i te tikanga kotahi: ararere, whakamana me etahi atu.
    Ka taea te whakamahi i te OpenResty hei kapia mo o ratonga moroiti, ma te uru kotahi ki nga mea katoa me te atanga kotahi. Mai i te mea ka taea te tuhi i nga microservices i runga i te ahua kei a koe Node.js konei, PHP konei, Python konei, etahi mea Erlang i konei, ka mohio matou kaore matou e hiahia ki te tuhi ano i te waehere kotahi ki nga waahi katoa. Na reira, ka taea te hono atu a OpenResty ki mua.

  • Te tatauranga me te tātari. I te nuinga o te wa ko NGINX kei te tomokanga, ka haere nga tono katoa. Kei tenei waahi he tino watea ki te kohi. Ka taea e koe te tatau i tetahi mea ka tukuna ki tetahi waahi, hei tauira, Elasticsearch, Logstash, tuhia noa ranei ki te raarangi ka tukuna ki tetahi waahi.
  • Nga punaha-kaiwhakamahi maha. Hei tauira, he pai rawa atu nga keemu ipurangi ki te hanga. I tenei ra i Cape Town, ka korero a Alexander Gladysh me pehea te tere tauira i tetahi keemu maha ma te whakamahi OpenResty.
  • Tono Tātari (WAF). I enei ra he mea huatau te hanga i nga momo papangaahi tono paetukutuku; he maha nga ratonga e whakarato ana. Ma te whakamahi i te OpenResty, ka taea e koe te hanga i a koe hei papangaahi tono paetukutuku ma te ngawari me te ngawari ki te tarai i nga tono kia rite ki o hiahia. Mena kei a koe te Python, ka mohio koe ka kore te PHP e werohia ki roto i a koe, mena ka puta ke koe i nga waahi katoa mai i te papatohu. E mohio ana koe kei a koe a MySQL me Python. Tena pea, ka ngana pea ratou ki te mahi i etahi momo haerenga whaiaronga me te wero i tetahi mea ki roto i te putunga raraunga. Na reira, ka taea e koe te tarai i nga patai tipua me te utu iti kei mua tonu.
  • Hapori. Mai i te mea kua hangaia a OpenResty ki runga NGINX, he pai tana: NGINX hapori. He tino nui, a ko tetahi waahanga tika o nga paatai ​​​​kei a koe i te tuatahi kua whakatauhia e te hapori NGINX.

    Nga kaiwhakawhanake Lua. Inanahi i korero ahau me nga taangata i tae mai ki te ra whakangungu HighLoad++ ka rongo ko Tarantool anake i tuhia ki Lua. Ehara tenei i te pono, he maha nga mea kua tuhia ki Lua. Hei tauira: OpenResty, Prosody XMPP server, Love2D game engine, Lua i tuhia ki Warcraft me etahi atu waahi. He maha nga kaiwhakawhanake a Lua, he hapori nui to ratou, he urupare. Katoa aku patai Lua i whakatauhia i roto i etahi haora. Ka tuhi koe ki te rarangi mēra, i roto i nga meneti torutoru kua maha nga whakautu, e whakaatu ana he aha me pehea, he aha. He rawe. Kia aroha mai, karekau tenei momo hapori wairua i nga waahi katoa.
    He GitHub mo OpenResty, ka taea e koe te whakatuwhera i tetahi take ki te pakaru tetahi mea. He rarangi mēra kei runga i nga Roopu Google ka taea e koe te korero mo nga take whanui, he rarangi mēra i te reo Hainamana - kaore koe e mohio, kaore pea koe e korero Ingarihi, engari e mohio ana koe ki te Hainamana.

Ngā putanga

  • Ko taku tumanako i taea e au te whakaatu ko OpenResty he anga tino watea kua whakaritea mo te paetukutuku.
  • He iti noa te arai ki te urunga, na te mea he rite te waehere ki nga mea e tuhia ana e matou, he tino ngawari te reo me te iti.
  • Ka tukuna he I/O kore tukutahi me te kore waea hoki, karekau he kihu penei i etahi wa ka tuhia ki NodeJS.
  • He ngawari te tuku, na te mea e hiahia ana matou ki te NGINX me te waahanga e tika ana me o taatau waehere, ka mahi tonu nga mea katoa.
  • Hapori nui me te aro.

Kare au i korero taipitopito me pehea te mahi ararere, ka puta he korero roa rawa atu.

Mauruuru koe mo to aro!


Vladimir Protasov - OpenResty: ka huri i te NGINX hei tūmau tono tino

Source: will.com

Tāpiri i te kōrero