1
play

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


  1. 1

  2. <Insert Picture Here> The Native NDB Engine for Memcached John David Duncan john.duncan@oracle.com 2

  3. Program Agenda <Insert Picture Here> • MySQL Cluster Today • A little bit about memcached • Design Decisions • Configuration • Performance • Links • Demo 3

  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 or functionality described for Oracle’s products remains at the sole discretion of Oracle. 4

  5. <Insert Picture Here> MySQL Cluster Today 5

  6. The Basics API Nodes Node Group 1 Node Group 2 NDB Data Nodes 6

  7. 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 Node Group 1 Node Group 2 NDB Data Nodes 7

  8. The Basics – Data Access API Nodes • High throughput – tens-to-hundreds of thousands of transactions per second • Low latency – sub-millisecond response • Multiple Acceess Methods – SQL and NoSQL 8

  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

  10. ClusterJ Example Employee findEmployee(long id) { Employee employee = session.find(Employee.class, id); return employee; } • Runs faster than JDBC • Almost as fast as the C++ NDB API • 3 lines of code 10

  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

  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

  13. Two levels of hashing memcached httpd hash key PHP/Perl memcached hash key to pick server to find data Memcache friends:12389 memcached memcache Key 13

  14. Cache hit httpd hash key PHP/Perl memcached hash key to pick server to find data Memcache VALUE friends:12389 0 31\r\n friends:12389 101, 11009, 11150, 55881, 77798 \r\n 14

  15. Cache miss (1): fetch from DB httpd hash key PHP/Perl memcached hash key to pick server to find data NOT FOUND Memcache mysql SELECT friend_id FROM user_friends MySQL WHERE user_id = ? Slave 15

  16. Cache miss (2): manage cache httpd hash key PHP/Perl memcached to find data Memcache set friends:12389 31\r\n 101, 11009, 11150, 55881, 77798 \r\n 16

  17. Data change (1): Write to DB httpd PHP/Perl mysql INSERT INTO user_friends (user_id, friend_id) VALUES ( 12389, 999101); MySQL Master 17

  18. Data change (2): manage cache httpd PHP/Perl memcached delete friends:12389 \r\n mysql MySQL Master 18

  19. Expected Latency & Throughput httpd 10,000s of operations/sec. ~ 200 µs round trip PHP/Perl memcached memcache mysql 1 , 0 0 0 s o f o p e r a t i o n MySQL s / ~ s e 2 c . m s r o u n d t r Slave i p 19

  20. Cost per n active users httpd PHP/Perl $1 memcache mysql $10 20

  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

  22. <Insert Picture Here> Design Decisions 22

  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

  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

  25. Which codebase? memcached.org libmemcached build our own ✔ Text Protocol ✔ ✔ Binary Protocol ✔ ✔ TCP ✔ UDP ✔ Authentication ✔ 25

  26. Server Architecture • Memcached inside ndbd • Memcached separate from ndbd – Maybe! – Definitely! – we know how to do it – “m:n” ratio of memcache servers – “embedded” API-to-TC to data nodes channel – lower latency – network round trip + tens of microseconds – Not as flexible memcached memcached memcached 26

  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

  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

  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

  30. Architecture Overview Application Application memcached mysqld Wide-area Replication Local Cache NDB Engine InnoDB NDB Engine binlog stream NDB Data Data Data Data Cluster Node Node Node Node 30

  31. <Insert Picture Here> Configuring It 31

  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

  33. A Key Prefix user:1248 the prefix the database key 33

  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

  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

  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

  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

  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

  39. A key-prefix mapping Memcache Cache key Container Cluster Policy prefix 39

  40. A memcache server role key Con- Cache Cluster prefix tainer Policy Server key Con- Cache Role Cluster prefix tainer Policy ID key Con- Cache Cluster prefix tainer Policy key Con- Cache Cluster prefix tainer Policy 40

  41. key_prefixes • server_role_id • key_prefix • cluster_id • policy • container 41

  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

Recommend


More recommend