பைதான் மைக்ரோசர்வீசஸ் மூலம் ஒரு சேவை கண்ணியை செயல்படுத்துவது குறித்த உலகளாவிய டெவலப்பர்களுக்கான விரிவான வழிகாட்டி. Istio, Linkerd, பாதுகாப்பு, கண்காணிப்பு மற்றும் ட்ராஃபிக் மேலாண்மை பற்றி அறிக.
பைதான் மைக்ரோசர்வீசஸ்: சர்வீஸ் மெஷ் செயல்பாட்டில் ஒரு ஆழமான டைவ்
சாஃப்ட்வேர் டெவலப்மென்ட் நிலப்பரப்பு மைக்ரோசர்வீசஸ் கட்டமைப்பை நோக்கி அடிப்படையில் மாறிவிட்டது. ஒரு பெரிய அப்ளிகேஷனை சிறிய, தனித்தனியாக பயன்படுத்தக்கூடிய சேவைகளாகப் பிரிப்பது இணையற்ற சுறுசுறுப்பு, அளவிடக்கூடிய தன்மை மற்றும் மீள்திறனை வழங்குகிறது. பைதான், அதன் தெளிவான தொடரியல் மற்றும் ஃபாஸ்ட்பிஐ மற்றும் ஃப்ளாஸ்க் போன்ற சக்திவாய்ந்த கட்டமைப்புகளுடன், இந்த சேவைகளை உருவாக்குவதற்கான ஒரு சிறந்த தேர்வாக மாறியுள்ளது. இருப்பினும், இந்த விநியோகிக்கப்பட்ட உலகம் அதன் சவால்கள் இல்லாமல் இல்லை. சேவைகளின் எண்ணிக்கை அதிகரிக்கும் போது, அவற்றின் தொடர்புகளை நிர்வகிப்பதற்கான சிக்கலும் அதிகரிக்கிறது. இங்குதான் ஒரு சேவை வலை வருகிறது.
இந்த விரிவான வழிகாட்டி பைதான் உடன் பணிபுரியும் மென்பொருள் பொறியாளர்கள், டெவொப்ஸ் நிபுணர்கள் மற்றும் கட்டிடக் கலைஞர்களின் உலகளாவிய பார்வையாளர்களுக்கானது. ஏன் ஒரு சேவை வலை ஒரு 'நல்லதாக இருக்க வேண்டியது' மட்டுமல்ல, பெரிய அளவில் மைக்ரோசர்வீஸ்களை இயக்குவதற்கான ஒரு அத்தியாவசிய அங்கமாகும் என்பதை நாங்கள் ஆராய்வோம். ஒரு சேவை வலை என்றால் என்ன, அது முக்கியமான செயல்பாட்டு சவால்களை எவ்வாறு தீர்க்கிறது, மேலும் பைதான் அடிப்படையிலான மைக்ரோசர்வீசஸ் சூழலில் ஒன்றை செயல்படுத்துவதற்கான ஒரு நடைமுறை பார்வையை நாங்கள் வழங்குவோம்.
பைதான் மைக்ரோசர்வீசஸ் என்றால் என்ன? ஒரு விரைவான புதுப்பிப்பு
வலைக்குள் நுழைவதற்கு முன், ஒரு பொதுவான தளத்தை நிறுவுவோம். ஒரு மைக்ரோசர்வீஸ் கட்டமைப்பு என்பது ஒரு ஒற்றை அப்ளிகேஷன் பல தளர்வான இணைக்கப்பட்ட மற்றும் தனித்தனியாக பயன்படுத்தக்கூடிய சிறிய சேவைகளைக் கொண்டது. ஒவ்வொரு சேவையும் தன்னிறைவு பெற்றது, ஒரு குறிப்பிட்ட வணிக திறனுக்கு பொறுப்பாகும், மேலும் மற்ற சேவைகளுடன் ஒரு நெட்வொர்க் மூலம் தொடர்பு கொள்கிறது, பொதுவாக API கள் (REST அல்லது gRPC போன்றவை) மூலம்.
பைதான் இந்த முன்னுதாரணத்திற்கு விதிவிலக்காக பொருந்துகிறது, ஏனெனில்:
- வளர்ச்சியின் எளிமை மற்றும் வேகம்: பைத்தானின் படிக்கக்கூடிய தொடரியல் சேவைகளை விரைவாக உருவாக்க மற்றும் மீண்டும் செய்ய குழுக்களை அனுமதிக்கிறது.
- செழிப்பான சுற்றுச்சூழல் அமைப்பு: வலை சேவையகங்கள் (FastAPI, Flask) முதல் தரவு அறிவியல் (Pandas, Scikit-learn) வரை எல்லாவற்றிற்கும் நூலகங்கள் மற்றும் கட்டமைப்புகளின் பரந்த தொகுப்பு.
- செயல்திறன்: Starlette மற்றும் Pydantic இல் கட்டப்பட்ட FastAPI போன்ற நவீன ஒத்திசைவற்ற கட்டமைப்புகள், மைக்ரோசர்வீஸ்களில் பொதுவான I/O-பவுண்ட் பணிகளுக்கான NodeJS மற்றும் Go க்கு ஒப்பிடக்கூடிய செயல்திறனை வழங்குகின்றன.
ஒரு உலகளாவிய மின் வணிக தளத்தை கற்பனை செய்து பாருங்கள். ஒரு பெரிய அப்ளிகேஷனுக்கு பதிலாக, இது மைக்ரோசர்வீஸ்களால் ஆனது:
- பயனர் சேவை: பயனர் கணக்குகள் மற்றும் அங்கீகாரத்தை நிர்வகிக்கிறது.
- தயாரிப்பு சேவை: தயாரிப்பு பட்டியல் மற்றும் சரக்குகளை கையாளுகிறது.
- ஆர்டர் சேவை: புதிய ஆர்டர்களை செயலாக்குகிறது மற்றும் பணம் செலுத்துகிறது.
- ஷிப்பிங் சேவை: ஷிப்பிங் செலவுகளை கணக்கிடுகிறது மற்றும் டெலிவரியை ஏற்பாடு செய்கிறது.
பைத்தானில் எழுதப்பட்ட ஆர்டர் சேவை, வாடிக்கையாளரை சரிபார்க்க பயனர் சேவையுடனும், பங்குகளை சரிபார்க்க தயாரிப்பு சேவையுடனும் பேச வேண்டும். இந்த தொடர்பு நெட்வொர்க் மூலம் நடக்கிறது. இப்போது, இதை டஜன் அல்லது நூற்றுக்கணக்கான சேவைகளால் பெருக்கவும், மேலும் சிக்கல் மேற்பரப்பில் தொடங்குகிறது.
விநியோகிக்கப்பட்ட கட்டமைப்பின் உள்ளார்ந்த சவால்கள்
உங்கள் அப்ளிகேஷனின் கூறுகள் ஒரு நெட்வொர்க் மூலம் தொடர்பு கொள்ளும்போது, நெட்வொர்க்கின் உள்ளார்ந்த நம்பகத்தன்மையற்ற தன்மையை நீங்கள் மரபுரிமையாகப் பெறுவீர்கள். ஒரு பெரிய அளவிலான எளிய செயல்பாடு அழைப்பு சாத்தியமான சிக்கல்களால் நிறைந்த ஒரு சிக்கலான நெட்வொர்க் கோரிக்கையாக மாறும். இவை பெரும்பாலும் "நாள் 2" செயல்பாட்டு சிக்கல்கள் என்று அழைக்கப்படுகின்றன, ஏனெனில் அவை ஆரம்ப பயன்பாட்டிற்குப் பிறகு தெளிவாகத் தெரியும்.
நெட்வொர்க் நம்பகத்தன்மையற்ற தன்மை
ஆர்டர் சேவை அழைக்கும்போது தயாரிப்பு சேவை பதிலளிக்க மெதுவாக இருந்தால் அல்லது தற்காலிகமாக கிடைக்கவில்லை என்றால் என்ன நடக்கும்? கோரிக்கை தோல்வியடையக்கூடும். இப்போது இந்த பயன்பாடு இதை கையாள வேண்டும். அதை மீண்டும் முயற்சிக்க வேண்டுமா? எத்தனை முறை? என்ன தாமதத்துடன் (அடுக்கு பின்வாங்கல்)? தயாரிப்பு சேவை முற்றிலும் செயலிழந்தால் என்ன செய்வது? அதை மீட்டெடுக்க சிறிது நேரம் கோரிக்கைகளை அனுப்புவதை நிறுத்த வேண்டுமா? மீண்டும் முயற்சிகள், நேர வரம்புகள் மற்றும் சர்க்யூட் பிரேக்கர்கள் உட்பட இந்த தர்க்கம், ஒவ்வொரு நெட்வொர்க் அழைப்பிற்கும் ஒவ்வொரு சேவையிலும் செயல்படுத்தப்பட வேண்டும். இது தேவையற்றது, பிழைகள் ஏற்பட வாய்ப்புள்ளது மற்றும் உங்கள் பைதான் வணிக தர்க்கத்தை அடைக்கிறது.
கண்காணிப்பு வெற்றிடம்
ஒரு பெரிய கட்டமைப்பில், செயல்திறனைப் புரிந்துகொள்வது ஒப்பீட்டளவில் நேரடியானது. மைக்ரோசர்வீசஸ் சூழலில், ஒரு பயனரின் கோரிக்கை ஐந்து, பத்து அல்லது அதற்கு மேற்பட்ட சேவைகளை கடக்கக்கூடும். அந்த கோரிக்கை மெதுவாக இருந்தால், எங்கே தடை உள்ளது? இதற்கு ஒரு ஒருங்கிணைந்த அணுகுமுறை தேவை:
- மெட்ரிக்குகள்: ஒவ்வொரு சேவையிலிருந்தும் கோரிக்கை தாமதம், பிழை விகிதங்கள் மற்றும் ட்ராஃபிக் அளவு (The "Golden Signals") போன்ற மெட்ரிக்குகள் தொடர்ந்து சேகரிக்கப்படுகின்றன.
- பதிவு செய்தல்: நூற்றுக்கணக்கான சேவை நிகழ்வுகளிலிருந்து பதிவுகளைத் திரட்டுதல் மற்றும் அவற்றை ஒரு குறிப்பிட்ட கோரிக்கையுடன் தொடர்புபடுத்துதல்.
- விநியோகிக்கப்பட்ட ட்ரேசிங்: ஒரு கோரிக்கையின் முழு பயணத்தையும் காட்சிப்படுத்தவும், தாமதங்களை சுட்டிக்காட்டவும், அது தொடும் அனைத்து சேவைகளையும் கடந்து ஒரு கோரிக்கையின் பயணத்தைத் தொடர்ந்து செல்லுதல்.
இதை கைமுறையாக செயல்படுத்துவது, ஒவ்வொரு பைதான் சேவைக்கும் விரிவான கருவி மற்றும் கண்காணிப்பு நூலகங்களைச் சேர்ப்பது என்று பொருள், இது நிலைத்தன்மையில் விலகி பராமரிப்பு மேல்நிலையைச் சேர்க்கலாம்.
பாதுகாப்பு சிக்கல்
உங்கள் ஆர்டர் சேவைக்கும் பயனர் சேவைக்கும் இடையிலான தொடர்பு பாதுகாப்பானது மற்றும் குறியாக்கம் செய்யப்பட்டுள்ளதா என்பதை எப்படி உறுதி செய்வது? தயாரிப்பு சேவையின் முக்கியமான சரக்கு முனைகளை ஆர்டர் சேவை மட்டுமே அணுக அனுமதிக்கப்படுகிறதா என்பதை எப்படி உறுதி செய்வது? ஒரு பாரம்பரிய அமைப்பில், நீங்கள் நெட்வொர்க்-நிலை விதிகள் (ஃபயர்வால்கள்) அல்லது ஒவ்வொரு பயன்பாட்டிற்கும் உள்ளே ரகசியங்களையும் அங்கீகார தர்க்கத்தையும் உட்பொதிக்கலாம். இதை பெரிய அளவில் நிர்வகிப்பது நம்பமுடியாத அளவிற்கு கடினமாகிறது. ஒவ்வொரு சேவையும் ஒவ்வொரு அழைப்பையும் அங்கீகரிக்கும் மற்றும் அங்கீகரிக்கும் ஜீரோ-நம்பக நெட்வொர்க் உங்களுக்குத் தேவை, இது பரஸ்பர TLS (mTLS) மற்றும் நன்றாக-சீரமைக்கப்பட்ட அணுகல் கட்டுப்பாடு எனப்படும்.
சிக்கலான வரிசைப்படுத்தல்கள் மற்றும் ட்ராஃபிக் மேலாண்மை
உங்கள் பைதான் அடிப்படையிலான தயாரிப்பு சேவையின் புதிய பதிப்பை செயலிழக்கச் செய்யாமல் எப்படி வெளியிடுவது? ஒரு பொதுவான உத்தி ஒரு கனரி வெளியீடு ஆகும், அங்கு நீங்கள் நேரடி ட்ராஃபிக்கில் ஒரு சிறிய சதவீதத்தை (எ.கா., 1%) புதிய பதிப்பிற்கு மெதுவாக அனுப்புகிறீர்கள். அது நன்றாக நடந்தால், நீங்கள் ட்ராஃபிக்கை படிப்படியாக அதிகரிக்கிறீர்கள். இதை செயல்படுத்துவதற்கு பெரும்பாலும் சுமை சமநிலைப்படுத்தி அல்லது API கேட்வே மட்டத்தில் சிக்கலான தர்க்கம் தேவைப்படுகிறது. A/B சோதனை அல்லது சோதனை நோக்கங்களுக்காக ட்ராஃபிக்கை பிரதிபலிப்பதற்கும் இது பொருந்தும்.
சர்வீஸ் மெஷ்-ஐ உள்ளிடவும்: சேவைகளுக்கான நெட்வொர்க்
ஒரு சேவை வலை என்பது இந்த சவால்களை எதிர்கொள்ளும் ஒரு பிரத்யேக, உள்ளமைக்கக்கூடிய உள்கட்டமைப்பு அடுக்கு ஆகும். இது உங்கள் இருக்கும் நெட்வொர்க்கின் மேல் (குபெர்னெட்ஸ் வழங்கியதைப் போல) அனைத்து சேவை-க்கு-சேவை தகவல்தொடர்புகளையும் நிர்வகிக்க அமர்ந்திருக்கும் ஒரு நெட்வொர்க்கிங் மாடல் ஆகும். இந்த தகவல்தொடர்பை நம்பகமான, பாதுகாப்பான மற்றும் கண்காணிக்கக்கூடியதாக ஆக்குவதே இதன் முக்கிய குறிக்கோள்.
முக்கிய கூறுகள்: கட்டுப்பாட்டு விமானம் மற்றும் தரவு விமானம்
ஒரு சேவை வலைக்கு இரண்டு முக்கிய பகுதிகள் உள்ளன:
- தரவு விமானம்: இது இலகுரக நெட்வொர்க் ப்ராக்ஸிகளின் தொகுப்பைக் கொண்டுள்ளது, இது உங்கள் மைக்ரோசர்வீஸின் ஒவ்வொரு நிகழ்விற்கும் அருகில் பயன்படுத்தப்படுகிறது. இந்த ப்ராக்ஸிகள் உங்கள் சேவையிலிருந்து மற்றும் அதற்கு வரும் அனைத்து உள்வரும் மற்றும் வெளிச்செல்லும் நெட்வொர்க் ட்ராஃபிக்கை இடைமறிக்கின்றன. உங்கள் சேவை பைத்தானில் எழுதப்பட்டுள்ளதா என்று அவர்களுக்குத் தெரியாது அல்லது கவலைப்படுவதில்லை; அவை நெட்வொர்க் மட்டத்தில் இயங்குகின்றன. சேவை வலைகளில் பயன்படுத்தப்படும் மிகவும் பிரபலமான ப்ராக்ஸி Envoy ஆகும்.
- கட்டுப்பாட்டு விமானம்: இது சேவை வலையின் "மூளை". இது ஆபரேட்டராகிய நீங்கள் தொடர்பு கொள்ளும் கூறுகளின் தொகுப்பாகும். நீங்கள் கட்டுப்பாட்டு விமானத்திற்கு உயர் மட்ட விதிகள் மற்றும் கொள்கைகளை வழங்குகிறீர்கள் (எ.கா., தயாரிப்பு சேவைக்கான தோல்வியுற்ற கோரிக்கைகளை 3 முறை வரை மீண்டும் முயற்சிக்கவும்). கட்டுப்பாட்டு விமானம் இந்த கொள்கைகளை உள்ளமைவுகளாக மொழிபெயர்த்து தரவு விமானத்தில் உள்ள அனைத்து சைட்கார் ப்ராக்ஸிகளுக்கும் தள்ளுகிறது.
முக்கியமாக எடுத்துச் செல்ல வேண்டியது இதுதான்: சேவை வலை நெட்வொர்க்கிங் கவலைகளுக்கான தர்க்கத்தை உங்கள் தனிப்பட்ட பைதான் சேவைகளிலிருந்து மேடை அடுக்குக்கு நகர்த்துகிறது. உங்கள் FastAPI டெவலப்பர் இனி ஒரு மறுபயன்பாட்டு நூலகத்தை இறக்குமதி செய்யவோ அல்லது mTLS சான்றிதழ்களைக் கையாள குறியீட்டை எழுதவோ தேவையில்லை. அவர்கள் வணிக தர்க்கத்தை எழுதுகிறார்கள், மேலும் வலை மீதமுள்ளவற்றை வெளிப்படையாகக் கையாளுகிறது.
ஆர்டர் சேவையிலிருந்து தயாரிப்பு சேவைக்கான கோரிக்கை இப்போது இப்படி பாய்கிறது: ஆர்டர் சேவை → ஆர்டர் சேவை சைட்கார் → தயாரிப்பு சேவை சைட்கார் → தயாரிப்பு சேவை. அனைத்து மாயமும் - மீண்டும் முயற்சிகள், சுமை சமநிலைப்படுத்துதல், குறியாக்கம், மெட்ரிக் சேகரிப்பு - இரண்டு சைட்கார்களுக்கு இடையில் நடக்கிறது, இது கட்டுப்பாட்டு விமானத்தால் நிர்வகிக்கப்படுகிறது.
ஒரு சேவை வலையின் முக்கிய தூண்கள்
ஒரு சேவை வலை வழங்கும் நன்மைகளை நான்கு முக்கிய தூண்களாகப் பிரிப்போம்.
1. நம்பகத்தன்மை மற்றும் பின்னடைவு
உங்கள் அப்ளிகேஷன் குறியீட்டை மாற்றாமல் ஒரு சேவை வலை உங்கள் விநியோகிக்கப்பட்ட அமைப்பை மிகவும் வலுவானதாக ஆக்குகிறது.
- தானியங்கி மீண்டும் முயற்சிகள்: ஒரு சேவைக்கான அழைப்பு ஒரு தற்காலிக நெட்வொர்க் பிழையுடன் தோல்வியுற்றால், சைட்கார் உள்ளமைக்கப்பட்ட கொள்கையின் அடிப்படையில் கோரிக்கையை தானாகவே மீண்டும் முயற்சிக்க முடியும்.
- நேர வரம்புகள்: நீங்கள் நிலையான, சேவை-நிலை நேர வரம்புகளை செயல்படுத்தலாம். கீழ்நிலை சேவை 200 எம்.எஸ்.க்குள் பதிலளிக்கவில்லை என்றால், கோரிக்கை வேகமாக தோல்வியடைகிறது, இது வளங்கள் நிறுத்தப்படுவதைத் தடுக்கிறது.
- சர்க்யூட் பிரேக்கர்கள்: ஒரு சேவை நிகழ்வு தொடர்ந்து தோல்வியடைந்தால், சைட்கார் அதை சுமை-சமநிலைப்படுத்தும் குளத்திலிருந்து தற்காலிகமாக அகற்றலாம் (சுற்றை ஒழுங்கமைத்தல்). இது அடுக்கு தோல்விகளைத் தடுக்கிறது மற்றும் ஆரோக்கியமற்ற சேவைக்கு மீட்க நேரம் தருகிறது.
2. ஆழமான கண்காணிப்பு
ட்ராஃபிக்கைக் கண்காணிக்க சைட்கார் ப்ராக்ஸி ஒரு சரியான இடமாகும். அது ஒவ்வொரு கோரிக்கையையும் பதிலையும் பார்க்கும்போது, அது தானாகவே டெலிமெட்ரி தரவின் செல்வத்தை உருவாக்க முடியும்.
- மெட்ரிக்குகள்: வலை தானாகவே அனைத்து ட்ராஃபிக், தாமதம் (பி 50, பி 90, பி 99), வெற்றி விகிதங்கள் மற்றும் கோரிக்கை அளவு உள்ளிட்ட விரிவான மெட்ரிக்குகளை உருவாக்குகிறது. இவை ப்ரோமீதியஸ் போன்ற ஒரு கருவியால் துடைக்கப்பட்டு கிரஃபானா போன்ற டாஷ்போர்டில் காட்சிப்படுத்தப்படலாம்.
- விநியோகிக்கப்பட்ட ட்ரேசிங்: சைட்கார்கள் சேவை அழைப்புகள் முழுவதும் தடய தலைப்புகளை (பி 3 அல்லது டபிள்யூ 3 சி ட்ரேஸ் சூழல் போன்றவை) செலுத்தவும் பரப்பவும் முடியும். இது ஜேகர் அல்லது ஜிப்கின் போன்ற ட்ரேசிங் கருவிகள் ஒரு கோரிக்கையின் முழு பயணத்தையும் ஒன்றாக இணைக்க அனுமதிக்கிறது, இது உங்கள் அமைப்பின் நடத்தை பற்றிய முழுமையான படத்தை வழங்குகிறது.
- அணுகல் பதிவுகள்: ஒவ்வொரு சேவை-க்கு-சேவை அழைப்பிற்கும் நிலையான, விரிவான பதிவுகளைப் பெறுங்கள், ஆதாரம், இலக்கு, பாதை, தாமதம் மற்றும் பதில் குறியீட்டைக் காட்டுகிறது, இவை அனைத்தும் உங்கள் பைதான் குறியீட்டில் ஒரு ஒற்றை `print()` அறிக்கையும் இல்லாமல்.
Kiali போன்ற கருவிகள் இந்த தரவைப் பயன்படுத்தி உங்கள் மைக்ரோசர்வீஸ்களின் நேரடி சார்பு வரைபடத்தை உருவாக்க முடியும், இது நிகழ்நேரத்தில் ட்ராஃபிக் ஓட்டம் மற்றும் சுகாதார நிலையைக் காட்டுகிறது.
3. உலகளாவிய பாதுகாப்பு
ஒரு சேவை வலை உங்கள் கிளஸ்டருக்குள் ஜீரோ-நம்பக பாதுகாப்பு மாதிரியை செயல்படுத்த முடியும்.
- பரஸ்பர TLS (mTLS): ஒவ்வொரு சேவைக்கும் வலை தானாகவே கிரிப்டோகிராஃபிக் அடையாளங்களை (சான்றிதழ்கள்) வழங்க முடியும். பின்னர் இது சேவைகளுக்கு இடையிலான அனைத்து ட்ராஃபிக்கையும் குறியாக்க மற்றும் அங்கீகரிக்க இதைப் பயன்படுத்துகிறது. இது அங்கீகரிக்கப்படாத எந்த சேவையும் மற்றொரு சேவையுடன் பேசக்கூட முடியாது என்பதை உறுதி செய்கிறது, மேலும் போக்குவரத்து அனைத்தையும் குறியாக்கம் செய்கிறது. இது ஒரு எளிய உள்ளமைவு டாக்கிள் மூலம் இயக்கப்படுகிறது.
- அங்கீகார கொள்கைகள்: நீங்கள் சக்திவாய்ந்த, நன்றாக-சீரமைக்கப்பட்ட அணுகல் கட்டுப்பாட்டு விதிகளை உருவாக்கலாம். உதாரணமாக, "'ஆர்டர்-சேவை' அடையாளத்தைக் கொண்ட சேவைகளிடமிருந்து `/ தயாரிப்புகள்` முனையில் 'தயாரிப்பு-சேவை' க்கு `GET` கோரிக்கைகளை அனுமதிக்கவும், ஆனால் மற்ற அனைத்தையும் மறுக்கவும்." என்று கூறும் ஒரு கொள்கையை நீங்கள் எழுதலாம். இது உங்கள் பைதான் குறியீட்டில் அல்ல, சைட்கார் மட்டத்தில் செயல்படுத்தப்படுகிறது, இது மிகவும் பாதுகாப்பான மற்றும் தணிக்கை செய்யக்கூடியதாக ஆக்குகிறது.
4. நெகிழ்வான ட்ராஃபிக் மேலாண்மை
இது ஒரு சேவை வலையின் மிகவும் சக்திவாய்ந்த அம்சங்களில் ஒன்றாகும், இது உங்கள் அமைப்பு மூலம் ட்ராஃபிக் எவ்வாறு பாய்கிறது என்பதில் துல்லியமான கட்டுப்பாட்டை உங்களுக்கு வழங்குகிறது.
- டைனமிக் ரூட்டிங்: தலைப்புகள், குக்கீகள் அல்லது பிற மெட்டாடேட்டா அடிப்படையில் கோரிக்கைகளை ரூட் செய்யுங்கள். உதாரணமாக, ஒரு குறிப்பிட்ட HTTP தலைப்பைச் சரிபார்ப்பதன் மூலம் பீட்டா பயனர்களை ஒரு சேவையின் புதிய பதிப்பிற்கு ரூட் செய்யுங்கள்.
- கனரி வெளியீடுகள் & ஏ/பி சோதனை: சதவீதத்தால் ட்ராஃபிக்கைப் பிரிப்பதன் மூலம் அதிநவீன வரிசைப்படுத்தும் உத்திகளை செயல்படுத்தவும். உதாரணமாக, உங்கள் பைதான் சேவையின் `v1` பதிப்பிற்கு 90% ட்ராஃபிக்கையும் புதிய `v2` க்கு 10% ட்ராஃபிக்கையும் அனுப்பவும். நீங்கள் `v2` க்கான மெட்ரிக்குகளைக் கண்காணிக்கலாம், மேலும் எல்லாம் நன்றாக இருந்தால், `v2` 100% கையாளும் வரை படிப்படியாக அதிக ட்ராஃபிக்கை மாற்றவும்.
- தவறு ஊசி: உங்கள் அமைப்பின் பின்னடைவைச் சோதிக்க, நீங்கள் குறிப்பிட்ட கோரிக்கைகளுக்கு HTTP 503 பிழைகள் அல்லது நெட்வொர்க் தாமதங்கள் போன்ற தோல்விகளை வேண்டுமென்றே செலுத்த வலையைப் பயன்படுத்தலாம். உண்மையான செயலிழப்பை ஏற்படுத்துவதற்கு முன்பு பலவீனங்களைக் கண்டுபிடித்து சரிசெய்ய இது உதவுகிறது.
உங்கள் சேவை வலையைத் தேர்ந்தெடுப்பது: ஒரு உலகளாவிய கண்ணோட்டம்
பல முதிர்ச்சியடைந்த, திறந்த மூல சேவை வலைகள் உள்ளன. தேர்வு உங்கள் அமைப்பின் தேவைகள், இருக்கும் சுற்றுச்சூழல் அமைப்பு மற்றும் செயல்பாட்டு திறன் ஆகியவற்றைப் பொறுத்தது. மிகவும் பிரபலமான மூன்று Istio, Linkerd மற்றும் Consul.
Istio
- மேலோட்டம்: கூகிள், ஐபிஎம் மற்றும் பிறரால் ஆதரிக்கப்படும் Istio மிகவும் அம்சம் நிறைந்த மற்றும் சக்திவாய்ந்த சேவை வலையாகும். இது போரில் சோதிக்கப்பட்ட Envoy ப்ராக்ஸியைப் பயன்படுத்துகிறது.
- பலங்கள்: ட்ராஃபிக் மேலாண்மையில் இணையற்ற நெகிழ்வுத்தன்மை, சக்திவாய்ந்த பாதுகாப்பு கொள்கைகள் மற்றும் துடிப்பான சுற்றுச்சூழல் அமைப்பு. இது சிக்கலான, நிறுவன தர பயன்பாடுகளுக்கான உண்மைக்கு மாறான தரநிலையாகும்.
- கருத்தில் கொள்ள வேண்டியவை: அதன் சக்தி சிக்கலுடன் வருகிறது. கற்றல் வளைவு செங்குத்தாக இருக்கலாம், மேலும் இது மற்ற வலைகளை விட அதிக வள மேல்நிலை உள்ளது.
Linkerd
- மேலோட்டம்: ஒரு CNCF (கிளவுட் நேடிவ் கம்ப்யூட்டிங் அறக்கட்டளை) எளிமை, செயல்திறன் மற்றும் செயல்பாட்டு எளிமைக்கு முன்னுரிமை அளிக்கும் பட்டம் பெற்ற திட்டம்.
- பலங்கள்: நிறுவுவது மற்றும் தொடங்குவது நம்பமுடியாத எளிதானது. ரஸ்டில் எழுதப்பட்ட அதன் விருப்ப-கட்டப்பட்ட, அல்ட்ரா-லைட்வெயிட் ப்ராக்ஸிக்கு நன்றி, இது மிகக் குறைந்த வள அடிச்சுவடு கொண்டது. mTLS போன்ற அம்சங்கள் எந்த உள்ளமைவும் இல்லாமல் பெட்டியிலிருந்து வேலை செய்கின்றன.
- கருத்தில் கொள்ள வேண்டியவை: இது மிகவும் கருத்தியலான மற்றும் கவனம் செலுத்தும் அம்சத் தொகுப்பைக் கொண்டுள்ளது. இது கண்காணிப்பு, நம்பகத்தன்மை மற்றும் பாதுகாப்பின் முக்கிய பயன்பாட்டு நிகழ்வுகளை விதிவிலக்காக உள்ளடக்கியிருந்தாலும், இது Istio இன் சில மேம்பட்ட, வினோதமான ட்ராஃபிக் ரூட்டிங் திறன்களைக் கொண்டுள்ளது.
கன்சல் இணைப்பு
- மேலோட்டம்: ஹாஷிகார்ப் கருவிகளின் பரந்த தொகுப்பின் ஒரு பகுதி (டெராஃபார்ம் மற்றும் வால்ட் ஆகியவை அடங்கும்). அதன் முக்கிய வேறுபாடு பல-மேடை சூழல்களுக்கான அதன் முதல் வகுப்பு ஆதரவு.
- பலங்கள்: பல குபெர்னெட்ஸ் கிளஸ்டர்களை உள்ளடக்கிய கலப்பின சூழல்களுக்கான சிறந்த தேர்வு, வெவ்வேறு கிளவுட் வழங்குநர்கள், மேலும் மெய்நிகர் இயந்திரங்கள் அல்லது வெற்று-உலோக சேவையகங்கள் கூட. கன்சல் சேவை பட்டியலுடன் அதன் ஒருங்கிணைப்பு தடையற்றது.
- கருத்தில் கொள்ள வேண்டியவை: இது ஒரு பெரிய தயாரிப்பின் ஒரு பகுதியாகும். உங்களுக்கு ஒரு குபெர்னெட்ஸ் கிளஸ்டருக்கு மட்டுமே ஒரு சேவை வலை தேவைப்பட்டால், கன்சல் உங்களுக்குத் தேவையானதை விட அதிகமாக இருக்கலாம்.
நடைமுறை செயல்பாடு: ஒரு பைதான் மைக்ரோசர்வீஸை ஒரு சேவை வலையில் சேர்ப்பது
Istio போன்ற ஒரு வலையில் ஒரு எளிய பைதான் FastAPI சேவையை எவ்வாறு சேர்ப்பீர்கள் என்பதற்கான ஒரு கருத்தியல் உதாரணத்தை பார்ப்போம். இந்த செயல்முறையின் அழகு என்னவென்றால், உங்கள் பைதான் பயன்பாட்டை நீங்கள் எவ்வளவு குறைவாக மாற்ற வேண்டும்.
காட்சி
பைதான் பயன்படுத்தி FastAPI ஐப் பயன்படுத்தி எழுதப்பட்ட ஒரு எளிய `user-service` எங்களிடம் உள்ளது. இதில் ஒரு முனை உள்ளது: `/users/{user_id}`.
படி 1: பைதான் சேவை (வலை-குறிப்பிட்ட குறியீடு இல்லை)
உங்கள் அப்ளிகேஷன் குறியீடு தூய வணிக தர்க்கமாகவே உள்ளது. Istio, Linkerd அல்லது Envoy க்கு இறக்குமதிகள் எதுவும் இல்லை.
main.py:
from fastapi import FastAPI
app = FastAPI()
users_db = {
1: {"name": "Alice", "location": "Global"},
2: {"name": "Bob", "location": "International"}
}
@app.get("/users/{user_id}")
def read_user(user_id: int):
return users_db.get(user_id, {"error": "User not found"})
துணைபுரியும் `Dockerfile` ஆனது நிலையானதாகவும் உள்ளது, சிறப்பு மாற்றங்கள் எதுவும் இல்லை.
படி 2: குபெர்னெட்ஸ் வரிசைப்படுத்தல்
சாதாரண குபெர்னெட்ஸ் YAML இல் உங்கள் சேவையின் வரிசைப்படுத்தல் மற்றும் சேவையை நீங்கள் வரையறுக்கிறீர்கள். மீண்டும், சேவை வலைக்கு இங்கே எதுவும் குறிப்பிட்டது இல்லை.
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service-v1
spec:
replicas: 1
selector:
matchLabels:
app: user-service
version: v1
template:
metadata:
labels:
app: user-service
version: v1
spec:
containers:
- name: user-service
image: your-repo/user-service:v1
ports:
- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
name: user-service
spec:
selector:
app: user-service
ports:
- port: 80
targetPort: 8000
படி 3: சைட்கார் ப்ராக்ஸியை செலுத்துதல்
இங்குதான் மேஜிக் நடக்கிறது. உங்கள் குபெர்னெட்ஸ் கிளஸ்டரில் உங்கள் சேவை வலையை (எ.கா., Istio) நிறுவிய பின், நீங்கள் தானியங்கி சைட்கார் ஊசியை இயக்குகிறீர்கள். Istio க்கு, இது உங்கள் பெயரிடலுக்கான ஒரு முறை கட்டளை:
kubectl label namespace default istio-injection=enabled
இப்போது, நீங்கள் `kubectl apply -f your-deployment.yaml` ஐப் பயன்படுத்தி உங்கள் `user-service` ஐப் பயன்படுத்தும்போது, Istio கட்டுப்பாட்டு விமானம் உருவாக்கப்படுவதற்கு முன்பு தானாகவே போட் விவரக்குறிப்பை மாற்றுகிறது. இது போட்டில் Envoy ப்ராக்ஸி கொள்கலனைச் சேர்க்கிறது. உங்கள் போட்டில் இப்போது இரண்டு கொள்கலன்கள் உள்ளன: உங்கள் பைதான் `user-service` மற்றும் `istio-proxy`. உங்கள் YAML ஐ நீங்கள் மாற்ற வேண்டியதில்லை.
படி 4: சேவை வலை கொள்கைகளைப் பயன்படுத்துதல்
உங்கள் பைதான் சேவை இப்போது வலையின் ஒரு பகுதியாகும்! அதிலிருந்து மற்றும் அதற்கு வரும் அனைத்து ட்ராஃபிக்கையும் ப்ராக்ஸி செய்யப்படுகிறது. இப்போது நீங்கள் சக்திவாய்ந்த கொள்கைகளைப் பயன்படுத்தலாம். பெயரிடத்தில் உள்ள அனைத்து சேவைகளுக்கும் கடுமையான mTLS ஐ செயல்படுத்துவோம்.
peer-authentication.yaml:
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: default
spec:
mtls:
mode: STRICT
இந்த ஒற்றை, எளிய YAML கோப்பைப் பயன்படுத்துவதன் மூலம், பெயரிடத்தில் உள்ள அனைத்து சேவை-க்கு-சேவை தகவல்தொடர்புகளையும் குறியாக்கம் செய்து அங்கீகரித்துள்ளீர்கள். இது பூஜ்ஜிய அப்ளிகேஷன் குறியீடு மாற்றங்களுடன் ஒரு பெரிய பாதுகாப்பு வெற்றி.
இப்போது கனரி வெளியீட்டைச் செய்ய ஒரு ட்ராஃபிக் ரூட்டிங் விதியை உருவாக்குவோம். உங்களிடம் `user-service-v2` பயன்படுத்தப்பட்டுள்ளது என்று வைத்துக் கொள்ளுங்கள்.
virtual-service.yaml:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: user-service
spec:
hosts:
- user-service
http:
- route:
- destination:
host: user-service
subset: v1
weight: 90
- destination:
host: user-service
subset: v2
weight: 10
இந்த `VirtualService` மற்றும் ஒரு ஒத்த `DestinationRule` (இது `v1` மற்றும் `v2` துணைக்குழுக்களை வரையறுக்கிறது) மூலம், உங்கள் பழைய சேவைக்கு 90% ட்ராஃபிக்கையும், புதிய சேவைக்கு 10% ட்ராஃபிக்கையும் அனுப்ப Istio க்கு நீங்கள் அறிவுறுத்தியுள்ளீர்கள். இவை அனைத்தும் உள்கட்டமைப்பு மட்டத்தில் செய்யப்படுகின்றன, இது பைதான் அப்ளிகேஷன்களுக்கும் அவற்றின் அழைப்பாளர்களுக்கும் முற்றிலும் வெளிப்படையானது.
எப்போது நீங்கள் ஒரு சேவை வலையைப் பயன்படுத்த வேண்டும்? (எப்போது அல்ல)
ஒரு சேவை வலை ஒரு சக்திவாய்ந்த கருவியாகும், ஆனால் இது ஒரு உலகளாவிய தீர்வு அல்ல. ஒன்றை ஏற்றுக்கொள்வது நிர்வகிக்க மற்றொரு உள்கட்டமைப்பு அடுக்கைச் சேர்க்கிறது.
சேவை வலையை எப்போது ஏற்றுக்கொள்ள வேண்டும்:
- உங்கள் மைக்ரோசர்வீஸ்களின் எண்ணிக்கை அதிகரித்து வருகிறது (பொதுவாக 5-10 சேவைகளுக்கு அப்பால்), மேலும் அவற்றின் தொடர்புகளை நிர்வகிப்பது ஒரு தலைவலியாக மாறும்.
- பைதான், கோ மற்றும் ஜாவாவில் எழுதப்பட்ட சேவைகளுக்கான நிலையான கொள்கைகளை செயல்படுத்துவது ஒரு தேவையாக இருக்கும் பாலி குளோட் சூழலில் நீங்கள் இயங்குகிறீர்கள்.
- அப்ளிகேஷன் மட்டத்தில் சந்திப்பது கடினம் strictsecurity, கண்காணிப்பு மற்றும் பின்னடைவு தேவைகள் உங்களிடம் உள்ளன.
- உங்கள் அமைப்புக்கு தனி மேம்பாடு மற்றும் செயல்பாட்டுக் குழுக்கள் உள்ளன, மேலும் வணிக தர்க்கத்தில் கவனம் செலுத்த டெவலப்பர்களை நீங்கள் அதிகாரம் செய்ய விரும்புகிறீர்கள், அதே நேரத்தில் ஆப்ஸ் குழு இயங்குதளத்தை நிர்வகிக்கிறது.
- கன்டெய்னர் ஆர்கெஸ்ட்ரேஷனில் நீங்கள் பெரிதும் முதலீடு செய்திருக்கிறீர்கள், குறிப்பாக குபெர்னெட்ஸ், அங்கு சேவை வலைகள் மிகவும் தடையின்றி ஒருங்கிணைக்கப்படுகின்றன.
மாற்றுகளை எப்போது கருத்தில் கொள்ள வேண்டும்:
- உங்களிடம் ஒரு பெரிய கட்டமைப்பு அல்லது ஒரு சில சேவைகள் மட்டுமே உள்ளன. வலையின் செயல்பாட்டு மேல்நிலை அதன் நன்மைகளை விட அதிகமாக இருக்கும்.
- உங்கள் குழு சிறியது மற்றும் புதிய, சிக்கலான உள்கட்டமைப்பு கூறு ஒன்றைக் கற்று நிர்வகிக்க திறன் இல்லை.
- உங்கள் அப்ளிகேஷன் சாத்தியமான மிகக் குறைந்த தாமதத்தை கோருகிறது, மேலும் சைட்கார் ப்ராக்ஸி சேர்த்த மைக்ரோசெகண்ட்-நிலை மேல்நிலை உங்கள் பயன்பாட்டு வழக்குக்கு ஏற்றுக்கொள்ள முடியாதது.
- உங்கள் நம்பகத்தன்மை மற்றும் பின்னடைவு தேவைகள் எளிமையானவை மற்றும் நன்கு பராமரிக்கப்படும் அப்ளிகேஷன்-நிலை நூலகங்களுடன் போதுமானதாக தீர்க்கப்படலாம்.
முடிவுரை: உங்கள் பைதான் மைக்ரோசர்வீஸ்களை மேம்படுத்துதல்
மைக்ரோசர்வீசஸ் பயணம் மேம்பாட்டுடன் தொடங்குகிறது, ஆனால் விரைவாக செயல்பாட்டு சவாலாக மாறும். உங்கள் பைதான் அடிப்படையிலான விநியோகிக்கப்பட்ட அமைப்பு வளரும்போது, நெட்வொர்க்கிங், பாதுகாப்பு மற்றும் கண்காணிப்பு சிக்கல்கள் மேம்பாட்டுக் குழுக்களை மூழ்கடித்து புதுமைகளை மெதுவாக்கக்கூடும்.
ஒரு சேவை வலை இந்த சவால்களை அப்ளிகேஷனில் இருந்து விலக்கி, ஒரு பிரத்யேக, மொழி-அஞ்ஞான உள்கட்டமைப்பு அடுக்கில் தலைகீழாக முகவரியிடுகிறது. எந்த மொழியில் எழுதப்பட்டிருந்தாலும், சேவைகளுக்கு இடையிலான தகவல்தொடர்பைக் கட்டுப்படுத்தவும், பாதுகாக்கவும் மற்றும் கண்காணிக்கவும் இது ஒரு சீரான வழியை வழங்குகிறது.
Istio அல்லது Linkerd போன்ற ஒரு சேவை வலையை ஏற்றுக்கொள்வதன் மூலம், உங்கள் பைதான் டெவலப்பர்கள் அவர்கள் சிறப்பாகச் செய்வதைச் செய்ய நீங்கள் அதிகாரம் அளிக்கிறீர்கள்: சிறந்த அம்சங்களை உருவாக்குங்கள் மற்றும் வணிக மதிப்பை வழங்குங்கள். அவர்கள் சிக்கலான, கொதிகலன் நெட்வொர்க்கிங் தர்க்கத்தை செயல்படுத்துவதற்கான சுமையிலிருந்து விடுபட்டுள்ளனர், மேலும் பின்னடைவு, பாதுகாப்பு மற்றும் நுண்ணறிவு ஆகியவற்றை வழங்க இயங்குதளத்தை நம்பலாம். அதன் மைக்ரோசர்வீசஸ் கட்டமைப்பை அளவிடுவதைப் பற்றி தீவிரமாக இருக்கும் எந்தவொரு அமைப்புக்கும், ஒரு சேவை வலை ஒரு மூலோபாய முதலீடாகும், இது நம்பகத்தன்மை, பாதுகாப்பு மற்றும் டெவலப்பர் உற்பத்தித்திறனில் ஈவுத்தொகைகளை செலுத்துகிறது.