redis - uni-weimar.de · when aof gets to big redis rewrites it from in-memory data new aof is...

23
Redis Jan Graßegger 2014/07/03

Upload: others

Post on 17-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Redis

Jan Graßegger

2014/07/03

Page 2: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Redis

A persistent distributed in-memory database

2

Page 3: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Redis

A persistent distributed in-memory database

3

Page 4: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Persistence

Page 5: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Database Write Operation

1. Client sends a write command to the database

2. Database receives the write

3. Database calls the system call that writes the data on disk

4. Operating system transfers the write buffer to the disk controller

5. Disk controller writes data into a physical media

5

Page 6: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

It`s all about data safety

Relevant POSIX API commands

• write Gives data safety against process failure

• fsync Gives data safety against system failure (with restrictions)

6

Page 7: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

and data corruption

Three levels of safety against corruption

• Databases that do not care about

• Databases that use a log of operations to recover a consistent state after a failure

• Databases that never modify already written data. Append only

7

Page 8: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Redis

Two persistence strategies

• Snapshots

• Append Only File (AOF)

8

Page 9: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Snapshots (1)

Dump of the whole database

Creation interval is configurable and depends on a time interval and minimum number of keys changed

Every snapshot is created from in-memory data

New snapshot created as temporary file and renamed if write operation was successful

9

Page 10: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Snapshots (2)

On failure database changes longer ago than the configured time interval might be lost

Snapshots are created in a background task. Do not affect database performance

10

Page 11: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

AOF (1)

Appends change operations to one file

No changing, just appending

Always growing file

Commands only get logged if they changed data

11

Page 12: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

AOF (2)

Three levels of durability

• appendnfsync no Acknowledge write only after change was transferred to the kernel (POSIX write)

• appendnfsync everysec Write is flushed every second via POSIX fsync

• appendnfsync always Command is written and synced to disk before acknowledging to the client

12

Page 13: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

AOF (3)When AOF gets to big Redis rewrites it from in-memory data

New AOF is wrote to temporary file

When disk was synced temporary file is renamed to old file

If data is added during this process. New data appends to old file. Differences between old and new are buffered

13

Page 14: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Distribution

Page 15: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Distribution

Two aspects of distribution

• Replication

• Partitioning

15

Page 16: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Replication (1)

One master node

Multiple slave nodes

!

Non-blocking on master side

Optional non-blocking on slave side

Slaves are read-only by default

16

Page 17: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Replication (2)

17

Slave Master

SYNC

„Bulk transfer“

COMMAND 1

OKCOMMAND 1

Client

COMMAND 2

OKCOMMAND 2

Page 18: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

What about your last talk?

In the last talk I said:

Redis does not support sharding/partitioning.

!

That was right, but…

18

Page 19: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Partitioning(1)

Redis itself does not support partitioning!

There exists several clients or extensions that support it

• Redis cluster

• Twemproxy

• Redis-rb/Predis

19

Page 20: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Partitioning(2)

Disadvantages

• Multiple key operations not supported (intersection)

• Adding and removing nodes can be complex

20

Page 21: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

Performance

Page 22: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

What Redis claimsIntel(R) Xeon(R) CPU E5520 @ 2.27GHz (with pipelining)

• 552,028 SET operations per second

• 707,463 GET operations per second

!

Intel(R) Xeon(R) CPU E5520 @ 2.27GHz (without pipelining)

• 122,556 SET operations per second

• 123,601 GET operations per second22

Page 23: Redis - uni-weimar.de · When AOF gets to big Redis rewrites it from in-memory data New AOF is wrote to temporary "le When disk was synced temporary "le is renamed to old "le If data

First Benchmark1,000,000 million requests (random keys/values) on an Intel Core2Quad Q9550 @ 2,83GHz

23

operations per second

AOF off AOF on

pipelining off 55,919.30 SET 54,755.52 GET

54,677.68 SET 54,427.70 GET

pipelining on 359,195.41 SET 455,373.38 GET

126,087.50 SET 455,580.88 GET