1 <Insert Picture Here> The Native NDB Engine for Memcached - - PowerPoint PPT Presentation

1
SMART_READER_LITE
LIVE PREVIEW

1 <Insert Picture Here> The Native NDB Engine for Memcached - - PowerPoint PPT Presentation

1 <Insert Picture Here> The Native NDB Engine for Memcached John David Duncan john.duncan@oracle.com 2 Program Agenda <Insert Picture Here> MySQL Cluster Today A little bit about memcached Design Decisions


slide-1
SLIDE 1

1

slide-2
SLIDE 2

<Insert Picture Here>

The Native NDB Engine for Memcached John David Duncan john.duncan@oracle.com

2

slide-3
SLIDE 3

<Insert Picture Here>

Program Agenda

  • MySQL Cluster Today
  • A little bit about memcached
  • Design Decisions
  • Configuration
  • Performance
  • Links
  • Demo

3

slide-4
SLIDE 4

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any

  • contract. It is not a commitment to deliver any

material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features

  • r functionality described for Oracle’s products

remains at the sole discretion of Oracle.

4

slide-5
SLIDE 5

<Insert Picture Here>

MySQL Cluster Today

5

slide-6
SLIDE 6

NDB Data Nodes API Nodes Node Group 1 Node Group 2

The Basics

6

slide-7
SLIDE 7

NDB Data Nodes Node Group 1 Node Group 2

The Basics – Data Storage

  • High Read and Write Performance

– Automatic data partitioning, multi-master, parallel execution

  • High Availability
  • Fast Failover

– sub-second fault detection and reconfiguration

  • Scalable

– Using commodity hardware

7

slide-8
SLIDE 8

The Basics – Data Access

  • High throughput

– tens-to-hundreds of thousands of transactions per second

  • Low latency

– sub-millisecond response

  • Multiple Acceess Methods

– SQL and NoSQL

API Nodes

8

slide-9
SLIDE 9

Recent History

  • Cluster 6.3 (2008)

– multi-master replication, key-distribution awareness

  • Cluster 7.0 (2009)

– Multi-threaded NDB nodes – Ability to add nodes online to a running cluster

  • Cluster 7.1 (2010)

– ClusterJ – MySQL Cluster Manager – ndbinfo (and then MEM support for Cluster) – Windows support

  • Plus

– Extensive improvements to BLOB performance, locking behavior, node restart times, etc. in monthly releases

9

slide-10
SLIDE 10

Employee findEmployee(long id) { Employee employee = session.find(Employee.class, id); return employee; } ClusterJ Example

  • Runs faster than JDBC
  • Almost as fast as the C++ NDB API
  • 3 lines of code

10

slide-11
SLIDE 11

MySQL Cluster 7.2 Beta

  • Push-Down Joins

– Many “SPJ” (Select/Project/Join) operations can be executed at the data nodes rather than the MySQL server – Long-term effort (presented at this conference last year) – 50x improvement for some queries

  • MySQL privilege tables can be stored in cluster
  • Memcache API

11

slide-12
SLIDE 12

<Insert Picture Here>

About memcache

  • It’s a cache!
  • It’s not your data store!
  • If it fails, you get a cache miss!

12

slide-13
SLIDE 13

Two levels of hashing

Memcache httpd memcached memcached memcached

memcache Key

PHP/Perl

friends:12389 hash key to find data hash key to pick server

13

slide-14
SLIDE 14

Cache hit

Memcache httpd memcached PHP/Perl

friends:12389 hash key to find data VALUE friends:12389 0 31\r\n 101, 11009, 11150, 55881, 77798 \r\n hash key to pick server

14

slide-15
SLIDE 15

Cache miss (1): fetch from DB

Memcache httpd memcached PHP/Perl

hash key to find data hash key to pick server NOT FOUND

mysql MySQL Slave

SELECT friend_id FROM user_friends WHERE user_id = ?

15

slide-16
SLIDE 16

Cache miss (2): manage cache

Memcache httpd memcached PHP/Perl

hash key to find data set friends:12389 31\r\n 101, 11009, 11150, 55881, 77798 \r\n

16

slide-17
SLIDE 17

Data change (1): Write to DB

mysql httpd PHP/Perl MySQL Master

INSERT INTO user_friends (user_id, friend_id) VALUES ( 12389, 999101);

17

slide-18
SLIDE 18

Data change (2): manage cache

mysql httpd PHP/Perl MySQL Master memcached

delete friends:12389 \r\n

18

slide-19
SLIDE 19

Expected Latency & Throughput

memcache httpd PHP/Perl memcached MySQL Slave 1 , s

  • f
  • p

e r a t i

  • n

s / s e c . ~ 2 m s r

  • u

n d t r i p 10,000s of operations/sec. ~ 200 µs round trip mysql

19

slide-20
SLIDE 20

Cost per n active users

memcache httpd PHP/Perl $1 $10 mysql

20

slide-21
SLIDE 21

A little bit more history

  • Memcached 1.2 (2007)

– The 2000-line Facebook patch

  • UDP support
  • Vector I/O and other “details”

– adding up to 25% improved CPU efficiency

  • Multithreaded (for a small number of libevent threads)
  • Compare-And-Set operation (CAS)
  • Memcached 1.4 (2009):

– Binary Protocol – SASL Authentication

  • Memcached 1.6 (upcoming)

– Storage Engines – Logging modules – Windows platform support

21

slide-22
SLIDE 22

<Insert Picture Here>

Design Decisions

22

slide-23
SLIDE 23

Goals

  • Access NDB data from memcache clients

– Memcached perspective:

  • NDB is a reliable, write-scalable, replicated data store

– MySQL Cluster perspective:

  • memcache is an easy-to-use high performance API

23

slide-24
SLIDE 24

Goals

  • Support existing schemas and all MySQL data types
  • Cache NDB data inside memcached

– with automatic cache management – and flexibility to fine-tune (or disable) the cache policies

  • Support the whole memcache protocol
  • Acheive superior performance

– latency as expected from memcached – throughput as expected from memcached

24

slide-25
SLIDE 25

Which codebase?

memcached.org libmemcached build our own Text Protocol

Binary Protocol

✔ ✔

TCP

✔ ✔

UDP

Authentication

✔ ✔

25

slide-26
SLIDE 26

memcached

Server Architecture

memcached memcached

  • Memcached separate from ndbd

– Definitely! – “m:n” ratio of memcache servers to data nodes

  • Memcached inside ndbd

– Maybe! – we know how to do it – “embedded” API-to-TC channel – lower latency – network round trip + tens of microseconds – Not as flexible

26

slide-27
SLIDE 27

Decisions

  • Use memcached 1.6 tree
  • Isolate the NDB-specific code into an ndb_engine

– which currently exists outside the memcached source tree – and runs in an unmodified memcached server

  • Build a standalone server binary
  • Possibly also build an ndbmtd-embedded server
  • Share code with InnoDB Memcache team

– on basic configuration and user-visible concepts – and on changes that would allow a memcache server module to be loaded into either ndbmtd or mysqld

27

slide-28
SLIDE 28

Other decisions

  • Memcache INCR & DECR

– Fully supported – Atomic operations – Performed at the data node

  • Memcache CAS (version id check)

– Fully Supported

  • either at local cache or at database

– CAS check is pushed down to the data node – Ideally an update that comes from a non-memcache API node should invalidate the CAS

  • we still need to decide the best design for this

28

slide-29
SLIDE 29

Limitations

  • The size of stored values is limited to the NDB row size

– currently just less than 8 KB – vs. 1 MB typical limit for memcached – due to the lack of BLOB support in the async NDB API

29

slide-30
SLIDE 30

mysqld

Architecture Overview

Application Application NDB Cluster Data Node Data Node Data Node Data Node memcached NDB Engine NDB Engine Wide-area Replication binlog stream InnoDB Local Cache

30

slide-31
SLIDE 31

<Insert Picture Here>

Configuring It

31

slide-32
SLIDE 32

What’s Configurable

  • Does it use local cache?
  • Does it use NDB?
  • What columns hold the keys?
  • What columns hold the data?
  • Are memcache commands like DELETE and FLUSH

allowed to delete records from the database?

  • You decide all of this ...
  • on a “per-key-prefix” basis.

32

slide-33
SLIDE 33

A Key Prefix

user:1248

the prefix the database key

33

slide-34
SLIDE 34

Fundamentals

  • memcached command line specifies a connectstring for

a primary cluster

  • primary = “where the config is stored”
  • The NDB Engine reads the configuration tables from

the ndbmemcache database on the primary cluster

  • You, the administrator, manage the config via SQL
  • An NDB Memcache server can operate on data in the

primary cluster or in other clusters

  • Different NDB Memcache servers can fetch different

configurations

34

slide-35
SLIDE 35

Standard Tables in ndbmemcache

  • meta

– stores configuration schema version (for upgrade compatibility); consider it to be read-only

  • ndb_clusters
  • containers

– where data is stored

  • cache_policies

– how it can be accessed

  • key_prefixes
  • memcache_server_roles
  • last_memcached_signon
  • demo_table

35

slide-36
SLIDE 36

ndb_clusters

  • cluster_id

– int, referenced by key_prefixes

  • ndb_connectstring

– varchar(128) – how to reach this cluster

  • microsec_rtt

– default 250; used for internal performance tuning

36

slide-37
SLIDE 37

containers

  • name
  • schema_name
  • table_name (the existing table where your data lives)
  • key_columns (comma-separated)
  • value_columns (comma-separated)
  • flags (either a constant number, or a column name)
  • increment_column (optional, for INCR/DECR)
  • cas_column (optional)
  • expire_time_column (optional)

37

slide-38
SLIDE 38

cache_policies

  • policy_name
  • get_policy

– enum (cache_only, ndb_only, caching, disabled)

  • set_policy

– enum (cache_only, ndb_only, caching, disabled)

  • delete_policy

– enum (cache_only, ndb_only, caching, disabled)

  • flush_from_db

– enum(false, true)

38

slide-39
SLIDE 39

A key-prefix mapping

Memcache key prefix Cluster Container Cache Policy

39

slide-40
SLIDE 40

key prefix Cluster Con- tainer Cache Policy key prefix Cluster Con- tainer Cache Policy key prefix Cluster Con- tainer Cache Policy key prefix Cluster Con- tainer Cache Policy Server Role ID

A memcache server role

40

slide-41
SLIDE 41

key_prefixes

  • server_role_id
  • key_prefix
  • cluster_id
  • policy
  • container

41

slide-42
SLIDE 42

demo_table

  • Not really part of the configuration ...
  • mkey

– varchar(250) NOT NULL PRIMARY KEY

  • math_value

– bigint unsigned

  • cas_value

– bigint unsigned

  • string_value

– varchar(7500)

42

slide-43
SLIDE 43

<Insert Picture Here>

Performance

43

slide-44
SLIDE 44

Measured Latency

sec 1000 500 ICMP ping Memcached Default Engine NDB 1-Node Cluster NDB 2-Node Cluster

98 184 351 374

Read Write

avg. min. 95th

memcachetest -t 2 -M 7000 -c 25000

44

slide-45
SLIDE 45
  • This Presentation

– http://en.oreilly.com/mysql2011/

  • Memcached 1.6 development tree

– git clone git://github.com/memcached/memcached – cd memcached – git checkout -t origin/engine-pu

  • MySQL Cluster 7.2 with Memcached Engine

– bzr clone lp:~mysql/mysql-server/mysql-cluster-7.2-labs-memcached – or look for it at labs.mysql.com

  • Mailing List

– cluster@lists.mysql.com

Links

45

slide-46
SLIDE 46

Demo

  • What we’ll see:

– Memcache Server Window

  • start memcached “sandbox”

– default role (NDB-only) – mc-only role (plain memcached) – ndb-caching role (NDB with local cache) – Client Window

  • run memcapable

– MyQSL Window

  • examine data and configuration

46

slide-47
SLIDE 47

47