OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறதுமாநாட்டு அறிக்கையின் பிரதியை மீண்டும் வெளியிடுகிறோம் ஹைலோட்++ 2016, இது கடந்த ஆண்டு நவம்பர் 7-8 தேதிகளில் மாஸ்கோவிற்கு அருகிலுள்ள ஸ்கோல்கோவோவில் நடந்தது. விளாடிமிர் புரோட்டாசோவ் OpenResty மற்றும் Lua உடன் NGINX செயல்பாட்டை எவ்வாறு விரிவாக்குவது என்பதை விளக்குகிறது.

அனைவருக்கும் வணக்கம், என் பெயர் விளாடிமிர் புரோட்டாசோவ், நான் பேரலல்ஸில் வேலை செய்கிறேன். என்னைப் பற்றி கொஞ்சம் சொல்கிறேன். என் வாழ்நாளில் முக்கால்வாசியை குறியீடு எழுதவே செலவிடுகிறேன். நான் நேரடி அர்த்தத்தில் ஒரு புரோகிராமர் ஆனேன்: சில நேரங்களில் நான் என் கனவுகளில் குறியீட்டைப் பார்க்கிறேன். வாழ்க்கையின் கால் பகுதி தொழில்துறை வளர்ச்சியாகும், இது நேரடியாக உற்பத்திக்கு செல்கிறது. உங்களில் சிலர் பயன்படுத்தும் ஆனால் உணராத குறியீடு.

அது எவ்வளவு மோசமானது என்பதை நீங்கள் புரிந்துகொள்கிறீர்கள். நான் கொஞ்சம் ஜூனியராக இருந்தபோது, ​​எனக்கு இந்த இரண்டு டெராபைட் தரவுத்தளங்கள் கொடுக்கப்பட்டன. இப்போது இங்குள்ள அனைவருக்கும் அதிக சுமை. நான் மாநாடுகளுக்குச் சென்று கேட்டேன்: “நண்பர்களே, சொல்லுங்கள், உங்களிடம் பெரிய தரவு உள்ளது, எல்லாம் நன்றாக இருக்கிறதா? உங்களிடம் எத்தனை அடிப்படைகள் உள்ளன? அவர்கள் எனக்கு பதிலளித்தனர்: "எங்களிடம் 100 ஜிகாபைட்கள் உள்ளன!" நான் சொன்னேன்: "கூல், 100 ஜிகாபைட்!" மேலும் எனது போக்கர் முகத்தை எப்படி கவனமாக பராமரிப்பது என்று எனக்குள் நினைத்துக் கொண்டிருந்தேன். நீங்கள் நினைக்கிறீர்கள், ஆம், தோழர்களே நன்றாக இருக்கிறார்கள், பின்னர் நீங்கள் திரும்பிச் சென்று இந்த மல்டி-டெராபைட் தரவுத்தளங்களுடன் டிங்கர் செய்கிறீர்கள். மேலும் இது ஒரு ஜூனியர். இது என்ன அடி என்று உங்களால் கற்பனை செய்ய முடிகிறதா?

எனக்கு 20க்கும் மேற்பட்ட நிரலாக்க மொழிகள் தெரியும். இது நான் வேலை செய்யும் போது நான் கண்டுபிடிக்க வேண்டிய ஒன்று. அவர்கள் உங்களுக்கு எர்லாங், சி, சி++, லுவா, பைதான், ரூபி போன்றவற்றில் குறியீட்டைக் கொடுக்கிறார்கள், நீங்கள் அனைத்தையும் வெட்ட வேண்டும். பொதுவாக, நான் செய்ய வேண்டியிருந்தது. சரியான எண்ணைக் கணக்கிட முடியவில்லை, ஆனால் 20 ஆம் தேதி எங்கோ எண் தொலைந்து போனது.

பேரலல்ஸ் என்றால் என்ன, நாம் என்ன செய்கிறோம் என்பது அனைவருக்கும் தெரியும் என்பதால், நாங்கள் எவ்வளவு குளிர்ச்சியாக இருக்கிறோம், என்ன செய்கிறோம் என்பதைப் பற்றி நான் பேசமாட்டேன். எங்களிடம் உலகம் முழுவதும் 13 அலுவலகங்கள் உள்ளன, 300 க்கும் மேற்பட்ட ஊழியர்கள், மாஸ்கோ, தாலின் மற்றும் மால்டாவில் மேம்பாடு இருப்பதை நான் உங்களுக்குச் சொல்கிறேன். நீங்கள் விரும்பினால், குளிர்காலத்தில் குளிர்ச்சியாக இருந்தால், நீங்கள் அதை எடுத்து மால்டாவுக்குச் செல்லலாம் மற்றும் உங்கள் முதுகில் சூடாக வேண்டும்.

குறிப்பாக, எங்கள் துறை பைதான் 2 இல் எழுதுகிறது. நாங்கள் வணிகத்தில் இருக்கிறோம் மற்றும் நாகரீகமான தொழில்நுட்பங்களை செயல்படுத்த நேரமில்லை, அதனால் நாங்கள் பாதிக்கப்படுகிறோம். ஜாங்கோவில் எல்லாமே உள்ளதால் அதைப் பயன்படுத்துகிறோம், தேவையில்லாததை எடுத்து எறிந்தோம். மேலும் MySQL, Redis மற்றும் NGINX. எங்களிடம் இன்னும் பல அருமையான விஷயங்கள் உள்ளன. எங்களிடம் மோங்கோடிபி உள்ளது, எங்களிடம் முயல்கள் ஓடுகின்றன, எங்களிடம் அனைத்தும் உள்ளன - ஆனால் அது என்னுடையது அல்ல, நான் அதைச் செய்யவில்லை.

ஓபன்ரெஸ்டி

நான் என்னைப் பற்றி சொன்னேன். இன்று நான் எதைப் பற்றி பேசப் போகிறேன் என்பதைக் கண்டுபிடிப்போம்:

  • OpenResty என்றால் என்ன, அது எதனுடன் உண்ணப்படுகிறது?
  • Python, NodeJS, PHP, Go மற்றும் அனைவரும் மகிழ்ச்சியாக இருக்கும் மற்ற விஷயங்களைக் கொண்டிருக்கும் போது மற்றொரு சக்கரத்தை ஏன் மீண்டும் கண்டுபிடிக்க வேண்டும்?
  • மற்றும் வாழ்க்கையிலிருந்து சில எடுத்துக்காட்டுகள். எனக்கு 3,5 மணிநேரம் எடுத்ததால், அறிக்கையை நிறைய குறைக்க வேண்டியிருந்தது, எனவே சில எடுத்துக்காட்டுகள் இருக்கும்.

OpenResty என்பது NGINX. அவருக்கு நன்றி, எங்களிடம் ஒரு முழு அளவிலான வலை சேவையகம் உள்ளது, அது நன்றாக எழுதப்பட்டு விரைவாக வேலை செய்கிறது. நம்மில் பெரும்பாலோர் தயாரிப்பில் NGINX ஐப் பயன்படுத்துகிறோம் என்று நினைக்கிறேன். அவர் வேகமாகவும் கூலாகவும் இருக்கிறார் என்பது உங்கள் அனைவருக்கும் தெரியும். அவர்கள் அதில் கூல் சின்க்ரோனஸ் I/O ஐ உருவாக்கினர், எனவே அவர்கள் பைத்தானில் செய்ததைப் போல நாங்கள் எதையும் சுழற்சி செய்ய வேண்டியதில்லை. ஜெவென்ட் அருமையாக உள்ளது, அருமையாக உள்ளது, ஆனால் நீங்கள் சி குறியீட்டை எழுதி ஏதேனும் தவறு நடந்தால், ஜெவென்ட் மூலம் பிழைத்திருத்துவதில் நீங்கள் பைத்தியம் பிடிப்பீர்கள். எனக்கு ஒரு அனுபவம் இருந்தது: அங்கு என்ன தவறு நடந்தது என்பதைக் கண்டுபிடிக்க இரண்டு நாட்கள் ஆனது. யாராவது பல வாரங்களாக தோண்டி, சிக்கலைக் கண்டுபிடித்து, இணையத்தில் எழுதியிருந்தால், கூகிள் அதைக் கண்டுபிடிக்கவில்லை என்றால், நாங்கள் முற்றிலும் பைத்தியம் பிடித்திருப்போம்.

NGINX ஏற்கனவே கேச்சிங் மற்றும் நிலையான உள்ளடக்கத்தை செய்துள்ளது. இதை மனிதாபிமான முறையில் எப்படிச் செய்வது என்று நீங்கள் கவலைப்படத் தேவையில்லை, இதனால் நீங்கள் எங்காவது மெதுவாகச் செல்லாதீர்கள், அதனால் எங்காவது விளக்கங்களை இழக்காதீர்கள். Nginx வரிசைப்படுத்த மிகவும் வசதியானது, எதை எடுக்க வேண்டும் என்று நீங்கள் சிந்திக்க வேண்டியதில்லை - WSGI, PHP-FPM, Gunicorn, Unicorn. Nginx நிறுவப்பட்டது, நிர்வாகிகளுக்கு வழங்கப்பட்டது, அதனுடன் எவ்வாறு செயல்படுவது என்பது அவர்களுக்குத் தெரியும். Nginx கோரிக்கைகளை கட்டமைக்கப்பட்ட முறையில் செயலாக்குகிறது. இதைப் பற்றி சிறிது நேரம் கழித்து பேசுகிறேன். சுருக்கமாக, அது கோரிக்கையை ஏற்றுக்கொண்டபோது, ​​​​அதைச் செயலாக்கியபோது மற்றும் பயனருக்கு உள்ளடக்கத்தை வழங்கும் போது இது ஒரு கட்டத்தைக் கொண்டுள்ளது.

Nginx அருமையாக உள்ளது, ஆனால் ஒரு சிக்கல் உள்ளது: இது போதுமான அளவு நெகிழ்வானதாக இல்லை, என்ன உள்ளமைக்க முடியும் என்ற போதிலும், தோழர்கள் உள்ளமைவில் நெரிசலான அனைத்து சிறந்த அம்சங்களுடனும் கூட. இந்த சக்தி போதாது. அதனால்தான் தாவோபாவோவைச் சேர்ந்த தோழர்கள், நீண்ட காலத்திற்கு முன்பு, எட்டு ஆண்டுகளுக்கு முன்பு, லுவாவை அதில் கட்டினார்கள். அது என்ன தருகிறது?

  • அளவு. இது சிறியது. LuaJIT 100-200 கிலோபைட் நினைவக மேல்நிலை மற்றும் குறைந்த செயல்திறன் மேல்நிலை வழங்குகிறது.
  • வேகம். LuaJIT மொழிபெயர்ப்பான் பல சூழ்நிலைகளில் C க்கு அருகில் உள்ளது, சில சூழ்நிலைகளில் அது ஜாவாவிடம் இழக்கிறது, மற்றவற்றில் அது சிறப்பாக செயல்படுகிறது. சில காலம் இது கலை நிலை, சிறந்த JIT தொகுப்பியாகக் கருதப்பட்டது. இப்போது குளிர்ச்சியானவை உள்ளன, ஆனால் அவை மிகவும் கனமானவை, எடுத்துக்காட்டாக, அதே V8. சில JS மொழிபெயர்ப்பாளர்களும் ஜாவா ஹாட்ஸ்பாட்களும் சில இடங்களில் வேகமானவை, ஆனால் சில இடங்களில் அவை இன்னும் இழக்கின்றன.
  • கற்றுக்கொள்வது எளிது. உங்களிடம் பெர்ல் குறியீடு அடிப்படை இருந்தால், நீங்கள் முன்பதிவு செய்யவில்லை என்றால், நீங்கள் பெர்ல் புரோகிராமர்களைக் கண்டுபிடிக்க முடியாது. அவர்கள் இல்லாததால், அவர்கள் அனைவரும் எடுத்துச் செல்லப்பட்டனர், மேலும் அவர்களுக்கு கற்பிப்பது நீண்ட மற்றும் கடினமானது. வேறு ஏதாவது புரோகிராமர்களை நீங்கள் விரும்பினால், நீங்கள் அவர்களுக்கு மீண்டும் பயிற்சியளிக்க வேண்டும் அல்லது அவர்களைக் கண்டுபிடிக்க வேண்டும். லுவாவைப் பொறுத்தவரை, எல்லாம் எளிது. எந்த ஜூனியரும் மூன்று நாட்களில் லுவாவைக் கற்றுக் கொள்ளலாம். அதைக் கண்டுபிடிக்க எனக்கு இரண்டு மணி நேரம் பிடித்தது. இரண்டு மணி நேரம் கழித்து நான் ஏற்கனவே தயாரிப்பில் குறியீட்டை எழுதிக் கொண்டிருந்தேன். சுமார் ஒரு வாரம் கழித்து, அவர் நேரடியாக தயாரிப்புக்கு சென்று விட்டுவிட்டார்.

இதன் விளைவாக, இது போல் தெரிகிறது:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

இங்கே நிறைய இருக்கிறது. ஓபன்ரெஸ்டி லூஷ் மற்றும் எஞ்சின் ஆகிய இரண்டு தொகுதிகளையும் சேகரித்துள்ளது. நீங்கள் எல்லாவற்றையும் தயாராக வைத்திருக்கிறீர்கள் - வரிசைப்படுத்தப்பட்டு வேலை செய்கிறீர்கள்.

உதாரணங்கள்

பாடல் வரிகள் போதும், குறியீட்டிற்கு செல்வோம். இங்கே ஒரு சிறிய ஹலோ வேர்ல்ட்:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

என்ன இருக்கிறது? இது ஒரு எஞ்சின் இருப்பிடம். நாங்கள் கவலைப்பட வேண்டாம், நாங்கள் எங்கள் சொந்த ரூட்டிங் எழுதுவதில்லை, நாங்கள் சில ஆயத்தமான ஒன்றை எடுக்க மாட்டோம் - எங்களிடம் ஏற்கனவே NGINX இல் உள்ளது, நாங்கள் நல்ல மற்றும் சோம்பேறி வாழ்க்கை வாழ்கிறோம்.

content_by_lua_block லுவா ஸ்கிரிப்டைப் பயன்படுத்தி உள்ளடக்கத்தை வழங்குகிறோம் என்று கூறும் தொகுதி. நாம் Engins மாறியை எடுத்துக்கொள்கிறோம் 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 ஐ வழங்குவோம். கையால் உருவாக்குவது comme il faut அல்ல, எனவே நாங்கள் டெம்ப்ளேட்களைப் பயன்படுத்த விரும்புகிறோம். இதற்கான நூலகம் உள்ளது lua-resty-template.

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

OPM என்ற மூன்று பயங்கரமான எழுத்துக்களை நீங்கள் பார்த்திருக்கலாம். OpenResty அதன் சொந்த தொகுப்பு மேலாளருடன் வருகிறது, இதன் மூலம் நீங்கள் பல்வேறு தொகுதிகளை நிறுவலாம், குறிப்பாக, lua-resty-template. இது ஜாங்கோ டெம்ப்ளேட்களைப் போலவே எளிமையான டெம்ப்ளேட் எஞ்சின். அங்கு நீங்கள் குறியீட்டை எழுதலாம் மற்றும் மாறி மாற்றீடு செய்யலாம்.

இதன் விளைவாக, எல்லாம் இப்படி இருக்கும்:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

நாங்கள் தரவை எடுத்து டெம்ப்ளேட்டை மீண்டும் இரண்டு வரிகளில் வழங்கினோம். பயனர் மகிழ்ச்சியாக இருக்கிறார், அவர் பூனைகளைப் பெற்றார். நாங்கள் கோரிக்கையை விரிவுபடுத்தியதால், அவர் பூனைக்குட்டிகளுக்கான ஃபர் முத்திரையையும் பெற்றார். உங்களுக்குத் தெரியாது, ஒருவேளை அவர் இதைத் தேடிக்கொண்டிருக்கலாம், ஆனால் அவரது கோரிக்கையை சரியாக வடிவமைக்க முடியவில்லை.

எல்லாம் நன்றாக இருக்கிறது, ஆனால் நாங்கள் வளர்ச்சியில் இருக்கிறோம், இன்னும் பயனர்களுக்குக் காட்ட விரும்பவில்லை. அங்கீகாரம் செய்வோம். இதைச் செய்ய, OpenResty விதிமுறைகளில் NGINX கோரிக்கையை எவ்வாறு கையாளுகிறது என்பதைப் பார்ப்போம்:

  • முதல் கட்டம் - அணுகல், பயனர் வந்தவுடன், தலைப்புகள், ஐபி முகவரி மற்றும் பிற தரவு மூலம் அவரைப் பார்த்தோம். பிடிக்கவில்லை என்றால் உடனே துண்டித்து விடலாம். இது அங்கீகாரத்திற்காகப் பயன்படுத்தப்படலாம் அல்லது நிறைய கோரிக்கைகளைப் பெற்றால், இந்தக் கட்டத்தில் அவற்றை எளிதாகத் துண்டிக்கலாம்.
  • மாற்றியமைத்தன. சில கோரிக்கைத் தரவை மீண்டும் எழுதுகிறோம்.
  • உள்ளடக்கம். உள்ளடக்கத்தை பயனருக்கு வழங்குகிறோம்.
  • தலைப்புகள் வடிகட்டி. பதில் தலைப்புகளை மாற்றுகிறோம். நாம் பயன்படுத்தினால் proxy_pass, சில தலைப்புகளை பயனருக்குக் கொடுப்பதற்கு முன் மீண்டும் எழுதலாம்.
  • உடல் வடிகட்டி. நாம் உடலை மாற்ற முடியும்.
  • பதிவு - பதிவு. கூடுதல் அடுக்கு இல்லாமல் மீள் தேடலில் பதிவுகளை எழுதலாம்.

எங்கள் அங்கீகாரம் இப்படி இருக்கும்:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

அதனுடன் இதையும் சேர்ப்போம் location, நாங்கள் முன்பு விவரித்தோம், பின்வரும் குறியீட்டை அங்கு வைத்தோம்:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

எங்களிடம் குக்கீ டோக்கன் இருக்கிறதா என்று பார்க்கிறோம். இல்லை என்றால், நாங்கள் அங்கீகாரம் கேட்கிறோம். பயனர்கள் தந்திரமானவர்கள் மற்றும் அவர்கள் குக்கீ டோக்கனை அமைக்க வேண்டும் என்று யூகிக்க முடியும். எனவே, நாங்கள் அதை ரெடிஸிலும் வைப்போம்:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

Redis உடன் பணிபுரியும் குறியீடு மிகவும் எளிமையானது மற்றும் பிற மொழிகளிலிருந்து வேறுபட்டது அல்ல. அதே நேரத்தில், அனைத்து உள்ளீடு/வெளியீடு, இங்கே மற்றும் அங்கு, தடுக்கவில்லை. நீங்கள் ஒத்திசைவான குறியீட்டை எழுதினால், அது ஒத்திசைவின்றி வேலை செய்கிறது. ஏறக்குறைய கெவென்ட் போல, ஆனால் நன்றாக முடிந்தது.

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

அங்கீகாரத்தை தானே செய்வோம்:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

கோரிக்கையின் உடலைப் படிக்க வேண்டும் என்று நாங்கள் கூறுகிறோம். நாங்கள் POST வாதங்களைப் பெற்று, உள்நுழைவு மற்றும் கடவுச்சொல் சரியாக உள்ளதா எனச் சரிபார்க்கிறோம். அவை தவறாக இருந்தால், அங்கீகாரத்திற்காக உங்களை சவால் விடுகிறோம். சரியாக இருந்தால், டோக்கனை ரெடிஸில் எழுதவும்:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

குக்கீயை அமைக்க மறக்காதீர்கள், இது இரண்டு வரிகளிலும் செய்யப்படுகிறது:

OpenResty: NGINX ஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

உதாரணம் எளிமையானது மற்றும் ஊகமானது. நிச்சயமாக, மக்களுக்கு பூனைகளைக் காட்டும் சேவையை நாங்கள் செய்ய மாட்டோம். ஆனால் எங்களை யாருக்குத் தெரியும். எனவே உற்பத்தியில் என்ன செய்ய முடியும் என்பதைப் பார்ப்போம்.

  • மினிமலிஸ்டிக் பின்தளம். சில நேரங்களில் நாம் பின்தளத்தில் சிறிது தரவுகளை வெளியிட வேண்டும்: எங்காவது ஒரு தேதியைச் செருக வேண்டும், எங்காவது ஒரு பட்டியலைக் காட்ட வேண்டும், இப்போது தளத்தில் எத்தனை பயனர்கள் இருக்கிறார்கள் என்று சொல்லுங்கள், கவுண்டர் அல்லது புள்ளிவிவரங்களை இணைக்கவும். மிகவும் சிறிய ஒன்று. சில குறைந்தபட்ச துண்டுகளை மிக எளிதாக செய்யலாம். இது விரைவாகவும் எளிதாகவும் சிறப்பாகவும் செய்யும்.
  • தரவு முன் செயலாக்கம். சில நேரங்களில் நாங்கள் எங்கள் பக்கத்தில் விளம்பரங்களை உட்பொதிக்க விரும்புகிறோம், மேலும் API கோரிக்கைகளைப் பயன்படுத்தி இந்த விளம்பரத்தைப் பெறுகிறோம். இதை இங்கு செய்வது மிகவும் எளிது. ஏற்கனவே உட்கார்ந்து கடினமாக உழைத்துக்கொண்டிருக்கும் எங்கள் பின்தளத்தை நாங்கள் ஏற்றுவதில்லை. நீங்கள் அதை இங்கே எடுத்து சேகரிக்கலாம். நாம் சில JSகளை ஒன்றாக இணைக்கலாம் அல்லது அதற்கு மாறாக, அதைப் பிரித்து, பயனருக்குக் கொடுப்பதற்கு முன் எதையாவது முன்கூட்டியே செயலாக்கலாம்.
  • மைக்ரோ சர்வீஸிற்கான முகப்பு. இதுவும் ஒரு நல்ல வழக்கு, நான் அதை செயல்படுத்தினேன். அதற்கு முன், நான் Tenzor நிறுவனத்தில் பணிபுரிந்தேன், இது மின்னணு அறிக்கையிடலைக் கையாளும் மற்றும் நாட்டில் உள்ள சட்டப்பூர்வ நிறுவனங்களில் ஏறக்குறைய பாதிக்கு அறிக்கையிடலை வழங்குகிறது. நாங்கள் ஒரு சேவையை உருவாக்கினோம், அதே பொறிமுறையைப் பயன்படுத்தி பல விஷயங்கள் அங்கு செய்யப்பட்டன: ரூட்டிங், அங்கீகாரம் மற்றும் பல.
    OpenResty ஆனது உங்கள் மைக்ரோ சர்வீஸிற்கான பசையாகப் பயன்படுத்தப்படலாம், எல்லாவற்றுக்கும் ஒரே அணுகல் மற்றும் ஒரு இடைமுகத்தை வழங்குகிறது. இங்கு Node.js, இங்கே PHP, இங்கே பைதான், இங்கே சில எர்லாங் விஷயங்கள் என்று மைக்ரோ சர்வீஸ்கள் எழுதப்படலாம் என்பதால், எல்லா இடங்களிலும் ஒரே குறியீட்டை மீண்டும் எழுத விரும்பவில்லை என்பதை நாங்கள் புரிந்துகொள்கிறோம். எனவே, OpenResty ஐ முன்பக்கத்தில் செருகலாம்.

  • புள்ளிவிவரங்கள் மற்றும் பகுப்பாய்வு. வழக்கமாக NGINX நுழைவாயிலில் உள்ளது, மேலும் அனைத்து கோரிக்கைகளும் அதன் வழியாக செல்கின்றன. இந்த இடத்தில்தான் சேகரிக்க மிகவும் வசதியானது. நீங்கள் உடனடியாக எதையாவது கணக்கிட்டு அதை எங்காவது பதிவேற்றலாம், எடுத்துக்காட்டாக, எலாஸ்டிக் தேடல், லாக்ஸ்டாஷ் அல்லது அதை பதிவில் எழுதி எங்காவது அனுப்பலாம்.
  • பல பயனர் அமைப்புகள். உதாரணமாக, ஆன்லைன் கேம்களை உருவாக்குவது மிகவும் நல்லது. இன்று கேப் டவுனில், அலெக்சாண்டர் கிளாடிஷ் ஓபன்ரெஸ்டியைப் பயன்படுத்தி மல்டிபிளேயர் விளையாட்டை எவ்வாறு விரைவாக முன்மாதிரி செய்வது என்பது பற்றி பேசுவார்.
  • கோரிக்கை வடிகட்டுதல் (WAF). இப்போது அனைத்து வகையான வலை பயன்பாட்டு ஃபயர்வால்களையும் உருவாக்குவது நாகரீகமாக உள்ளது, அவற்றை வழங்கும் பல சேவைகள் உள்ளன. OpenResty ஐப் பயன்படுத்தி, உங்கள் தேவைகளுக்கு ஏற்ப கோரிக்கைகளை எளிமையாகவும் எளிதாகவும் வடிகட்டக்கூடிய ஒரு வலை பயன்பாட்டு ஃபயர்வாலை நீங்களே உருவாக்கிக் கொள்ளலாம். உங்களிடம் பைதான் இருந்தால், நீங்கள் கன்சோலில் இருந்து எங்கும் அதை உருவாக்கினால் தவிர, PHP நிச்சயமாக உங்களுக்காக செலுத்தப்படாது என்பதை நீங்கள் புரிந்துகொள்கிறீர்கள். உங்களிடம் MySQL மற்றும் Python இருப்பது உங்களுக்குத் தெரியும். அனேகமாக, அவர்கள் ஒருவித டைரக்டரி டிராவர்சல் செய்து தரவுத்தளத்தில் ஏதாவது புகுத்த முயற்சி செய்யலாம். எனவே, வித்தியாசமான வினவல்களை முன்பக்கத்தில் விரைவாகவும் மலிவாகவும் வடிகட்டலாம்.
  • சமூக. OpenResty ஆனது NGINX இல் கட்டமைக்கப்பட்டுள்ளதால், அதற்கு போனஸ் உள்ளது - இது NGINX சமூகம். இது மிகப் பெரியது, முதலில் உங்களிடம் இருக்கும் கேள்விகளில் ஒரு நல்ல பகுதி ஏற்கனவே NGINX சமூகத்தால் தீர்க்கப்பட்டுள்ளது.

    லுவா டெவலப்பர்கள். நேற்று HighLoad++ பயிற்சி நாளுக்கு வந்த தோழர்களுடன் பேசி Tarantool மட்டும் லுவாவில் எழுதப்பட்டிருப்பதாக கேள்விப்பட்டேன். இது உண்மையல்ல, நிறைய விஷயங்கள் லுவாவில் எழுதப்பட்டுள்ளன. எடுத்துக்காட்டுகள்: OpenResty, Prosody XMPP சர்வர், Love2D கேம் இன்ஜின், வார்கிராஃப்ட் மற்றும் பிற இடங்களில் ஸ்கிரிப்ட் செய்யப்பட்ட Lua. நிறைய லுவா டெவலப்பர்கள் உள்ளனர், அவர்கள் ஒரு பெரிய மற்றும் பதிலளிக்கக்கூடிய சமூகத்தைக் கொண்டுள்ளனர். எனது அனைத்து லுவா கேள்விகளும் சில மணிநேரங்களில் தீர்க்கப்பட்டன. நீங்கள் அஞ்சல் பட்டியலில் எழுதும் போது, ​​ஒரு சில நிமிடங்களில் ஏற்கனவே ஒரு கொத்து பதில்கள் உள்ளன, என்ன, எப்படி, என்ன என்பதை விவரிக்கிறது. அது பெரிய விஷயம். துரதிர்ஷ்டவசமாக, அத்தகைய வகையான, ஆன்மீக சமூகம் எல்லா இடங்களிலும் இல்லை.
    OpenRestyக்கான GitHub உள்ளது, அங்கு ஏதேனும் உடைந்தால் சிக்கலைத் திறக்கலாம். Google குழுக்களில் ஒரு அஞ்சல் பட்டியல் உள்ளது, அங்கு நீங்கள் பொதுவான சிக்கல்களைப் பற்றி விவாதிக்கலாம், சீன மொழியில் அஞ்சல் பட்டியல் உள்ளது - உங்களுக்குத் தெரியாது, ஒருவேளை நீங்கள் ஆங்கிலம் பேசாமல் இருக்கலாம், ஆனால் உங்களுக்கு சீன மொழி தெரியும்.

முடிவுகளை

  • OpenResty என்பது வலைக்கு ஏற்றவாறு மிகவும் வசதியான கட்டமைப்பாகும் என்பதை என்னால் தெரிவிக்க முடிந்தது என்று நம்புகிறேன்.
  • இது நுழைவதற்கு குறைந்த தடையைக் கொண்டுள்ளது, குறியீடு நாம் எழுதுவதைப் போலவே இருப்பதால், மொழி மிகவும் எளிமையானது மற்றும் சிறியது.
  • இது கால்பேக்குகள் இல்லாமல் ஒத்திசைவற்ற I/O ஐ வழங்குகிறது, நாம் சில நேரங்களில் NodeJS இல் எழுதக்கூடிய நூடுல்ஸ் எதுவும் எங்களிடம் இருக்காது.
  • இது எளிதான வரிசைப்படுத்தலைக் கொண்டுள்ளது, ஏனெனில் எங்களுக்கு தேவையான தொகுதி மற்றும் எங்கள் குறியீட்டுடன் NGINX மட்டுமே தேவை, மேலும் அனைத்தும் உடனடியாக செயல்படும்.
  • பெரிய மற்றும் பதிலளிக்கக்கூடிய சமூகம்.

ரூட்டிங் எப்படி செய்யப்படுகிறது என்பதை நான் விரிவாகச் சொல்லவில்லை, அது மிக நீண்ட கதையாக மாறியது.

உங்கள் கவனத்திற்கு நன்றி!


Vladimir Protasov - OpenResty: NGINXஐ முழு அளவிலான பயன்பாட்டு சேவையகமாக மாற்றுகிறது

ஆதாரம்: www.habr.com

கருத்தைச் சேர்