Иван Бурмистров "Строго ориентированная...

46
Using Cassandra for event logging Presentation Using Cassandra for event logging Ivan Burmistrov SKB Kontur December 9th, 2013

Upload: it-people

Post on 06-May-2015

1.035 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Presentation

Using Cassandra for event logging

Ivan BurmistrovSKB Kontur

December 9th, 2013

Page 2: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EDI

We develop EDI (Electronic data interchange) system.

Page 3: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EDI

We develop EDI (Electronic data interchange) system.

Page 4: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EventLogger

interface IEventLogger{void Write(Event[] events);Event[] Read(Event exclusiveEvent , int count);

}

Availability for Read and Write.Fast Write.Read with minimal time lag.No events in past while we making Read.Same events chronology in any thread.For any thread events orders for write and read are equals.

Page 5: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EventLogger

interface IEventLogger{void Write(Event[] events);Event[] Read(Event exclusiveEvent , int count);

}

Availability for Read and Write.Fast Write.Read with minimal time lag.No events in past while we making Read.Same events chronology in any thread.For any thread events orders for write and read are equals.

Page 6: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EventLogger

interface IEventLogger{void Write(Event[] events);Event[] Read(Event exclusiveEvent , int count);

}

Availability for Read and Write.Fast Write.Read with minimal time lag.No events in past while we making Read.Same events chronology in any thread.For any thread events orders for write and read are equals.

Page 7: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EventLogger

interface IEventLogger{void Write(Event[] events);Event[] Read(Event exclusiveEvent , int count);

}

Availability for Read and Write.Fast Write.Read with minimal time lag.No events in past while we making Read.Same events chronology in any thread.For any thread events orders for write and read are equals.

Page 8: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EventLogger

interface IEventLogger{void Write(Event[] events);Event[] Read(Event exclusiveEvent , int count);

}

Availability for Read and Write.Fast Write.Read with minimal time lag.No events in past while we making Read.Same events chronology in any thread.For any thread events orders for write and read are equals.

Page 9: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EventLogger

interface IEventLogger{void Write(Event[] events);Event[] Read(Event exclusiveEvent , int count);

}

Availability for Read and Write.Fast Write.Read with minimal time lag.No events in past while we making Read.Same events chronology in any thread.For any thread events orders for write and read are equals.

Page 10: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

EventLogger

interface IEventLogger{void Write(Event[] events);Event[] Read(Event exclusiveEvent , int count);

}

Availability for Read and Write.Fast Write.Read with minimal time lag.No events in past while we making Read.Same events chronology in any thread.For any thread events orders for write and read are equals.

Page 11: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Obvious solution

Eventstring EventId;long Timestamp;byte[] Content;

Page 12: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Obvious solution

Write(Event[] events)

Write columns for each event e:e.Timestamp = NowTicks;RowKey = e.Timestamp / Partition;ColumnName = e.Timestamp + ":" + e.EventId;ColumnValue = e.Content;

Read(Event exclusiveEvent, int count)

Execute get_slice from exclusive column;Skip events with Timestamp > NowTicks - TimeLag.

Page 13: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Obvious solution

Write(Event[] events)

Write columns for each event e:e.Timestamp = NowTicks;RowKey = e.Timestamp / Partition;ColumnName = e.Timestamp + ":" + e.EventId;ColumnValue = e.Content;

Read(Event exclusiveEvent, int count)

Execute get_slice from exclusive column;Skip events with Timestamp > NowTicks - TimeLag.

Page 14: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesEasy implementation.Write action is very fast.

DisadvantagesTimeLag = ?TimeLag > WriteTimeout + SyncDiff;TimeLag > ReadTimeout + SyncDiff;TimeLag > Cassandra worst write time;We can’t cache events in unstable zone, if we want to readevents from it. I.e. more requests −→ more CPU for cassandra.

Page 15: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesEasy implementation.Write action is very fast.

DisadvantagesTimeLag = ?TimeLag > WriteTimeout + SyncDiff;TimeLag > ReadTimeout + SyncDiff;TimeLag > Cassandra worst write time;We can’t cache events in unstable zone, if we want to readevents from it. I.e. more requests −→ more CPU for cassandra.

Page 16: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesEasy implementation.Write action is very fast.

DisadvantagesTimeLag = ?TimeLag > WriteTimeout + SyncDiff;TimeLag > ReadTimeout + SyncDiff;TimeLag > Cassandra worst write time;We can’t cache events in unstable zone, if we want to readevents from it. I.e. more requests −→ more CPU for cassandra.

Page 17: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesEasy implementation.Write action is very fast.

DisadvantagesTimeLag = ?TimeLag > WriteTimeout + SyncDiff;TimeLag > ReadTimeout + SyncDiff;TimeLag > Cassandra worst write time;We can’t cache events in unstable zone, if we want to readevents from it. I.e. more requests −→ more CPU for cassandra.

Page 18: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesEasy implementation.Write action is very fast.

DisadvantagesTimeLag = ?TimeLag > WriteTimeout + SyncDiff;TimeLag > ReadTimeout + SyncDiff;TimeLag > Cassandra worst write time;We can’t cache events in unstable zone, if we want to readevents from it. I.e. more requests −→ more CPU for cassandra.

Page 19: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesEasy implementation.Write action is very fast.

DisadvantagesTimeLag = ?TimeLag > WriteTimeout + SyncDiff;TimeLag > ReadTimeout + SyncDiff;TimeLag > Cassandra worst write time;We can’t cache events in unstable zone, if we want to readevents from it. I.e. more requests −→ more CPU for cassandra.

Page 20: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesEasy implementation.Write action is very fast.

DisadvantagesTimeLag = ?TimeLag > WriteTimeout + SyncDiff;TimeLag > ReadTimeout + SyncDiff;TimeLag > Cassandra worst write time;We can’t cache events in unstable zone, if we want to readevents from it. I.e. more requests −→ more CPU for cassandra.

Page 21: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

Eventstring EventId;long Timestamp;byte[] Content;State State (Good or Bad);

Page 22: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

Write(Event event)Timestamp = NowTicks, State = Bad, write event.Are there Good events with bigger Timestamp?No? State = Good, rewrite event.Yes? Delete event and try again.

Page 23: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

Write(Event event)Timestamp = NowTicks, State = Bad, write event.Are there Good events with bigger Timestamp?No? State = Good, rewrite event.Yes? Delete event and try again.

Page 24: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

Write(Event event)Timestamp = NowTicks, State = Bad, write event.Are there Good events with bigger Timestamp?No? State = Good, rewrite event.Yes? Delete event and try again.

Page 25: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

Write(Event event)Timestamp = NowTicks, State = Bad, write event.Are there Good events with bigger Timestamp?No? State = Good, rewrite event.Yes? Delete event and try again.

Page 26: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

ReadWe can read events (same as obvious solution) while it’s Good.

Page 27: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

ReadWe can read events (same as obvious solution) while it’s Good.

Page 28: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

TimeLag = ?TimeLag do not depends on timeouts.Less write intensity −→ less TimeLag.Less cassandra write time −→ less TimeLag.

Page 29: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

TimeLag = ?TimeLag do not depends on timeouts.Less write intensity −→ less TimeLag.Less cassandra write time −→ less TimeLag.

Page 30: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Our algorithm

TimeLag = ?TimeLag do not depends on timeouts.Less write intensity −→ less TimeLag.Less cassandra write time −→ less TimeLag.

Page 31: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Improvements

Improvements

"Are there Good events with bigger Timestamp?" for O(1).Queue write requests and process its by batches.We could remove the dependency from time sync, if NowTickswill be monotonous.

Page 32: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Improvements

Improvements

"Are there Good events with bigger Timestamp?" for O(1).Queue write requests and process its by batches.We could remove the dependency from time sync, if NowTickswill be monotonous.

Page 33: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Improvements

Improvements

"Are there Good events with bigger Timestamp?" for O(1).Queue write requests and process its by batches.We could remove the dependency from time sync, if NowTickswill be monotonous.

Page 34: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Sharding

Simple shardingWe can divide all entities by independent parts.For each part we can use separate eventLogger.

Page 35: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Sharding

Simple shardingWe can divide all entities by independent parts.For each part we can use separate eventLogger.

Page 36: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Sharding

Sharding for readingTimestamp = NowTicks, State = Bad, write events indifferent rows.Are there Good events with bigger Timestamp in any row?No? State = Good, rewrite events.Yes? Delete event and try again.

Page 37: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Sharding

Sharding for readingTimestamp = NowTicks, State = Bad, write events indifferent rows.Are there Good events with bigger Timestamp in any row?No? State = Good, rewrite events.Yes? Delete event and try again.

Page 38: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Sharding

Sharding for readingTimestamp = NowTicks, State = Bad, write events indifferent rows.Are there Good events with bigger Timestamp in any row?No? State = Good, rewrite events.Yes? Delete event and try again.

Page 39: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesSmall size of time lag. For 3500 writes per sec worst time lagis 50ms and 10 events.More cacheable.Easy sharding.Can be independed from time sync.

DisadvantagesMore slow writes. But still enough fast.Limit for writing threads.

Page 40: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesSmall size of time lag. For 3500 writes per sec worst time lagis 50ms and 10 events.More cacheable.Easy sharding.Can be independed from time sync.

DisadvantagesMore slow writes. But still enough fast.Limit for writing threads.

Page 41: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesSmall size of time lag. For 3500 writes per sec worst time lagis 50ms and 10 events.More cacheable.Easy sharding.Can be independed from time sync.

DisadvantagesMore slow writes. But still enough fast.Limit for writing threads.

Page 42: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesSmall size of time lag. For 3500 writes per sec worst time lagis 50ms and 10 events.More cacheable.Easy sharding.Can be independed from time sync.

DisadvantagesMore slow writes. But still enough fast.Limit for writing threads.

Page 43: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesSmall size of time lag. For 3500 writes per sec worst time lagis 50ms and 10 events.More cacheable.Easy sharding.Can be independed from time sync.

DisadvantagesMore slow writes. But still enough fast.Limit for writing threads.

Page 44: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Advantages and disadvantages

AdvantagesSmall size of time lag. For 3500 writes per sec worst time lagis 50ms and 10 events.More cacheable.Easy sharding.Can be independed from time sync.

DisadvantagesMore slow writes. But still enough fast.Limit for writing threads.

Page 45: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Another applications

Another applicationsIndexing. We can use event log as notification about changestate of some objects −→ indexing. Cacheable is very usefulhere!Message queues.

Page 46: Иван Бурмистров "Строго ориентированная последовательность временных событий". Выступление на Cassandra

Using Cassandra for event logging

Another applications

Another applicationsIndexing. We can use event log as notification about changestate of some objects −→ indexing. Cacheable is very usefulhere!Message queues.