தமிழ்

நிகழ்வு ஆதாரமாக்கல் உங்கள் தணிக்கைத் தடம் செயலாக்கத்தை எவ்வாறு புரட்சிகரமாக்கலாம், இணையற்ற கண்டறியும் தன்மை, தரவு நேர்மை மற்றும் அமைப்பு மீள்தன்மையை வழங்குகிறது என்பதை அறிக. நடைமுறை எடுத்துக்காட்டுகள் மற்றும் செயலாக்க உத்திகளை ஆராயுங்கள்.

நிகழ்வு ஆதாரமாக்கல்: வலுவான மற்றும் கண்டறியக்கூடிய அமைப்புகளுக்கான தணிக்கைத் தடங்களைச் செயல்படுத்துதல்

இன்றைய சிக்கலான மற்றும் ஒன்றோடொன்று இணைக்கப்பட்ட டிஜிட்டல் உலகில், ஒரு வலுவான மற்றும் விரிவான தணிக்கைத் தடத்தைப் பராமரிப்பது மிக முக்கியம். இது பெரும்பாலும் ஒரு ஒழுங்குமுறைத் தேவையாக இருப்பது மட்டுமல்லாமல், பிழைத்திருத்தம், பாதுகாப்புப் பகுப்பாய்வு மற்றும் உங்கள் அமைப்பின் பரிணாமத்தைப் புரிந்துகொள்வதற்கும் இது முக்கியமானது. நிகழ்வு ஆதாரமாக்கல், ஒரு பயன்பாட்டின் நிலையின் அனைத்து மாற்றங்களையும் நிகழ்வுகளின் வரிசையாகப் பிடிக்கும் ஒரு கட்டடக்கலை முறை, நம்பகமான, தணிக்கை செய்யக்கூடிய மற்றும் விரிவாக்கக்கூடிய தணிக்கைத் தடங்களைச் செயல்படுத்துவதற்கான நேர்த்தியான மற்றும் சக்திவாய்ந்த தீர்வை வழங்குகிறது.

நிகழ்வு ஆதாரமாக்கல் என்றால் என்ன?

பாரம்பரிய பயன்பாடுகள் பொதுவாக ஒரு தரவுத்தளத்தில் தரவின் தற்போதைய நிலையை மட்டுமே சேமிக்கின்றன. இந்த அணுகுமுறை கடந்த கால நிலைகளை புனரமைப்பதை அல்லது தற்போதைய நிலைக்கு வழிவகுத்த நிகழ்வுகளின் தொடரைப் புரிந்துகொள்வதை கடினமாக்குகிறது. நிகழ்வு ஆதாரமாக்கல், இதற்கு மாறாக, பயன்பாட்டின் நிலையின் ஒவ்வொரு குறிப்பிடத்தக்க மாற்றத்தையும் ஒரு மாற்ற முடியாத நிகழ்வாகப் பிடிப்பதில் கவனம் செலுத்துகிறது. இந்த நிகழ்வுகள் ஒரு பிற்சேர்க்கை-மட்டும் நிகழ்வுக் களஞ்சியத்தில் சேமிக்கப்படுகின்றன, இது கணினியில் உள்ள அனைத்து செயல்களின் முழுமையான மற்றும் காலவரிசை பதிவை உருவாக்குகிறது.

இதை ஒரு வங்கி கணக்கு பேரேடு போல நினைத்துப் பாருங்கள். தற்போதைய இருப்பை வெறுமனே பதிவு செய்வதற்கு பதிலாக, ஒவ்வொரு வைப்பு, திரும்பப் பெறுதல் மற்றும் பரிமாற்றம் ஆகியவை ஒரு தனி நிகழ்வாக பதிவு செய்யப்படுகின்றன. இந்த நிகழ்வுகளை மீண்டும் இயக்குவதன் மூலம், எந்த நேரத்திலும் கணக்கின் நிலையை நீங்கள் புனரமைக்க முடியும்.

தணிக்கைத் தடங்களுக்கு நிகழ்வு ஆதாரமாக்கலை ஏன் பயன்படுத்த வேண்டும்?

தணிக்கைத் தடங்களைச் செயல்படுத்துவதற்கு நிகழ்வு ஆதாரமாக்கல் பல கட்டாய நன்மைகளை வழங்குகிறது:

தணிக்கைத் தடங்களுக்கு நிகழ்வு ஆதாரமாக்கலைச் செயல்படுத்துதல்: ஒரு படிப்படியான வழிகாட்டி

தணிக்கைத் தடங்களுக்கு நிகழ்வு ஆதாரமாக்கலைச் செயல்படுத்துவதற்கான ஒரு நடைமுறை வழிகாட்டி இங்கே:

1. முக்கிய நிகழ்வுகளை அடையாளம் காணுதல்

உங்கள் தணிக்கைத் தடத்தில் நீங்கள் பிடிக்க விரும்பும் முக்கிய நிகழ்வுகளை அடையாளம் காண்பது முதல் படியாகும். இந்த நிகழ்வுகள் பயன்பாட்டின் நிலையில் குறிப்பிடத்தக்க மாற்றங்களைக் குறிக்க வேண்டும். போன்ற செயல்களைக் கவனியுங்கள்:

உதாரணம்: ஒரு இ-காமர்ஸ் தளத்திற்கு, முக்கிய நிகழ்வுகளில் "ஆர்டர்உருவாக்கப்பட்டது," "பணம்பெறப்பட்டது," "ஆர்டர்அனுப்பப்பட்டது," "வண்டியில்பொருள்சேர்க்கப்பட்டது," மற்றும் "பயனர்சுயவிவரம்புதுப்பிக்கப்பட்டது" ஆகியவை அடங்கும்.

2. நிகழ்வு கட்டமைப்பை வரையறுத்தல்

ஒவ்வொரு நிகழ்வும் பின்வரும் தகவல்களை உள்ளடக்கிய ஒரு நன்கு வரையறுக்கப்பட்ட கட்டமைப்பைக் கொண்டிருக்க வேண்டும்:

உதாரணம்: "ஆர்டர்உருவாக்கப்பட்டது" நிகழ்வு பின்வரும் கட்டமைப்பைக் கொண்டிருக்கலாம்:

{
  "நிகழ்வுவகை": "ஆர்டர்உருவாக்கப்பட்டது",
  "நிகழ்வுதரவு": {
    "ஆர்டர்ஐடி": "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. ஒரு நிகழ்வுக்களஞ்சியத்தைத் தேர்ந்தெடுங்கள்

நிகழ்வுக் களஞ்சியம் நிகழ்வுகளை சேமிப்பதற்கான மையக் களஞ்சியமாகும். இது எழுதுவதற்கும் நிகழ்வுகளின் வரிசைகளைப் படிப்பதற்கும் உகந்ததாக இருக்கும் ஒரு பிற்சேர்க்கை-மட்டும் தரவுத்தளமாக இருக்க வேண்டும். பல விருப்பங்கள் உள்ளன:

ஒரு நிகழ்வுக் களஞ்சியத்தைத் தேர்ந்தெடுக்கும்போது, போன்ற காரணிகளைக் கவனியுங்கள்:

4. நிகழ்வு வெளியீட்டைச் செயல்படுத்துங்கள்

ஒரு நிகழ்வு ஏற்படும்போது, உங்கள் பயன்பாடு அதை நிகழ்வுக் களஞ்சியத்தில் வெளியிட வேண்டும். இது பொதுவாக பின்வரும் படிகளை உள்ளடக்கியது:

உதாரணம் (ஒரு கற்பனையான 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. நிகழ்வுக்களஞ்சியத்தைப் பாதுகாத்தல்

நிகழ்வுக் களஞ்சியத்தில் முக்கியமான தரவு உள்ளது, எனவே அதை சரியாகப் பாதுகாப்பது மிகவும் முக்கியம். பின்வரும் பாதுகாப்பு நடவடிக்கைகளைக் கவனியுங்கள்:

7. தணிக்கை மற்றும் அறிக்கையிடலைச் செயல்படுத்துதல்

நீங்கள் நிகழ்வு ஆதாரமாக்கலைச் செயல்படுத்தியவுடன், தணிக்கை அறிக்கைகளை உருவாக்க மற்றும் பாதுகாப்புப் பகுப்பாய்வைச் செய்ய நிகழ்வு ஓடையைப் பயன்படுத்தலாம். ஒரு குறிப்பிட்ட பயனர், பரிவர்த்தனை அல்லது সত্তை தொடர்பான அனைத்து நிகழ்வுகளையும் கண்டுபிடிக்க நிகழ்வுக் களஞ்சியத்தை நீங்கள் வினவலாம். எந்த நேரத்திலும் அமைப்பின் நிலையை புனரமைக்க நிகழ்வு ஓடையையும் நீங்கள் பயன்படுத்தலாம்.

உதாரணம்: ஒரு குறிப்பிட்ட காலப்பகுதியில் ஒரு குறிப்பிட்ட பயனர் சுயவிவரத்தில் செய்யப்பட்ட அனைத்து மாற்றங்களையும் காட்டும் ஒரு அறிக்கையை நீங்கள் உருவாக்கலாம், அல்லது ஒரு குறிப்பிட்ட பயனரால் தொடங்கப்பட்ட அனைத்து பரிவர்த்தனைகளையும் காட்டும் ஒரு அறிக்கையை உருவாக்கலாம்.

பின்வரும் அறிக்கையிடல் திறன்களைக் கவனியுங்கள்:

நிகழ்வு ஆதாரமாக்கலின் சவால்கள்

நிகழ்வு ஆதாரமாக்கல் பல நன்மைகளை வழங்கினாலும், இது சில சவால்களையும் முன்வைக்கிறது:

நிகழ்வு ஆதாரமாக்கலுக்கான சிறந்த நடைமுறைகள்

நிகழ்வு ஆதாரமாக்கலின் சவால்களைத் தணிக்க, இந்த சிறந்த நடைமுறைகளைப் பின்பற்றவும்:

நிகழ்வு ஆதாரமாக்கலின் நிஜ-உலக எடுத்துக்காட்டுகள்

நிகழ்வு ஆதாரமாக்கல் பல்வேறு தொழில்கள் மற்றும் பயன்பாடுகளில் பயன்படுத்தப்படுகிறது, அவற்றுள்:

முடிவுரை

நிகழ்வு ஆதாரமாக்கல் என்பது உங்கள் தணிக்கைத் தடம் செயலாக்கத்தை புரட்சிகரமாக்கக்கூடிய ஒரு சக்திவாய்ந்த கட்டடக்கலை வடிவமாகும். இது இணையற்ற கண்டறியும் தன்மை, தரவு நேர்மை மற்றும் அமைப்பு மீள்தன்மையை வழங்குகிறது. இது சில சவால்களை முன்வைத்தாலும், நிகழ்வு ஆதாரமாக்கலின் நன்மைகள் பெரும்பாலும் செலவுகளை விட அதிகமாக உள்ளன, குறிப்பாக சிக்கலான மற்றும் முக்கியமான அமைப்புகளுக்கு. இந்த வழிகாட்டியில் கோடிட்டுக் காட்டப்பட்டுள்ள சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலம், நீங்கள் நிகழ்வு ஆதாரமாக்கலை வெற்றிகரமாகச் செயல்படுத்தலாம் மற்றும் வலுவான மற்றும் தணிக்கை செய்யக்கூடிய அமைப்புகளை உருவாக்கலாம்.

மேலும் படிக்க