OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోందిమేము కాన్ఫరెన్స్ నివేదిక యొక్క ట్రాన్స్క్రిప్ట్ను మళ్లీ ప్రచురిస్తున్నాము హైలోడ్++ 2016, ఇది గత సంవత్సరం నవంబర్ 7-8 తేదీలలో మాస్కో సమీపంలోని స్కోల్కోవోలో జరిగింది. వ్లాదిమిర్ ప్రోటాసోవ్ OpenResty మరియు Luaతో NGINX కార్యాచరణను ఎలా విస్తరించాలో వివరిస్తుంది.

అందరికీ హలో, నా పేరు వ్లాదిమిర్ ప్రోటాసోవ్, నేను సమాంతరంగా పని చేస్తున్నాను. నా గురించి కొంచెం చెబుతాను. నేను నా జీవితంలో మూడొంతుల వంతు కోడ్ రాయడానికి వెచ్చిస్తున్నాను. నేను సాహిత్యపరమైన అర్థంలో కోర్‌కి ప్రోగ్రామర్ అయ్యాను: కొన్నిసార్లు నేను నా కలలలో కోడ్‌ని చూస్తాను. జీవితంలో నాలుగింట ఒక వంతు పారిశ్రామిక అభివృద్ధి, నేరుగా ఉత్పత్తిలోకి వెళ్లే కోడ్ రాయడం. మీలో కొందరు ఉపయోగించే కోడ్, కానీ దానిని గుర్తించలేరు.

కాబట్టి అది ఎంత ఘోరంగా ఉందో అర్థం చేసుకోవచ్చు. నేను కొంచెం జూనియర్‌గా ఉన్నప్పుడు, నేను వచ్చి ఈ రెండు-టెరాబైట్ డేటాబేస్‌లను ఇచ్చాను. ఇప్పుడు ఇక్కడ ఉన్న ప్రతి ఒక్కరికీ ఇది అధిక భారం. నేను సమావేశాలకు వెళ్లి అడిగాను: “అబ్బాయిలు, చెప్పండి, మీకు పెద్ద డేటా ఉంది, ప్రతిదీ బాగుంది? మీకు అక్కడ ఎన్ని స్థావరాలు ఉన్నాయి? వారు నాకు సమాధానం ఇచ్చారు: "మా వద్ద 100 గిగాబైట్లు ఉన్నాయి!" నేను ఇలా అన్నాను: “కూల్, 100 గిగాబైట్లు!” మరియు నా పేకాట ముఖాన్ని ఎలా జాగ్రత్తగా నిర్వహించాలో నేను ఆలోచిస్తున్నాను. మీరు అనుకుంటున్నారు, అవును, అబ్బాయిలు బాగున్నారు, ఆపై మీరు ఈ మల్టీ-టెరాబైట్ డేటాబేస్‌లతో తిరిగి వెళ్లి టింకర్ చేయండి. మరియు ఇది జూనియర్ కావడం. ఇది ఎంతటి దెబ్బ అని మీరు ఊహించగలరా?

నాకు 20 కంటే ఎక్కువ ప్రోగ్రామింగ్ భాషలు తెలుసు. నేను పని చేస్తున్నప్పుడు ఇది నేను గుర్తించవలసి వచ్చింది. వారు మీకు Erlang, C, C++, Lua, Python, Ruby, ఇంకేదైనా కోడ్ ఇస్తారు మరియు మీరు అన్నింటినీ కట్ చేయాలి. సాధారణంగా, నేను చేయాల్సి వచ్చింది. ఖచ్చితమైన సంఖ్యను లెక్కించడం సాధ్యం కాదు, కానీ ఎక్కడో 20వ తేదీకి సంఖ్య పోయింది.

ప్యారలల్స్ అంటే ఏమిటో మరియు మనం ఏమి చేస్తామో అక్కడ ఉన్న ప్రతి ఒక్కరికి తెలుసు కాబట్టి, మనం ఎంత కూల్‌గా ఉన్నాము మరియు మనం ఏమి చేస్తాము అనే దాని గురించి నేను మాట్లాడను. మేము ప్రపంచవ్యాప్తంగా 13 కార్యాలయాలు, 300 కంటే ఎక్కువ మంది ఉద్యోగులు, మాస్కో, టాలిన్ మరియు మాల్టాలో అభివృద్ధిని కలిగి ఉన్నామని నేను మీకు చెప్తాను. మీరు కోరుకుంటే, శీతాకాలంలో చల్లగా ఉంటే మీరు దానిని తీసుకొని మాల్టాకు వెళ్లవచ్చు మరియు మీరు మీ వీపును వేడి చేయాలి.

ప్రత్యేకంగా, మా విభాగం పైథాన్ 2లో వ్రాస్తుంది. మేము వ్యాపారంలో ఉన్నాము మరియు ఫ్యాషన్ సాంకేతికతలను అమలు చేయడానికి సమయం లేదు, కాబట్టి మేము బాధపడుతున్నాము. మేము జాంగోను ఉపయోగిస్తాము ఎందుకంటే దానిలో ప్రతిదీ ఉంది, మరియు మేము అనవసరమైన వాటిని తీసివేసాము. అలాగే MySQL, Redis మరియు NGINX. మన దగ్గర చాలా ఇతర మంచి విషయాలు కూడా ఉన్నాయి. మా దగ్గర మొంగోడిబి ఉంది, మన దగ్గర కుందేళ్లు నడుస్తున్నాయి, అన్నీ ఉన్నాయి - కానీ అది నాది కాదు, నేను అలా చేయను.

ఓపెన్ రెస్టీ

నా గురించి చెప్పాను. ఈ రోజు నేను ఏమి మాట్లాడబోతున్నానో తెలుసుకుందాం:

  • OpenResty అంటే ఏమిటి మరియు దానిని దేనితో తింటారు?
  • మన దగ్గర పైథాన్, నోడ్‌జెఎస్, పిహెచ్‌పి, గో మరియు ప్రతి ఒక్కరూ సంతోషంగా ఉండే ఇతర మంచి విషయాలు ఉన్నప్పుడు మరొక చక్రాన్ని ఎందుకు మళ్లీ ఆవిష్కరించాలి?
  • మరియు జీవితం నుండి కొన్ని ఉదాహరణలు. నాకు 3,5 గంటలు పట్టినందున నేను నివేదికను చాలా కట్ చేయాల్సి వచ్చింది, కాబట్టి కొన్ని ఉదాహరణలు ఉంటాయి.

OpenResty NGINX. అతనికి ధన్యవాదాలు, మేము బాగా వ్రాసిన మరియు త్వరగా పని చేసే పూర్తి స్థాయి వెబ్ సర్వర్‌ని కలిగి ఉన్నాము. మనలో చాలామంది ఉత్పత్తిలో NGINXని ఉపయోగిస్తున్నారని నేను భావిస్తున్నాను. అతను ఫాస్ట్ అండ్ కూల్ అని మీ అందరికీ తెలుసు. వారు దానిలో కూల్ సింక్రోనస్ I/Oని తయారు చేసారు, కాబట్టి వారు పైథాన్‌లో గెవెంట్ చేసినట్లుగా మనం దేనినీ సైకిల్ చేయాల్సిన అవసరం లేదు. Gevent బాగుంది, బాగుంది, కానీ మీరు C కోడ్ వ్రాసి ఏదైనా తప్పు జరిగితే, Geventతో మీరు దానిని డీబగ్గింగ్ చేయడంలో వెర్రివాళ్ళవుతారు. నాకు అనుభవం ఉంది: అక్కడ ఏమి తప్పు జరిగిందో గుర్తించడానికి రెండు రోజులు పట్టింది. ఎవరైనా చాలా వారాలుగా చుట్టూ తవ్వి, సమస్యను కనుగొని, ఇంటర్నెట్‌లో వ్రాసి, Google దాన్ని కనుగొనకపోతే, మేము పూర్తిగా వెర్రివాళ్లం.

NGINX ఇప్పటికే కాషింగ్ మరియు స్టాటిక్ కంటెంట్ పూర్తి చేసింది. దీన్ని మానవీయంగా ఎలా చేయాలనే దాని గురించి మీరు చింతించాల్సిన అవసరం లేదు, తద్వారా మీరు ఎక్కడా నెమ్మదించకూడదు, తద్వారా మీరు ఎక్కడా డిస్క్రిప్టర్‌లను కోల్పోరు. Nginx అమలు చేయడానికి చాలా సౌకర్యవంతంగా ఉంటుంది, మీరు ఏమి తీసుకోవాలో ఆలోచించాల్సిన అవసరం లేదు - WSGI, PHP-FPM, Gunicorn, Unicorn. Nginx ఇన్‌స్టాల్ చేయబడింది, నిర్వాహకులకు ఇవ్వబడింది, దానితో ఎలా పని చేయాలో వారికి తెలుసు. Nginx నిర్మాణాత్మక పద్ధతిలో అభ్యర్థనలను ప్రాసెస్ చేస్తుంది. నేను దీని గురించి కొంచెం తరువాత మాట్లాడుతాను. సంక్షిప్తంగా, ఇది అభ్యర్థనను ఆమోదించినప్పుడు, దాన్ని ప్రాసెస్ చేసినప్పుడు మరియు వినియోగదారుకు కంటెంట్‌ను అందించినప్పుడు దానికి ఒక దశ ఉంటుంది.

Nginx బాగుంది, కానీ ఒక సమస్య ఉంది: ఏది కాన్ఫిగర్ చేయగలిగినప్పటికీ, అబ్బాయిలు కాన్ఫిగర్‌లో కిక్కిరిసిన అన్ని అద్భుతమైన ఫీచర్‌లతో కూడా ఇది తగినంత అనువైనది కాదు. ఈ శక్తి చాలదు. అందుకే టావోబావో నుండి వచ్చిన కుర్రాళ్ళు, చాలా కాలం క్రితం, ఎనిమిది సంవత్సరాల క్రితం, లువాను దానిలో నిర్మించినట్లు తెలుస్తోంది. అది ఏమి ఇస్తుంది?

  • పరిమాణం. ఇది చిన్నది. LuaJIT దాదాపు 100-200 కిలోబైట్ల మెమరీ ఓవర్‌హెడ్ మరియు కనిష్ట పనితీరు ఓవర్‌హెడ్‌ను అందిస్తుంది.
  • వేగం. LuaJIT ఇంటర్‌ప్రెటర్ అనేక సందర్భాల్లో C కి దగ్గరగా ఉంటుంది, కొన్ని సందర్భాల్లో అది జావాకు కోల్పోతుంది, మరికొన్నింటిలో అది దానిని అధిగమిస్తుంది. కొంత కాలం వరకు ఇది స్టేట్ ఆఫ్ ఆర్ట్, చక్కని JIT కంపైలర్‌గా పరిగణించబడింది. ఇప్పుడు చల్లటివి ఉన్నాయి, కానీ అవి చాలా భారీగా ఉంటాయి, ఉదాహరణకు, అదే V8. కొన్ని JS వ్యాఖ్యాతలు మరియు జావా హాట్‌స్పాట్ కొన్ని పాయింట్‌లలో వేగంగా ఉంటాయి, కానీ కొన్ని చోట్ల అవి ఇప్పటికీ కోల్పోతాయి.
  • నేర్చుకోవడం సులభం. మీరు పెర్ల్ కోడ్ బేస్ కలిగి ఉంటే మరియు మీరు బుకింగ్ చేయకపోతే, మీరు పెర్ల్ ప్రోగ్రామర్‌లను కనుగొనలేరు. వారు ఉనికిలో లేనందున, వారందరూ తీసివేయబడ్డారు మరియు వారికి బోధించడం చాలా కాలం మరియు కష్టం. మీరు వేరే వాటి కోసం ప్రోగ్రామర్‌లను కోరుకుంటే, మీరు వారికి మళ్లీ శిక్షణ ఇవ్వవలసి ఉంటుంది లేదా వారిని కనుగొనవలసి ఉంటుంది. లువా విషయంలో, ప్రతిదీ చాలా సులభం. ఏ జూనియర్ అయినా మూడు రోజుల్లో లూవా నేర్చుకోవచ్చు. దాన్ని గుర్తించడానికి నాకు రెండు గంటల సమయం పట్టింది. రెండు గంటల తర్వాత నేను ఇప్పటికే ఉత్పత్తిలో కోడ్ వ్రాస్తున్నాను. దాదాపు వారం తర్వాత నేరుగా ప్రొడక్షన్ కు వెళ్లి వెళ్లిపోయాడు.

ఫలితంగా, ఇది ఇలా కనిపిస్తుంది:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

ఇక్కడ చాలా ఉన్నాయి. OpenResty మాడ్యూల్‌ల సమూహాన్ని సేకరించింది, అవి luash మరియు ఇంజిన్ రెండూ. మరియు మీకు ప్రతిదీ సిద్ధంగా ఉంది - మోహరించి మరియు పని చేస్తోంది.

ఉదాహరణలు

తగినంత సాహిత్యం, కోడ్‌కి వెళ్దాం. ఇక్కడ కొద్దిగా హలో వరల్డ్:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

అక్కడ ఏముంది? ఇది ఇంజిన్ల స్థానం. మేము చింతించము, మేము మా స్వంత రౌటింగ్ వ్రాయము, మేము కొన్ని రెడీమేడ్ తీసుకోము - మేము ఇప్పటికే NGINXలో కలిగి ఉన్నాము, మేము మంచి మరియు సోమరితనంతో జీవిస్తున్నాము.

content_by_lua_block మేము Lua స్క్రిప్ట్‌ని ఉపయోగించి కంటెంట్‌ను అందిస్తున్నామని చెప్పే బ్లాక్. మేము ఇంజిన్స్ వేరియబుల్ తీసుకుంటాము 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 చదవాలనుకోలేదు. మేము ఫ్రంట్ ఎండ్ డెవలపర్‌లను ఆకర్షించాలి. కొన్నిసార్లు మనం మొదట దీన్ని చేయకూడదనుకుంటాము. మరియు SEO నిపుణులు మేము చిత్రాల కోసం చూస్తున్నట్లయితే, అది వారికి పట్టింపు లేదని చెబుతారు. మరియు మేము వారికి కొంత కంటెంట్ ఇస్తే, మా శోధన ఇంజిన్‌లు దేనినీ సూచిక చేయవని వారు చెబుతారు.

దానికి ఏం చేయాలి? వాస్తవానికి, మేము వినియోగదారుకు HTML ఇస్తాము. చేతితో ఉత్పత్తి చేయడం ఖాయం కాదు, కాబట్టి మేము టెంప్లేట్‌లను ఉపయోగించాలనుకుంటున్నాము. దీని కోసం ఒక లైబ్రరీ ఉంది lua-resty-template.

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

మీరు బహుశా OPM అనే మూడు భయానక అక్షరాలను చూసి ఉండవచ్చు. OpenResty దాని స్వంత ప్యాకేజీ మేనేజర్‌తో వస్తుంది, దీని ద్వారా మీరు వివిధ మాడ్యూళ్ల సమూహాన్ని ఇన్‌స్టాల్ చేయవచ్చు, ప్రత్యేకించి, lua-resty-template. ఇది జంగో టెంప్లేట్‌ల మాదిరిగానే ఒక సాధారణ టెంప్లేట్ ఇంజిన్. అక్కడ మీరు కోడ్ వ్రాయవచ్చు మరియు వేరియబుల్ ప్రత్యామ్నాయం చేయవచ్చు.

ఫలితంగా, ప్రతిదీ ఇలా కనిపిస్తుంది:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

మేము డేటాను తీసుకొని, టెంప్లేట్‌ను మళ్లీ రెండు పంక్తులలో రెండర్ చేసాము. వినియోగదారు సంతోషంగా ఉన్నాడు, అతను పిల్లులను అందుకున్నాడు. మేము అభ్యర్థనను విస్తరించినందున, అతను పిల్లుల కోసం బొచ్చు ముద్రను కూడా అందుకున్నాడు. మీకు ఎప్పటికీ తెలియదు, బహుశా అతను ఖచ్చితంగా దీని కోసం వెతుకుతున్నాడు, కానీ అతని అభ్యర్థనను సరిగ్గా రూపొందించలేకపోయాడు.

అంతా బాగుంది, కానీ మేము అభివృద్ధిలో ఉన్నాము మరియు దీన్ని వినియోగదారులకు ఇంకా చూపకూడదనుకుంటున్నాము. ఆథరైజేషన్ చేద్దాం. దీన్ని చేయడానికి, OpenResty నిబంధనలలో NGINX అభ్యర్థనను ఎలా నిర్వహిస్తుందో చూద్దాం:

  • మొదటి దశ - యాక్సెస్, వినియోగదారు ఇప్పుడే వచ్చినప్పుడు మరియు మేము అతనిని హెడర్‌ల ద్వారా, IP చిరునామా ద్వారా మరియు ఇతర డేటా ద్వారా చూసాము. మనకు నచ్చకపోతే వెంటనే కత్తిరించుకోవచ్చు. ఇది ప్రామాణీకరణ కోసం ఉపయోగించబడుతుంది లేదా మేము చాలా అభ్యర్థనలను స్వీకరిస్తే, ఈ దశలో వాటిని సులభంగా కత్తిరించవచ్చు.
  • రాయాలని. మేము కొంత అభ్యర్థన డేటాను తిరిగి వ్రాస్తాము.
  • కంటెంట్. మేము వినియోగదారుకు కంటెంట్‌ను అందజేస్తాము.
  • శీర్షికల ఫిల్టర్. మేము ప్రతిస్పందన శీర్షికలను భర్తీ చేస్తాము. మేము ఉపయోగించినట్లయితే proxy_pass, వినియోగదారుకు ఇవ్వడానికి ముందు మనం కొన్ని శీర్షికలను తిరిగి వ్రాయవచ్చు.
  • శరీర వడపోత. మనం శరీరాన్ని మార్చుకోవచ్చు.
  • లాగిన్ - లాగింగ్. మీరు అదనపు లేయర్ లేకుండా సాగే శోధనలో లాగ్‌లను వ్రాయవచ్చు.

మా అధికారీకరణ ఇలా కనిపిస్తుంది:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

మేము దానిని దానికి జోడిస్తాము location, మేము ఇంతకు ముందు వివరించాము మరియు క్రింది కోడ్‌ను అక్కడ ఉంచాము:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

మా వద్ద కుక్కీ టోకెన్ ఉందా లేదా అని మేము చూస్తాము. లేకపోతే, మేము అధికారం కోసం అడుగుతాము. వినియోగదారులు మోసపూరితంగా ఉంటారు మరియు వారు కుక్కీ టోకెన్‌ను సెట్ చేయవలసి ఉంటుందని ఊహించగలరు. కాబట్టి, మేము దీన్ని Redisలో కూడా ఉంచుతాము:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

Redisతో పని చేయడానికి కోడ్ చాలా సులభం మరియు ఇతర భాషలకు భిన్నంగా లేదు. అదే సమయంలో, అన్ని ఇన్‌పుట్/అవుట్‌పుట్, ఇక్కడ మరియు అక్కడ నిరోధించబడదు. మీరు సింక్రోనస్ కోడ్ వ్రాస్తే, అది అసమకాలికంగా పని చేస్తుంది. దాదాపు గెవెంట్ లాగా ఉంది, కానీ బాగా చేసారు.

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

అధికారాన్ని స్వయంగా చేద్దాం:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

మేము అభ్యర్థన యొక్క బాడీని చదవాల్సిన అవసరం ఉందని మేము చెబుతున్నాము. మేము POST ఆర్గ్యుమెంట్‌లను స్వీకరిస్తాము మరియు లాగిన్ మరియు పాస్‌వర్డ్ సరైనదేనా అని తనిఖీ చేస్తాము. అవి తప్పుగా ఉన్నట్లయితే, అధికారం కోసం మేము మిమ్మల్ని సవాలు చేస్తాము. మరియు సరైనది అయితే, టోకెన్‌ను Redisలో వ్రాయండి:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

కుక్కీని సెట్ చేయడం మర్చిపోవద్దు, ఇది రెండు పంక్తులలో కూడా చేయబడుతుంది:

OpenResty: NGINXని పూర్తిస్థాయి అప్లికేషన్ సర్వర్‌గా మారుస్తోంది

ఉదాహరణ సరళమైనది మరియు ఊహాజనితమైనది. అయితే, మేము ప్రజలకు పిల్లులను చూపించే సేవను చేయము. కానీ మనకెవరు తెలుసు. కాబట్టి ఉత్పత్తిలో ఏమి చేయవచ్చో చూద్దాం.

  • మినిమలిస్టిక్ బ్యాకెండ్. కొన్నిసార్లు మేము బ్యాకెండ్‌కి కొంచెం డేటాను అవుట్‌పుట్ చేయాలి: ఎక్కడో మనం తేదీని ఇన్సర్ట్ చేయాలి, ఎక్కడో మనం జాబితాను ప్రదర్శించాలి, ఇప్పుడు సైట్‌లో ఎంత మంది వినియోగదారులు ఉన్నారో చెప్పండి, కౌంటర్ లేదా గణాంకాలను అటాచ్ చేయాలి. ఏదో చాలా చిన్నది. కొన్ని చిన్న ముక్కలను చాలా సులభంగా తయారు చేయవచ్చు. ఇది త్వరగా, సులభంగా మరియు గొప్పగా చేస్తుంది.
  • డేటా ప్రిప్రాసెసింగ్. కొన్నిసార్లు మేము మా పేజీలో ప్రకటనలను పొందుపరచాలనుకుంటున్నాము మరియు API అభ్యర్థనలను ఉపయోగించి మేము ఈ ప్రకటనలను స్వీకరిస్తాము. ఇది ఇక్కడ చేయడం చాలా సులభం. ఇప్పటికే కూర్చుని కష్టపడి పనిచేస్తున్న మా బ్యాకెండ్‌ని మేము లోడ్ చేయము. మీరు దాన్ని ఎంచుకొని ఇక్కడ సేకరించవచ్చు. మేము కొన్ని JSలను కలపవచ్చు లేదా దానికి విరుద్ధంగా, దానిని విడదీయవచ్చు మరియు వినియోగదారుకు అందించడానికి ముందు ఏదైనా ప్రిప్రాసెస్ చేయవచ్చు.
  • మైక్రోసర్వీస్ కోసం ముఖభాగం. ఇది కూడా చాలా మంచి కేసు, నేను దానిని అమలు చేసాను. దీనికి ముందు, నేను ఎలక్ట్రానిక్ రిపోర్టింగ్‌తో వ్యవహరించే మరియు దేశంలోని దాదాపు సగం చట్టపరమైన సంస్థలకు రిపోర్టింగ్‌ను అందించే Tenzor అనే కంపెనీలో పనిచేశాను. మేము ఒక సేవను సృష్టించాము, అదే మెకానిజంను ఉపయోగించి అక్కడ చాలా పనులు జరిగాయి: రూటింగ్, అధికారీకరణ మరియు మరిన్ని.
    ఓపెన్‌రెస్టీని మీ మైక్రోసర్వీస్‌ల కోసం జిగురుగా ఉపయోగించవచ్చు, అన్నింటికీ ఒకే యాక్సెస్ మరియు ఒకే ఇంటర్‌ఫేస్‌ను అందిస్తుంది. మైక్రోసర్వీస్‌లను మీరు ఇక్కడ Node.js, ఇక్కడ PHP, ఇక్కడ పైథాన్, ఇక్కడ కొన్ని ఎర్లాంగ్ థింగ్ ఉన్న విధంగా వ్రాయవచ్చు కాబట్టి, మేము ప్రతిచోటా ఒకే కోడ్‌ను తిరిగి వ్రాయకూడదని మేము అర్థం చేసుకున్నాము. అందువలన, OpenResty ముందు భాగంలోకి ప్లగ్ చేయవచ్చు.

  • గణాంకాలు మరియు విశ్లేషణలు. సాధారణంగా NGINX ప్రవేశ ద్వారం వద్ద ఉంటుంది మరియు అన్ని అభ్యర్థనలు దాని ద్వారా వెళ్తాయి. ఈ స్థలంలో సేకరించడం చాలా సౌకర్యంగా ఉంటుంది. మీరు వెంటనే ఏదైనా లెక్కించవచ్చు మరియు దానిని ఎక్కడైనా అప్‌లోడ్ చేయవచ్చు, ఉదాహరణకు, సాగే శోధన, లాగ్‌స్టాష్ లేదా దానిని లాగ్‌కు వ్రాసి, ఆపై ఎక్కడికైనా పంపవచ్చు.
  • బహుళ-వినియోగదారు వ్యవస్థలు. ఉదాహరణకు, ఆన్‌లైన్ గేమ్‌లను తయారు చేయడం కూడా చాలా మంచిది. ఈ రోజు కేప్ టౌన్‌లో, అలెగ్జాండర్ గ్లాడిష్ ఓపెన్‌రెస్టీని ఉపయోగించి మల్టీప్లేయర్ గేమ్‌ను త్వరగా ప్రోటోటైప్ చేయడం గురించి మాట్లాడతారు.
  • అభ్యర్థన వడపోత (WAF). ఈ రోజుల్లో అన్ని రకాల వెబ్ అప్లికేషన్ ఫైర్‌వాల్‌లను తయారు చేయడం ఫ్యాషన్; వాటిని అందించే అనేక సేవలు ఉన్నాయి. OpenRestyని ఉపయోగించి, మీరు మీ అవసరాలకు అనుగుణంగా అభ్యర్థనలను సులభంగా మరియు సులభంగా ఫిల్టర్ చేసే వెబ్ అప్లికేషన్ ఫైర్‌వాల్‌గా మీరే చేసుకోవచ్చు. మీరు పైథాన్‌ని కలిగి ఉన్నట్లయితే, PHP ఖచ్చితంగా మీలోకి ఇంజెక్ట్ చేయబడదని మీరు అర్థం చేసుకుంటారు, అయితే, మీరు దానిని కన్సోల్ నుండి ఎక్కడైనా పుట్టిస్తే తప్ప. మీకు MySQL మరియు పైథాన్ ఉన్నాయని మీకు తెలుసు. బహుశా, వారు ఏదో ఒక రకమైన డైరెక్టరీ ట్రావర్సల్ చేయడానికి ప్రయత్నించవచ్చు మరియు డేటాబేస్‌లోకి ఏదైనా ఇంజెక్ట్ చేయవచ్చు. అందువల్ల, మీరు ముందు భాగంలోనే విచిత్రమైన ప్రశ్నలను త్వరగా మరియు చౌకగా ఫిల్టర్ చేయవచ్చు.
  • సంఘం. OpenResty NGINXలో నిర్మించబడినందున, దీనికి బోనస్ ఉంది - ఇది NGINX సంఘం. ఇది చాలా పెద్దది మరియు మీరు మొదట ఎదుర్కొనే ప్రశ్నలలో మంచి భాగం ఇప్పటికే NGINX సంఘం ద్వారా పరిష్కరించబడింది.

    లువా డెవలపర్లు. నిన్న నేను హైలోడ్++ శిక్షణా రోజుకు వచ్చిన అబ్బాయిలతో మాట్లాడాను మరియు లువాలో టరాన్టూల్ మాత్రమే వ్రాయబడిందని విన్నాను. ఇది నిజం కాదు, లువాలో చాలా విషయాలు వ్రాయబడ్డాయి. ఉదాహరణలు: OpenResty, Prosody XMPP సర్వర్, Love2D గేమ్ ఇంజిన్, వార్క్రాఫ్ట్ మరియు ఇతర చోట్ల లువా స్క్రిప్ట్ చేయబడింది. లువా డెవలపర్‌లు చాలా మంది ఉన్నారు, వారికి పెద్ద మరియు ప్రతిస్పందించే సంఘం ఉంది. నా లువా ప్రశ్నలన్నీ కొన్ని గంటల్లోనే పరిష్కరించబడ్డాయి. మీరు మెయిలింగ్ జాబితాకు వ్రాసినప్పుడు, అక్షరాలా కొన్ని నిమిషాల్లో ఇప్పటికే కొన్ని ప్రతిస్పందనలు ఉన్నాయి, ఏమి మరియు ఎలా, ఏది ఏమిటో వివరిస్తాయి. ఇది చాలా బాగుంది. దురదృష్టవశాత్తు, అటువంటి రకమైన, ఆధ్యాత్మిక సంఘం ప్రతిచోటా లేదు.
    OpenResty కోసం GitHub ఉంది, ఇక్కడ మీరు ఏదైనా విచ్ఛిన్నమైతే సమస్యను తెరవవచ్చు. Google గుంపులలో మెయిలింగ్ జాబితా ఉంది, ఇక్కడ మీరు సాధారణ సమస్యలను చర్చించవచ్చు, చైనీస్‌లో మెయిలింగ్ జాబితా ఉంది - మీకు ఎప్పటికీ తెలియదు, బహుశా మీకు ఇంగ్లీష్ రాకపోవచ్చు, కానీ మీకు చైనీస్ తెలుసు.

ఫలితాలు

  • OpenResty అనేది వెబ్ కోసం రూపొందించబడిన చాలా అనుకూలమైన ఫ్రేమ్‌వర్క్ అని నేను తెలియజేయగలిగానని ఆశిస్తున్నాను.
  • ఇది ప్రవేశానికి తక్కువ అవరోధాన్ని కలిగి ఉంది, ఎందుకంటే కోడ్ మనం వ్రాసే దానితో సమానంగా ఉంటుంది, భాష చాలా సరళంగా మరియు మినిమలిస్టిక్‌గా ఉంటుంది.
  • ఇది కాల్‌బ్యాక్‌లు లేకుండా అసమకాలిక I/Oని అందిస్తుంది, మేము కొన్నిసార్లు NodeJSలో వ్రాయగలిగేలా మనకు నూడుల్స్ ఏవీ ఉండవు.
  • మాకు అవసరమైన మాడ్యూల్ మరియు మా కోడ్‌తో మాత్రమే NGINX అవసరం మరియు ప్రతిదీ వెంటనే పని చేస్తుంది కాబట్టి ఇది సులభమైన విస్తరణను కలిగి ఉంది.
  • పెద్ద మరియు ప్రతిస్పందించే సంఘం.

రూటింగ్ ఎలా జరుగుతుందో నేను వివరంగా చెప్పలేదు, ఇది చాలా పెద్ద కథగా మారింది.

Спасибо!


వ్లాదిమిర్ ప్రోటాసోవ్ - ఓపెన్‌రెస్టీ: NGINXని పూర్తి స్థాయి అప్లికేషన్ సర్వర్‌గా మార్చడం

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి