OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻڪانفرنس جي رپورٽ جو نقل ٻيهر شايع ڪري رهيا آهيون هاء لوڊ ++ 2016، جنهن گذريل سال نومبر 7-8 تي ماسڪو جي ويجهو Skolkovo ۾ ٿي گذريو. Vladimir Protasov وضاحت ڪري ٿو ته ڪيئن وڌايو وڃي NGINX ڪارڪردگي کي OpenResty ۽ Lua سان.

هيلو هرڪو، منهنجو نالو ولاديمير پروٽاسوف آهي، مان متوازي تي ڪم ڪريان ٿو. مان توهان کي پنهنجي باري ۾ ٿورو ٻڌايان ٿو. مان پنهنجي زندگيءَ جا ٽي چوٿين ڪوڊ لکڻ ۾ گذاريان ٿو. مان لفظي معنى ۾ بنيادي طور تي پروگرامر بڻجي ويو: ڪڏهن ڪڏهن مان پنهنجي خوابن ۾ ڪوڊ ڏسندو آهيان. زندگي جو هڪ چوٿون صنعتي ترقي آهي، لکڻ جو ڪوڊ جيڪو سڌو سنئون پيداوار ۾ وڃي ٿو. ھڪڙو ڪوڊ جيڪو توھان مان ڪجھ استعمال ڪندا آھن پر ان کي محسوس نه ڪندا آھن.

تنهن ڪري توهان سمجهي رهيا آهيو ته اهو ڪيترو خراب هو. جڏهن مان ننڍو هئس، تڏهن مون وٽ آيو ۽ مون کي اهي ٻه ٽيرا بائيٽ ڊيٽابيس ڏنا ويا. ھاڻي ھتي ھر ڪنھن لاءِ تمام گھڻو لوڊ آھي. مان ڪانفرنسن ۾ ويو ۽ پڇيو: ”ماڻهو، مون کي ٻڌايو، توهان وٽ وڏو ڊيٽا آهي، ڇا سڀ ڪجهه سٺو آهي؟ توهان وٽ ڪيترا بنياد آهن؟ هنن مون کي جواب ڏنو: ”اسان وٽ 100 گيگا بائيٽ آهن! مون چيو: ”ٿڌي، 100 گيگا بائيٽ! ۽ مان پاڻ سان سوچي رهيو هوس ته ڪيئن احتياط سان پنهنجي پوکر جي منهن کي برقرار رکان. توهان سوچيو، ها، ماڻهو سٺا آهن، ۽ پوء توهان واپس وڃو ۽ انهن ملٽي ٽيرا بائيٽ ڊيٽابيس سان ٽينڪر. ۽ هي هڪ جونيئر رهيو آهي. ڇا توهان تصور ڪري سگهو ٿا ته هي ڪهڙو ڌڪ آهي؟

مان 20 کان وڌيڪ پروگرامنگ ٻوليون ڄاڻان ٿو. اهو ڪجهه آهي جيڪو مون کي معلوم ڪرڻو پيو جيئن مون ڪم ڪيو. اهي توهان کي ڪوڊ ڏين ٿا Erlang، C، C ++، Lua، Python، Ruby، ٻيو ڪجهه، ۽ توهان کي اهو سڀ ڪٽڻو پوندو. عام طور تي، مون کي ڪرڻو پيو. صحيح تعداد جو اندازو لڳائڻ ممڪن نه هو، پر 20 جي لڳ ڀڳ ڪنهن هنڌ گم ٿي ويو.

جيئن ته موجود هرڪو ڄاڻي ٿو ته متوازي ڇا آهي ۽ اسان ڇا ڪريون ٿا، مان ان بابت نه ڳالهائيندس ته اسان ڪيترا سٺا آهيون ۽ اسان ڇا ڪندا آهيون. مان صرف توهان کي ٻڌايان ٿو ته اسان وٽ سڄي دنيا ۾ 13 آفيسون آهن، 300 کان وڌيڪ ملازم آهن، ماسڪو، ٽيلن ۽ مالٽا ۾ ترقي. جيڪڏھن توھان چاھيو، توھان ان کي وٺي سگھوٿا ۽ مالٽا ڏانھن وڃو جيڪڏھن سياري ۾ ٿڌي آھي ۽ توھان کي پنھنجي پٺي کي گرم ڪرڻ جي ضرورت آھي.

خاص طور تي، اسان جو ڊپارٽمينٽ Python 2 ۾ لکي ٿو. اسان ڪاروبار ۾ آهيون ۽ فيشن ٽيڪنالاجي کي لاڳو ڪرڻ لاء وقت نه آهي، تنهنڪري اسان کي نقصان پهچايو آهي. اسان Django استعمال ڪريون ٿا ڇاڪاڻ ته ان ۾ سڀ ڪجهه آهي، ۽ اسان اهو ورتو جيڪو غير ضروري هو ۽ ان کي اڇلائي ڇڏيو. پڻ MySQL، Redis ۽ NGINX. اسان وٽ ٻيون به ڪيتريون ئي سٺيون شيون آهن. اسان وٽ MongoDB آهي، اسان وٽ خرگوش ڊوڙي رهيا آهن، اسان وٽ سڀ ڪجهه آهي - پر اهو منهنجو ناهي، ۽ مان اهو نٿو ڪريان.

اوپن ريسٽي

مون پنهنجي باري ۾ ٻڌايو. اچو ته سمجهون ته اڄ مان ڪهڙي ڳالهه ڪرڻ وارو آهيان:

  • OpenResty ڇا آهي ۽ ان سان گڏ کاڌو ڇا آهي؟
  • جڏهن اسان وٽ Python، NodeJS، PHP، Go ۽ ٻيون سٺيون شيون آهن، جن سان هرڪو خوش آهي، هڪ ٻيو ڦيٿو ٻيهر ڇو ٺاهيو؟
  • ۽ زندگي مان چند مثال. مون کي رپورٽ کي تمام گهڻو ڪٽڻو پيو ڇاڪاڻ ته ان ۾ مون کي 3,5 ڪلاڪ لڳي ويا، تنهن ڪري ڪجهه مثال هوندا.

OpenResty NGINX آهي. هن جي مهرباني، اسان وٽ هڪ مڪمل ويب سرور آهي جيڪو سٺو لکيو ويو آهي ۽ جلدي ڪم ڪري ٿو. مان سمجهان ٿو ته اسان مان گھڻا استعمال ڪن ٿا NGINX پيداوار ۾. توهان سڀني کي خبر آهي ته هو تيز ۽ ٿڌو آهي. انهن ان ۾ کوليو هم وقت ساز I/O ٺاهيو، تنهنڪري اسان کي ڪنهن به شيءِ کي سائيڪل ڪرڻ جي ضرورت ناهي، جيئن انهن پيٿون ۾ ڪيو. Gevent تمام سٺو، عظيم آهي، پر جيڪڏهن توهان سي ڪوڊ لکندا آهيو ۽ ڪجهه غلط ٿي ويندو آهي، ته پوء جيونٽ سان توهان ان کي ڊيبگ ڪرڻ لاء چريو ٿي ويندا. مون کي تجربو هو: اهو معلوم ڪرڻ ۾ ٻه ڏينهن لڳي ويا ته اتي ڇا غلط ٿيو. جيڪڏهن ڪو ماڻهو ڪيترن ئي هفتن جي چوڌاري نه کڄي ها، مسئلو مليو، انٽرنيٽ تي لکيو، ۽ گوگل اهو نه مليو، ته پوء اسان مڪمل طور تي چريو ٿي وڃون ها.

NGINX اڳ ۾ ئي ڪيشنگ ۽ جامد مواد ڪيو آهي. توهان کي پريشان ٿيڻ جي ضرورت ناهي ته اهو ڪيئن ڪجي انساني طور تي، انهي ڪري ته توهان ڪٿي سست نه ٿي وڃو، ته جيئن توهان بيان ڪندڙ ڪٿي نه وڃايو. نينگڪس کي ترتيب ڏيڻ لاءِ تمام آسان آهي ، توهان کي سوچڻ جي ضرورت ناهي ته ڇا ڪجي - WSGI، PHP-FPM، Gunicorn، Unicorn. نينگڪس نصب ڪيو ويو، منتظمين کي ڏنو ويو، اهي ڄاڻن ٿا ته ان سان ڪيئن ڪم ڪجي. نينگڪس هڪ منظم طريقي سان درخواستن تي عمل ڪري ٿو. مان ان بابت ٿوري دير بعد ڳالهائيندس. مختصر ۾، اھو ھڪڙو مرحلو آھي جڏھن اھو صرف درخواست قبول ڪيو، جڏھن اھو ان تي عمل ڪيو، ۽ جڏھن اھو صارف کي مواد پيش ڪيو.

نينگڪس ٿڌو آهي، پر هڪ مسئلو آهي: اهو ڪافي لچڪدار نه آهي، جيتوڻيڪ سڀني سٺين خاصيتن سان گڏ جيڪي ماڻهو ترتيب ۾ ٺاهيا ويا آهن، ان جي باوجود ڇا ترتيب ڏئي سگهجي ٿو. هي طاقت ڪافي نه آهي. اهو ئي سبب آهي ته Taobao جي ماڻهن، گهڻو وقت اڳ، اهو لڳي ٿو ته اٺ سال اڳ، لوا ٺاهي ان ۾. اهو ڇا ڏئي ٿو؟

  • ڪرائون سائيز واري. اهو ننڍڙو آهي. LuaJIT اٽڪل 100-200 ڪلو بائيٽ ميموري اوور هيڊ ۽ گهٽ ۾ گهٽ ڪارڪردگي اوور هيڊ ڏئي ٿو.
  • اسپيڊ. LuaJIT مترجم ڪيترن ئي حالتن ۾ سي جي ويجهو آهي، ڪجهه حالتن ۾ اهو جاوا ڏانهن وڃائي ٿو، ٻين ۾ اهو ان کي ختم ڪري ٿو. ڪجهه وقت لاءِ ان کي اسٽيٽ آف آرٽ سمجهيو ويندو هو، بهترين JIT مرتب ڪندڙ. ھاڻي ٿڌا آھن، پر اھي ڏاڍا ڳري آھن، مثال طور، ساڳيو V8. ڪجهه JS مترجم ۽ Java HotSpot ڪجهه پوائنٽن تي تيز آهن، پر ڪجهه هنڌن تي اهي اڃا به وڃائي رهيا آهن.
  • سکڻ ۾ آسان. جيڪڏهن توهان وٽ آهي، چئو، هڪ پرل ڪوڊ جو بنياد، ۽ توهان بکنگ نه آهيو، توهان کي پرل پروگرامر نه ملندي. ڇاڪاڻ ته اهي موجود نه آهن، اهي سڀ ڪڍيا ويا، ۽ انهن کي سيکارڻ ڊگهو ۽ ڏکيو آهي. جيڪڏهن توهان چاهيو ٿا پروگرامر ڪنهن ٻئي لاءِ، توهان کي شايد انهن کي ٻيهر تربيت ڏيڻ يا انهن کي ڳولڻو پوندو. لوا جي صورت ۾، هر شيء سادو آهي. ڪو به جونيئر ٽن ڏينهن ۾ لوا سکي سگهي ٿو. ان کي سمجهڻ ۾ مون کي ٻه ڪلاڪ لڳي ويا. ٻن ڪلاڪن کان پوءِ مان اڳ ۾ ئي پروڊڪشن ۾ ڪوڊ لکي رهيو هوس. اٽڪل هڪ هفتي بعد هو سڌو پيداوار ڏانهن ويو ۽ ڇڏي ويو.

نتيجي طور، اهو هن طرح نظر اچي ٿو:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

هتي تمام گهڻو آهي. OpenResty ماڊلز جو هڪ گروپ گڏ ڪيو آهي، ٻنهي لوش ۽ انجڻ وارا. ۽ توهان وٽ هر شي تيار آهي - مقرر ۽ ڪم ڪري رهيو آهي.

مثال

غزل جي ڪافي، اچو ته ڪوڊ ڏانهن وڃو. هتي ٿورڙو هيلو ورلڊ آهي:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اتي ڇا آهي؟ هي هڪ انجڻ جي جڳهه آهي. اسان پريشان نه ڪريو، اسان پنهنجو رستو نه لکون ٿا، اسان ڪجهه تيار ٿيل نه کڻندا آهيون - اسان وٽ اڳ ۾ ئي اين اين اينڪس ۾ آهي، اسان هڪ سٺي ۽ سست زندگي گذاريندا آهيون.

content_by_lua_block هڪ بلاڪ آهي جيڪو چوي ٿو ته اسان لوا اسڪرپٽ استعمال ڪندي مواد جي خدمت ڪري رهيا آهيون. اسان Engins variable وٺون ٿا remote_addr ۽ ان ۾ وجهي string.format. اهو ساڳيو آهي sprintfصرف لوا ۾، صرف صحيح. ۽ اسان ان کي ڪلائنٽ کي ڏيو.

نتيجي طور، اهو هن طرح نظر ايندو:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

پر اچو ته حقيقي دنيا ڏانهن واپس وڃو. ڪو به هيلو ورلڊ کي پروڊڪشن تي نه ٿو لڳائي. اسان جي ايپليڪيشن عام طور تي ڊيٽابيس يا ٻي جاءِ تي وڃي ٿي ۽ اڪثر وقت جواب جي انتظار ۾ آهي.

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

هو صرف ويٺو ۽ انتظار ڪري ٿو. اهو تمام سٺو ناهي. جڏهن 100.000 استعمال ڪندڙ اچن ٿا، اهو اسان لاء تمام ڏکيو آهي. سو اچو ته هڪ سادي ايپليڪيشن استعمال ڪريون مثال طور. اسان تصويرن کي ڳوليندا سين، مثال طور، ٻليون. پر اسان صرف ڳولهي نه سگهنداسين، اسان لفظن کي وڌائينداسين، ۽، جيڪڏهن صارف "ٻلي جي ٻار" جي ڳولا ڪندو، اسان کي ٻليون، پياري ٻليون، وغيره ملندا. پهرين، اسان کي گهربل ڊيٽا حاصل ڪرڻ جي ضرورت آهي پس منظر تي. اهو هن طرح نظر اچي ٿو:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

ٻه سٽون توهان کي GET پيٽرول کڻڻ جي اجازت ڏين ٿيون، ڪا به پيچيدگي ناهي. اڳيون، اچو ته چئون ٿا، هڪ ڊيٽابيس مان هڪ نشاني سان هڪ لفظ ۽ واڌ لاءِ، اسان هي معلومات حاصل ڪندا آهيون باقاعده SQL سوال استعمال ڪندي. اهو سادو آهي. اهو هن طرح نظر اچي ٿو:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

لائبريري سان ڳنڍڻ resty.mysql، جيڪو اسان وٽ اڳ ۾ ئي کٽ ۾ آهي. اسان کي ڪا به شيءِ انسٽال ڪرڻ جي ضرورت ناهي، هر شي تيار آهي. اسان اشارو ڪريون ٿا ته ڪيئن ڳنڍجي ۽ SQL سوال ٺاهيو:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اهو هتي ٿورڙو خوفناڪ آهي، پر سڀ ڪجهه ڪم ڪري ٿو. هتي 10 جي حد آهي. اسان 10 داخلا ڪڍيون ٿا، اسان سست آهيون، اسان وڌيڪ ڏيکارڻ نٿا چاهيون. مون SQL ۾ حد جي باري ۾ وساريو.

اڳيون اسان سڀني سوالن لاء تصويرون ڳوليندا آهيون. اسان درخواستن جو هڪ گروپ گڏ ڪيو ۽ لوا ٽيبل ڀريو جنهن کي سڏيو ويندو آهي reqs، ۽ اسان ڪندا آهيون ngx.location.capture_multi.

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اهي سڀئي درخواستون متوازي ۾ موڪليا ويا آهن، ۽ جواب اسان ڏانهن موٽايا ويا آهن. آپريٽنگ وقت تمام سست جي جوابي وقت جي برابر آهي. جيڪڏهن اسان سڀ 50 ملي سيڪنڊن ۾ شوٽ ڪريون، ۽ اسان هڪ سئو درخواستون موڪليون، ته پوءِ اسان کي 50 ملي سيڪنڊن ۾ جواب ملندو.

جيئن ته اسان سست آهيون ۽ نه ٿا چاهيون ته HTTP ۽ ڪيشنگ هينڊلنگ لکڻ، اسان NGINX کي اسان لاءِ سڀ ڪجهه ڪرڻ ڏينداسين. جيئن توهان ڏٺو، اتي هڪ درخواست هئي url/fetch، هتي هو آهي:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اسان ان کي آسان بڻائي proxy_pass، اسان اشارو ڪريون ٿا ته ڪيش ڪٿي ڪجي، ڪيئن ڪجي، ۽ سڀ ڪجھ اسان لاءِ ڪم ڪري ٿو.

پر اهو ڪافي ناهي، اسان کي اڃا تائين صارف کي ڊيٽا ڏيڻ جي ضرورت آهي. آسان خيال اهو آهي ته JSON ۾ هر شي کي ترتيب ڏيو، آساني سان، ٻن لائينن ۾. اسان ڏيون ٿا مواد جو قسم، اسان ڏيون ٿا JSON.

پر اتي ھڪڙو مشڪل آھي: صارف JSON پڙھڻ نٿو چاھي. اسان کي فرنٽ-اينڊ ڊولپرز کي راغب ڪرڻ جي ضرورت آهي. ڪڏهن ڪڏهن اسان اهو نه ٿا چاهيون ته اهو پهريون ڀيرو آهي. ۽ ايس اي او ماهر چوندا ته جيڪڏهن اسان تصويرن کي ڳولي رهيا آهيون ته پوءِ انهن سان ڪو فرق نٿو پوي. ۽ جيڪڏهن اسان انهن کي ڪجهه مواد ڏيون ٿا، اهي چوندا ته اسان جا سرچ انجڻ ڪجهه به نه ٿا ڪن.

ان بابت ڇا ڪجي؟ يقينن، اسان صارف کي HTML ڏينداسين. هٿ سان پيدا ڪرڻ غلط ناهي، تنهنڪري اسان ٽيمپليٽ استعمال ڪرڻ چاهيون ٿا. ان لاءِ هڪ لائبريري آهي lua-resty-template.

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

توهان شايد ڏٺو هوندو ٽي خوفناڪ اکر OPM. OpenResty پنهنجي پيڪيج مينيجر سان گڏ اچي ٿو، جنهن جي ذريعي توهان مختلف ماڊلز جو هڪ گروپ انسٽال ڪري سگهو ٿا، خاص طور تي، lua-resty-template. ھي ھڪڙو سادو ٽيمپليٽ انجڻ آھي، جھنگو ٽيمپليٽ وانگر. اتي توهان ڪوڊ لکي سگهو ٿا ۽ متغير متبادل انجام ڏئي سگهو ٿا.

نتيجي طور، هر شيء هن وانگر نظر ايندي:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اسان ڊيٽا ورتي ۽ ٽيمپليٽ کي ٻيهر ٻن لائينن ۾ پيش ڪيو. صارف خوش آهي، هن کي ٻڪريون مليون آهن. جيئن ته اسان درخواست کي وڌايو، هن کي ٻلي جي ٻارن لاء فر مهر پڻ ملي. توهان ڪڏهن به نه ڄاڻندا آهيو، شايد هو بلڪل اهو ڳولي رهيو هو، پر هن جي درخواست صحيح طور تي ٺاهي نه سگهيو.

هر شي سٺي آهي، پر اسان ترقي ۾ آهيون ۽ اڃا تائين صارفين کي ڏيکارڻ نٿا چاهيون. اچو ته اختيار ڪريون. هن کي ڪرڻ لاء، اچو ته ڏسو ته NGINX OpenResty شرطن ۾ درخواست کي ڪيئن سنڀاليندو آهي:

  • پهريون مرحلو - رسائي، جڏهن صارف صرف پهتو، ۽ اسان هن کي هيڊرز، IP پتي، ۽ ٻين ڊيٽا ذريعي ڏٺو. اسان ان کي فوري طور تي ڪٽي سگهون ٿا جيڪڏهن اسان اهو پسند نه ڪندا آهيون. اهو اختيار ڪرڻ لاءِ استعمال ٿي سگهي ٿو، يا جيڪڏهن اسان کي گهڻيون درخواستون مليون، ته اسان انهن کي آسانيءَ سان هن مرحلي ۾ ڪٽي سگهون ٿا.
  • لکن ٿا. اسان ڪجهه درخواست ڊيٽا ٻيهر لکندا آهيون.
  • مواد. اسان مواد کي صارف تائين پهچايو.
  • هيڊر فلٽر. اسان جوابي سرن کي تبديل ڪريون ٿا. جيڪڏهن اسان استعمال ڪيو proxy_pass، اسان صارف کي ڏيڻ کان پهريان ڪجهه هيڊر ٻيهر لکي سگھون ٿا.
  • جسماني فلٽر. اسان جسم کي تبديل ڪري سگهون ٿا.
  • لاگ ان - لاگنگ. توهان لکي سگهو ٿا لاگ ان ۾ لچڪدار ڳولها بغير ڪنهن اضافي پرت جي.

اسان جو اختيار ڪجهه هن طرح نظر ايندو:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اسان هن کي انهي ۾ شامل ڪنداسين location، جنهن کي اسان اڳ بيان ڪيو آهي، ۽ هيٺ ڏنل ڪوڊ وجهي اتي:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اسان ڏسون ٿا ته اسان وٽ ڪوڪي ٽوڪن آهي. جيڪڏهن نه، ته پوء اسان اختيار لاء پڇو. صارفين چالاڪ آهن ۽ اندازو لڳائي سگهن ٿا ته انهن کي ڪوڪي ٽوڪن سيٽ ڪرڻ جي ضرورت آهي. تنهن ڪري، اسان ان کي ريڊس ۾ پڻ رکون ٿا:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

Redis سان ڪم ڪرڻ لاء ڪوڊ تمام سادو آهي ۽ ٻين ٻولين کان مختلف ناهي. ساڳئي وقت، سڀ ان پٽ / آئوٽ، هتي ۽ اتي، بلاڪ نه آهي. جيڪڏهن توهان هم وقت سازي ڪوڊ لکندا آهيو، اهو ڪم ڪري ٿو هم وقت سازي. لڳ ڀڳ gevent وانگر، پر چڱي طرح ڪيو.

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اچو ته اختيار پاڻ ڪريون:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

اسان چئون ٿا ته اسان کي درخواست جي جسم کي پڙهڻ جي ضرورت آهي. اسان پوسٽ دلائل وصول ڪندا آهيون ۽ چيڪ ڪريو ته لاگ ان ۽ پاسورڊ صحيح آهن. جيڪڏهن اهي غلط آهن، ته پوءِ اسان توهان کي اختيار ڏيڻ لاءِ چئلينج ڪريون ٿا. ۽ جيڪڏھن صحيح آھي ته پوءِ Redis ۾ ٽوڪن لکو:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

ڪوڪي کي سيٽ ڪرڻ نه وساريو، اهو پڻ ٻن لائينن ۾ ڪيو ويندو آهي:

OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

مثال سادو ۽ قياس آهي. يقينن، اسان اهڙي خدمت نه ڪنداسين جيڪا ماڻهن کي ٻليون ڏيکاري. پر اسان کي ڪير سڃاڻي. تنهنڪري اچو ته اڳتي وڌون ته پيداوار ۾ ڇا ٿي سگهي ٿو.

  • minimalistic پس منظر. ڪڏهن ڪڏهن اسان کي ضرورت آهي ته صرف ٿوري ڊيٽا کي ٻاھر ڪڍڻ جي پس منظر ۾: ڪٿي اسان کي تاريخ داخل ڪرڻ جي ضرورت آھي، ڪٿي اسان کي ھڪڙي فهرست ڏيکارڻ جي ضرورت آھي، چئو ته ڪيترا استعمال ڪندڙ ھاڻي سائيٽ تي آھن، ھڪڙو انسداد يا انگ اکر ڳنڍيو. ڪجھ تمام ننڍڙو. ڪجهه گهٽ ۾ گهٽ ٽڪر تمام آساني سان ٺاهي سگھجن ٿيون. اهو جلدي، آسان ۽ عظيم بڻائيندو.
  • ڊيٽا پري پروسيسنگ. ڪڏهن ڪڏهن اسان پنهنجي صفحي ۾ اشتهارن کي شامل ڪرڻ چاهيون ٿا، ۽ اسان API درخواستون استعمال ڪندي هي اشتهار وصول ڪندا آهيون. اهو هتي ڪرڻ بلڪل آسان آهي. اسان پنهنجي پس منظر کي لوڊ نه ڪندا آهيون، جيڪو اڳ ۾ ئي ويٺو آهي ۽ محنت ڪري رهيو آهي. توهان ان کي وٺي سگهو ٿا ۽ هتي گڏ ڪري سگهو ٿا. اسان ڪجھ JS کي گڏ ڪري سگھون ٿا، يا، ان جي ابتڙ، ان کي ڌار ڪري سگھون ٿا ۽ استعمال ڪندڙ کي ڏيڻ کان پھريائين ڪا شيءِ تيار ڪري سگھون ٿا.
  • microservice لاء منهن. اهو پڻ هڪ تمام سٺو ڪيس آهي، مون ان تي عمل ڪيو. ان کان اڳ، مون Tenzor ۾ ڪم ڪيو، هڪ ڪمپني جيڪا اليڪٽرانڪ رپورٽنگ سان واسطو رکي ٿي ۽ ملڪ جي تقريبن اڌ قانوني ادارن کي رپورٽنگ فراهم ڪري ٿي. اسان هڪ خدمت ٺاهي، ڪيتريون ئي شيون اتي ڪيون ويون آهن ساڳيو ميکانيزم استعمال ڪندي: رستي، اختيار ۽ وڌيڪ.
    OpenResty توهان جي microservices لاء گلو طور استعمال ڪري سگهجي ٿو، هر شيء ۽ هڪ واحد انٽرفيس تائين هڪ واحد رسائي فراهم ڪندي. جيئن ته microservices هن طرح لکي سگهجي ٿو ته توهان وٽ هتي Node.js، هتي PHP، Python هتي، ڪجهه Erlang شيءِ هتي، اسان سمجهون ٿا ته اسان هر هنڌ ساڳيو ڪوڊ ٻيهر لکڻ نٿا چاهيون. تنهن ڪري، OpenResty اڳيان پلگ ان ڪري سگھجي ٿو.

  • شماريات ۽ تجزياتي. عام طور تي NGINX داخلا تي آهي، ۽ سڀ درخواستون ان جي ذريعي وڃو. اهو هن جڳهه ۾ آهي ته اهو گڏ ڪرڻ تمام آسان آهي. توهان فوري طور تي ڪجهه حساب ڪري سگهو ٿا ۽ ان کي ڪٿي اپ لوڊ ڪري سگهو ٿا، مثال طور، Elasticsearch، Logstash، يا صرف ان کي لاگ ۾ لکو ۽ پوءِ ان کي ڪٿي موڪليو.
  • ملٽي يوزر سسٽم. مثال طور، آن لائن رانديون پڻ ٺاهڻ لاء تمام سٺيون آهن. اڄ ڪيپ ٽائون ۾، اليگزينڊر گليڊش انهي بابت ڳالهائيندو ته ڪيئن جلدي هڪ ملٽي پليئر گيم کي پروٽوٽائپ ڪري OpenResty استعمال ڪندي.
  • درخواست فلٽرنگ (WAF). اڄڪلهه اهو فيشن آهي ته هر قسم جي ويب ايپليڪيشن فائر والز ٺاهڻ؛ اتي ڪيتريون ئي خدمتون آهن جيڪي مهيا ڪن ٿيون. OpenResty استعمال ڪندي، توهان پنهنجو پاڻ کي هڪ ويب ايپليڪيشن فائر وال ٺاهي سگهو ٿا جيڪو آسان ۽ آساني سان توهان جي گهرجن مطابق درخواستن کي فلٽر ڪندو. جيڪڏهن توهان وٽ پٿون آهي، ته پوءِ توهان سمجهو ٿا ته PHP ضرور توهان ۾ انجيڪشن نه ڪئي ويندي، جيستائين توهان ان کي ڪنسول مان ڪٿي به نه لڳايو. توھان کي خبر آھي توھان وٽ آھي MySQL ۽ Python. شايد، اھي ڪوشش ڪري سگھن ٿا ڪنھن قسم جي ڊاريڪٽري ٽرورسل ۽ ڪا شيءِ ڊيٽابيس ۾ داخل ڪرڻ جي. تنهن ڪري، توهان فلٽر ڪري سگهو ٿا عجيب سوالن کي جلدي ۽ سستي طور تي سامهون.
  • برادري. جيئن ته OpenResty NGINX تي ٺهيل آهي، ان ۾ هڪ بونس آهي - هي NGINX ڪميونٽي. اهو تمام وڏو آهي، ۽ سوالن جو هڪ مهذب حصو جيڪو توهان وٽ هوندو پهريان ئي اين اين ايڪس ڪميونٽي طرفان حل ڪيو ويو آهي.

    لوا ڊولپرز. ڪالهه مون انهن ماڻهن سان ڳالهايو جيڪي هاءِ لوڊ ++ ٽريننگ واري ڏينهن تي آيا ۽ ٻڌو ته لوا ۾ صرف Tarantool لکيل هو. اهو سچ ناهي، لوا ۾ گهڻو ڪجهه لکيو ويو آهي. مثال: OpenResty، Prosody XMPP سرور، Love2D گيم انجڻ، Lua اسڪرپٽ ۾ Warcraft ۽ ٻين هنڌن تي. اتي ڪيترائي Lua ڊولپرز آھن، انھن وٽ ھڪڙو وڏو ۽ جوابدار ڪميونٽي آھي. منهنجا سڀ Lua سوال ڪجھ ڪلاڪن اندر حل ٿي ويا. جڏهن توهان ميلنگ لسٽ ۾ لکندا آهيو، لفظي طور تي چند منٽن اندر اڳ ۾ ئي جوابن جو هڪ گروپ موجود آهي، بيان ڪري ٿو ته ڇا ۽ ڪيئن، ڇا آهي. اهو عظيم آهي. بدقسمتي سان، اهڙي قسم جي، روحاني برادري هر جڳهه ناهي.
    هتي آهي GitHub OpenResty لاءِ، جتي توهان هڪ مسئلو کولي سگهو ٿا جيڪڏهن ڪجهه ڀڄي ويو آهي. هتي گوگل گروپس تي هڪ ميلنگ لسٽ آهي، جتي توهان عام مسئلن تي بحث ڪري سگهو ٿا، اتي هڪ ميلنگ لسٽ چيني ۾ آهي - توهان ڪڏهن به نه ٿا ڄاڻو، ٿي سگهي ٿو توهان کي انگريزي نه ڳالهائي، پر توهان چيني ڄاڻو ٿا.

نتيجو

  • مون کي اميد آهي ته مان اهو ٻڌائڻ جي قابل ٿي ويو آهيان ته OpenResty ويب لاءِ ٺهيل هڪ تمام آسان فريم ورڪ آهي.
  • ان ۾ داخلا لاءِ گهٽ رڪاوٽ آهي، ڇاڪاڻ ته ڪوڊ ساڳيو آهي جيڪو اسان لکون ٿا، ٻولي بلڪل سادي ۽ گهٽ ۾ گهٽ آهي.
  • اهو ڪال بڪ کان سواءِ هم وقت ساز I/O مهيا ڪري ٿو، اسان وٽ ڪو به نوڊل نه هوندو جيئن اسين ڪڏهن ڪڏهن NodeJS ۾ لکي سگهون ٿا.
  • ان ۾ آساني سان ٺهڪندڙ آهي، ڇو ته اسان کي صرف ضروري ماڊل ۽ اسان جي ڪوڊ سان NGINX جي ضرورت آهي، ۽ هر شي صحيح ڪم ڪري ٿي.
  • وڏي ۽ جوابدار ڪميونٽي.

مون تفصيل سان نه ٻڌايو ته روٽنگ ڪيئن ٿيندي آهي، اها هڪ تمام ڊگهي ڪهاڻي هئي.

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


Vladimir Protasov - OpenResty: NGINX کي مڪمل ايپليڪيشن سرور ۾ تبديل ڪرڻ

جو ذريعو: www.habr.com

تبصرو شامل ڪريو