GraphQL மூலம் மைக்ரோசர்வீஸ்களின் ஆற்றலைத் திறக்கவும். ஒருங்கிணைந்த API கேட்வேகளுக்காக ஸ்கீமா ஃபெடரேஷன் மற்றும் ஸ்டிச்சிங்கை ஆராய்ந்து, ஃபிரன்ட்எண்ட் மேம்பாடு மற்றும் அளவிடுதலை மேம்படுத்துங்கள்.
ஃபிரன்ட்எண்ட் API கேட்வே: GraphQL உடன் ஸ்கீமா ஃபெடரேஷன் மற்றும் ஸ்டிச்சிங்கில் தேர்ச்சி பெறுதல்
நவீன வலை மேம்பாட்டின் வேகமாக வளர்ந்து வரும் சூழலில், மைக்ரோசர்வீசஸ் கட்டமைப்பை ஏற்றுக்கொள்வது, அளவிடக்கூடிய, நெகிழ்வான மற்றும் பராமரிக்கக்கூடிய பயன்பாடுகளை உருவாக்குவதற்கான ஒரு மூலக்கல்லாக மாறியுள்ளது. அமைப்புகள் வளர்ந்து பன்முகப்படுத்தப்படுவதால், பல சுதந்திரமான சேவைகளை நிர்வகிப்பது குறிப்பிடத்தக்க சவால்களை முன்வைக்கலாம், குறிப்பாக ஃபிரன்ட்எண்ட் குழுக்களுக்கு. இங்குதான் GraphQL-இன் சக்தி, ஸ்கீமா ஃபெடரேஷன் மற்றும் ஸ்டிச்சிங் போன்ற அதிநவீன API கேட்வே உத்திகளுடன் இணைந்து, உண்மையாகவே பிரகாசிக்கிறது.
இந்த விரிவான வழிகாட்டி, GraphQL-ஐ ஒரு ஃபிரன்ட்எண்ட் API கேட்வேயாகப் பயன்படுத்துவதன் நுணுக்கங்களை ஆராய்கிறது, மேலும் ஸ்கீமா ஃபெடரேஷன் மற்றும் ஸ்கீமா ஸ்டிச்சிங்கின் முக்கிய கருத்துக்களை ஆழமாக அலசுகிறது. இந்த நுட்பங்கள், வெவ்வேறு மைக்ரோசர்வீஸ் ஸ்கீமாக்களிலிருந்து ஒரு ஒருங்கிணைந்த, சக்திவாய்ந்த GraphQL API-ஐ உருவாக்க எவ்வாறு உதவுகின்றன என்பதையும், அதன் மூலம் ஃபிரன்ட்எண்ட் மேம்பாட்டை சீரமைத்தல், செயல்திறனை மேம்படுத்துதல், மற்றும் உலகளாவிய குழுக்களிடையே ஒரு ஒத்திசைவான டெவலப்பர் அனுபவத்தை வளர்ப்பது எப்படி என்பதையும் நாம் ஆராய்வோம்.
மைக்ரோசர்வீஸ்களின் எழுச்சியும் ஃபிரன்ட்எண்ட் சவாலும்
மைக்ரோசர்வீசஸ் கட்டமைப்பு சுதந்திரமான வரிசைப்படுத்தல், தொழில்நுட்ப பன்முகத்தன்மை மற்றும் பிழை தனிமைப்படுத்தல் உள்ளிட்ட பல நன்மைகளை வழங்குகிறது. இருப்பினும், ஃபிரன்ட்எண்ட் பயன்பாடுகளுக்கு, இந்த பரவலாக்கப்பட்ட தன்மை அதிகரித்த சிக்கலாக மாறக்கூடும். ஃபிரன்ட்எண்ட் டெவலப்பர்கள் பெரும்பாலும் பல பேக்எண்ட் சேவைகளுடன் தொடர்பு கொள்கிறார்கள், ஒவ்வொன்றும் அதன் சொந்த API வடிவமைப்பு, தரவு வடிவம் மற்றும் தகவல் தொடர்பு நெறிமுறைகளைக் கொண்டுள்ளது. இது பின்வருவனவற்றிற்கு வழிவகுக்கும்:
- அதிகரித்த நெட்வொர்க் கோரிக்கைகள்: தரவைப் பெறுவதற்குப் பெரும்பாலும் வெவ்வேறு சேவைகளுக்குப் பலமுறை சென்று வர வேண்டியிருக்கும்.
- தரவு ஒருங்கிணைப்பு சிக்கல்: ஃபிரன்ட்எண்ட் குழுக்கள் பல்வேறு மூலங்களிலிருந்து தரவை கைமுறையாக இணைக்க வேண்டும்.
- இறுக்கமான இணைப்பு: பேக்எண்ட் சேவைகளில் ஏற்படும் மாற்றங்கள் ஃபிரன்ட்எண்டில் விகிதாசாரமற்ற தாக்கத்தை ஏற்படுத்தக்கூடும்.
- டெவலப்பர் சோர்வு: பல API தொடர்புகளை நிர்வகிக்கும் கூடுதல் சுமை மேம்பாட்டுச் சுழற்சிகளை மெதுவாக்கலாம்.
ஃபிரன்ட்எண்டிற்கான பேக்எண்ட் (BFF) முறையின் தோற்றம், குறிப்பிட்ட ஃபிரன்ட்எண்ட் வாடிக்கையாளர்களுக்காக வடிவமைக்கப்பட்ட பேக்எண்ட் சேவைகளை உருவாக்குவதன் மூலம் இந்த பிரச்சினைகளில் சிலவற்றைத் தீர்க்க முயன்றது. இது பயனுள்ளதாக இருந்தாலும், ஒரு தூய்மையான BFF அணுகுமுறை சில நேரங்களில் பேக்எண்ட் சேவைகளின் பெருக்கத்திற்கு வழிவகுக்கும், இது பராமரிப்புச் சுமையை அதிகரிக்கிறது. GraphQL ஒரு ஈர்க்கக்கூடிய மாற்றீட்டை வழங்குகிறது, இது வாடிக்கையாளர்கள் தங்களுக்குத் தேவையான தரவை துல்லியமாகக் கேட்க ஒரு ஒற்றை எண்ட்பாயிண்ட்டை வழங்குகிறது, இது அதிகப்படியான மற்றும் குறைவான தரவுப் பெறுதலைக் குறைக்கிறது.
GraphQL ஒரு ஃபிரன்ட்எண்ட் API கேட்வேயாக
GraphQL, அதன் அறிவிப்புத் தரவுப் பெறும் திறன்களுடன், ஒரு மைக்ரோசர்வீசஸ் சூழலில் ஒரு ஒருங்கிணைப்பு அடுக்காக செயல்பட தனித்துவமாக நிலைநிறுத்தப்பட்டுள்ளது. பல REST API-கள் அல்லது gRPC சேவைகளை நேரடியாகப் பயன்படுத்துவதற்குப் பதிலாக, ஃபிரன்ட்எண்ட் வாடிக்கையாளர்கள் ஒரு ஒற்றை GraphQL எண்ட்பாயிண்ட்டுடன் தொடர்பு கொள்கிறார்கள். இந்த GraphQL எண்ட்பாயிண்ட், ஒரு API கேட்வேயாக செயல்பட்டு, பல்வேறு அடிப்படை மைக்ரோசர்வீஸ்களுக்கு கோரிக்கைகளை ஒருங்கிணைப்பதன் மூலம் வினவல்களைத் தீர்க்க முடியும்.
உங்கள் மைக்ரோசர்வீஸ்களின் தனிப்பட்ட ஸ்கீமாக்களிலிருந்து இந்த ஒருங்கிணைந்த GraphQL ஸ்கீமாவை எவ்வாறு உருவாக்குவது என்பதே முக்கிய சவாலாக உள்ளது. இங்குதான் ஸ்கீமா ஃபெடரேஷன் மற்றும் ஸ்கீமா ஸ்டிச்சிங் ஆகியவை முக்கிய பங்கு வகிக்கின்றன.
ஸ்கீமா ஸ்டிச்சிங்கைப் புரிந்துகொள்ளுதல்
ஸ்கீமா ஸ்டிச்சிங், GraphQL ஸ்கீமாக்களை இணைப்பதற்கான முந்தைய அணுகுமுறைகளில் ஒன்றாகும், இது பல GraphQL ஸ்கீமாக்களை ஒரே, ஒத்திசைவான ஸ்கீமாவாக இணைப்பதை உள்ளடக்கியது. இதன் முக்கிய யோசனை, வெவ்வேறு GraphQL சேவைகளிலிருந்து ஸ்கீமாக்களை எடுத்து அவற்றை இணைப்பதாகும், பொதுவாக ஒரு ஸ்கீமாவில் இருந்து வகைகளையும் புலங்களையும் மற்றொன்றில் சேர்ப்பதன் மூலம் இது செய்யப்படுகிறது.
ஸ்கீமா ஸ்டிச்சிங் எவ்வாறு செயல்படுகிறது:
ஸ்கீமா ஸ்டிச்சிங் பொதுவாக பின்வருவனவற்றை உள்ளடக்கியது:
- துணை-ஸ்கீமாக்களைப் பெறுதல்: ஸ்டிச்சிங் கேட்வே ஒவ்வொரு அடிப்படை GraphQL மைக்ரோசர்வீஸிலிருந்தும் இன்ட்ரோஸ்பெக்ஷன் ஸ்கீமாவைப் பெறுகிறது.
- ஸ்கீமாக்களை இணைத்தல்: ஒரு லைப்ரரி (
graphql-tools-இன்mergeSchemasசெயல்பாடு போன்றவை) இந்த துணை-ஸ்கீமாக்களை இணைக்கிறது. இந்த செயல்முறை, நகல் வகை பெயர்கள் போன்ற சாத்தியமான முரண்பாடுகளைத் தீர்ப்பது மற்றும் வெவ்வேறு ஸ்கீமாக்களிலிருந்து வரும் வகைகள் ஒன்றுக்கொன்று எவ்வாறு தொடர்புடையவை என்பதை வரையறுப்பதை உள்ளடக்கியது. - ஸ்கீமா-கடந்து வினவல்களைத் தீர்ப்பது: ஒரு வினவலுக்குப் பல சேவைகளிலிருந்து தரவு தேவைப்படும்போது, வினவலின் பகுதிகளைப் பொருத்தமான அடிப்படைச் சேவைக்கு ஒப்படைக்க ஸ்டிச்சிங் கேட்வே கட்டமைக்கப்பட வேண்டும். இது பெரும்பாலும் 'ரிமோட் ஸ்கீமாக்களை' வரையறுப்பது மற்றும் வினவல்களை அனுப்புவதை உள்ளடக்கியது.
ஸ்கீமா ஸ்டிச்சிங்கில் முக்கிய கருத்துக்கள்:
- வகை இணைத்தல் (Type Merging): வெவ்வேறு ஸ்கீமாக்களில் ஒரே பெயரைக் கொண்ட வகைகளை இணைக்க அனுமதிக்கிறது.
- ஸ்கீமா நீட்டிப்புகள் (Schema Extensions): ஒரு ஸ்கீமாவில் இருந்து புலங்களை மற்றொன்றில் வரையறுக்கப்பட்ட ஒரு வகையில் சேர்ப்பது. உதாரணமாக, ஒரு தனி தயாரிப்பு சேவையில் வரையறுக்கப்பட்ட
Productவகையில்reviewsபுலத்தைச் சேர்ப்பது. - ஒப்படைத்தல் (Delegation): ஒரு GraphQL வினவலின் பகுதிகளைப் பொருத்தமான அடிப்படை GraphQL சேவைக்கு அனுப்பும் முக்கிய வழிமுறை.
ஸ்கீமா ஸ்டிச்சிங்கின் நன்மைகள்:
- சிறிய திட்டங்களுக்கு எளிமை: குறைந்த எண்ணிக்கையிலான சேவைகளுக்குச் செயல்படுத்துவது நேரடியாக இருக்கலாம்.
- நெகிழ்வுத்தன்மை: ஸ்கீமாக்கள் எவ்வாறு இணைக்கப்படுகின்றன என்பதன் மீது நுணுக்கமான கட்டுப்பாட்டை அனுமதிக்கிறது.
ஸ்கீமா ஸ்டிச்சிங்கின் தீமைகள்:
- கைமுறை உள்ளமைவு: சேவைகளின் எண்ணிக்கை அதிகரிக்கும்போது சிக்கலானதாகவும் பிழை ஏற்பட வாய்ப்புள்ளதாகவும் மாறும்.
- முரண்பாடுகளுக்கான சாத்தியம்: வகை மற்றும் புலம் பெயர் மோதல்களை நிர்வகிப்பதற்கு கவனமான திட்டமிடல் தேவை.
- செயல்திறன் பரிசீலனைகள்: திறமையற்ற ஒப்படைப்பு செயல்திறன் தடைகளுக்கு வழிவகுக்கும்.
- இறுக்கமான இணைப்பு: கேட்வே பெரும்பாலும் அடிப்படை சேவைச் செயலாக்கங்களைப் பற்றி அறிந்திருக்க வேண்டும், இது ஒரு வகையான இணைப்பை உருவாக்குகிறது.
ஸ்கீமா ஃபெடரேஷனை அறிமுகப்படுத்துதல்
ஸ்கீமா ஃபெடரேஷன், ஸ்கீமா ஸ்டிச்சிங் எதிர்கொண்ட சவால்களுக்கு, குறிப்பாக பெரிய, பரவலாக்கப்பட்ட மைக்ரோசர்வீஸ் கட்டமைப்புகளில், மிகவும் வலுவான மற்றும் அளவிடக்கூடிய தீர்வாக உருவெடுத்தது. முதன்மையாக அப்பல்லோவால் உருவாக்கப்பட்டது, ஸ்கீமா ஃபெடரேஷன் பல சுதந்திரமான GraphQL சேவைகளிலிருந்து (சப்கிராஃப்கள் என அழைக்கப்படுபவை) ஒரு ஒற்றை GraphQL API-ஐ உருவாக்க உங்களை அனுமதிக்கிறது.
அடிப்படையில் உள்ள வேறுபாடு அதன் ஸ்கீமா கலவை அணுகுமுறையில் உள்ளது. இருக்கும் ஸ்கீமாக்களை இணைப்பதற்குப் பதிலாக, ஸ்கீமா ஃபெடரேஷன் ஒரு நெறிமுறையை வரையறுக்கிறது, அங்கு சப்கிராஃப்கள் தங்கள் வகைகளையும் புலங்களையும் அறிவிக்கின்றன, மேலும் ஒரு மைய கேட்வே (ரௌட்டர் அல்லது சூப்பர்கிராஃப்) இந்த அறிவிப்புகளை ஒரு ஒருங்கிணைந்த ஸ்கீமாவாக உருவாக்குகிறது. இந்தக் கலவை, ஒவ்வொரு சப்கிராஃபின் செயலாக்கத்தின் உள்ளார்ந்த விவரங்களை கேட்வே அறியத் தேவையில்லாமல், அதன் ஸ்கீமா ஒப்பந்தத்தை மட்டும் அறிந்து நடக்கிறது.
ஸ்கீமா ஃபெடரேஷன் எவ்வாறு செயல்படுகிறது:
ஸ்கீமா ஃபெடரேஷன் பின்வருவனவற்றை உள்ளடக்கியது:
- சப்கிராஃப்கள் (Subgraphs): ஒவ்வொரு மைக்ரோசர்வீஸும் ஃபெடரேஷன் விவரக்குறிப்புக்கு இணங்கும் ஒரு GraphQL API-ஐ வெளிப்படுத்துகிறது. சப்கிராஃப்கள் குறிப்பிட்ட ஃபெடரேஷன் டைரக்டிவ்களைப் (எ.கா.,
@key,@extends,@external,@requires,@provides) பயன்படுத்தி தங்கள் வகைகளை அறிவிக்கின்றன. - சூப்பர்கிராஃப் (Supergraph): ஒரு ஃபெடரேஷன் ரௌட்டர் (அப்பல்லோ ஃபெடரேஷன் கேட்வே போன்றவை) ஒவ்வொரு சப்கிராஃபிலிருந்தும் அதன் ஸ்கீமா வரையறையைக் கேட்கிறது. பின்னர் அது இந்த வரையறைகளை ஒரு ஒற்றை, ஒருங்கிணைந்த ஸ்கீமாவாக - சூப்பர்கிராஃபாக - உருவாக்குகிறது.
- பொருள் தெளிவு (Entity Resolution): ஃபெடரேஷனின் திறவுகோல் எண்டிட்டிகள் என்ற கருத்து. ஒரு எண்டிட்டி என்பது பல சப்கிராஃப்கள் முழுவதும் தனித்துவமாக அடையாளம் காணக்கூடிய ஒரு வகையாகும். ஒரு சப்கிராஃபில் உள்ள ஒரு வகையில்
@keyடைரக்டிவ் அதை ஒரு எண்டிட்டியாகக் குறிக்கிறது மற்றும் அதைத் தனித்துவமாக அடையாளம் காணும் புலங்களைக் குறிப்பிடுகிறது. ஒரு வினவல் ஒரு எண்டிட்டியைக் குறிப்பிடும்போது, அந்த எண்டிட்டியைப் பெறுவதற்கு எந்த சப்கிராஃப் பொறுப்பு என்பதை அதன்@keyடைரக்டிவ் அடிப்படையில் கேட்வே அறியும். - கலவை (Composition): கேட்வே வினவல்களை ஒருங்கிணைக்கிறது. ஒரு வினவலுக்கு பல சப்கிராஃப்களிலிருந்து தரவு தேவைப்பட்டால், கேட்வே வினவலை புத்திசாலித்தனமாக உடைத்து, பொருத்தமான துணை-வினவல்களை ஒவ்வொரு சப்கிராஃபிற்கும் அனுப்பி, பின்னர் முடிவுகளை இணைக்கிறது.
ஸ்கீமா ஃபெடரேஷனில் முக்கிய கருத்துக்கள்:
- சப்கிராஃப்கள்: சூப்பர்கிராஃபிற்கு பங்களிக்கும் சுதந்திரமான GraphQL சேவைகள்.
- சூப்பர்கிராஃப்: அனைத்து சப்கிராஃப்களிலிருந்தும் உருவாக்கப்பட்ட ஒருங்கிணைந்த ஸ்கீமா.
- எண்டிட்டிகள்: சப்கிராஃப்கள் முழுவதும் தனித்துவமாக அடையாளம் காணக்கூடிய வகைகள், பொதுவாக
@keyடைரக்டிவ் மூலம் குறிக்கப்படுகின்றன. @keyடைரக்டிவ்: ஒரு எண்டிட்டியைத் தனித்துவமாக அடையாளம் காணும் புலங்களை வரையறுக்கிறது. இது சப்கிராஃப்-கடந்து உறவுகளுக்கு முக்கியமானது.@extendsடைரக்டிவ்: ஒரு சப்கிராஃப் மற்றொரு சப்கிராஃபில் வரையறுக்கப்பட்ட ஒரு வகையை நீட்டிக்க அனுமதிக்கிறது (எ.கா., ஒரு தனி பயனர் சப்கிராஃபில் வரையறுக்கப்பட்ட User வகையில் புலங்களைச் சேர்ப்பது).@externalடைரக்டிவ்: ஒரு புலம் மற்றொரு சப்கிராஃபில் வரையறுக்கப்பட்டுள்ளது என்பதைக் குறிக்கிறது.@requiresடைரக்டிவ்: ஒரு எண்டிட்டியின் மீதுள்ள ஒரு புலத்திற்கு, தெளிவுக்காக அந்த எண்டிட்டியின் கீ-யிலிருந்து சில புலங்கள் இருக்க வேண்டும் என்று குறிப்பிடுகிறது.@providesடைரக்டிவ்: ஒரு எண்டிட்டியின் மீதுள்ள ஒரு புலம் இந்த சப்கிராஃபால் வழங்கப்படுகிறது என்பதைக் குறிக்கிறது.
ஸ்கீமா ஃபெடரேஷனின் நன்மைகள்:
- அளவிடுதல்: பெரிய, பரவலாக்கப்பட்ட அமைப்புகள் மற்றும் வளர்ந்து வரும் மைக்ரோசர்வீஸ்களின் எண்ணிக்கைக்கு வடிவமைக்கப்பட்டது.
- இணைப்பறுத்தல் (Decoupling): சப்கிராஃப்கள் தங்கள் சொந்த ஸ்கீமாவை அறிந்திருக்க வேண்டும் மற்றும் தங்கள் வகைகளை எவ்வாறு தீர்ப்பது என்பதை அறிந்திருக்க வேண்டும். கேட்வே கலவையைக் கையாளுகிறது.
- குழு சுயாட்சி: வெவ்வேறு குழுக்கள் தங்கள்ந்தந்த சப்கிராஃப்களை சுதந்திரமாக சொந்தமாக்கி நிர்வகிக்க முடியும்.
- வகை பாதுகாப்பு (Type safety): கலவை செயல்முறை ஸ்கீமா ஒப்பந்தங்களை அமல்படுத்துகிறது, சூப்பர்கிராஃப் முழுவதும் வகை பாதுகாப்பை உறுதி செய்கிறது.
- எளிமைப்படுத்தப்பட்ட வாடிக்கையாளர் அனுபவம்: வாடிக்கையாளர்கள் ஒரு ஒற்றை, ஒருங்கிணைந்த ஸ்கீமாவுடன் தொடர்பு கொள்கிறார்கள்.
ஸ்கீமா ஃபெடரேஷனின் தீமைகள்:
- கற்றல் வளைவு: ஃபெடரேஷன் விவரக்குறிப்பு மற்றும் டைரக்டிவ்களைப் புரிந்துகொள்ள வேண்டும்.
- கருவி சார்பு: பெரும்பாலும் குறிப்பிட்ட லைப்ரரிகள் மற்றும் கேட்வேக்களை (எ.கா., அப்பல்லோ ஃபெடரேஷன்) சார்ந்துள்ளது.
- ஆரம்ப அமைப்பில் சிக்கல்: சப்கிராஃப்கள் மற்றும் கேட்வேயை அமைப்பது எளிய ஸ்டிச்சிங்கை விட அதிக ஈடுபாடு கொண்டதாக இருக்கலாம்.
ஃபெடரேஷன் மற்றும் ஸ்டிச்சிங்: ஒரு ஒப்பீட்டு மேலோட்டம்
ஸ்கீமா ஃபெடரேஷன் மற்றும் ஸ்கீமா ஸ்டிச்சிங் இரண்டும் GraphQL ஸ்கீமாக்களை ஒருங்கிணைப்பதை நோக்கமாகக் கொண்டிருந்தாலும், அவை வெவ்வேறு தத்துவங்களைக் குறிக்கின்றன மற்றும் தனித்துவமான நன்மைகளை வழங்குகின்றன:
| அம்சம் | ஸ்கீமா ஸ்டிச்சிங் | ஸ்கீமா ஃபெடரேஷன் |
|---|---|---|
| கலவை மாதிரி | இருக்கும் ஸ்கீமாக்களை இணைத்தல். பிரதிநிதிகள் மற்றும் ரிமோட் ஸ்கீமாக்களுக்கு வெளிப்படையான உள்ளமைவு தேவை. | அறிவிக்கப்பட்ட வகைகள் மற்றும் உறவுகளின் கலவை. சப்கிராஃப்கள் தங்கள் பங்களிப்புகளை அறிவிக்கின்றன. |
| இணைப்பு | கேட்வே அடிப்படை சேவைச் செயலாக்கங்களைப் பற்றி அறிந்திருக்க வேண்டியிருப்பதால், இறுக்கமான இணைப்புக்கு வழிவகுக்கும். | தளர்வான இணைப்பை ஊக்குவிக்கிறது. சப்கிராஃப்கள் ஒரு ஒப்பந்தத்தை வழங்குகின்றன; கேட்வே கலக்கிறது. |
| அளவிடுதல் | பல சேவைகளுடன் நிர்வகிக்க கடினமாக மாறும். உள்ளமைவுப் பெருக்கம் பொதுவானது. | பல சுதந்திரமான சேவைகளைக் கொண்ட பெரிய அளவிலான, பரவலாக்கப்பட்ட அமைப்புகளுக்கு வடிவமைக்கப்பட்டது. |
| குழு சுயாட்சி | ஸ்கீமாக்களின் சுதந்திரமான குழு உரிமையில் குறைந்த முக்கியத்துவம். | சப்கிராஃப்களின் சுதந்திரமான குழு உரிமை மற்றும் மேம்பாட்டை ஊக்குவிக்கிறது. |
| முக்கிய கருத்து | ஸ்கீமாக்களை இணைத்தல், வகைகளை நீட்டித்தல், ஒப்படைத்தல். | எண்டிட்டிகள், @key டைரக்டிவ், சப்கிராஃப் ஒப்பந்தங்கள், கலவை. |
| முதன்மை லைப்ரரிகள் | graphql-tools (mergeSchemas) |
அப்பல்லோ ஃபெடரேஷன், பல்வேறு சமூக செயலாக்கங்கள். |
நீண்ட கால அளவிடுதல் மற்றும் குழு சுயாட்சியை நோக்கமாகக் கொண்ட பெரும்பாலான நவீன மைக்ரோசர்வீஸ் கட்டமைப்புகளுக்கு, ஸ்கீமா ஃபெடரேஷன் பொதுவாக விரும்பப்படும் அணுகுமுறையாகும். ஸ்கீமா ஸ்டிச்சிங் சிறிய, குறைவான சிக்கலான அமைப்புகளுக்கு அல்லது ஒரு கைமுறை, நேரடி இணைத்தல் விரும்பப்படும் குறிப்பிட்ட ஒருங்கிணைப்பு சூழ்நிலைகளுக்கு இன்னும் ஒரு சாத்தியமான விருப்பமாக இருக்கலாம்.
ஸ்கீமா ஃபெடரேஷனைச் செயல்படுத்துதல்: ஒரு நடைமுறை உதாரணம்
இரண்டு மைக்ரோசர்வீஸ்களுடன் ஒரு எளிய இ-காமர்ஸ் சூழ்நிலையை கருத்தில் கொள்வோம்:
- பயனர்கள் சேவை (Users Service): பயனர் தகவல்களை நிர்வகிக்கிறது.
- தயாரிப்புகள் சேவை (Products Service): தயாரிப்பு தகவல்களை நிர்வகிக்கிறது.
பயனர் சேவை சப்கிராஃப்
இந்த சேவை ஒரு User வகையை வரையறுத்து, அதை @key டைரக்டிவ் மூலம் ஒரு எண்டிட்டியாகக் குறிக்கிறது.
# users-service/schema.graphql
# Federation directives
directive @key(fields: "id!") on OBJECT
type User @key(fields: "id") {
id: ID!
name: String
}
type Query {
user(id: ID!): User
}
இந்தச் சேவையில் பயனரின் ஐடியின் அடிப்படையில் பயனர் தரவைப் பெறுவதற்கான ரிசால்வர்களும் இருக்கும்.
தயாரிப்புகள் சேவை சப்கிராஃப்
இந்த சேவை ஒரு Product வகையை வரையறுக்கிறது. முக்கியமாக, இது User எண்டிட்டியுடன் ஒரு உறவையும் வரையறுக்கிறது, User வகையைக் குறிக்கும் ஒரு புலத்தைச் (எ.கா., createdBy) சேர்ப்பதன் மூலம்.
# products-service/schema.graphql
# Federation directives
directive @key(fields: "id!") on OBJECT
directive @extends on OBJECT
directive @external on OBJECT
directive @requires(fields: "userId!") on FIELD_DEFINITION
type Product @extends {
# We are extending the User type from the Users Service
# The @external directive indicates 'id' is defined elsewhere
createdBy: User @requires(fields: "userId")
}
type User @extends {
# Declare that 'id' is an external field on User, defined in another subgraph
id: ID! @external
}
type Query {
product(id: ID!): Product
}
தயாரிப்புகள் சேவையில்:
Product-இல் உள்ள@extendsஇந்த ஸ்கீமாProductவகையை நீட்டிக்கிறது என்பதைக் குறிக்கிறது.User-இல் உள்ளid: ID! @externalஎன்பதுUserவகையின்idபுலம் வேறு சப்கிராஃபில் (பயனர்கள் சேவையில்) வரையறுக்கப்பட்டுள்ளது என்பதைக் குறிக்கிறது.Product-இல் உள்ளcreatedBy: User @requires(fields: "userId")என்பதுcreatedByபுலத்தைத் (இது ஒருUserபொருளை வழங்கும்) தீர்க்க, தயாரிப்பு தரவில் ஒருuserIdஇருக்க வேண்டும் என்பதாகும். கேட்வே இந்தத் தகவலைப் பயன்படுத்தி தயாரிப்பு சேவையிலிருந்து எந்தப் புலங்களைக் கோர வேண்டும் மற்றும் அதை பயனர் சேவையுடன் எப்படி இணைப்பது என்பதை அறியும்.
ஃபெடரேஷன் கேட்வே (சூப்பர்கிராஃப்)
ஃபெடரேஷன் கேட்வே (எ.கா., அப்பல்லோ கேட்வே) பின்வருவனவற்றிற்குப் பொறுப்பாகும்:
- சப்கிராஃப்களைக் கண்டறிதல் (பொதுவாக அவற்றின் இன்ட்ரோஸ்பெக்ஷன் ஸ்கீமாவைக் கேட்பதன் மூலம்).
- தனிப்பட்ட சப்கிராஃப் ஸ்கீமாக்களை ஒரு ஒற்றை சூப்பர்கிராஃப் ஸ்கீமாவாக உருவாக்குதல்.
- உள்வரும் வாடிக்கையாளர் வினவல்களைப் பொருத்தமான சப்கிராஃப்களுக்கு வழிநடத்தி முடிவுகளை இணைத்தல்.
ஒரு வாடிக்கையாளர் ஒரு தயாரிப்பு மற்றும் அதன் உருவாக்குநரின் பெயரைக் கேட்கும்போது:
query GetProductCreator($productId: ID!) {
product(id: $productId) {
id
name
createdBy {
id
name
}
}
}
கேட்வே பின்வருவனவற்றைச் செய்யும்:
- அது
தயாரிப்புகள் சேவையால்கையாளப்படும்productபுலத்தைப் பார்க்கிறது. - அது
Productவகையிலிருந்துnameபுலத்தைத் தீர்க்கிறது, இதுவும்தயாரிப்புகள் சேவையால்கையாளப்படுகிறது. - அது
Product-இல்createdByபுலத்தை எதிர்கொள்கிறது. ஏனெனில்createdByஒருUserவகையாக வரையறுக்கப்பட்டுள்ளது மற்றும்Userவகைபயனர்கள் சேவையில்ஒரு@key(fields: "id")டைரக்டிவைக் கொண்டிருப்பதால், கேட்வேUserஎண்டிட்டியைப் பெற வேண்டும் என்பதை அறியும். createdBy-இல் உள்ள@requires(fields: "userId")கேட்வேயிடம், இந்த உறவைத் தீர்க்கதயாரிப்புகள் சேவைக்குuserIdதேவை என்று சொல்கிறது. எனவே, கேட்வே தயாரிப்பு மற்றும் அதன்userId-ஐதயாரிப்புகள் சேவையிலிருந்துகோரும்.- பெறப்பட்ட
userId-ஐப் பயன்படுத்தி, கேட்வே பின்னர் அந்த குறிப்பிட்ட ஐடியுடன் ஒரு பயனருக்காகபயனர்கள் சேவையைக்கேட்க வேண்டும் என்பதை அறியும். - இறுதியாக, அது
பயனர்கள் சேவையால்வழங்கப்படும்Userபொருளிலிருந்துnameபுலத்தைத் தீர்க்கிறது.
இந்த செயல்முறை, ஸ்கீமா ஃபெடரேஷன் வெவ்வேறு மைக்ரோசர்வீஸ்கள் முழுவதும் தொடர்புடைய தரவை தடையின்றி எவ்வாறு இணைக்கிறது என்பதையும், ஃபிரன்ட்எண்டிற்கு ஒரு ஒருங்கிணைந்த மற்றும் திறமையான வினவல் அனுபவத்தை வழங்குகிறது என்பதையும் நிரூபிக்கிறது.
உங்கள் திட்டத்திற்கு சரியான அணுகுமுறையைத் தேர்ந்தெடுப்பது
ஸ்கீமா ஃபெடரேஷன் மற்றும் ஸ்கீமா ஸ்டிச்சிங் (அல்லது பிற API கேட்வே முறைகள்) இடையே உள்ள முடிவு உங்கள் திட்டத்தின் குறிப்பிட்ட தேவைகள், குழு அமைப்பு மற்றும் நீண்ட கால பார்வை ஆகியவற்றைப் பெரிதும் சார்ந்துள்ளது.
ஸ்கீமா ஸ்டிச்சிங்கைக் கருத்தில் கொள்ள வேண்டியவை:
- சிறிய முதல் நடுத்தர திட்டங்கள்: உங்களிடம் குறைந்த எண்ணிக்கையிலான GraphQL மைக்ரோசர்வீஸ்கள் மற்றும் ஒரு நேரடியான தரவு மாதிரி இருந்தால், ஸ்டிச்சிங் போதுமானதாகவும் ஆரம்பத்தில் அமைக்க எளிதாகவும் இருக்கலாம்.
- இருக்கும் GraphQL சேவைகள்: உங்களிடம் ஏற்கனவே பல சுதந்திரமான GraphQL சேவைகள் இருந்து, குறிப்பிடத்தக்க மாற்றங்கள் இல்லாமல் அவற்றை இணைக்க விரும்பினால், ஸ்டிச்சிங் ஒரு விரைவான ஒருங்கிணைப்புப் பாதையாக இருக்கலாம்.
- குறிப்பிட்ட இணைத்தல் தர்க்கம்: ஸ்கீமாக்கள் எவ்வாறு இணைக்கப்படுகின்றன மற்றும் வகைகள் எவ்வாறு நீட்டிக்கப்படுகின்றன என்பதில் உங்களுக்கு நுணுக்கமான கட்டுப்பாடு தேவைப்படும்போது, மற்றும் ஃபெடரேஷனின் சிக்கல் அதிகமாகத் தோன்றும்போது.
ஸ்கீமா ஃபெடரேஷனை ஏற்றுக்கொள்வது எப்போது:
- பெரிய அளவிலான மைக்ரோசர்வீஸ்கள்: குறிப்பிடத்தக்க எண்ணிக்கையிலான மைக்ரோசர்வீஸ்கள் மற்றும் குழுக்களைக் கொண்ட நிறுவனங்களுக்கு, ஃபெடரேஷன் தேவையான அளவிடுதல் மற்றும் நிறுவன அமைப்பை வழங்குகிறது.
- குழு சுயாட்சி முக்கியம்: வெவ்வேறு குழுக்கள் வெவ்வேறு களங்களுக்குப் பொறுப்பாக இருந்து, தங்கள் GraphQL API-களை சுதந்திரமாக உருவாக்க வேண்டியிருந்தால், ஃபெடரேஷன் இந்த சுயாட்சியை செயல்படுத்துகிறது.
- நீண்ட கால பராமரிப்பு: ஃபெடரேஷனின் தெளிவான ஒப்பந்தங்கள் மற்றும் கலவை மாதிரி காலப்போக்கில் அதிக பராமரிக்கக்கூடிய மற்றும் நெகிழ்வான அமைப்புகளுக்கு வழிவகுக்கிறது.
- சிக்கலான உறவுகள்: உங்கள் தரவு மாதிரி வெவ்வேறு சேவைகளால் நிர்வகிக்கப்படும் எண்டிட்டிகளுக்கு இடையில் சிக்கலான உறவுகளைக் கொண்டிருக்கும்போது, ஃபெடரேஷனின் எண்டிட்டி தெளிவு விலைமதிப்பற்றது.
- GraphQL-ஐ படிப்படியாக ஏற்றுக்கொள்வது: ஃபெடரேஷன் உங்களை GraphQL-ஐ படிப்படியாக அறிமுகப்படுத்த அனுமதிக்கிறது. இருக்கும் REST சேவைகளை GraphQL சப்கிராஃப்களாக மாற்றலாம், அல்லது புதிய GraphQL சேவைகளை ஆரம்பத்திலிருந்தே சப்கிராஃப்களாக உருவாக்கலாம்.
GraphQL உடன் ஃபிரன்ட்எண்ட் API கேட்வேகளுக்கான சிறந்த நடைமுறைகள்
நீங்கள் ஃபெடரேஷன் அல்லது ஸ்டிச்சிங் அணுகுமுறையைத் தேர்ந்தெடுத்தாலும், வெற்றிக்கான சிறந்த நடைமுறைகளைப் பின்பற்றுவது முக்கியம்:
- தெளிவான ஒப்பந்தங்களை வரையறுக்கவும்: ஃபெடரேஷனுக்கு, சப்கிராஃப் ஸ்கீமாக்கள் மற்றும்
@key,@external, மற்றும்@requiresபோன்ற டைரக்டிவ்களின் பயன்பாடு இந்த ஒப்பந்தங்களை வரையறுக்கின்றன. ஸ்டிச்சிங்கிற்கு, எப்படி இணைப்பது மற்றும் ஒப்படைப்பது என்பது குறித்த ஒப்பந்தங்களே உங்கள் ஒப்பந்தங்கள். - உங்கள் API-களை பதிப்பிடவும்: மாற்றங்களை அழகாக நிர்வகிக்க உங்கள் சப்கிராஃப்களுக்கு ஒரு தெளிவான பதிப்பிடல் உத்தியைச் செயல்படுத்தவும்.
- செயல்திறனைக் கண்காணிக்கவும்: உங்கள் கேட்வே மற்றும் சப்கிராஃப்களுக்கு வலுவான கண்காணிப்பைச் செயல்படுத்தவும். வினவல் செயல்திறன், பிழை விகிதங்கள் மற்றும் தாமதத்தைக் கண்காணிக்கவும். அப்பல்லோ ஸ்டுடியோ போன்ற கருவிகள் இங்கு விலைமதிப்பற்றவை.
- கேச்சிங்கைச் செயல்படுத்தவும்: செயல்திறனை மேம்படுத்தவும் உங்கள் பேக்எண்ட் சேவைகளின் சுமையைக் குறைக்கவும் கேட்வே அல்லது வாடிக்கையாளர் மட்டத்தில் GraphQL கேச்சிங் உத்திகளைப் பயன்படுத்தவும்.
- உங்கள் கேட்வேயைப் பாதுகாக்கவும்: உங்கள் பேக்எண்ட் சேவைகளைப் பாதுகாக்க API கேட்வே மட்டத்தில் அங்கீகாரம், அங்கீகரிப்பு மற்றும் வீத வரம்பிடல் ஆகியவற்றைச் செயல்படுத்தவும்.
- வினவல்களை மேம்படுத்தவும்: அதிகப்படியான தரவைப் பெறுவதையோ அல்லது கேட்வே மற்றும் சப்கிராஃப்களை சிரமப்படுத்தக்கூடிய ஆழமாகப் பதிக்கப்பட்ட வினவல்களையோ தவிர்க்க, திறமையான GraphQL வினவல்களை எழுதுவது குறித்து ஃபிரன்ட்எண்ட் டெவலப்பர்களுக்குக் கல்வி கற்பிக்கவும்.
- கருவிகள் மற்றும் ஆட்டோமேஷன்: மேம்பாட்டு வாழ்க்கைச் சுழற்சியைச் சீரமைக்க ஸ்கீமா உருவாக்கம், சரிபார்ப்பு மற்றும் வரிசைப்படுத்தல் ஆட்டோமேஷனுக்கான கருவிகளைப் பயன்படுத்தவும்.
- ஆவணப்படுத்தல்: உங்கள் சூப்பர்கிராஃப் ஸ்கீமா மற்றும் தனிப்பட்ட சப்கிராஃப்களுக்கான புதுப்பித்த ஆவணங்களைப் பராமரிக்கவும். GraphiQL மற்றும் GraphQL Playground போன்ற கருவிகள் ஊடாடும் ஆய்வுக்கு சிறந்தவை.
- பிழை கையாளுதல்: உங்கள் கேட்வே மற்றும் சப்கிராஃப்கள் முழுவதும் சீரான பிழை கையாளுதல் உத்திகளைச் செயல்படுத்தவும்.
- சோதனை: பிரச்சினைகளை ஆரம்பத்திலேயே கண்டறிய உங்கள் சப்கிராஃப்கள் மற்றும் உருவாக்கப்பட்ட சூப்பர்கிராஃபை முழுமையாகச் சோதிப்பதை உறுதிசெய்யவும்.
உலகளாவிய பரிசீலனைகள்
ஒரு உலகளாவிய பார்வையாளர்களுக்காக ஒரு API கேட்வே உத்தியைச் செயல்படுத்தும்போது, பல காரணிகள் முக்கியமானதாகின்றன:
- தாமதம்: வெவ்வேறு புவியியல் பிராந்தியங்களில் உள்ள பயனர்களுக்கான தாமதத்தைக் குறைக்க உங்கள் கேட்வே மற்றும் சப்கிராஃப் விநியோகத்தை வடிவமைக்கவும். நிலையான சொத்துக்களுக்கு உள்ளடக்க விநியோக நெட்வொர்க்குகளை (CDNs) பயன்படுத்துவதையும், உங்கள் பயனர் தளத்திற்கு அருகில் கேட்வே நிகழ்வுகளை வரிசைப்படுத்துவதையும் கருத்தில் கொள்ளுங்கள்.
- தரவு வசிப்பிடம் மற்றும் இணக்கம்: உங்கள் தரவு எங்கே சேமிக்கப்படுகிறது மற்றும் செயலாக்கப்படுகிறது என்பதைப் புரிந்து கொள்ளுங்கள். உங்கள் API கேட்வே மற்றும் சப்கிராஃப் உள்ளமைவுகள் பிராந்திய தரவு தனியுரிமை விதிமுறைகளுக்கு (எ.கா., GDPR, CCPA) இணங்குவதை உறுதிசெய்யவும். ஃபெடரேஷன், குறிப்பிட்ட பிராந்தியங்களுக்குப் பொருத்தமான தரவைக் கையாளும் சப்கிராஃப்களைக் கொண்டிருப்பதன் மூலம் தரவு இருப்பிடத்தை நிர்வகிக்க உதவும்.
- நாணயம் மற்றும் உள்ளூர்மயமாக்கல்: உங்கள் பயன்பாடு நிதித் தரவு அல்லது உள்ளூர்மயமாக்கப்பட்ட உள்ளடக்கத்தைக் கையாண்டால், உங்கள் GraphQL ஸ்கீமா மற்றும் ரிசால்வர்கள் வெவ்வேறு நாணயங்கள், மொழிகள் மற்றும் தேதி வடிவங்களை சரியான முறையில் கையாள முடியும் என்பதை உறுதிப்படுத்தவும்.
- நேர மண்டலங்கள்: நேர உணர்திறன் கொண்ட தரவைச் செயலாக்கும் மற்றும் காண்பிக்கும் போது நேர மண்டல வேறுபாடுகளை மனதில் கொள்ளுங்கள்.
- உள்கட்டமைப்பு அளவிடுதல்: ஏற்ற இறக்கமான உலகளாவிய போக்குவரத்து முறைகளைக் கையாள உங்கள் கேட்வே மற்றும் சப்கிராஃப்களை அளவிடுவதற்கான திட்டமிடுங்கள்.
GraphQL கேட்வேக்களின் எதிர்காலம்
GraphQL சுற்றுச்சூழல் தொடர்ந்து உருவாகி வருகிறது. நாம் இதில் முன்னேற்றங்களைக் காண்கிறோம்:
- மேம்படுத்தப்பட்ட ஃபெடரேஷன் விவரக்குறிப்புகள்: அப்பல்லோ மற்றும் பரந்த சமூகத்தால் GraphQL ஃபெடரேஷன் விவரக்குறிப்பின் தொடர்ச்சியான வளர்ச்சி, பரவலாக்கப்பட்ட GraphQL API-களை உருவாக்க மிகவும் வலுவான மற்றும் தரப்படுத்தப்பட்ட வழிகளுக்கு வழிவகுக்கிறது.
- நிர்வகிக்கப்பட்ட GraphQL சேவைகள்: கிளவுட் வழங்குநர்கள் மற்றும் மூன்றாம் தரப்பு சேவைகள் நிர்வகிக்கப்பட்ட GraphQL கேட்வே தீர்வுகளை வழங்குகின்றன, இது வரிசைப்படுத்தல் மற்றும் செயல்பாடுகளை எளிதாக்குகிறது.
- புதிய லைப்ரரிகள் மற்றும் கருவிகள்: GraphQL கேட்வேக்கள் மற்றும் சப்கிராஃப்களை உருவாக்குதல், சோதித்தல் மற்றும் கண்காணிப்பதற்கான புதிய கருவிகள் மற்றும் லைப்ரரிகளின் வளர்ச்சி, தத்தெடுப்பை எளிதாகவும் திறமையாகவும் ஆக்குகிறது.
- GraphQL மெஷ்: GraphQL மெஷ் போன்ற வளர்ந்து வரும் கருவிகள் வெவ்வேறு தரவு மூலங்களின் (REST, gRPC, GraphQL, OpenAPI) சிக்கல்களை அகற்றி, அவற்றை ஒரு ஒருங்கிணைந்த GraphQL API ஆக வழங்க முயல்கின்றன, இது பரந்த ஒருங்கிணைப்புத் தேவைகளுக்கு பாரம்பரிய ஃபெடரேஷனுக்கு ஒரு மாற்றீட்டை வழங்குகிறது.
முடிவுரை
நிறுவனங்கள் மைக்ரோசர்வீசஸ் கட்டமைப்புகளை பெருகிய முறையில் ஏற்றுக்கொள்வதால், பயனுள்ள API கேட்வே உத்திகளின் தேவை முதன்மையானதாகிறது. GraphQL, அதன் சக்திவாய்ந்த வினவல் திறன்களுடன், ஒரு நேர்த்தியான தீர்வை வழங்குகிறது, மற்றும் ஸ்கீமா ஃபெடரேஷன் வெவ்வேறு GraphQL மைக்ரோசர்வீஸ்களை ஒருங்கிணைப்பதற்கான மிகவும் அளவிடக்கூடிய மற்றும் பராமரிக்கக்கூடிய அணுகுமுறையாக நிற்கிறது.
ஸ்கீமா ஃபெடரேஷன் மற்றும் ஸ்டிச்சிங்கின் கொள்கைகளைப் புரிந்துகொள்வதன் மூலமும், செயல்படுத்தல் மற்றும் உலகளாவிய வரிசைப்படுத்தலுக்கான சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலமும், ஃபிரன்ட்எண்ட் குழுக்கள் தங்கள் மேம்பாட்டு செயல்முறைகளை கணிசமாக சீரமைக்கலாம், அதிக நெகிழ்வான பயன்பாடுகளை உருவாக்கலாம் மற்றும் விதிவிலக்கான பயனர் அனுபவங்களை வழங்கலாம். நீங்கள் ஒரு புதிய திட்டத்தைத் தொடங்கினாலும் அல்லது இருக்கும் மைக்ரோசர்வீஸ் நிலப்பரப்பை மேம்படுத்தினாலும், ஃபெடரேஷனால் இயக்கப்படும் ஒரு நன்கு கட்டமைக்கப்பட்ட GraphQL API கேட்வேயில் முதலீடு செய்வது, அடுத்த தலைமுறை வலுவான, அளவிடக்கூடிய மற்றும் பயனர் மையப்படுத்தப்பட்ட பயன்பாடுகளை உருவாக்குவதற்கான ஒரு மூலோபாய நடவடிக்கையாகும்.
முக்கிய குறிப்புகள்:
- GraphQL மைக்ரோசர்வீஸ்களுக்கு ஒரு சக்திவாய்ந்த API கேட்வேயாக செயல்படுகிறது.
- ஸ்கீமா ஃபெடரேஷன் ஒரு தெளிவான ஒப்பந்த நெறிமுறையைப் பயன்படுத்தி சுதந்திரமான சப்கிராஃப்களிலிருந்து ஒரு ஒருங்கிணைந்த சூப்பர்கிராஃபை உருவாக்குகிறது.
- ஸ்கீமா ஸ்டிச்சிங் இருக்கும் ஸ்கீமாக்களை இணைக்கிறது, அதிக கைமுறை கட்டுப்பாட்டை வழங்குகிறது ஆனால் பெரிய அமைப்புகளுக்கு குறைவான அளவிடுதல்.
- ஃபெடரேஷன் பொதுவாக அதன் அளவிடுதல், இணைப்பறுத்தல் மற்றும் குழு சுயாட்சிக்காக விரும்பப்படுகிறது.
- சிறந்த நடைமுறைகளில் தெளிவான ஒப்பந்தங்கள், கண்காணிப்பு, பாதுகாப்பு மற்றும் உலகளாவிய பரிசீலனைகள் அடங்கும்.
இந்தக் கருத்துக்களை ஏற்றுக்கொள்வது உங்கள் மேம்பாட்டுக் குழுக்களை மைக்ரோசர்வீஸ்களின் சிக்கல்களில் செல்லவும், உலகளாவிய டிஜிட்டல் நிலப்பரப்பின் எப்போதும் மாறிவரும் கோரிக்கைகளுக்கு சக்திவாய்ந்த மற்றும் தகவமைக்கக்கூடிய பயன்பாடுகளை உருவாக்கவும் அதிகாரம் அளிக்கும்.