ஜாவாஸ்கிரிப்ட்டின் அசிங்க் சூழல் மற்றும் கோரிக்கை-சார்ந்த மாறிகளை திறம்பட நிர்வகிப்பது எப்படி என்பதை ஆராயுங்கள். AsyncLocalStorage, அதன் பயன்பாடுகள், சிறந்த நடைமுறைகள் பற்றி அறியுங்கள்.
ஜாவாஸ்கிரிப்ட் அசிங்க் சூழல்: கோரிக்கை-சார்ந்த மாறிகளை நிர்வகித்தல்
ஒத்திசைவற்ற நிரலாக்கம் என்பது நவீன ஜாவாஸ்கிரிப்ட் மேம்பாட்டின் ஒரு மூலக்கல்லாகும், குறிப்பாக Node.js போன்ற சூழல்களில், செயல்திறனுக்காக நான்-பிளாக்கிங் I/O முக்கியமானது. இருப்பினும், ஒத்திசைவற்ற செயல்பாடுகளுக்கு இடையில் சூழலை நிர்வகிப்பது சவாலானதாக இருக்கும். இங்குதான் ஜாவாஸ்கிரிப்ட்டின் அசிங்க் சூழல், குறிப்பாக AsyncLocalStorage
, முக்கிய பங்கு வகிக்கிறது.
அசிங்க் சூழல் என்றால் என்ன?
அசிங்க் சூழல் என்பது ஒரு ஒத்திசைவற்ற செயல்பாட்டுடன், அதன் வாழ்க்கைச் சுழற்சி முழுவதும் நீடிக்கும் தரவை இணைக்கும் திறனைக் குறிக்கிறது. கோரிக்கை-சார்ந்த தகவல்களை (எ.கா., பயனர் ஐடி, கோரிக்கை ஐடி, ட்ரேசிங் தகவல்) பல ஒத்திசைவற்ற அழைப்புகளில் பராமரிக்க வேண்டிய சூழ்நிலைகளில் இது அவசியமானது. முறையான சூழல் மேலாண்மை இல்லாமல், பிழைதிருத்தம், பதிவு செய்தல் மற்றும் பாதுகாப்பு ஆகியவை கணிசமாக மிகவும் கடினமாகிவிடும்.
ஒத்திசைவற்ற செயல்பாடுகளில் சூழலைப் பராமரிப்பதில் உள்ள சவால்
சூழலை நிர்வகிப்பதற்கான பாரம்பரிய அணுகுமுறைகள், அதாவது செயல்பாட்டு அழைப்புகள் மூலம் மாறிகளை வெளிப்படையாக அனுப்புவது போன்றவை, ஒத்திசைவற்ற குறியீட்டின் சிக்கல் அதிகரிக்கும்போது சிரமமானதாகவும் பிழை ஏற்படக்கூடியதாகவும் மாறும். கால்பேக் ஹெல் மற்றும் ப்ராமிஸ் செயின்கள் சூழலின் ஓட்டத்தை மறைக்கக்கூடும், இது பராமரிப்பு சிக்கல்களுக்கும் சாத்தியமான பாதுகாப்பு பாதிப்புகளுக்கும் வழிவகுக்கும். இந்த எளிமைப்படுத்தப்பட்ட உதாரணத்தைக் கவனியுங்கள்:
function processRequest(req, res) {
const userId = req.userId;
fetchData(userId, (data) => {
transformData(userId, data, (transformedData) => {
logData(userId, transformedData, () => {
res.send(transformedData);
});
});
});
}
இந்த எடுத்துக்காட்டில், userId
மீண்டும் மீண்டும் நெஸ்டட் கால்பேக்குகள் மூலம் அனுப்பப்படுகிறது. இந்த அணுகுமுறை சொற்பொழிவாக இருப்பது மட்டுமல்லாமல், செயல்பாடுகளை இறுக்கமாக இணைக்கிறது, இதனால் அவற்றை மீண்டும் பயன்படுத்த முடியாததாகவும் சோதிக்க கடினமானதாகவும் ஆக்குகிறது.
AsyncLocalStorage அறிமுகம்
AsyncLocalStorage
என்பது Node.js இல் உள்ள ஒரு உள்ளமைக்கப்பட்ட மாட்யூல் ஆகும், இது ஒரு குறிப்பிட்ட ஒத்திசைவற்ற சூழலுக்குள் உள்ள தரவைச் சேமிப்பதற்கான ஒரு வழிமுறையை வழங்குகிறது. இது ஒரே εκτέλεση சூழலில் ஒத்திசைவற்ற எல்லைகளுக்கு இடையில் தானாகப் பரப்பப்படும் மதிப்புகளை அமைக்கவும் மீட்டெடுக்கவும் உங்களை அனுமதிக்கிறது. இது கோரிக்கை-சார்ந்த மாறிகளின் நிர்வாகத்தை கணிசமாக எளிதாக்குகிறது.
AsyncLocalStorage எவ்வாறு செயல்படுகிறது
AsyncLocalStorage
தற்போதைய ஒத்திசைவற்ற செயல்பாட்டுடன் தொடர்புடைய ஒரு சேமிப்பக சூழலை உருவாக்குவதன் மூலம் செயல்படுகிறது. ஒரு புதிய ஒத்திசைவற்ற செயல்பாடு தொடங்கப்படும்போது (எ.கா., ஒரு ப்ராமிஸ், ஒரு கால்பேக்), சேமிப்பக சூழல் தானாகவே புதிய செயல்பாட்டிற்குப் பரப்பப்படுகிறது. இது ஒத்திசைவற்ற அழைப்புகளின் முழு சங்கிலியிலும் ஒரே தரவை அணுக முடியும் என்பதை உறுதி செய்கிறது.
AsyncLocalStorage-இன் அடிப்படைப் பயன்பாடு
AsyncLocalStorage
-ஐ எவ்வாறு பயன்படுத்துவது என்பதற்கான ஒரு அடிப்படை எடுத்துக்காட்டு இங்கே:
const { AsyncLocalStorage } = require('async_hooks');
const asyncLocalStorage = new AsyncLocalStorage();
function processRequest(req, res) {
const userId = req.userId;
asyncLocalStorage.run(new Map(), () => {
asyncLocalStorage.getStore().set('userId', userId);
fetchData().then(data => {
return transformData(data);
}).then(transformedData => {
return logData(transformedData);
}).then(() => {
res.send(transformedData);
});
});
}
async function fetchData() {
const userId = asyncLocalStorage.getStore().get('userId');
// ... fetch data using userId
return data;
}
async function transformData(data) {
const userId = asyncLocalStorage.getStore().get('userId');
// ... transform data using userId
return transformedData;
}
async function logData(data) {
const userId = asyncLocalStorage.getStore().get('userId');
// ... log data using userId
return;
}
இந்த எடுத்துக்காட்டில்:
- நாம்
AsyncLocalStorage
-இன் ஒரு நிகழ்வை உருவாக்குகிறோம். processRequest
செயல்பாட்டில், ஒரு புதிய சேமிப்பக நிகழ்வின் (இந்த வழக்கில் ஒருMap
) சூழலில் ஒரு செயல்பாட்டை εκτελέσει செய்யasyncLocalStorage.run
-ஐப் பயன்படுத்துகிறோம்.asyncLocalStorage.getStore().set('userId', userId)
-ஐப் பயன்படுத்தி சேமிப்பகத்தில்userId
-ஐ அமைக்கிறோம்.- ஒத்திசைவற்ற செயல்பாடுகளுக்குள் (
fetchData
,transformData
,logData
),asyncLocalStorage.getStore().get('userId')
-ஐப் பயன்படுத்திuserId
-ஐ மீட்டெடுக்கலாம்.
AsyncLocalStorage-க்கான பயன்பாட்டு வழக்குகள்
AsyncLocalStorage
பின்வரும் சூழ்நிலைகளில் குறிப்பாக பயனுள்ளதாக இருக்கும்:
1. கோரிக்கை தடமறிதல் (Request Tracing)
விநியோகிக்கப்பட்ட அமைப்புகளில், செயல்திறனைக் கண்காணிக்கவும் மற்றும் தடைகளை அடையாளம் காணவும் பல சேவைகளில் கோரிக்கைகளைத் தடமறிவது முக்கியம். AsyncLocalStorage
ஒரு தனித்துவமான கோரிக்கை ஐடியைச் சேமிக்கப் பயன்படுத்தப்படலாம், இது சேவை எல்லைகளுக்கு இடையில் பரப்பப்படுகிறது. இது வெவ்வேறு சேவைகளிலிருந்து வரும் பதிவுகள் மற்றும் அளவீடுகளை தொடர்புபடுத்த உங்களை அனுமதிக்கிறது, கோரிக்கையின் பயணத்தின் ஒரு விரிவான பார்வையை வழங்குகிறது. உதாரணமாக, ஒரு மைக்ரோசர்வீஸ் கட்டமைப்பைக் கருத்தில் கொள்ளுங்கள், அங்கு ஒரு பயனர் கோரிக்கை ஒரு API கேட்வே, ஒரு அங்கீகார சேவை மற்றும் ஒரு தரவு செயலாக்க சேவை வழியாக செல்கிறது. AsyncLocalStorage
-ஐப் பயன்படுத்தி, API கேட்வேயில் ஒரு தனித்துவமான கோரிக்கை ஐடியை உருவாக்கி, கோரிக்கையைக் கையாளும் அனைத்து அடுத்தடுத்த சேவைகளுக்கும் தானாகப் பரப்பலாம்.
2. பதிவு சூழல் (Logging Context)
நிகழ்வுகளைப் பதிவுசெய்யும்போது, பயனர் ஐடி, கோரிக்கை ஐடி அல்லது அமர்வு ஐடி போன்ற சூழல் சார்ந்த தகவல்களைச் சேர்ப்பது பெரும்பாலும் உதவியாக இருக்கும். AsyncLocalStorage
இந்தத் தகவலைப் பதிவு செய்திகளில் தானாகச் சேர்க்கப் பயன்படுத்தப்படலாம், இது பிழைகளைத் திருத்துவதையும் சிக்கல்களைப் பகுப்பாய்வு செய்வதையும் எளிதாக்குகிறது. உங்கள் பயன்பாட்டிற்குள் பயனர் செயல்பாட்டைக் கண்காணிக்க வேண்டிய ஒரு சூழ்நிலையை கற்பனை செய்து பாருங்கள். AsyncLocalStorage
-இல் பயனர் ஐடியைச் சேமிப்பதன் மூலம், அந்த பயனரின் அமர்வு தொடர்பான அனைத்து பதிவு செய்திகளிலும் அதைத் தானாகச் சேர்க்கலாம், இது அவர்களின் நடத்தை மற்றும் அவர்கள் சந்திக்கக்கூடிய சாத்தியமான சிக்கல்கள் பற்றிய மதிப்புமிக்க நுண்ணறிவுகளை வழங்குகிறது.
3. அங்கீகாரம் மற்றும் அங்கீகாரம்
AsyncLocalStorage
பயனரின் பாத்திரங்கள் மற்றும் அனுமதிகள் போன்ற அங்கீகாரம் மற்றும் அங்கீகாரத் தகவல்களைச் சேமிக்கப் பயன்படுத்தப்படலாம். இது உங்கள் பயன்பாடு முழுவதும் அணுகல் கட்டுப்பாட்டுக் கொள்கைகளைச் செயல்படுத்த உங்களை அனுமதிக்கிறது, ஒவ்வொரு செயல்பாட்டிற்கும் பயனரின் சான்றுகளை வெளிப்படையாக அனுப்ப வேண்டிய அவசியமின்றி. ஒரு இ-காமர்ஸ் பயன்பாட்டைக் கருத்தில் கொள்ளுங்கள், அங்கு வெவ்வேறு பயனர்களுக்கு வெவ்வேறு அணுகல் நிலைகள் உள்ளன (எ.கா., நிர்வாகிகள், வழக்கமான வாடிக்கையாளர்கள்). AsyncLocalStorage
-இல் பயனரின் பாத்திரங்களைச் சேமிப்பதன் மூலம், சில செயல்களைச் செய்ய அனுமதிக்கும் முன் அவர்களின் அனுமதிகளை எளிதாகச் சரிபார்க்கலாம், அங்கீகரிக்கப்பட்ட பயனர்கள் மட்டுமே முக்கியமான தரவு அல்லது செயல்பாட்டை அணுக முடியும் என்பதை உறுதிசெய்கிறது.
4. தரவுத்தள பரிவர்த்தனைகள்
தரவுத்தளங்களுடன் பணிபுரியும் போது, பல ஒத்திசைவற்ற செயல்பாடுகளில் பரிவர்த்தனைகளை நிர்வகிக்க வேண்டியது அவசியம். AsyncLocalStorage
தரவுத்தள இணைப்பு அல்லது பரிவர்த்தனை பொருளைச் சேமிக்கப் பயன்படுத்தப்படலாம், ஒரே கோரிக்கையில் உள்ள அனைத்து செயல்பாடுகளும் ஒரே பரிவர்த்தனைக்குள் செயல்படுத்தப்படுவதை உறுதி செய்கிறது. உதாரணமாக, ஒரு பயனர் ஒரு ஆர்டரை வைத்தால், நீங்கள் பல அட்டவணைகளைப் புதுப்பிக்க வேண்டியிருக்கலாம் (எ.கா., ஆர்டர்கள், ஆர்டர்_ஐட்டம்கள், இருப்பு). AsyncLocalStorage
-இல் தரவுத்தள பரிவர்த்தனைப் பொருளைச் சேமிப்பதன் மூலம், இந்த எல்லா புதுப்பிப்புகளும் ஒரே பரிவர்த்தனைக்குள் செய்யப்படுவதை உறுதிசெய்யலாம், இது அணுத்தன்மை மற்றும் நிலைத்தன்மையை உறுதி செய்கிறது.
5. பல-குத்தகைதாரர் அமைப்பு (Multi-Tenancy)
பல-குத்தகைதாரர் பயன்பாடுகளில், ஒவ்வொரு குத்தகைதாரருக்கும் தரவு மற்றும் வளங்களைப் பிரிப்பது அவசியம். AsyncLocalStorage
குத்தகைதாரர் ஐடியைச் சேமிக்கப் பயன்படுத்தப்படலாம், இது தற்போதைய குத்தகைதாரரின் அடிப்படையில் கோரிக்கைகளை பொருத்தமான தரவுக் கடை அல்லது வளத்திற்கு மாறும் வகையில் வழிநடத்த உங்களை அனுமதிக்கிறது. ஒரு SaaS தளத்தை கற்பனை செய்து பாருங்கள், அங்கு பல நிறுவனங்கள் ஒரே பயன்பாட்டு நிகழ்வைப் பயன்படுத்துகின்றன. AsyncLocalStorage
-இல் குத்தகைதாரர் ஐடியைச் சேமிப்பதன் மூலம், ஒவ்வொரு நிறுவனத்தின் தரவும் தனித்தனியாக வைக்கப்படுவதையும், அவர்கள் தங்கள் சொந்த வளங்களை மட்டுமே அணுக முடியும் என்பதையும் உறுதிசெய்யலாம்.
AsyncLocalStorage-ஐப் பயன்படுத்துவதற்கான சிறந்த நடைமுறைகள்
AsyncLocalStorage
ஒரு சக்திவாய்ந்த கருவியாக இருந்தாலும், சாத்தியமான செயல்திறன் சிக்கல்களைத் தவிர்க்கவும் மற்றும் குறியீட்டுத் தெளிவைப் பராமரிக்கவும் அதை புத்திசாலித்தனமாகப் பயன்படுத்துவது முக்கியம். மனதில் கொள்ள வேண்டிய சில சிறந்த நடைமுறைகள் இங்கே:
1. தரவு சேமிப்பைக் குறைத்தல்
AsyncLocalStorage
-இல் முற்றிலும் தேவையான தரவை மட்டுமே சேமிக்கவும். அதிக அளவு தரவைச் சேமிப்பது செயல்திறனைப் பாதிக்கலாம், குறிப்பாக அதிக ஒரே நேரத்தில் செயல்படும் சூழல்களில். உதாரணமாக, முழு பயனர் பொருளையும் சேமிப்பதற்குப் பதிலாக, பயனர் ஐடியை மட்டும் சேமித்து, தேவைப்படும்போது கேச் அல்லது தரவுத்தளத்திலிருந்து பயனர் பொருளை மீட்டெடுக்கவும்.
2. அதிகப்படியான சூழல் மாற்றங்களைத் தவிர்த்தல்
அடிக்கடி சூழல் மாறுவதும் செயல்திறனைப் பாதிக்கலாம். AsyncLocalStorage
-இலிருந்து மதிப்புகளை அமைக்கும் மற்றும் மீட்டெடுக்கும் எண்ணிக்கையைக் குறைக்கவும். சேமிப்பக சூழலை அணுகுவதன் மேல்நிலையைக் குறைக்க, அடிக்கடி அணுகப்படும் மதிப்புகளை செயல்பாட்டிற்குள் உள்ளூரில் கேச் செய்யவும். உதாரணமாக, ஒரு செயல்பாட்டிற்குள் பயனர் ஐடியை பலமுறை அணுக வேண்டியிருந்தால், அதை AsyncLocalStorage
-இலிருந்து ஒருமுறை மீட்டெடுத்து, அடுத்தடுத்த பயன்பாட்டிற்காக ஒரு உள்ளூர் மாறியில் சேமிக்கவும்.
3. தெளிவான மற்றும் நிலையான பெயரிடும் மரபுகளைப் பயன்படுத்துங்கள்
AsyncLocalStorage
-இல் நீங்கள் சேமிக்கும் விசைகளுக்கு தெளிவான மற்றும் நிலையான பெயரிடும் மரபுகளைப் பயன்படுத்தவும். இது குறியீடு வாசிப்புத்திறன் மற்றும் பராமரிப்புத்திறனை மேம்படுத்தும். உதாரணமாக, ஒரு குறிப்பிட்ட அம்சம் அல்லது டொமைன் தொடர்பான அனைத்து விசைகளுக்கும் request.id
அல்லது user.id
போன்ற ஒரு நிலையான முன்னொட்டைப் பயன்படுத்தவும்.
4. பயன்பாட்டிற்குப் பிறகு சுத்தம் செய்தல்
ஒத்திசைவற்ற செயல்பாடு முடிந்ததும் AsyncLocalStorage
தானாகவே சேமிப்பக சூழலை சுத்தம் செய்தாலும், அது இனி தேவைப்படாதபோது சேமிப்பக சூழலை வெளிப்படையாக சுத்தம் செய்வது ஒரு நல்ல நடைமுறையாகும். இது நினைவக கசிவுகளைத் தடுக்கவும் செயல்திறனை மேம்படுத்தவும் உதவும். சூழலை வெளிப்படையாக சுத்தம் செய்ய exit
முறையைப் பயன்படுத்தி இதை நீங்கள் அடையலாம்.
5. செயல்திறன் தாக்கங்களைக் கருத்தில் கொள்ளுங்கள்
AsyncLocalStorage
-ஐப் பயன்படுத்துவதன் செயல்திறன் தாக்கங்கள் குறித்து எச்சரிக்கையாக இருங்கள், குறிப்பாக அதிக ஒரே நேரத்தில் செயல்படும் சூழல்களில். உங்கள் குறியீடு உங்கள் செயல்திறன் தேவைகளைப் பூர்த்தி செய்வதை உறுதிசெய்ய உங்கள் குறியீட்டை பெஞ்ச்மார்க் செய்யுங்கள். சூழல் மேலாண்மை தொடர்பான சாத்தியமான தடைகளைக் கண்டறிய உங்கள் பயன்பாட்டை சுயவிவரப்படுத்தவும். AsyncLocalStorage
ஏற்றுக்கொள்ள முடியாத செயல்திறன் மேல்நிலையை அறிமுகப்படுத்தினால், வெளிப்படையான சூழல் அனுப்புதல் போன்ற மாற்று அணுகுமுறைகளைக் கருத்தில் கொள்ளுங்கள்.
6. நூலகங்களில் எச்சரிக்கையுடன் பயன்படுத்தவும்
பொதுவான பயன்பாட்டிற்காக உருவாக்கப்பட்ட நூலகங்களில் AsyncLocalStorage
-ஐ நேரடியாகப் பயன்படுத்துவதைத் தவிர்க்கவும். நூலகங்கள் அவை பயன்படுத்தப்படும் சூழலைப் பற்றி அனுமானங்களைச் செய்யக்கூடாது. அதற்கு பதிலாக, பயனர்கள் சூழல் சார்ந்த தகவல்களை வெளிப்படையாக அனுப்ப விருப்பங்களை வழங்கவும். இது பயனர்கள் தங்கள் பயன்பாடுகளில் சூழல் எவ்வாறு நிர்வகிக்கப்படுகிறது என்பதைக் கட்டுப்படுத்த அனுமதிக்கிறது மற்றும் சாத்தியமான மோதல்கள் அல்லது எதிர்பாராத நடத்தைகளைத் தவிர்க்கிறது.
AsyncLocalStorage-க்கு மாற்றுகள்
AsyncLocalStorage
ஒரு வசதியான மற்றும் சக்திவாய்ந்த கருவியாக இருந்தாலும், ஒவ்வொரு சூழ்நிலைக்கும் இது எப்போதும் சிறந்த தீர்வு அல்ல. கருத்தில் கொள்ள வேண்டிய சில மாற்றுகள் இங்கே:
1. வெளிப்படையான சூழல் அனுப்புதல்
எளிமையான அணுகுமுறை, சூழல் சார்ந்த தகவல்களை செயல்பாடுகளுக்கு வாதங்களாக வெளிப்படையாக அனுப்புவதாகும். இந்த அணுகுமுறை நேரடியானது மற்றும் புரிந்துகொள்ள எளிதானது, ஆனால் குறியீட்டின் சிக்கல் அதிகரிக்கும்போது இது சிரமமாக மாறும். வெளிப்படையான சூழல் அனுப்புதல், சூழல் ஒப்பீட்டளவில் சிறியதாகவும், குறியீடு ஆழமாக நெஸ்டட் செய்யப்படாத எளிய சூழ்நிலைகளுக்கு ஏற்றது. இருப்பினும், மிகவும் சிக்கலான சூழ்நிலைகளுக்கு, இது படிக்கவும் பராமரிக்கவும் கடினமான குறியீட்டிற்கு வழிவகுக்கும்.
2. சூழல் பொருள்கள் (Context Objects)
தனிப்பட்ட மாறிகளை அனுப்புவதற்குப் பதிலாக, அனைத்து சூழல் சார்ந்த தகவல்களையும் உள்ளடக்கிய ஒரு சூழல் பொருளை நீங்கள் உருவாக்கலாம். இது செயல்பாட்டு கையொப்பங்களை எளிதாக்கும் மற்றும் குறியீட்டை மேலும் படிக்கக்கூடியதாக மாற்றும். சூழல் பொருள்கள் வெளிப்படையான சூழல் அனுப்புதல் மற்றும் AsyncLocalStorage
-க்கு இடையில் ஒரு நல்ல சமரசமாகும். அவை தொடர்புடைய சூழல் சார்ந்த தகவல்களை ஒன்றாகக் குழுவாக்க ஒரு வழியை வழங்குகின்றன, இது குறியீட்டை மேலும் ஒழுங்கமைக்கப்பட்டதாகவும் புரிந்துகொள்ள எளிதானதாகவும் ஆக்குகிறது. இருப்பினும், அவற்றுக்கு ஒவ்வொரு செயல்பாட்டிற்கும் சூழல் பொருளை வெளிப்படையாக அனுப்ப வேண்டிய தேவை உள்ளது.
3. அசிங்க் ஹூக்ஸ் (பரிசோதனைக்கு)
Node.js-இன் async_hooks
மாட்யூல் ஒத்திசைவற்ற செயல்பாடுகளைக் கண்காணிப்பதற்கான ஒரு பொதுவான பொறிமுறையை வழங்குகிறது. இது AsyncLocalStorage
-ஐ விடப் பயன்படுத்த மிகவும் சிக்கலானது என்றாலும், இது அதிக நெகிழ்வுத்தன்மை மற்றும் கட்டுப்பாட்டை வழங்குகிறது. async_hooks
முதன்மையாக பரிசோதனை மற்றும் பிழைதிருத்த நோக்கங்களுக்காக வடிவமைக்கப்பட்டுள்ளது. இது ஒத்திசைவற்ற செயல்பாடுகளின் வாழ்க்கைச் சுழற்சியைக் கண்காணிக்கவும் அவற்றின் εκτέλεση பற்றிய தகவல்களைச் சேகரிக்கவும் உங்களை அனுமதிக்கிறது. இருப்பினும், அதன் சாத்தியமான செயல்திறன் மேல்நிலை காரணமாக பொதுவான நோக்கத்திற்கான சூழல் நிர்வாகத்திற்கு இது பரிந்துரைக்கப்படவில்லை.
4. கண்டறியும் சூழல் (OpenTelemetry)
OpenTelemetry தடயங்கள், அளவீடுகள் மற்றும் பதிவுகள் உள்ளிட்ட தொலைத்தொடர்பு தரவைச் சேகரிப்பதற்கும் ஏற்றுமதி செய்வதற்கும் ஒரு தரப்படுத்தப்பட்ட API-ஐ வழங்குகிறது. அதன் கண்டறியும் சூழல் அம்சங்கள் விநியோகிக்கப்பட்ட அமைப்புகளில் சூழல் பரவலை நிர்வகிப்பதற்கான ஒரு மேம்பட்ட மற்றும் வலுவான தீர்வை வழங்குகின்றன. OpenTelemetry உடன் ஒருங்கிணைப்பது வெவ்வேறு சேவைகள் மற்றும் தளங்களில் சூழல் நிலைத்தன்மையை உறுதிப்படுத்த ஒரு விற்பனையாளர்-நடுநிலை வழியை வழங்குகிறது. இது சிக்கலான மைக்ரோசர்வீஸ் கட்டமைப்புகளில் குறிப்பாக பயனுள்ளதாக இருக்கும், அங்கு சூழல் சேவை எல்லைகளுக்கு இடையில் பரப்பப்பட வேண்டும்.
நிஜ உலக உதாரணங்கள்
வெவ்வேறு சூழ்நிலைகளில் AsyncLocalStorage
எவ்வாறு பயன்படுத்தப்படலாம் என்பதற்கான சில நிஜ உலக உதாரணங்களை ஆராய்வோம்.
1. இ-காமர்ஸ் பயன்பாடு: கோரிக்கை தடமறிதல்
ஒரு இ-காமர்ஸ் பயன்பாட்டில், தயாரிப்பு κατάλογος, ஷாப்பிங் கார்ட் மற்றும் கட்டண நுழைவாயில் போன்ற பல சேவைகளில் பயனர் கோரிக்கைகளைக் கண்காணிக்க AsyncLocalStorage
-ஐப் பயன்படுத்தலாம். இது ஒவ்வொரு சேவையின் செயல்திறனைக் கண்காணிக்கவும், பயனர் அனுபவத்தைப் பாதிக்கக்கூடிய தடைகளைக் கண்டறியவும் உங்களை அனுமதிக்கிறது.
// In the API gateway
const { AsyncLocalStorage } = require('async_hooks');
const { v4: uuidv4 } = require('uuid');
const asyncLocalStorage = new AsyncLocalStorage();
app.use((req, res, next) => {
const requestId = uuidv4();
asyncLocalStorage.run(new Map(), () => {
asyncLocalStorage.getStore().set('requestId', requestId);
res.setHeader('X-Request-Id', requestId);
next();
});
});
// In the product catalog service
async function getProductDetails(productId) {
const requestId = asyncLocalStorage.getStore().get('requestId');
// Log the request ID along with other details
logger.info(`[${requestId}] Fetching product details for product ID: ${productId}`);
// ... fetch product details
}
2. SaaS தளம்: பல-குத்தகைதாரர் அமைப்பு
ஒரு SaaS தளத்தில், குத்தகைதாரர் ஐடியைச் சேமிக்கவும், தற்போதைய குத்தகைதாரரின் அடிப்படையில் கோரிக்கைகளை பொருத்தமான தரவுக் கடை அல்லது வளத்திற்கு மாறும் வகையில் வழிநடத்தவும் AsyncLocalStorage
-ஐப் பயன்படுத்தலாம். இது ஒவ்வொரு குத்தகைதாரரின் தரவும் தனித்தனியாக வைக்கப்படுவதையும், அவர்கள் தங்கள் சொந்த வளங்களை மட்டுமே அணுக முடியும் என்பதையும் உறுதி செய்கிறது.
// Middleware to extract tenant ID from the request
app.use((req, res, next) => {
const tenantId = req.headers['x-tenant-id'];
asyncLocalStorage.run(new Map(), () => {
asyncLocalStorage.getStore().set('tenantId', tenantId);
next();
});
});
// Function to fetch data for a specific tenant
async function fetchData(query) {
const tenantId = asyncLocalStorage.getStore().get('tenantId');
const db = getDatabaseConnection(tenantId);
return db.query(query);
}
3. மைக்ரோசர்வீஸ் கட்டமைப்பு: பதிவு சூழல்
ஒரு மைக்ரோசர்வீஸ் கட்டமைப்பில், பயனர் ஐடியைச் சேமிக்கவும், வெவ்வேறு சேவைகளிலிருந்து வரும் பதிவு செய்திகளில் அதைத் தானாகச் சேர்க்கவும் AsyncLocalStorage
-ஐப் பயன்படுத்தலாம். இது ஒரு குறிப்பிட்ட பயனரைப் பாதிக்கக்கூடிய சிக்கல்களை பிழைதிருத்தம் செய்வதையும் பகுப்பாய்வு செய்வதையும் எளிதாக்குகிறது.
// In the authentication service
app.use((req, res, next) => {
const userId = req.user.id;
asyncLocalStorage.run(new Map(), () => {
asyncLocalStorage.getStore().set('userId', userId);
next();
});
});
// In the data processing service
async function processData(data) {
const userId = asyncLocalStorage.getStore().get('userId');
logger.info(`[User ID: ${userId}] Processing data: ${JSON.stringify(data)}`);
// ... process data
}
முடிவுரை
AsyncLocalStorage
என்பது ஒத்திசைவற்ற ஜாவாஸ்கிரிப்ட் சூழல்களில் கோரிக்கை-சார்ந்த மாறிகளை நிர்வகிப்பதற்கான ஒரு மதிப்புமிக்க கருவியாகும். இது ஒத்திசைவற்ற செயல்பாடுகளுக்கு இடையில் சூழல் நிர்வாகத்தை எளிதாக்குகிறது, குறியீட்டை மேலும் படிக்கக்கூடியதாகவும், பராமரிக்கக்கூடியதாகவும், பாதுகாப்பானதாகவும் ஆக்குகிறது. அதன் பயன்பாட்டு வழக்குகள், சிறந்த நடைமுறைகள் மற்றும் மாற்றுகளைப் புரிந்துகொள்வதன் மூலம், வலுவான மற்றும் அளவிடக்கூடிய பயன்பாடுகளை உருவாக்க AsyncLocalStorage
-ஐ திறம்படப் பயன்படுத்தலாம். இருப்பினும், அதன் செயல்திறன் தாக்கங்களை கவனமாகக் கருத்தில் கொள்வதும், சாத்தியமான சிக்கல்களைத் தவிர்க்க அதை புத்திசாலித்தனமாகப் பயன்படுத்துவதும் முக்கியம். உங்கள் ஒத்திசைவற்ற ஜாவாஸ்கிரிப்ட் மேம்பாட்டு நடைமுறைகளை மேம்படுத்த AsyncLocalStorage
-ஐ சிந்தனையுடன் ஏற்றுக்கொள்ளுங்கள்.
தெளிவான உதாரணங்கள், நடைமுறை ஆலோசனைகள் மற்றும் ஒரு விரிவான கண்ணோட்டத்தை இணைப்பதன் மூலம், இந்த வழிகாட்டி உலகெங்கிலும் உள்ள டெவலப்பர்களுக்கு அவர்களின் ஜாவாஸ்கிரிப்ட் பயன்பாடுகளில் AsyncLocalStorage
-ஐப் பயன்படுத்தி அசிங்க் சூழலை திறம்பட நிர்வகிக்கும் அறிவை வழங்குவதை நோக்கமாகக் கொண்டுள்ளது. உங்கள் குறிப்பிட்ட தேவைகளுக்கு சிறந்த தீர்வை உறுதிப்படுத்த செயல்திறன் தாக்கங்கள் மற்றும் மாற்றுகளைக் கருத்தில் கொள்ள நினைவில் கொள்ளுங்கள்.