நிகழ்வு ஆதாரமாக்கல் உங்கள் தணிக்கைத் தடம் செயலாக்கத்தை எவ்வாறு புரட்சிகரமாக்கலாம், இணையற்ற கண்டறியும் தன்மை, தரவு நேர்மை மற்றும் அமைப்பு மீள்தன்மையை வழங்குகிறது என்பதை அறிக. நடைமுறை எடுத்துக்காட்டுகள் மற்றும் செயலாக்க உத்திகளை ஆராயுங்கள்.
நிகழ்வு ஆதாரமாக்கல்: வலுவான மற்றும் கண்டறியக்கூடிய அமைப்புகளுக்கான தணிக்கைத் தடங்களைச் செயல்படுத்துதல்
இன்றைய சிக்கலான மற்றும் ஒன்றோடொன்று இணைக்கப்பட்ட டிஜிட்டல் உலகில், ஒரு வலுவான மற்றும் விரிவான தணிக்கைத் தடத்தைப் பராமரிப்பது மிக முக்கியம். இது பெரும்பாலும் ஒரு ஒழுங்குமுறைத் தேவையாக இருப்பது மட்டுமல்லாமல், பிழைத்திருத்தம், பாதுகாப்புப் பகுப்பாய்வு மற்றும் உங்கள் அமைப்பின் பரிணாமத்தைப் புரிந்துகொள்வதற்கும் இது முக்கியமானது. நிகழ்வு ஆதாரமாக்கல், ஒரு பயன்பாட்டின் நிலையின் அனைத்து மாற்றங்களையும் நிகழ்வுகளின் வரிசையாகப் பிடிக்கும் ஒரு கட்டடக்கலை முறை, நம்பகமான, தணிக்கை செய்யக்கூடிய மற்றும் விரிவாக்கக்கூடிய தணிக்கைத் தடங்களைச் செயல்படுத்துவதற்கான நேர்த்தியான மற்றும் சக்திவாய்ந்த தீர்வை வழங்குகிறது.
நிகழ்வு ஆதாரமாக்கல் என்றால் என்ன?
பாரம்பரிய பயன்பாடுகள் பொதுவாக ஒரு தரவுத்தளத்தில் தரவின் தற்போதைய நிலையை மட்டுமே சேமிக்கின்றன. இந்த அணுகுமுறை கடந்த கால நிலைகளை புனரமைப்பதை அல்லது தற்போதைய நிலைக்கு வழிவகுத்த நிகழ்வுகளின் தொடரைப் புரிந்துகொள்வதை கடினமாக்குகிறது. நிகழ்வு ஆதாரமாக்கல், இதற்கு மாறாக, பயன்பாட்டின் நிலையின் ஒவ்வொரு குறிப்பிடத்தக்க மாற்றத்தையும் ஒரு மாற்ற முடியாத நிகழ்வாகப் பிடிப்பதில் கவனம் செலுத்துகிறது. இந்த நிகழ்வுகள் ஒரு பிற்சேர்க்கை-மட்டும் நிகழ்வுக் களஞ்சியத்தில் சேமிக்கப்படுகின்றன, இது கணினியில் உள்ள அனைத்து செயல்களின் முழுமையான மற்றும் காலவரிசை பதிவை உருவாக்குகிறது.
இதை ஒரு வங்கி கணக்கு பேரேடு போல நினைத்துப் பாருங்கள். தற்போதைய இருப்பை வெறுமனே பதிவு செய்வதற்கு பதிலாக, ஒவ்வொரு வைப்பு, திரும்பப் பெறுதல் மற்றும் பரிமாற்றம் ஆகியவை ஒரு தனி நிகழ்வாக பதிவு செய்யப்படுகின்றன. இந்த நிகழ்வுகளை மீண்டும் இயக்குவதன் மூலம், எந்த நேரத்திலும் கணக்கின் நிலையை நீங்கள் புனரமைக்க முடியும்.
தணிக்கைத் தடங்களுக்கு நிகழ்வு ஆதாரமாக்கலை ஏன் பயன்படுத்த வேண்டும்?
தணிக்கைத் தடங்களைச் செயல்படுத்துவதற்கு நிகழ்வு ஆதாரமாக்கல் பல கட்டாய நன்மைகளை வழங்குகிறது:
- முழுமையான மற்றும் மாற்ற முடியாத வரலாறு: ஒவ்வொரு மாற்றமும் ஒரு நிகழ்வாகப் பிடிக்கப்படுகிறது, இது அமைப்பின் பரிணாம வளர்ச்சியின் முழுமையான மற்றும் மாற்ற முடியாத பதிவை வழங்குகிறது. இது தணிக்கைத் தடம் துல்லியமாகவும் சேதப்படுத்த முடியாததாகவும் இருப்பதை உறுதி செய்கிறது.
- காலமுறை வினவல்: அந்த புள்ளி வரையிலான நிகழ்வுகளை மீண்டும் இயக்குவதன் மூலம் எந்த நேரத்திலும் அமைப்பின் நிலையை நீங்கள் எளிதாக புனரமைக்க முடியும். இது தணிக்கை மற்றும் பகுப்பாய்விற்கான சக்திவாய்ந்த காலமுறை வினவல் திறன்களை செயல்படுத்துகிறது.
- தணிக்கை மற்றும் கண்டறியக்கூடியது: ஒவ்வொரு நிகழ்வும் பொதுவாக நேரமுத்திரை, பயனர் ஐடி மற்றும் பரிவர்த்தனை ஐடி போன்ற மெட்டாடேட்டாவை உள்ளடக்கியது, இது ஒவ்வொரு மாற்றத்தின் தோற்றத்தையும் தாக்கத்தையும் கண்டறிவதை எளிதாக்குகிறது.
- இணைப்பறுத்தல் மற்றும் அளவிடுதல்: நிகழ்வு ஆதாரமாக்கல் அமைப்பின் வெவ்வேறு பகுதிகளுக்கு இடையில் இணைப்பறுத்தலை ஊக்குவிக்கிறது. நிகழ்வுகள் பல சந்தாதாரர்களால் நுகரப்படலாம், இது அளவிடுதல் மற்றும் நெகிழ்வுத்தன்மையை செயல்படுத்துகிறது.
- பிழைத்திருத்தம் மற்றும் மீட்புக்கான மறு இயக்கம்: பிழைத்திருத்த நோக்கங்களுக்காக கடந்த கால நிலைகளை மீண்டும் உருவாக்க அல்லது பிழைகளிலிருந்து மீட்க நிகழ்வுகளை மீண்டும் இயக்கலாம்.
- CQRS க்கான ஆதரவு: நிகழ்வு ஆதாரமாக்கல் பெரும்பாலும் கட்டளை வினவல் பொறுப்புப் பிரிப்பு (CQRS) முறையுடன் இணைந்து பயன்படுத்தப்படுகிறது, இது படித்தல் மற்றும் எழுதுதல் செயல்பாடுகளைப் பிரிக்கிறது, செயல்திறன் மற்றும் அளவிடுதலை மேலும் மேம்படுத்துகிறது.
தணிக்கைத் தடங்களுக்கு நிகழ்வு ஆதாரமாக்கலைச் செயல்படுத்துதல்: ஒரு படிப்படியான வழிகாட்டி
தணிக்கைத் தடங்களுக்கு நிகழ்வு ஆதாரமாக்கலைச் செயல்படுத்துவதற்கான ஒரு நடைமுறை வழிகாட்டி இங்கே:
1. முக்கிய நிகழ்வுகளை அடையாளம் காணுதல்
உங்கள் தணிக்கைத் தடத்தில் நீங்கள் பிடிக்க விரும்பும் முக்கிய நிகழ்வுகளை அடையாளம் காண்பது முதல் படியாகும். இந்த நிகழ்வுகள் பயன்பாட்டின் நிலையில் குறிப்பிடத்தக்க மாற்றங்களைக் குறிக்க வேண்டும். போன்ற செயல்களைக் கவனியுங்கள்:
- பயனர் அங்கீகாரம் (உள்நுழைவு, வெளியேறுதல்)
- தரவு உருவாக்கம், மாற்றம் மற்றும் நீக்கம்
- பரிவர்த்தனை துவக்கம் மற்றும் நிறைவு
- கட்டமைப்பு மாற்றங்கள்
- பாதுகாப்பு தொடர்பான நிகழ்வுகள் (எ.கா., அணுகல் கட்டுப்பாட்டு மாற்றங்கள்)
உதாரணம்: ஒரு இ-காமர்ஸ் தளத்திற்கு, முக்கிய நிகழ்வுகளில் "ஆர்டர்உருவாக்கப்பட்டது," "பணம்பெறப்பட்டது," "ஆர்டர்அனுப்பப்பட்டது," "வண்டியில்பொருள்சேர்க்கப்பட்டது," மற்றும் "பயனர்சுயவிவரம்புதுப்பிக்கப்பட்டது" ஆகியவை அடங்கும்.
2. நிகழ்வு கட்டமைப்பை வரையறுத்தல்
ஒவ்வொரு நிகழ்வும் பின்வரும் தகவல்களை உள்ளடக்கிய ஒரு நன்கு வரையறுக்கப்பட்ட கட்டமைப்பைக் கொண்டிருக்க வேண்டும்:
- நிகழ்வு வகை: நிகழ்வின் வகைக்கான ஒரு தனித்துவமான அடையாளங்காட்டி (எ.கா., "ஆர்டர்உருவாக்கப்பட்டது").
- நிகழ்வு தரவு: நிகழ்வுடன் தொடர்புடைய தரவு, அதாவது ஆர்டர் ஐடி, தயாரிப்பு ஐடி, வாடிக்கையாளர் ஐடி மற்றும் கட்டணத் தொகை.
- நேரமுத்திரை: நிகழ்வு நடந்த தேதி மற்றும் நேரம். வெவ்வேறு நேர மண்டலங்களில் நிலைத்தன்மைக்காக UTC ஐப் பயன்படுத்துவதைக் கவனியுங்கள்.
- பயனர் ஐடி: நிகழ்வைத் துவக்கிய பயனரின் ஐடி.
- பரிவர்த்தனை ஐடி: நிகழ்வு சொந்தமான பரிவர்த்தனைக்கான ஒரு தனித்துவமான அடையாளங்காட்டி. பல நிகழ்வுகளில் அணுத்தன்மை மற்றும் நிலைத்தன்மையை உறுதி செய்வதற்கு இது முக்கியமானது.
- தொடர்பு ஐடி: வெவ்வேறு சேவைகள் அல்லது கூறுகளில் தொடர்புடைய நிகழ்வுகளைக் கண்காணிக்கப் பயன்படுத்தப்படும் ஒரு அடையாளங்காட்டி. இது குறிப்பாக மைக்ரோசர்வீசஸ் கட்டமைப்புகளில் பயனுள்ளதாக இருக்கும்.
- காரண ஐடி: (விருப்பத்தேர்வு) இந்த நிகழ்வை ஏற்படுத்திய நிகழ்வின் ஐடி. இது நிகழ்வுகளின் காரணச் சங்கிலியைக் கண்டறிய உதவுகிறது.
- மெட்டாடேட்டா: கூடுதல் சூழல் தகவல், அதாவது பயனரின் ஐபி முகவரி, உலாவி வகை அல்லது புவியியல் இருப்பிடம். மெட்டாடேட்டாவை சேகரித்து சேமிக்கும்போது GDPR போன்ற தரவு தனியுரிமை விதிமுறைகளை கவனத்தில் கொள்ளுங்கள்.
உதாரணம்: "ஆர்டர்உருவாக்கப்பட்டது" நிகழ்வு பின்வரும் கட்டமைப்பைக் கொண்டிருக்கலாம்:
{ "நிகழ்வுவகை": "ஆர்டர்உருவாக்கப்பட்டது", "நிகழ்வுதரவு": { "ஆர்டர்ஐடி": "12345", "வாடிக்கையாளர்ஐடி": "67890", "ஆர்டர்தேதி": "2023-10-27T10:00:00Z", "மொத்ததொகை": 100.00, "நாணயம்": "USD", "கப்பல்முகவரி": { "தெரு": "123 பிரதான தெரு", "நகரம்": "ஏதோவொருநகரம்", "மாநிலம்": "CA", "அஞ்சல்குறியீடு": "91234", "நாடு": "USA" } }, "நேரமுத்திரை": "2023-10-27T10:00:00Z", "பயனர்ஐடி": "பயனர்123", "பரிவர்த்தனைஐடி": "tx12345", "தொடர்புஐடி": "corr123", "மெட்டாடேட்டா": { "ஐபிமுகவரி": "192.168.1.1", "உலாவி": "Chrome", "இருப்பிடம்": { "அட்சரேகை": 34.0522, "தீர்க்கரேகை": -118.2437 } } }
3. ஒரு நிகழ்வுக்களஞ்சியத்தைத் தேர்ந்தெடுங்கள்
நிகழ்வுக் களஞ்சியம் நிகழ்வுகளை சேமிப்பதற்கான மையக் களஞ்சியமாகும். இது எழுதுவதற்கும் நிகழ்வுகளின் வரிசைகளைப் படிப்பதற்கும் உகந்ததாக இருக்கும் ஒரு பிற்சேர்க்கை-மட்டும் தரவுத்தளமாக இருக்க வேண்டும். பல விருப்பங்கள் உள்ளன:
- பிரத்யேக நிகழ்வுக்களஞ்சிய தரவுத்தளங்கள்: இவை குறிப்பாக நிகழ்வு ஆதாரமாக்கலுக்காக வடிவமைக்கப்பட்ட தரவுத்தளங்கள், அதாவது EventStoreDB மற்றும் AxonDB. அவை நிகழ்வு ஓடைகள், புறத்தோற்றங்கள் மற்றும் சந்தாக்கள் போன்ற அம்சங்களை வழங்குகின்றன.
- உறவுமுறை தரவுத்தளங்கள்: நீங்கள் PostgreSQL அல்லது MySQL போன்ற ஒரு உறவுமுறை தரவுத்தளத்தை ஒரு நிகழ்வுக்களஞ்சியமாகப் பயன்படுத்தலாம். இருப்பினும், நீங்கள் பிற்சேர்க்கை-மட்டும் சொற்பொருள் மற்றும் நிகழ்வு ஓடை நிர்வாகத்தை நீங்களே செயல்படுத்த வேண்டும். நிகழ்வு ஐடி, நிகழ்வு வகை, நிகழ்வு தரவு, நேரமுத்திரை மற்றும் மெட்டாடேட்டாவிற்கான நெடுவரிசைகளுடன் நிகழ்வுகளுக்கு ஒரு பிரத்யேக அட்டவணையைப் பயன்படுத்துவதைக் கவனியுங்கள்.
- NoSQL தரவுத்தளங்கள்: MongoDB அல்லது Cassandra போன்ற NoSQL தரவுத்தளங்களையும் நிகழ்வுக்களஞ்சியங்களாகப் பயன்படுத்தலாம். அவை நெகிழ்வுத்தன்மை மற்றும் அளவிடுதலை வழங்குகின்றன, ஆனால் தேவையான அம்சங்களைச் செயல்படுத்த அதிக முயற்சி தேவைப்படலாம்.
- கிளவுட் அடிப்படையிலான தீர்வுகள்: AWS, Azure மற்றும் Google Cloud போன்ற கிளவுட் வழங்குநர்கள் Kafka, Kinesis மற்றும் Pub/Sub போன்ற நிர்வகிக்கப்பட்ட நிகழ்வு ஓடை சேவைகளை வழங்குகிறார்கள், அவற்றை நிகழ்வுக்களஞ்சியங்களாகப் பயன்படுத்தலாம். இந்த சேவைகள் அளவிடுதல், நம்பகத்தன்மை மற்றும் பிற கிளவுட் சேவைகளுடன் ஒருங்கிணைப்பை வழங்குகின்றன.
ஒரு நிகழ்வுக் களஞ்சியத்தைத் தேர்ந்தெடுக்கும்போது, போன்ற காரணிகளைக் கவனியுங்கள்:
- அளவிடுதல்: நிகழ்வுக் களஞ்சியம் எதிர்பார்க்கப்படும் நிகழ்வுகளின் அளவைக் கையாள முடியுமா?
- நிலைப்புத்தன்மை: தரவு இழப்புத் தடுப்பைப் பொறுத்தவரை நிகழ்வுக் களஞ்சியம் எவ்வளவு நம்பகமானது?
- வினவல் திறன்கள்: நிகழ்வுக் களஞ்சியம் தணிக்கை மற்றும் பகுப்பாய்விற்கு உங்களுக்குத் தேவையான வினவல் வகைகளை ஆதரிக்கிறதா?
- பரிவர்த்தனை ஆதரவு: தரவு நிலைத்தன்மையை உறுதிப்படுத்த நிகழ்வுக் களஞ்சியம் ACID பரிவர்த்தனைகளை ஆதரிக்கிறதா?
- ஒருங்கிணைப்பு: நிகழ்வுக் களஞ்சியம் உங்கள் தற்போதைய உள்கட்டமைப்பு மற்றும் கருவிகளுடன் நன்றாக ஒருங்கிணைக்கப்படுகிறதா?
- செலவு: சேமிப்பு, கணினி மற்றும் நெட்வொர்க் செலவுகள் உட்பட நிகழ்வுக் களஞ்சியத்தைப் பயன்படுத்துவதற்கான செலவு என்ன?
4. நிகழ்வு வெளியீட்டைச் செயல்படுத்துங்கள்
ஒரு நிகழ்வு ஏற்படும்போது, உங்கள் பயன்பாடு அதை நிகழ்வுக் களஞ்சியத்தில் வெளியிட வேண்டும். இது பொதுவாக பின்வரும் படிகளை உள்ளடக்கியது:
- ஒரு நிகழ்வுப் பொருளை உருவாக்குங்கள்: நிகழ்வு வகை, நிகழ்வு தரவு, நேரமுத்திரை, பயனர் ஐடி மற்றும் பிற தொடர்புடைய மெட்டாடேட்டாவைக் கொண்ட ஒரு நிகழ்வுப் பொருளை உருவாக்குங்கள்.
- நிகழ்வை வரிசைப்படுத்துங்கள்: நிகழ்வுப் பொருளை நிகழ்வுக் களஞ்சியத்தில் சேமிக்கக்கூடிய ஒரு வடிவத்திற்கு வரிசைப்படுத்துங்கள், அதாவது JSON அல்லது Avro.
- நிகழ்வை நிகழ்வுக் களஞ்சியத்தில் சேருங்கள்: வரிசைப்படுத்தப்பட்ட நிகழ்வை நிகழ்வுக் களஞ்சியத்தில் சேருங்கள். தரவு சிதைவைத் தடுக்க இந்த செயல்பாடு அணுவாக இருப்பதை உறுதி செய்யுங்கள்.
- நிகழ்வை சந்தாதாரர்களுக்கு வெளியிடுங்கள்: (விருப்பத்தேர்வு) அதைப் பெற ஆர்வமுள்ள எந்தவொரு சந்தாதாரர்களுக்கும் நிகழ்வை வெளியிடுங்கள். இதை ஒரு செய்தி வரிசை அல்லது ஒரு வெளியீடு-சந்தா முறையைப் பயன்படுத்தி செய்யலாம்.
உதாரணம் (ஒரு கற்பனையான EventStoreService ஐப் பயன்படுத்தி):
public class OrderService { private final EventStoreService eventStoreService; public OrderService(EventStoreService eventStoreService) { this.eventStoreService = eventStoreService; } public void createOrder(Order order, String userId) { // ... ஆர்டரை உருவாக்குவதற்கான வணிக தர்க்கம் ... OrderCreatedEvent event = new OrderCreatedEvent( order.getOrderId(), order.getCustomerId(), order.getOrderDate(), order.getTotalAmount(), order.getCurrency(), order.getShippingAddress() ); eventStoreService.appendEvent("order", order.getOrderId(), event, userId); } } public class EventStoreService { public void appendEvent(String streamName, String entityId, Object event, String userId) { // ஒரு நிகழ்வுப் பொருளை உருவாக்குங்கள் EventRecord eventRecord = new EventRecord( UUID.randomUUID(), // நிகழ்வுஐடி streamName, // ஓடைபெயர் entityId, // সত্তைஐடி event.getClass().getName(), // நிகழ்வுவகை toJson(event), // நிகழ்வுதரவு Instant.now().toString(), // நேரமுத்திரை userId // பயனர்ஐடி ); // நிகழ்வை வரிசைப்படுத்துங்கள் String serializedEvent = toJson(eventRecord); // நிகழ்வை நிகழ்வுக் களஞ்சியத்தில் சேருங்கள் (தேர்ந்தெடுக்கப்பட்ட நிகழ்வுக் களஞ்சியத்திற்கு குறிப்பிட்ட செயலாக்கம்) storeEventInDatabase(serializedEvent); // நிகழ்வை சந்தாதாரர்களுக்கு வெளியிடுங்கள் (விருப்பத்தேர்வு) publishEventToMessageQueue(serializedEvent); } // தரவுத்தளம் மற்றும் செய்தி வரிசை தொடர்புக்கான ஒதுக்கிட முறைகள் private void storeEventInDatabase(String serializedEvent) { // தரவுத்தளத்தில் நிகழ்வை சேமிப்பதற்கான செயலாக்கம் System.out.println("தரவுத்தளத்தில் நிகழ்வை சேமிக்கிறது: " + serializedEvent); } private void publishEventToMessageQueue(String serializedEvent) { // ஒரு செய்தி வரிசைக்கு நிகழ்வை வெளியிடுவதற்கான செயலாக்கம் System.out.println("செய்தி வரிசைக்கு நிகழ்வை வெளியிடுகிறது: " + serializedEvent); } private String toJson(Object obj) { // நிகழ்வை JSONக்கு வரிசைப்படுத்துவதற்கான செயலாக்கம் try { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(obj); } catch (Exception e) { throw new RuntimeException("நிகழ்வை JSONக்கு வரிசைப்படுத்துவதில் பிழை", e); } } } class EventRecord { private final UUID eventId; private final String streamName; private final String entityId; private final String eventType; private final String eventData; private final String timestamp; private final String userId; public EventRecord(UUID eventId, String streamName, String entityId, String eventType, String eventData, String timestamp, String userId) { this.eventId = eventId; this.streamName = streamName; this.entityId = entityId; this.eventType = eventType; this.eventData = eventData; this.timestamp = timestamp; this.userId = userId; } // கெட்டர்கள் @Override public String toString() { return "EventRecord{" + "eventId=" + eventId + ", streamName='" + streamName + '\'' + ", entityId='" + entityId + '\'' + ", eventType='" + eventType + '\'' + ", eventData='" + eventData + '\'' + ", timestamp='" + timestamp + '\'' + ", userId='" + userId + '\'' + '}' ; } } class OrderCreatedEvent { private final String orderId; private final String customerId; private final String orderDate; private final double totalAmount; private final String currency; private final String shippingAddress; public OrderCreatedEvent(String orderId, String customerId, String orderDate, double totalAmount, String currency, String shippingAddress) { this.orderId = orderId; this.customerId = customerId; this.orderDate = orderDate; this.totalAmount = totalAmount; this.currency = currency; this.shippingAddress = shippingAddress; } // அனைத்து புலங்களுக்கான கெட்டர்கள் public String getOrderId() { return orderId; } public String getCustomerId() { return customerId; } public String getOrderDate() { return orderDate; } public double getTotalAmount() { return totalAmount; } public String getCurrency() { return currency; } public String getShippingAddress() { return shippingAddress; } @Override public String toString() { return "OrderCreatedEvent{" + "orderId='" + orderId + '\'' + ", customerId='" + customerId + '\'' + ", orderDate='" + orderDate + '\'' + ", totalAmount=" + totalAmount + ", currency='" + currency + '\'' + ", shippingAddress='" + shippingAddress + '\'' + '}' ; } } class Order { private final String orderId; private final String customerId; private final String orderDate; private final double totalAmount; private final String currency; private final String shippingAddress; public Order(String orderId, String customerId, String orderDate, double totalAmount, String currency, String shippingAddress) { this.orderId = orderId; this.customerId = customerId; this.orderDate = orderDate; this.totalAmount = totalAmount; this.currency = currency; this.shippingAddress = shippingAddress; } // அனைத்து புலங்களுக்கான கெட்டர்கள் public String getOrderId() { return orderId; } public String getCustomerId() { return customerId; } public String getOrderDate() { return orderDate; } public double getTotalAmount() { return totalAmount; } public String getCurrency() { return currency; } public String getShippingAddress() { return shippingAddress; } @Override public String toString() { return "Order{" + "orderId='" + orderId + '\'' + ", customerId='" + customerId + '\'' + ", orderDate='" + orderDate + '\'' + ", totalAmount=" + totalAmount + ", currency='" + currency + '\'' + ", shippingAddress='" + shippingAddress + '\'' + '}' ; } }
5. படித்தல் மாதிரிகளை உருவாக்குங்கள் (புறத்தோற்றங்கள்)
நிகழ்வுக் களஞ்சியம் அனைத்து மாற்றங்களின் முழுமையான வரலாற்றை வழங்கினாலும், படித்தல் செயல்பாடுகளுக்கு நேரடியாக வினவுவது பெரும்பாலும் திறமையானதல்ல. அதற்குப் பதிலாக, நீங்கள் படித்தல் மாதிரிகளை உருவாக்கலாம், அவை புறத்தோற்றங்கள் என்றும் அழைக்கப்படுகின்றன, அவை குறிப்பிட்ட வினவல் முறைகளுக்கு உகந்ததாக இருக்கும். இந்த படித்தல் மாதிரிகள் நிகழ்வு ஓடையிலிருந்து பெறப்படுகின்றன மற்றும் புதிய நிகழ்வுகள் வெளியிடப்படும்போது ஒத்திசைவின்றி புதுப்பிக்கப்படுகின்றன.
உதாரணம்: ஒரு குறிப்பிட்ட வாடிக்கையாளருக்கான அனைத்து ஆர்டர்களின் பட்டியலைக் கொண்ட ஒரு படித்தல் மாதிரியை நீங்கள் உருவாக்கலாம், அல்லது ஒரு குறிப்பிட்ட தயாரிப்புக்கான விற்பனைத் தரவைச் சுருக்கும் ஒரு படித்தல் மாதிரியை உருவாக்கலாம்.
ஒரு படித்தல் மாதிரியை உருவாக்க, நீங்கள் நிகழ்வு ஓடைக்கு குழுசேர்ந்து ஒவ்வொரு நிகழ்வையும் செயலாக்குகிறீர்கள். ஒவ்வொரு நிகழ்விற்கும், நீங்கள் அதற்கேற்ப படித்தல் மாதிரியைப் புதுப்பிக்கிறீர்கள்.
உதாரணம்:
public class OrderSummaryReadModelUpdater { private final OrderSummaryRepository orderSummaryRepository; public OrderSummaryReadModelUpdater(OrderSummaryRepository orderSummaryRepository) { this.orderSummaryRepository = orderSummaryRepository; } public void handle(OrderCreatedEvent event) { OrderSummary orderSummary = new OrderSummary( event.getOrderId(), event.getCustomerId(), event.getOrderDate(), event.getTotalAmount(), event.getCurrency() ); orderSummaryRepository.save(orderSummary); } // PaymentReceivedEvent, OrderShippedEvent, போன்றவற்றுக்கான பிற நிகழ்வு கையாளுபவர்கள். } interface OrderSummaryRepository { void save(OrderSummary orderSummary); } class OrderSummary { private final String orderId; private final String customerId; private final String orderDate; private final double totalAmount; private final String currency; public OrderSummary(String orderId, String customerId, String orderDate, double totalAmount, String currency) { this.orderId = orderId; this.customerId = customerId; this.orderDate = orderDate; this.totalAmount = totalAmount; this.currency = currency; } //கெட்டர்கள் }
6. நிகழ்வுக்களஞ்சியத்தைப் பாதுகாத்தல்
நிகழ்வுக் களஞ்சியத்தில் முக்கியமான தரவு உள்ளது, எனவே அதை சரியாகப் பாதுகாப்பது மிகவும் முக்கியம். பின்வரும் பாதுகாப்பு நடவடிக்கைகளைக் கவனியுங்கள்:
- அணுகல் கட்டுப்பாடு: அங்கீகரிக்கப்பட்ட பயனர்கள் மற்றும் பயன்பாடுகளுக்கு மட்டுமே நிகழ்வுக் களஞ்சியத்திற்கான அணுகலைக் கட்டுப்படுத்துங்கள். வலுவான அங்கீகாரம் மற்றும் அங்கீகார வழிமுறைகளைப் பயன்படுத்தவும்.
- குறியாக்கம்: அங்கீகரிக்கப்படாத அணுகலில் இருந்து பாதுகாக்க, நிகழ்வுக் களஞ்சியத்தில் உள்ள தரவை ஓய்விலும் போக்குவரத்திலும் குறியாக்கம் செய்யுங்கள். கூடுதல் பாதுகாப்பிற்காக வன்பொருள் பாதுகாப்பு தொகுதி (HSM) மூலம் நிர்வகிக்கப்படும் குறியாக்க விசைகளைப் பயன்படுத்துவதைக் கவனியுங்கள்.
- தணிக்கை: அங்கீகரிக்கப்படாத செயல்பாட்டைக் கண்டறிந்து தடுக்க, நிகழ்வுக் களஞ்சியத்திற்கான அனைத்து அணுகலையும் தணிக்கை செய்யுங்கள்.
- தரவு மறைத்தல்: அங்கீகரிக்கப்படாத வெளிப்பாட்டிலிருந்து பாதுகாக்க, நிகழ்வுக் களஞ்சியத்தில் முக்கியமான தரவை மறைக்கவும். உதாரணமாக, கிரெடிட் கார்டு எண்கள் அல்லது சமூகப் பாதுகாப்பு எண்கள் போன்ற தனிப்பட்ட முறையில் அடையாளம் காணக்கூடிய தகவல்களை (PII) நீங்கள் மறைக்கலாம்.
- வழக்கமான காப்புப்பிரதிகள்: தரவு இழப்பிலிருந்து பாதுகாக்க, நிகழ்வுக் களஞ்சியத்தை தவறாமல் காப்புப் பிரதி எடுக்கவும். காப்புப்பிரதிகளை பாதுகாப்பான இடத்தில் சேமிக்கவும்.
- பேரழிவு மீட்பு: ஒரு பேரழிவின் போது நிகழ்வுக் களஞ்சியத்தை நீங்கள் மீட்க முடியும் என்பதை உறுதிப்படுத்த, ஒரு பேரழிவு மீட்புத் திட்டத்தைச் செயல்படுத்தவும்.
7. தணிக்கை மற்றும் அறிக்கையிடலைச் செயல்படுத்துதல்
நீங்கள் நிகழ்வு ஆதாரமாக்கலைச் செயல்படுத்தியவுடன், தணிக்கை அறிக்கைகளை உருவாக்க மற்றும் பாதுகாப்புப் பகுப்பாய்வைச் செய்ய நிகழ்வு ஓடையைப் பயன்படுத்தலாம். ஒரு குறிப்பிட்ட பயனர், பரிவர்த்தனை அல்லது সত্তை தொடர்பான அனைத்து நிகழ்வுகளையும் கண்டுபிடிக்க நிகழ்வுக் களஞ்சியத்தை நீங்கள் வினவலாம். எந்த நேரத்திலும் அமைப்பின் நிலையை புனரமைக்க நிகழ்வு ஓடையையும் நீங்கள் பயன்படுத்தலாம்.
உதாரணம்: ஒரு குறிப்பிட்ட காலப்பகுதியில் ஒரு குறிப்பிட்ட பயனர் சுயவிவரத்தில் செய்யப்பட்ட அனைத்து மாற்றங்களையும் காட்டும் ஒரு அறிக்கையை நீங்கள் உருவாக்கலாம், அல்லது ஒரு குறிப்பிட்ட பயனரால் தொடங்கப்பட்ட அனைத்து பரிவர்த்தனைகளையும் காட்டும் ஒரு அறிக்கையை உருவாக்கலாம்.
பின்வரும் அறிக்கையிடல் திறன்களைக் கவனியுங்கள்:
- பயனர் செயல்பாட்டு அறிக்கைகள்: பயனர் உள்நுழைவுகள், வெளியேறுதல்கள் மற்றும் பிற செயல்பாடுகளைக் கண்காணிக்கவும்.
- தரவு மாற்ற அறிக்கைகள்: முக்கியமான தரவு সত্তைகளில் ஏற்படும் மாற்றங்களைக் கண்காணிக்கவும்.
- பாதுகாப்பு நிகழ்வு அறிக்கைகள்: தோல்வியுற்ற உள்நுழைவு முயற்சிகள் அல்லது அங்கீகரிக்கப்படாத அணுகல் முயற்சிகள் போன்ற சந்தேகத்திற்கிடமான செயல்பாடுகளில் எச்சரிக்கை செய்யவும்.
- இணக்க அறிக்கைகள்: ஒழுங்குமுறை இணக்கத்திற்குத் தேவையான அறிக்கைகளை உருவாக்கவும் (எ.கா., GDPR, HIPAA).
நிகழ்வு ஆதாரமாக்கலின் சவால்கள்
நிகழ்வு ஆதாரமாக்கல் பல நன்மைகளை வழங்கினாலும், இது சில சவால்களையும் முன்வைக்கிறது:
- சிக்கலானது: நிகழ்வு ஆதாரமாக்கல் அமைப்பு கட்டமைப்பிற்கு சிக்கலை சேர்க்கிறது. நீங்கள் நிகழ்வு கட்டமைப்பை வடிவமைக்க வேண்டும், ஒரு நிகழ்வுக் களஞ்சியத்தைத் தேர்ந்தெடுக்க வேண்டும், மற்றும் நிகழ்வு வெளியீடு மற்றும் நுகர்வைச் செயல்படுத்த வேண்டும்.
- இறுதி நிலைத்தன்மை: படித்தல் மாதிரிகள் இறுதியில் நிகழ்வு ஓடையுடன் சீராக இருக்கும். இதன் பொருள், ஒரு நிகழ்வு ஏற்படும்போது மற்றும் படித்தல் மாதிரி புதுப்பிக்கப்படும்போது ஒரு தாமதம் இருக்கலாம். இது பயனர் இடைமுகத்தில் முரண்பாடுகளுக்கு வழிவகுக்கும்.
- நிகழ்வு பதிப்பிடுதல்: உங்கள் பயன்பாடு உருவாகும்போது, உங்கள் நிகழ்வுகளின் கட்டமைப்பை நீங்கள் மாற்ற வேண்டியிருக்கலாம். இது சவாலானதாக இருக்கலாம், ஏனெனில் தற்போதுள்ள நிகழ்வுகள் இன்னும் சரியாக செயலாக்கப்பட முடியும் என்பதை நீங்கள் உறுதிப்படுத்த வேண்டும். வெவ்வேறு நிகழ்வு பதிப்புகளைக் கையாள நிகழ்வு மேம்படுத்துதல் போன்ற நுட்பங்களைப் பயன்படுத்துவதைக் கவனியுங்கள்.
- இறுதி நிலைத்தன்மை மற்றும் பரவலாக்கப்பட்ட பரிவர்த்தனைகள்: நிகழ்வு ஆதாரமாக்கலுடன் பரவலாக்கப்பட்ட பரிவர்த்தனைகளைச் செயல்படுத்துவது சிக்கலானதாக இருக்கலாம். பல சேவைகளில் நிகழ்வுகள் சீரான முறையில் வெளியிடப்பட்டு நுகரப்படுவதை நீங்கள் உறுதிப்படுத்த வேண்டும்.
- செயல்பாட்டு மேல்நிலை: ஒரு நிகழ்வுக் களஞ்சியத்தையும் அதனுடன் தொடர்புடைய உள்கட்டமைப்பையும் நிர்வகிப்பது செயல்பாட்டு மேல்நிலையை சேர்க்கலாம். நீங்கள் நிகழ்வுக் களஞ்சியத்தைக் கண்காணிக்க வேண்டும், அதை காப்புப் பிரதி எடுக்க வேண்டும், மற்றும் அது சீராக இயங்குவதை உறுதிப்படுத்த வேண்டும்.
நிகழ்வு ஆதாரமாக்கலுக்கான சிறந்த நடைமுறைகள்
நிகழ்வு ஆதாரமாக்கலின் சவால்களைத் தணிக்க, இந்த சிறந்த நடைமுறைகளைப் பின்பற்றவும்:
- சிறியதாகத் தொடங்குங்கள்: உங்கள் பயன்பாட்டின் ஒரு சிறிய பகுதியில் நிகழ்வு ஆதாரமாக்கலைச் செயல்படுத்துவதன் மூலம் தொடங்குங்கள். இது மிகவும் சிக்கலான பகுதிகளுக்குப் பயன்படுத்துவதற்கு முன்பு கருத்துக்களைக் கற்றுக்கொள்ளவும் அனுபவத்தைப் பெறவும் உங்களை அனுமதிக்கும்.
- ஒரு கட்டமைப்பைப் பயன்படுத்தவும்: நிகழ்வு ஆதாரமாக்கலைச் செயல்படுத்துவதை எளிதாக்க Axon Framework அல்லது Spring Cloud Stream போன்ற ஒரு கட்டமைப்பைப் பயன்படுத்தவும். இந்த கட்டமைப்புகள் நிகழ்வுகள், புறத்தோற்றங்கள் மற்றும் சந்தாக்களை நிர்வகிக்க உதவும் சுருக்கங்கள் மற்றும் கருவிகளை வழங்குகின்றன.
- நிகழ்வுகளை கவனமாக வடிவமைக்கவும்: உங்களுக்குத் தேவையான அனைத்து தகவல்களையும் அவை பிடிப்பதை உறுதிசெய்ய உங்கள் நிகழ்வுகளை கவனமாக வடிவமைக்கவும். நிகழ்வுகளில் அதிகப்படியான தகவல்களைச் சேர்ப்பதைத் தவிர்க்கவும், ஏனெனில் இது அவற்றைச் செயலாக்குவதை கடினமாக்கும்.
- நிகழ்வு மேம்படுத்துதலைச் செயல்படுத்தவும்: உங்கள் நிகழ்வுகளின் கட்டமைப்பில் ஏற்படும் மாற்றங்களைக் கையாள நிகழ்வு மேம்படுத்துதலைச் செயல்படுத்தவும். நிகழ்வு கட்டமைப்பு மாறிய பிறகும் தற்போதுள்ள நிகழ்வுகளைச் செயலாக்க இது உங்களை அனுமதிக்கும்.
- அமைப்பைக் கண்காணிக்கவும்: பிழைகளைக் கண்டறிந்து தடுக்க அமைப்பை உன்னிப்பாகக் கண்காணிக்கவும். நிகழ்வுக் களஞ்சியம், நிகழ்வு வெளியீட்டு செயல்முறை மற்றும் படித்தல் மாதிரி புதுப்பிப்புகளைக் கண்காணிக்கவும்.
- சம ஆற்றலைக் கையாளவும்: உங்கள் நிகழ்வு கையாளுபவர்கள் சம ஆற்றல் கொண்டவர்கள் என்பதை உறுதிப்படுத்தவும். இதன் பொருள், அவை ஒரே நிகழ்வை பல முறை எந்தத் தீங்கும் விளைவிக்காமல் செயலாக்க முடியும். பரவலாக்கப்பட்ட அமைப்பில் நிகழ்வுகள் ஒன்றுக்கு மேற்பட்ட முறை வழங்கப்படலாம் என்பதால் இது முக்கியம்.
- ஈடுசெய்யும் பரிவர்த்தனைகளைக் கவனியுங்கள்: ஒரு நிகழ்வு வெளியிடப்பட்ட பிறகு ஒரு செயல்பாடு தோல்வியுற்றால், மாற்றங்களைச் செயல்தவிர்க்க நீங்கள் ஒரு ஈடுசெய்யும் பரிவர்த்தனையைச் செயல்படுத்த வேண்டியிருக்கலாம். உதாரணமாக, ஒரு ஆர்டர் உருவாக்கப்பட்டு ஆனால் கட்டணம் தோல்வியுற்றால், நீங்கள் ஆர்டரை ரத்து செய்ய வேண்டியிருக்கலாம்.
நிகழ்வு ஆதாரமாக்கலின் நிஜ-உலக எடுத்துக்காட்டுகள்
நிகழ்வு ஆதாரமாக்கல் பல்வேறு தொழில்கள் மற்றும் பயன்பாடுகளில் பயன்படுத்தப்படுகிறது, அவற்றுள்:
- நிதி சேவைகள்: வங்கிகள் மற்றும் நிதி நிறுவனங்கள் பரிவர்த்தனைகளைக் கண்காணிக்க, கணக்குகளை நிர்வகிக்க மற்றும் மோசடியைக் கண்டறிய நிகழ்வு ஆதாரமாக்கலைப் பயன்படுத்துகின்றன.
- இ-காமர்ஸ்: இ-காமர்ஸ் நிறுவனங்கள் ஆர்டர்களை நிர்வகிக்க, சரக்குகளைக் கண்காணிக்க மற்றும் வாடிக்கையாளர் அனுபவத்தைத் தனிப்பயனாக்க நிகழ்வு ஆதாரமாக்கலைப் பயன்படுத்துகின்றன.
- கேமிங்: விளையாட்டு உருவாக்குநர்கள் விளையாட்டு நிலையைக் கண்காணிக்க, வீரர் முன்னேற்றத்தை நிர்வகிக்க மற்றும் மல்டிபிளேயர் அம்சங்களைச் செயல்படுத்த நிகழ்வு ஆதாரமாக்கலைப் பயன்படுத்துகின்றனர்.
- விநியோகச் சங்கிலி மேலாண்மை: விநியோகச் சங்கிலி நிறுவனங்கள் பொருட்களைக் கண்காணிக்க, சரக்குகளை நிர்வகிக்க மற்றும் தளவாடங்களை மேம்படுத்த நிகழ்வு ஆதாரமாக்கலைப் பயன்படுத்துகின்றன.
- சுகாதாரம்: சுகாதார வழங்குநர்கள் நோயாளிகளின் பதிவுகளைக் கண்காணிக்க, சந்திப்புகளை நிர்வகிக்க மற்றும் நோயாளிப் பராமரிப்பை மேம்படுத்த நிகழ்வு ஆதாரமாக்கலைப் பயன்படுத்துகின்றனர்.
- உலகளாவிய தளவாடங்கள்: Maersk அல்லது DHL போன்ற நிறுவனங்கள் உலகெங்கிலும் உள்ள ஏற்றுமதிகளைக் கண்காணிக்க நிகழ்வு ஆதாரமாக்கலைப் பயன்படுத்தலாம், "ஏற்றுமதி துறைமுகத்திலிருந்து புறப்பட்டது," "ஏற்றுமதி துறைமுகத்திற்கு வந்தது," "சுங்க அனுமதி தொடங்கியது," மற்றும் "ஏற்றுமதி வழங்கப்பட்டது" போன்ற நிகழ்வுகளைப் பிடிக்கலாம். இது ஒவ்வொரு ஏற்றுமதிக்கும் ஒரு முழுமையான தணிக்கைத் தடத்தை உருவாக்குகிறது.
- சர்வதேச வங்கி: HSBC அல்லது Standard Chartered போன்ற வங்கிகள் சர்வதேச பணப் பரிமாற்றங்களைக் கண்காணிக்க நிகழ்வு ஆதாரமாக்கலைப் பயன்படுத்தலாம், "பரிமாற்றம் தொடங்கப்பட்டது," "நாணயப் பரிமாற்றம் செய்யப்பட்டது," "பயனாளி வங்கிக்கு நிதி அனுப்பப்பட்டது," மற்றும் "பயனாளியால் நிதி பெறப்பட்டது" போன்ற நிகழ்வுகளைப் பிடிக்கலாம். இது ஒழுங்குமுறை இணக்கத்தை உறுதிப்படுத்த உதவுகிறது மற்றும் மோசடி கண்டறிதலை எளிதாக்குகிறது.
முடிவுரை
நிகழ்வு ஆதாரமாக்கல் என்பது உங்கள் தணிக்கைத் தடம் செயலாக்கத்தை புரட்சிகரமாக்கக்கூடிய ஒரு சக்திவாய்ந்த கட்டடக்கலை வடிவமாகும். இது இணையற்ற கண்டறியும் தன்மை, தரவு நேர்மை மற்றும் அமைப்பு மீள்தன்மையை வழங்குகிறது. இது சில சவால்களை முன்வைத்தாலும், நிகழ்வு ஆதாரமாக்கலின் நன்மைகள் பெரும்பாலும் செலவுகளை விட அதிகமாக உள்ளன, குறிப்பாக சிக்கலான மற்றும் முக்கியமான அமைப்புகளுக்கு. இந்த வழிகாட்டியில் கோடிட்டுக் காட்டப்பட்டுள்ள சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலம், நீங்கள் நிகழ்வு ஆதாரமாக்கலை வெற்றிகரமாகச் செயல்படுத்தலாம் மற்றும் வலுவான மற்றும் தணிக்கை செய்யக்கூடிய அமைப்புகளை உருவாக்கலாம்.