முன்முனை மைக்ரோசர்வீஸ்களின் உலகத்தை ஆராய்ந்து, அளவிடக்கூடிய மற்றும் பராமரிக்கக்கூடிய வலை பயன்பாடுகளை உருவாக்க பயனுள்ள சேவை கண்டறிதல் மற்றும் தொடர்பு நுட்பங்களில் கவனம் செலுத்துகிறது.
முன்முனை மைக்ரோசர்வீஸ்கள்: சேவை கண்டறிதல் மற்றும் தொடர்பு உத்திகள்
மைக்ரோசர்வீஸ் கட்டமைப்பு பின்முனை மேம்பாட்டில் புரட்சியை ஏற்படுத்தியுள்ளது, இது குழுக்கள் அளவிடக்கூடிய, மீள்தன்மை கொண்ட மற்றும் சுயாதீனமாக பயன்படுத்தக்கூடிய சேவைகளை உருவாக்க உதவுகிறது. இப்போது, இந்த கட்டடக்கலை மாதிரி முன்முனையிலும் பெருகிய முறையில் ஏற்றுக்கொள்ளப்படுகிறது, இது முன்முனை மைக்ரோசர்வீஸ்கள், அல்லது மைக்ரோ முன்முனைகள் உருவாக வழிவகுக்கிறது. இந்த கட்டுரை ஒரு முன்முனை மைக்ரோசர்வீஸ் கட்டமைப்பிற்குள் சேவை கண்டறிதல் மற்றும் தகவல்தொடர்புகளின் முக்கியமான அம்சங்களை ஆராய்கிறது.
முன்முனை மைக்ரோசர்வீஸ்கள் என்றால் என்ன?
முன்முனை மைக்ரோசர்வீஸ்கள் (அல்லது மைக்ரோ முன்முனைகள்) என்பது ஒரு முன்முனை பயன்பாடு சிறிய, சுயாதீனமாக பயன்படுத்தக்கூடிய மற்றும் பராமரிக்கக்கூடிய அலகுகளாகப் பிரிக்கப்படும் ஒரு கட்டடக்கலை அணுகுமுறையாகும். ஒவ்வொரு மைக்ரோ முன்முனையும் பொதுவாக ஒரு தனி குழுவுக்கு சொந்தமானது, இது அதிக சுயாட்சி, விரைவான மேம்பாட்டு சுழற்சிகள் மற்றும் எளிதான அளவிடுதல் ஆகியவற்றை அனுமதிக்கிறது. அனைத்து அம்சங்களும் இறுக்கமாக இணைக்கப்பட்ட ஒற்றை முன்முனைகளைப் போலல்லாமல், மைக்ரோ முன்முனைகள் மாடுலாரிட்டியை மற்றும் தளர்வான இணைப்பைப் (loose coupling) ஊக்குவிக்கின்றன.
முன்முனை மைக்ரோசர்வீஸ்களின் நன்மைகள்:
- சுயாதீனமான வரிசைப்படுத்தல்: குழுக்கள் தங்கள் மைக்ரோ முன்முனைகளை பயன்பாட்டின் பிற பகுதிகளை பாதிக்காமல் வரிசைப்படுத்தலாம், வரிசைப்படுத்தல் அபாயங்களைக் குறைத்து விரைவான மறுசெய்கைகளை (iterations) செயல்படுத்துகின்றன.
- தொழில்நுட்ப பன்முகத்தன்மை: ஒவ்வொரு குழுவும் தங்கள் குறிப்பிட்ட மைக்ரோ முன்முனைக்கு சிறந்த தொழில்நுட்ப ஸ்டேக்கை தேர்வு செய்யலாம், இது சோதனை மற்றும் புதுமைகளை அனுமதிக்கிறது.
- மேம்படுத்தப்பட்ட அளவிடுதல்: மைக்ரோ முன்முனைகளை அவற்றின் குறிப்பிட்ட தேவைகளின் அடிப்படையில் சுயாதீனமாக அளவிடலாம், வள பயன்பாட்டை மேம்படுத்துகிறது.
- அதிகரித்த குழு சுயாட்சி: குழுக்கள் தங்கள் மைக்ரோ முன்முனைகளுக்கு முழு உரிமை கொண்டுள்ளன, இது சுயாட்சி அதிகரிப்பு மற்றும் விரைவான முடிவெடுக்கும் திறனை வழிவகுக்கிறது.
- எளிதான பராமரிப்பு: சிறிய குறியீட்டுத் தொகுதிகள் (codebases) பராமரிக்கவும் புரிந்துகொள்ளவும் எளிதானவை, பிழைகளை அறிமுகப்படுத்தும் அபாயத்தைக் குறைக்கின்றன.
முன்முனை மைக்ரோசர்வீஸ்களின் சவால்கள்:
- அதிகரித்த சிக்கல்தன்மை: பல மைக்ரோ முன்முனைகளை நிர்வகிப்பது ஒரு ஒற்றை முன்முனையை நிர்வகிப்பதை விட சிக்கலானது.
- சேவை கண்டறிதல் மற்றும் தொடர்பு: மைக்ரோ முன்முனை கட்டமைப்பின் வெற்றிக்கு பயனுள்ள சேவை கண்டறிதல் மற்றும் தொடர்பு வழிமுறைகளை செயல்படுத்துவது முக்கியம்.
- பகிரப்பட்ட கூறுகள்: மைக்ரோ முன்முனைகள் முழுவதும் பகிரப்பட்ட கூறுகள் மற்றும் சார்புகளை நிர்வகிப்பது சவாலானது.
- செயல்திறன் மேம்படுத்துதல்: பல மைக்ரோ முன்முனைகள் முழுவதும் செயல்திறனை மேம்படுத்துவதற்கு ஏற்றுதல் உத்திகள் (loading strategies) மற்றும் தரவு பரிமாற்ற வழிமுறைகளை கவனமாக கருத்தில் கொள்ள வேண்டும்.
- ஒருங்கிணைப்பு சோதனை: ஒரு மைக்ரோ முன்முனை கட்டமைப்பில் ஒருங்கிணைப்பு சோதனை மிகவும் சிக்கலானது, ஏனெனில் இது பல சுயாதீன அலகுகளுக்கு இடையிலான தொடர்புகளை சோதிக்க வேண்டும்.
முன்முனை மைக்ரோசர்வீஸ்களில் சேவை கண்டறிதல்
சேவை கண்டறிதல் என்பது ஒரு விநியோகிக்கப்பட்ட அமைப்பில் சேவைகளை தானாகவே கண்டுபிடித்து இணைக்கும் செயல்முறையாகும். ஒரு முன்முனை மைக்ரோசர்வீஸ் கட்டமைப்பில், மைக்ரோ முன்முனைகள் ஒன்றோடொன்று மற்றும் பின்முனை சேவைகளுடன் தொடர்புகொள்ள சேவை கண்டறிதல் அவசியம். முன்முனை மைக்ரோசர்வீஸ்களில் சேவை கண்டறிதலுக்கு பல அணுகுமுறைகள் உள்ளன, ஒவ்வொன்றிற்கும் அதன் சொந்த நன்மைகள் மற்றும் தீமைகள் உள்ளன.
சேவை கண்டறிதலுக்கான அணுகுமுறைகள்:
1. நிலையான கட்டமைப்பு (Static Configuration):
இந்த அணுகுமுறையில், ஒவ்வொரு மைக்ரோ முன்முனையின் இருப்பிடமும் ஒரு கட்டமைப்பு கோப்பில் (configuration file) அல்லது சுற்றுச்சூழல் மாறியில் (environment variable) குறியிடப்படுகிறது (hardcoded). இது எளிய அணுகுமுறை, ஆனால் குறைவான நெகிழ்வுத்தன்மை கொண்டது. ஒரு மைக்ரோ முன்முனையின் இருப்பிடம் மாறினால், நீங்கள் கட்டமைப்பு கோப்பைப் புதுப்பித்து, பயன்பாட்டை மறுவரிசைப்படுத்த வேண்டும்.
எடுத்துக்காட்டு:
const microFrontendConfig = {\n "productCatalog": "https://product-catalog.example.com",\n "shoppingCart": "https://shopping-cart.example.com",\n "userProfile": "https://user-profile.example.com"\n};
நன்மைகள்:
- செயல்படுத்த எளிதானது.
தீமைகள்:
- அளவிட முடியாதது (Not scalable).
- கட்டமைப்பு மாற்றங்களுக்கு மறுவரிசைப்படுத்தல் தேவை.
- தோல்விகளுக்கு மீள்தன்மை இல்லை (Not resilient).
2. DNS அடிப்படையிலான சேவை கண்டறிதல்:
இந்த அணுகுமுறை மைக்ரோ முன்முனைகளின் இருப்பிடத்தை தீர்க்க DNS ஐப் பயன்படுத்துகிறது. ஒவ்வொரு மைக்ரோ முன்முனைக்கும் ஒரு DNS பதிவு ஒதுக்கப்படும், மேலும் கிளையண்டுகள் அதன் இருப்பிடத்தைக் கண்டறிய DNS வினவல்களைப் பயன்படுத்தலாம். இந்த அணுகுமுறை நிலையான கட்டமைப்பை விட அதிக நெகிழ்வானது, ஏனெனில் பயன்பாட்டை மறுவரிசைப்படுத்தாமல் DNS பதிவுகளை புதுப்பிக்கலாம்.
எடுத்துக்காட்டு:
உங்களிடம் DNS பதிவுகள் பின்வருமாறு உள்ளமைக்கப்பட்டுள்ளன என்று கருதி:
- product-catalog.microfrontends.example.com IN A 192.0.2.10
- shopping-cart.microfrontends.example.com IN A 192.0.2.11
உங்கள் முன்முனை குறியீடு இப்படி இருக்கலாம்:
const microFrontendUrls = {\n "productCatalog": `http://${new URL("product-catalog.microfrontends.example.com").hostname}`,\n "shoppingCart": `http://${new URL("shopping-cart.microfrontends.example.com").hostname}`\n};
நன்மைகள்:
- நிலையான கட்டமைப்பை விட அதிக நெகிழ்வானது.
- தற்போதுள்ள DNS உள்கட்டமைப்புடன் ஒருங்கிணைக்க முடியும்.
தீமைகள்:
- DNS பதிவுகளை நிர்வகிக்க வேண்டும்.
- மாற்றங்கள் பரவுவதற்கு மெதுவாக இருக்கலாம்.
- DNS உள்கட்டமைப்பு கிடைப்பதை நம்பியுள்ளது.
3. சேவைப் பதிவு (Service Registry):
இந்த அணுகுமுறை மைக்ரோ முன்முனைகளின் இருப்பிடத்தை சேமிக்க ஒரு பிரத்யேக சேவைப் பதிவைப் பயன்படுத்துகிறது. மைக்ரோ முன்முனைகள் தொடங்கும் போது சேவைப் பதிவில் தங்களை பதிவுசெய்கின்றன, மேலும் கிளையண்டுகள் சேவைப் பதிவை வினவி அவற்றின் இருப்பிடத்தைக் கண்டறியலாம். இது மிகவும் மாறும் மற்றும் மீள்தன்மை கொண்ட அணுகுமுறையாகும், ஏனெனில் சேவைப் பதிவு ஆரோக்கியமற்ற மைக்ரோ முன்முனைகளை தானாகவே கண்டறிந்து அகற்ற முடியும்.
பிரபலமான சேவைப் பதிவுகள்:
- Consul
- Eureka
- etcd
- ZooKeeper
எடுத்துக்காட்டு (Consul ஐப் பயன்படுத்தி):
முதலில், ஒரு மைக்ரோ முன்முனை தொடங்கும் போது Consul உடன் தன்னை பதிவுசெய்கிறது. இது பொதுவாக மைக்ரோ முன்முனையின் பெயர், IP முகவரி, போர்ட் மற்றும் பிற தொடர்புடைய மெட்டாடேட்டாவை வழங்குவதை உள்ளடக்குகிறது.
// Example using Node.js and the 'node-consul' library\nconst consul = require('consul')({\n host: 'consul.example.com', // Consul server address\n port: 8500\n});\n\nconst serviceRegistration = {\n name: 'product-catalog',\n id: 'product-catalog-1',\n address: '192.168.1.10',\n port: 3000,\n check: {\n http: 'http://192.168.1.10:3000/health',\n interval: '10s',\n timeout: '5s'\n }\n};\n\nconsul.agent.service.register(serviceRegistration, function(err) {\n if (err) throw err;\n console.log('Registered with Consul');\n});
பின்னர், பிற மைக்ரோ முன்முனைகள் அல்லது முக்கிய பயன்பாடு தயாரிப்பு பட்டியல் சேவையின் இருப்பிடத்தைக் கண்டறிய Consul ஐ வினவலாம்.
consul.agent.service.list(function(err, result) {\n if (err) throw err;\n const productCatalogService = Object.values(result).find(service => service.Service === 'product-catalog');\n\n if (productCatalogService) {\n const productCatalogUrl = `http://${productCatalogService.Address}:${productCatalogService.Port}`;\n console.log('Product Catalog URL:', productCatalogUrl);\n } else {\n console.log('Product Catalog service not found');\n }\n});
நன்மைகள்:
- அதிக மாறும் மற்றும் மீள்தன்மை கொண்டது.
- சுகாதார சோதனைகள் மற்றும் தானியங்கி தோல்வி மாற்றத்தை ஆதரிக்கிறது.
- சேவை மேலாண்மைக்கு ஒரு மையக் கட்டுப்பாட்டு புள்ளியை வழங்குகிறது.
தீமைகள்:
- ஒரு சேவைப் பதிவை வரிசைப்படுத்தி நிர்வகிக்க வேண்டும்.
- கட்டமைப்பிற்கு சிக்கலை சேர்க்கிறது.
4. API கேட்வே:
ஒரு API கேட்வே ஆனது பின்முனை சேவைகளுக்கான அனைத்து கோரிக்கைகளுக்கும் ஒற்றை நுழைவாயிலாக செயல்படுகிறது. இது சேவை கண்டறிதல், ரூட்டிங், அங்கீகாரம் மற்றும் அங்கீகரிப்பு ஆகியவற்றை கையாள முடியும். முன்முனை மைக்ரோசர்வீஸ்களின் சூழலில், URL பாதை அல்லது பிற அளவுகோல்களின் அடிப்படையில் பொருத்தமான மைக்ரோ முன்முனைக்கு கோரிக்கைகளை அனுப்ப API கேட்வே பயன்படுத்தப்படலாம். API கேட்வே தனிப்பட்ட சேவைகளின் சிக்கல்தன்மையை கிளையண்டிடம் இருந்து மறைக்கிறது. Netflix மற்றும் Amazon போன்ற நிறுவனங்கள் API கேட்வேகளை விரிவாகப் பயன்படுத்துகின்றன.
எடுத்துக்காட்டு:
நீங்கள் Nginx போன்ற ஒரு தலைகீழ் ப்ராக்ஸியை (reverse proxy) API கேட்வேயாகப் பயன்படுத்துகிறீர்கள் என்று கற்பனை செய்வோம். URL பாதையின் அடிப்படையில் வெவ்வேறு மைக்ரோ முன்முனைகளுக்கு கோரிக்கைகளை அனுப்ப Nginx ஐ உள்ளமைக்கலாம்.
# nginx configuration\n\nhttp {\n upstream product_catalog {\n server product-catalog.example.com:8080;\n }\n\n upstream shopping_cart {\n server shopping-cart.example.com:8081;\n }\n\n server {\n listen 80;\n\n location /product-catalog/ {\n proxy_pass http://product_catalog/;\n }\n\n location /shopping-cart/ {\n proxy_pass http://shopping_cart/;\n }\n }\n}
இந்த உள்ளமைவில், கோரிக்கைகள் /product-catalog/* ஆனது product_catalog அப்ஸ்ட்ரீமிற்கு அனுப்பப்படுகின்றன, மேலும் கோரிக்கைகள் /shopping-cart/* ஆனது shopping_cart அப்ஸ்ட்ரீமிற்கு அனுப்பப்படுகின்றன. அப்ஸ்ட்ரீம் தொகுதிகள் கோரிக்கைகளைக் கையாளும் பின்முனை சேவையகங்களை வரையறுக்கின்றன.
நன்மைகள்:
- அனைத்து கோரிக்கைகளுக்கும் மையப்படுத்தப்பட்ட நுழைவாயில்.
- ரூட்டிங், அங்கீகாரம் மற்றும் அங்கீகரிப்பு ஆகியவற்றை கையாளுகிறது.
- கிளையண்டுகளுக்கு சேவை கண்டறிதலை எளிதாக்குகிறது.
தீமைகள்:
- சரியாக அளவிடப்படாவிட்டால் ஒரு சிக்கலாக மாறலாம்.
- கட்டமைப்பிற்கு சிக்கலை சேர்க்கிறது.
- கவனமாக உள்ளமைவு மற்றும் மேலாண்மை தேவை.
5. முன்முனைக்கான பின்முனை (BFF):
முன்முனைக்கான பின்முனை (BFF) வடிவமானது ஒவ்வொரு முன்முனைக்கும் ஒரு தனி பின்முனை சேவையை உருவாக்குவதை உள்ளடக்குகிறது. ஒவ்வொரு BFF உம் பல பின்முனை சேவைகளிலிருந்து தரவுகளைத் திரட்டி, முன்முனையின் குறிப்பிட்ட தேவைகளுக்கு ஏற்ப பதிலைத் தனிப்பயனாக்குவதற்கு பொறுப்பாகும். ஒரு மைக்ரோ முன்முனை கட்டமைப்பில், ஒவ்வொரு மைக்ரோ முன்முனைக்கும் அதன் சொந்த BFF இருக்கலாம், இது தரவு பெறுவதை எளிதாக்குகிறது மற்றும் முன்முனை குறியீட்டின் சிக்கல்தன்மையைக் குறைக்கிறது. வெவ்வேறு தரவு வடிவங்கள் அல்லது திரட்டல்கள் தேவைப்படும் வெவ்வேறு வகையான கிளையண்டுகளுடன் (எ.கா., வலை, மொபைல்) கையாளும் போது இந்த அணுகுமுறை மிகவும் பயனுள்ளதாக இருக்கும்.
எடுத்துக்காட்டு:
ஒரு வலை பயன்பாடு மற்றும் ஒரு மொபைல் பயன்பாடு இரண்டும் தயாரிப்பு விவரங்களைக் காட்ட வேண்டும், ஆனால் அவற்றுக்கு சற்று மாறுபட்ட தரவு மற்றும் வடிவமைப்புகள் தேவை என்று கற்பனை செய்து பாருங்கள். முன்முனை நேரடியாக பல பின்முனை சேவைகளை அழைப்பதற்கும், தரவு மாற்றத்தை தானாகவே கையாளுவதற்கும் பதிலாக, ஒவ்வொரு முன்முனைக்கும் ஒரு BFF ஐ உருவாக்குகிறீர்கள்.
வலை BFF ஆனது ProductCatalogService, ReviewService, மற்றும் RecommendationService ஆகியவற்றிலிருந்து தரவுகளைத் திரட்டி, பெரிய திரையில் காட்சிப்படுத்த உகந்த பதிலைத் தரலாம். மறுபுறம், மொபைல் BFF ஆனது, தரவு பயன்பாட்டைக் குறைப்பதற்கும், மொபைல் சாதனங்களில் செயல்திறனை மேம்படுத்துவதற்கும் ProductCatalogService மற்றும் ReviewService இலிருந்து மிக அத்தியாவசிய தரவுகளை மட்டுமே பெறலாம்.
நன்மைகள்:
- குறிப்பிட்ட முன்முனைத் தேவைகளுக்கு உகந்ததாக்கப்பட்டது.
- முன்முனையில் சிக்கல்தன்மையைக் குறைக்கிறது.
- முன்முனைகள் மற்றும் பின்முனைகளின் சுயாதீனமான வளர்ச்சியை செயல்படுத்துகிறது.
தீமைகள்:
- பல பின்முனை சேவைகளை உருவாக்கி பராமரிக்க வேண்டும்.
- சரியாக நிர்வகிக்கப்படாவிட்டால் குறியீட்டு நகல் ஏற்படலாம்.
- செயல்பாட்டு சுமையைக் (operational overhead) கூட்டுகிறது.
முன்முனை மைக்ரோசர்வீஸ்களில் தொடர்பு உத்திகள்
மைக்ரோ முன்முனைகள் கண்டறியப்பட்டவுடன், அவை ஒரு தடையற்ற பயனர் அனுபவத்தை வழங்க ஒன்றோடொன்று தொடர்புகொள்ள வேண்டும். ஒரு முன்முனை மைக்ரோசர்வீஸ் கட்டமைப்பில் பயன்படுத்தக்கூடிய பல தொடர்பு வடிவங்கள் உள்ளன.
தொடர்பு வடிவங்கள்:
1. நேரடி தொடர்பு:
இந்த வடிவத்தில், மைக்ரோ முன்முனைகள் HTTP கோரிக்கைகள் அல்லது பிற நெறிமுறைகளைப் பயன்படுத்தி ஒன்றோடொன்று நேரடியாகத் தொடர்புகொள்கின்றன. இது எளிய தொடர்பு வடிவமாகும், ஆனால் இது இறுக்கமான பிணைப்பு (tight coupling) மற்றும் சிக்கலை அதிகரிக்கலாம். மைக்ரோ முன்முனைகள் வெவ்வேறு நெட்வொர்க்குகள் அல்லது பிராந்தியங்களில் அமைந்திருந்தால் இது செயல்திறன் சிக்கல்களுக்கும் வழிவகுக்கும்.
எடுத்துக்காட்டு:
ஒரு மைக்ரோ முன்முனை (எ.கா., ஒரு தயாரிப்பு பட்டியல் மைக்ரோ முன்முனை) தற்போதைய பயனரின் ஷாப்பிங் கார்ட் எண்ணிக்கையைக் காட்ட வேண்டும், இது மற்றொரு மைக்ரோ முன்முனையால் (ஷாப்பிங் கார்ட் மைக்ரோ முன்முனை) நிர்வகிக்கப்படுகிறது. தயாரிப்பு பட்டியல் மைக்ரோ முன்முனை ஷாப்பிங் கார்ட் மைக்ரோ முன்முனைக்கு நேரடியாக ஒரு HTTP கோரிக்கையை அனுப்பலாம்.
// In the product listing micro frontend:\n\nasync function getCartCount() {\n const response = await fetch('https://shopping-cart.example.com/cart/count');\n const data = await response.json();\n return data.count;\n}\n\n// ... display the cart count in the product listing\n
நன்மைகள்:
- செயல்படுத்த எளிதானது.
தீமைகள்:
- மைக்ரோ முன்முனைகளுக்கு இடையே இறுக்கமான பிணைப்பு.
- அதிகரித்த சிக்கல்தன்மை.
- சாத்தியமான செயல்திறன் சிக்கல்கள்.
- சார்புகளை நிர்வகிப்பது கடினம்.
2. நிகழ்வுகள் (வெளியிடு/பதிவுசெய் - Publish/Subscribe):
இந்த வடிவத்தில், மைக்ரோ முன்முனைகள் நிகழ்வுகளை வெளியிடுவதன் (publishing) மற்றும் பதிவுசெய்வதன் (subscribing) மூலம் ஒன்றோடொன்று தொடர்புகொள்கின்றன. ஒரு மைக்ரோ முன்முனை ஒரு நிகழ்வை வெளியிடும்போது, அந்த நிகழ்வுக்கு பதிவுசெய்துள்ள மற்ற அனைத்து மைக்ரோ முன்முனைகளும் ஒரு அறிவிப்பைப் பெறுகின்றன. இந்த வடிவம் தளர்வான பிணைப்பை (loose coupling) ஊக்குவிக்கிறது மற்றும் மைக்ரோ முன்முனைகள் பயன்பாட்டின் பிற பகுதிகளில் ஏற்படும் மாற்றங்களுக்கு, அந்த மாற்றங்களின் விவரங்களைத் தெரிந்து கொள்ளாமல், பதிலளிக்க அனுமதிக்கிறது.
எடுத்துக்காட்டு:
ஒரு பயனர் ஒரு பொருளை ஷாப்பிங் கார்ட்டில் சேர்க்கும்போது (ஷாப்பிங் கார்ட் மைக்ரோ முன்முனையால் நிர்வகிக்கப்படுகிறது), அது "cartItemAdded" என்று ஒரு நிகழ்வை வெளியிடுகிறது. இந்த நிகழ்வுக்கு பதிவுசெய்துள்ள தயாரிப்பு பட்டியல் மைக்ரோ முன்முனை, ஷாப்பிங் கார்ட் மைக்ரோ முன்முனையை நேரடியாக அழைக்காமல் காட்டப்படும் கார்ட் எண்ணிக்கையைப் புதுப்பிக்கிறது.
// Shopping Cart Micro Frontend (Publisher):\n\nfunction addItemToCart(item) {\n // ... add item to cart\n publishEvent('cartItemAdded', { itemId: item.id });\n}\n\nfunction publishEvent(eventName, data) {\n // ... publish the event using a message broker or custom event bus\n}\n\n// Product Listing Micro Frontend (Subscriber):\n\nsubscribeToEvent('cartItemAdded', (data) => {\n // ... update the displayed cart count based on the event data\n});\n\nfunction subscribeToEvent(eventName, callback) {\n // ... subscribe to the event using a message broker or custom event bus\n}\n
நன்மைகள்:
- மைக்ரோ முன்முனைகளுக்கு இடையே தளர்வான பிணைப்பு.
- அதிகரித்த நெகிழ்வுத்தன்மை.
- மேம்படுத்தப்பட்ட அளவிடுதல்.
தீமைகள்:
- ஒரு மெசேஜ் ப்ரோக்கர் அல்லது நிகழ்வு பஸ்ஸை செயல்படுத்த வேண்டும்.
- பிழைகளை கண்டறிவது கடினமாக இருக்கலாம்.
- இறுதி நிலைத்தன்மை (Eventual consistency) ஒரு சவாலாக இருக்கலாம்.
3. பகிரப்பட்ட நிலை (Shared State):
இந்த வடிவத்தில், மைக்ரோ முன்முனைகள் ஒரு பொதுவான நிலையைப் பகிர்ந்து கொள்கின்றன, இது ஒரு மைய இடத்தில் சேமிக்கப்படுகிறது, அதாவது ஒரு உலாவி குக்கி (browser cookie), உள்ளூர் சேமிப்பகம் (local storage), அல்லது பகிரப்பட்ட தரவுத்தளம். மைக்ரோ முன்முனைகள் பகிரப்பட்ட நிலையை அணுகவும் மாற்றியமைக்கவும் முடியும், இது அவை மறைமுகமாக ஒன்றோடொன்று தொடர்புகொள்ள அனுமதிக்கிறது. இந்த வடிவம் சிறிய அளவிலான தரவுகளைப் பகிர்வதற்கு பயனுள்ளதாக இருக்கும், ஆனால் சரியாக நிர்வகிக்கப்படாவிட்டால் செயல்திறன் சிக்கல்கள் மற்றும் தரவு முரண்பாடுகளுக்கு வழிவகுக்கும். பகிரப்பட்ட நிலையை நிர்வகிக்க Redux அல்லது Vuex போன்ற ஒரு நிலை மேலாண்மை நூலகத்தைப் பயன்படுத்துவதைக் கருத்தில் கொள்ளவும்.
எடுத்துக்காட்டு:
மைக்ரோ முன்முனைகள் பயனரின் அங்கீகார டோக்கனை ஒரு குக்கியில் சேமிக்கலாம். ஒவ்வொரு மைக்ரோ முன்முனையும் அங்கீகார சேவையுடன் நேரடியாகத் தொடர்புகொள்ளத் தேவையில்லாமல் பயனரின் அடையாளத்தைச் சரிபார்க்க குக்கியை அணுகலாம்.
// Setting the authentication token (e.g., in the authentication micro frontend)\n\ndocument.cookie = "authToken=your_auth_token; path=/";\n\n// Accessing the authentication token (e.g., in other micro frontends)\n\nfunction getAuthToken() {\n const cookies = document.cookie.split(';');\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n if (cookie.startsWith('authToken=')) {\n return cookie.substring('authToken='.length);\n }\n }\n return null;\n}\n\nconst authToken = getAuthToken();\nif (authToken) {\n // ... use the auth token to authenticate the user\n}\n
நன்மைகள்:
- சிறிய அளவிலான தரவுகளுக்கு செயல்படுத்த எளிதானது.
தீமைகள்:
- செயல்திறன் சிக்கல்களுக்கு வழிவகுக்கும்.
- தரவு முரண்பாடுகள் ஏற்படலாம்.
- நிலை மாற்றங்களை நிர்வகிப்பது கடினம்.
- கவனமாக கையாளப்படாவிட்டால் பாதுகாப்பு அபாயங்கள் (எ.கா., குக்கீகளில் முக்கியமான தரவை சேமிப்பது) ஏற்படலாம்.
4. விண்டோ நிகழ்வுகள் (தனிப்பயன் நிகழ்வுகள் - Custom Events):
மைக்ரோ முன்முனைகள் window பொருளில் அனுப்பப்படும் தனிப்பயன் நிகழ்வுகளைப் பயன்படுத்தி தொடர்புகொள்ளலாம். இது மைக்ரோ முன்முனைகள் வெவ்வேறு iframes அல்லது வலை கூறுகளில் (web components) ஏற்றப்பட்டிருந்தாலும் கூட தொடர்புகொள்ள அனுமதிக்கிறது. இது ஒரு உலாவி-சொந்த அணுகுமுறையாகும், ஆனால் மோதல்களைத் தவிர்ப்பதற்கும் நிலைத்தன்மையை பராமரிப்பதற்கும் நிகழ்வுப் பெயர்கள் மற்றும் தரவு வடிவங்களை கவனமாக நிர்வகிக்க வேண்டும்.
எடுத்துக்காட்டு:
// Micro Frontend A (Publisher)\n\nconst event = new CustomEvent('custom-event', { detail: { message: 'Hello from Micro Frontend A' } });\nwindow.dispatchEvent(event);\n\n// Micro Frontend B (Subscriber)\n\nwindow.addEventListener('custom-event', (event) => {\n console.log('Received event:', event.detail.message);\n});
நன்மைகள்:
- உலாவி உள்ளக ஆதரவு.
- அடிப்படை தொடர்புக்கு செயல்படுத்த ஒப்பீட்டளவில் எளிதானது.
தீமைகள்:
- உலகளாவிய பெயரிடப்பட்ட இடம் (Global namespace) மோதல்களுக்கு வழிவகுக்கும்.
- சிக்கலான நிகழ்வு கட்டமைப்புகளை நிர்வகிப்பது கடினம்.
- பெரிய பயன்பாடுகளுக்கு வரையறுக்கப்பட்ட அளவிடுதல்.
- பெயரிடும் மோதல்களைத் தவிர்க்க குழுக்களிடையே கவனமான ஒருங்கிணைப்பு தேவை.
5. மாட்யூல் ஃபெடரேஷன் (Webpack 5):
மாட்யூல் ஃபெடரேஷன் (Module Federation) ஒரு JavaScript பயன்பாட்டை இயங்கும் நேரத்தில் மற்றொரு பயன்பாட்டிலிருந்து குறியீட்டை மாறும் வகையில் ஏற்ற அனுமதிக்கிறது. இது npm தொகுப்புகளை (npm packages) வெளியிட மற்றும் பயன்படுத்தத் தேவையில்லாமல் வெவ்வேறு மைக்ரோ முன்முனைகளுக்கு இடையே குறியீடு மற்றும் சார்புகளை (dependencies) பகிர உதவுகிறது. தொகுக்கக்கூடிய மற்றும் நீட்டிக்கக்கூடிய முன்முனைகளை உருவாக்குவதற்கு இது ஒரு சக்திவாய்ந்த அணுகுமுறையாகும், ஆனால் இதற்கு கவனமான திட்டமிடல் மற்றும் உள்ளமைவு தேவை.
எடுத்துக்காட்டு:
மைக்ரோ முன்முனை A (Host) மைக்ரோ முன்முனை B (Remote) இலிருந்து ஒரு கூறுகளை ஏற்றுகிறது.
// Micro Frontend A (webpack.config.js)\n\nconst ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');\n\nmodule.exports = {\n // ... other webpack configurations\n plugins: [\n new ModuleFederationPlugin({\n name: 'MicroFrontendA',\n remotes: {\n 'MicroFrontendB': 'MicroFrontendB@http://localhost:3001/remoteEntry.js',\n },\n shared: ['react', 'react-dom'], // Share dependencies to avoid duplicates\n }),\n ],\n};\n\n// Micro Frontend A (Component)\n\nimport React from 'react';\nimport RemoteComponent from 'MicroFrontendB/Component';\n\nconst App = () => {\n return (\n \n Micro Frontend A
\n \n \n );\n};\n\nexport default App;\n\n// Micro Frontend B (webpack.config.js)\n\nconst ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');\n\nmodule.exports = {\n // ... other webpack configurations\n plugins: [\n new ModuleFederationPlugin({\n name: 'MicroFrontendB',\n exposes: {\n './Component': './src/Component',\n },\n shared: ['react', 'react-dom'],\n }),\n ],\n};\n\n// Micro Frontend B (src/Component.js)\n\nimport React from 'react';\n\nconst Component = () => {\n return Hello from Micro Frontend B!
;\n};\n\nexport default Component;
நன்மைகள்:
- npm தொகுப்புகள் இல்லாமல் குறியீடு பகிர்வு மற்றும் மறுபயன்பாடு.
- இயங்கும் நேரத்தில் கூறுகளின் மாறும் ஏற்றுதல்.
- மேம்படுத்தப்பட்ட உருவாக்க நேரங்கள் மற்றும் வரிசைப்படுத்தல் திறன்.
தீமைகள்:
- Webpack 5 அல்லது அதற்குப் பிறகு தேவை.
- உள்ளமைக்க சிக்கலாக இருக்கலாம்.
- பகிரப்பட்ட சார்புகளுடன் பதிப்பு இணக்க சிக்கல்கள் ஏற்படலாம்.
6. வலை கூறுகள் (Web Components):
வலை கூறுகள் (Web Components) என்பது வலை தரநிலைகளின் ஒரு தொகுப்பாகும், இது மறைக்கப்பட்ட ஸ்டைலிங் மற்றும் நடத்தையுடன் மீண்டும் பயன்படுத்தக்கூடிய தனிப்பயன் HTML கூறுகளை உருவாக்க அனுமதிக்கிறது. அடிப்படை கட்டமைப்பைப் பொருட்படுத்தாமல், எந்த வலை பயன்பாட்டிலும் ஒருங்கிணைக்கக்கூடிய மைக்ரோ முன்முனைகளை உருவாக்க அவை ஒரு தளம்-சாராத வழியை வழங்குகின்றன. சிறந்த மறைப்பை வழங்கும் அதே வேளையில், சிக்கலான நிலை மேலாண்மை அல்லது தரவு பிணைப்பு காட்சிகளைக் கையாள அவர்களுக்கு கூடுதல் கருவிகள் அல்லது கட்டமைப்புகள் தேவைப்படலாம்.
எடுத்துக்காட்டு:
// Micro Frontend A (Web Component)\n\nclass MyCustomElement extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' }); // Encapsulated shadow DOM\n this.shadowRoot.innerHTML = `\n \n Hello from Web Component!
\n `;\n }\n}\n\ncustomElements.define('my-custom-element', MyCustomElement);\n\n// Using the Web Component in any HTML page\n\n
நன்மைகள்:
- கட்டமைப்பு-சாராத மற்றும் வெவ்வேறு பயன்பாடுகளில் மீண்டும் பயன்படுத்தக்கூடியது.
- மறைக்கப்பட்ட ஸ்டைலிங் மற்றும் நடத்தை.
- தரப்படுத்தப்பட்ட வலை தொழில்நுட்பம்.
தீமைகள்:
- உதவி நூலகம் இல்லாமல் எழுதும்போது நீளமாக இருக்கலாம்.
- பழைய உலாவிகளுக்கு பாலிஃபில்கள் (polyfills) தேவைப்படலாம்.
- கட்டமைப்பு அடிப்படையிலான தீர்வுகளுடன் ஒப்பிடும்போது நிலை மேலாண்மை மற்றும் தரவு பிணைப்பு மிகவும் சிக்கலாக இருக்கலாம்.
சரியான உத்தியைத் தேர்ந்தெடுப்பது
உங்கள் முன்முனை மைக்ரோசர்வீஸ் கட்டமைப்பிற்கான சிறந்த சேவை கண்டறிதல் மற்றும் தொடர்பு உத்தி பல காரணிகளைப் பொறுத்தது, அவற்றுள்:
- உங்கள் பயன்பாட்டின் அளவு மற்றும் சிக்கல்தன்மை. சிறிய பயன்பாடுகளுக்கு, நிலையான கட்டமைப்பு அல்லது நேரடி தொடர்பு போன்ற எளிய அணுகுமுறை போதுமானதாக இருக்கலாம். பெரிய, சிக்கலான பயன்பாடுகளுக்கு, ஒரு சேவைப் பதிவு அல்லது நிகழ்வு-அடிப்படையிலான கட்டமைப்பு போன்ற வலுவான அணுகுமுறை பரிந்துரைக்கப்படுகிறது.
- உங்கள் குழுக்களுக்குத் தேவையான சுயாட்சி நிலை. குழுக்கள் அதிக சுயாட்சி தேவைப்பட்டால், நிகழ்வுகள் போன்ற தளர்வான பிணைப்பு தொடர்பு வடிவம் விரும்பப்படுகிறது. குழுக்கள் நெருக்கமாக ஒருங்கிணைக்க முடிந்தால், நேரடி தொடர்பு போன்ற இறுக்கமான பிணைப்பு வடிவம் ஏற்றுக்கொள்ளப்படலாம்.
- உங்கள் பயன்பாட்டின் செயல்திறன் தேவைகள். நேரடி தொடர்பு போன்ற சில தொடர்பு வடிவங்கள் நிகழ்வுகள் போன்றவற்றை விட அதிக செயல்திறன் கொண்டதாக இருக்கலாம். இருப்பினும், நேரடி தொடர்பின் செயல்திறன் நன்மைகள் அதிகரித்த சிக்கல்தன்மை மற்றும் இறுக்கமான பிணைப்பால் ஈடுசெய்யப்படலாம்.
- உங்கள் தற்போதைய உள்கட்டமைப்பு. உங்களிடம் ஏற்கனவே ஒரு சேவைப் பதிவு அல்லது மெசேஜ் ப்ரோக்கர் இருந்தால், உங்கள் முன்முனை மைக்ரோசர்வீஸ்களுக்கு அந்த உள்கட்டமைப்பைப் பயன்படுத்துவது அர்த்தமுள்ளதாகும்.
சிறந்த நடைமுறைகள்
உங்கள் முன்முனை மைக்ரோசர்வீஸ் கட்டமைப்பில் சேவை கண்டறிதல் மற்றும் தொடர்புகளை செயல்படுத்தும்போது பின்பற்ற வேண்டிய சில சிறந்த நடைமுறைகள் இங்கே:
- எளிமையாக வைத்திருங்கள். உங்கள் தேவைகளைப் பூர்த்தி செய்யும் எளிய அணுகுமுறையுடன் தொடங்கி, தேவைக்கேற்ப படிப்படியாக சிக்கலை அதிகரிக்கவும்.
- தளர்வான பிணைப்பை விரும்புங்கள். தளர்வான பிணைப்பு உங்கள் பயன்பாட்டை மிகவும் நெகிழ்வான, மீள்தன்மை கொண்ட மற்றும் பராமரிக்க எளிதாக்குகிறது.
- ஒரு நிலையான தொடர்பு வடிவத்தைப் பயன்படுத்தவும். உங்கள் மைக்ரோ முன்முனைகள் முழுவதும் ஒரு நிலையான தொடர்பு வடிவத்தைப் பயன்படுத்துவது உங்கள் பயன்பாட்டை புரிந்துகொள்ளவும் பிழைகளை கண்டறியவும் எளிதாக்குகிறது.
- உங்கள் சேவைகளை கண்காணிக்கவும். உங்கள் மைக்ரோ முன்முனைகள் சரியாக செயல்படுகிறதா என்பதை உறுதிப்படுத்த அவற்றின் ஆரோக்கியம் மற்றும் செயல்திறனைக் கண்காணிக்கவும்.
- வலுவான பிழை கையாளுதலை செயல்படுத்தவும். பிழைகளை நேர்த்தியாகக் கையாளவும் மற்றும் பயனர்களுக்கு தகவலறிந்த பிழை செய்திகளை வழங்கவும்.
- உங்கள் கட்டமைப்பை ஆவணப்படுத்தவும். உங்கள் பயன்பாட்டில் பயன்படுத்தப்படும் சேவை கண்டறிதல் மற்றும் தொடர்பு வடிவங்களை ஆவணப்படுத்தி, மற்ற டெவலப்பர்கள் அதை புரிந்துகொள்ளவும் பராமரிக்கவும் உதவவும்.
முடிவுரை
முன்முனை மைக்ரோசர்வீஸ்கள் அளவிடுதல், பராமரிப்பு மற்றும் குழு சுயாட்சி ஆகியவற்றின் அடிப்படையில் குறிப்பிடத்தக்க நன்மைகளை வழங்குகின்றன. இருப்பினும், ஒரு வெற்றிகரமான மைக்ரோ முன்முனை கட்டமைப்பை செயல்படுத்துவதற்கு சேவை கண்டறிதல் மற்றும் தொடர்பு உத்திகளை கவனமாக கருத்தில் கொள்ள வேண்டும். சரியான அணுகுமுறைகளைத் தேர்ந்தெடுத்து சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலம், உங்கள் பயனர்கள் மற்றும் உங்கள் மேம்பாட்டுக் குழுக்களின் தேவைகளைப் பூர்த்தி செய்யும் ஒரு வலுவான மற்றும் நெகிழ்வான முன்முனையை நீங்கள் உருவாக்க முடியும்.
மைக்ரோ முன்முனைகளை வெற்றிகரமாக செயல்படுத்துவதற்கான திறவுகோல், வெவ்வேறு சேவை கண்டறிதல் மற்றும் தொடர்பு வடிவங்களுக்கு இடையிலான சமரசங்களைப் புரிந்துகொள்வதில் உள்ளது. நிலையான கட்டமைப்பு எளிமையை வழங்கினாலும், ஒரு சேவைப் பதிவின் இயக்கவியல் அதில் இல்லை. நேரடி தொடர்பு நேரடியானதாகத் தோன்றலாம், ஆனால் இறுக்கமான பிணைப்புக்கு வழிவகுக்கும், அதேசமயம் நிகழ்வு-அடிப்படையிலான கட்டமைப்புகள் தளர்வான பிணைப்பை ஊக்குவிக்கின்றன, ஆனால் மெசேஜ் ப்ரோக்கரிங் மற்றும் இறுதி நிலைத்தன்மை (eventual consistency) ஆகியவற்றின் அடிப்படையில் சிக்கலை அறிமுகப்படுத்துகின்றன. மாட்யூல் ஃபெடரேஷன் (Module federation) குறியீட்டைப் பகிர்வதற்கு ஒரு சக்திவாய்ந்த வழியை வழங்குகிறது, ஆனால் அதற்கு ஒரு நவீன உருவாக்கக் கருவித்தொகுதி (build toolchain) தேவைப்படுகிறது. இதேபோல், வலை கூறுகள் (web components) ஒரு தரப்படுத்தப்பட்ட அணுகுமுறையை வழங்குகின்றன, இருப்பினும் நிலை மற்றும் தரவு பிணைப்பை நிர்வகிக்கும் போது அவை கட்டமைப்புகளால் பூர்த்தி செய்யப்பட வேண்டும்.
இறுதியாக, உகந்த தேர்வு திட்டத்தின் குறிப்பிட்ட தேவைகள், குழுவின் நிபுணத்துவம் மற்றும் ஒட்டுமொத்த கட்டடக்கலை இலக்குகளைப் பொறுத்தது. நன்கு திட்டமிடப்பட்ட உத்தி, சிறந்த நடைமுறைகளைப் பின்பற்றுவதுடன், வலுவான மற்றும் அளவிடக்கூடிய மைக்ரோ முன்முனை கட்டமைப்பை உருவாக்கி, சிறந்த பயனர் அனுபவத்தை வழங்க முடியும்.