ROZSZERZAJĄC FUNKCJONALNOŚCI MEMCACHED Mariusz Gil mariusz.gil@scalability.pl 4Developers 2011, Warszawa
BIO 2
CZYM JEST MEMCACHED? 3
DISTRIBUTED HASH TABLE 4
ZASADA DZIAŁANIA cache 1GB cache 1GB memcached 2GB rozdzielne cache na każdym serwerze wspólny cache dla wszystkich serwerów, implementowany jako rozproszona tablica hashująca 5
PROSTY PROTOKÓŁ GET GETS SET ADD REPLACE PREPEND APPEND CAS INCR DECR STATS STATS ITEMS STATS SLABS STATS SIZES 6
K.I.S.S. 7
TYPOWE ZASTOSOWANIA cache danych, np. zapytań SQL cache widoków storage sesyjny storage dla locków aplikacji 8
PHP I MEMCACHED $post_id = (int)$_get['post_id']; $memcached = new Memcache(); $memcached->connect('hostname', 11211); if (($row = $memcached->get('post_id_'. $post_id)) === false) { // yes this is safe, we type casted it already $rs = mysql_query('select * FROM post WHERE post_id = '. $post_id); } if ($rs && mysql_num_rows($rs) > 0) { $row = mysql_fetch_assoc($rs); // cache compressed for 1 hour $memcached->set('post_id_'. $post_id, $row, MEMCACHE_COMPRESSED, 3600); } var_dump($row); 9
NGINX I MEMCACHED 1. Request: /foo/bar.html 2. GET (key = uri) 4. Request: /foo/bar.html 3. SET (key = uri) serwery aplikacyjne 10
WADY I OGRANICZENIA brak trwałości danych, wsparcia HA ograniczenia w długości klucza i wartości algorytm ekspiracji kluczy brak bezpiecznego dostępu do serwera 11
MEMCACHEDB 12
ZASADA DZIAŁANIA MASTER instancja memcachedb wewnętrzny storage BerkeleyDB replikacja GET / GETS SET / ADD / REPLACE INCR / DECR DELETE STATS SLAVE instancja memcachedb wewnętrzny storage BerkeleyDB 13
MEMCACHEQ 14
ZASADA DZIAŁANIA SET nazwa kolejki jest kluczem w memcacheq queue_1 v4 v3 v2 v1 queue_2 v4 v2 v1 GET mariusz@macbook Pro:$ telnet localhost 22201 Trying ::1... Connected to localhost. Escape character is '^]'. set queue_1 0 0 3 abc STORED set queue_1 0 0 3 def STORED set queue_1 0 0 3 ghi STORED get queue_1 VALUE queue_1 0 3 abc END get queue_1 VALUE queue_1 0 3 def END get queue_1 VALUE queue_1 0 3 ghi END get queue_1 END quit Connection closed by foreign host. 15
REPCACHED * * repcached funkcjonuje tylko z memcached linii1.2.x 16
MOŻLIWOŚCI synchroniczna replikacja danych wsparcie wszystkich komend memcached relacja master-slave pomiędzy serwerami replikacja całości w przypadku startu slave automatyczne elekcja kolejnego mastera 17
ZASADA DZIAŁANIA 1. # Uruchomienie serwera master 2. memcached -l localhost -d -u nobody 3. # Uruchomienie serwera slave 4. memcached -l localhost -d -x localhost -m 64 -p 11112 -u nobody 1. # Polecenia SET i GET na serwerze master 2. [user@host ~]$telnet localhost 11211 3. Trying localhost 4. Connected to localhost 5. Escape character is '^]'. 6. set my_key 1 600 5 7. 12345 8. STORED 9. get my_key 10.VALUE my_key 1 5 11.12345 12.END 1. # Polecenia SET na serwerze slave 2. [user@host ~]$telnet localhost 11112 3. Trying localhost... 4. Connected to localhost. 5. Escape character is '^]'. 6. get mykey 7. VALUE my_key 1 5 8. 12345 9. END 18
KYOTO TYCOON 19
MOŻLIWOŚCI topologia dual-master hot-backup i przyrostowy update log pluggable server pluggable database slave agent - replikacja danych do RDBMS 20
ARCHITEKTURA klient dwukierunkowa replikacja master-master Active MASTER Standby MASTER load balancing Slave SERVER Slave SERVER Slave SERVER Slave SERVER jednokierunkowa replikacja master-slave 21
REDIS 22
KEY-VALUE STORAGE 23
SERWER STRUKTUR łańcuchy hashe listy zbiory, zbiory sortowane kanały wiadomości 24
MOŻLIWOŚCI replikacja master-slave(s) serializacja danych na dysk (AOF) obsługa pamięci wirtualnej command pipelining szybkość działania (110k GET / 81k SET) 25
INTERFEJS SET key value Ustawia wartość pod danym kluczem SADD key member Dodaje wartość do zbioru LPOP key Pobiera i usuwa pierwszy element listy GET key Pobiera wartość z danego klucza SINTER key [key...] Pobiera przecięcie zbiorów RPUSH key value Dodaje wartość na początek listy MGET key [key...] Pobiera wartości z danych kluczy SUNION key [key...] Pobiera sumę zbiorów LLEN key Pobiera aktualną długość listy 26
GITHUB RESQUE 27
MEMBASE 28
PROSTE SZYBKIE ELASTYCZNE 29
30
MOXI 31
DZIĘKUJĘ ZA UWAGĘ Mariusz Gil mariusz.gil@scalability.pl 4Developers 2011, Warszawa