• Save
WebClusters, Redis
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

WebClusters, Redis

on

  • 2,426 views

 

Statistics

Views

Total Views
2,426
Views on SlideShare
2,421
Embed Views
5

Actions

Likes
4
Downloads
0
Comments
0

1 Embed 5

http://www.hanrss.com 5

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • dlaczego go nie potrzebujesz dzisiaj, ale jeśli masz szczęście - możesz potrzebować go jutro\nnie chce was zniechecic - raczej pokazac dlaczego jest to trudne\n
  • dziękuję za zaproszenie, 100% ruby, okolice Javy, Freeport Metrics, pozostałe 100% obj-c\njestem praktykiem, nie teoretykiem - nie jestem z wykształcenia informatykiem w prezentacji będzie dużo skrótów, uproszczeń i założeń a priori - bo to zbyt szeroki temat na niecałe pół godziny, a ja nie jestem aż tak mądry ;-)\n
  • \n
  • redis to nosql\nplotki o śmierci SQL-a są mocno przesadzone\nbo i skala problemów wymagających nosqla jest ograniczone\n
  • bo może działać jak klucz wartość, optymalizuje wartości, jest szybki i milusi\n\n
  • bo wartością może być także jedna ze struktur, które istnieją w Redisie\nnie tylko proste łańcuchy tekstowe\n
  • \n
  • \n
  • to nie będzie łatwa prezentacja - redis, mimo, że to jeden system to ze względe na liczne gałęzie i eksperymentalne funkcje\nwymaga czasu na jego poznanie i dostosowanie\nten ekran jest już dawno nieaktualny - prezentację zacząłem przygotowywać miesiąc temu\n
  • A system rozwija się ciągle. to jest wiadomość z wczorajszego poranka\nwarto śledzić jego rozwój\n
  • \n
  • \n
  • \n
  • w redisie możemy też trzymać (jako stringi) integery. i wykonywać na nich operacje\n
  • można też modyfikować wartości łańcuchów tekstowych\n
  • sorted by insertion order\nlisty z blokowaniem wartości, rpoplpush\nbodaj najpopularniejsze zastosowanie redisa w sferze usług - kolejki wiadomości\n
  • \n
  • \n
  • zbiór, możliwe ciekawe operacje UNION, INTERSECTION\n
  • można mieć zastrzeżenia co do wydajności\n
  • \n
  • sortowane zbiory\nrzecz, która wykorzystaliśmy w Blipie\n
  • \n
  • \n
  • \n
  • protokół Redisa zwraca podstawowe wartości\nzakłada obsługę tego po stronie klienta\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • snapshot - tworzony jest fork, redis zapisuje stan swojej bazy do pliku binarnego\naof - zapisuje każdą komendę do pliku - 100% pewności odzyskania danych, bardzo długi proces ładowania\naof - możliwy jest rewrite\n
  • dla snapshotu\nna żądanie - komendy SAVE lub BGSAVE\nokresowa - jeśli w określonym przedziale czasu doszło do zmian w X kluczy\n
  • po co replikacja? - zabezpieczenie przed padem\nskalowanie ciężkich operacji - SORT\nreplikacja nie blokuje mastera - replikacja blokuje slave’a\n
  • master może mieć wiele slave’ów\nslave może być masterem dla kolejnego zestawu slave’ów\nprzykładowo - mamy zestaw master / slave-slave / slave-slave - zapisujemy dane tylko na ostatnim etapie\n
  • \n
  • bez pipeliningu - czekamy na odpowiedź na każde żądanie\nwkładamy dane - odpowiedź, wkładamy - odpowiedź\n
  • ale prędzej czy później to może być za mało - wydajność będzie spadać\n
  • bez pipeliningu - czekamy na odpowiedź na każde żądanie\nwkładamy dane - odpowiedź, wkładamy - odpowiedź\n
  • \n
  • minimalne wymaganie redisa - wszystkie klucze zawsze muszą być w pamięci\nale całą resztę można trzymać w pamięci wirtualnej\nwarto się zastanowić czy lepiej nie skorzystać z hashy\nale jeśłi nie zależy nam na wydajności - można ustawić zerową pamięć dla wartości\n
  • \n
  • \n
  • poszczególny węzły w klastrze rozmawiają ze sobą protokołem binarnym\nnormalnie redis korzysta z protokołu tekstowego - tutaj zostało to zoptymalizowane\n
  • klaster redisa jest dzielony na 4096 slotów na hashe\nw momencie tworzenia klastra należy sloty do poszczególnych instancji\n
  • tutaj dla ułatwienia - podzielimy sobie na 6 slotów, które zostaną rozłożone na 3 węzłach\n
  • klastrowanie - dummy client\n
  • klastrowanie - sprytny klient\n
  • automatyczne zarządzanie klastrem\nnarzędzie pomagające w tworzeniu klastra\nsprawdzenie zgodności klastra\ndodawanie nowych elementów do klastra\n
  • jak się to ma do memcached?\nzależy od zastosowania.\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • każdy z testów to 100000 operacji\n
  • \n
  • każdy z testów to 100000 operacji\n
  • \n
  • Resque is a Redis-backed Ruby library for creating background jobs, placing those jobs on multiple queues, and processing them later.\nJedno z pierwszych narzędzie powstałych dzięki Redisowi.\nUżywane w GitHubie\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • bill gates twierdzi, że powiedział wiele głupich rzeczy\nale tego nie,\nfragmentacja która jest rozwiązywana za pomocą różnych malloców\n
  • redis bardzo dobrze optymalizuje liczby - nie trzyma ich w pamięci jako stringi\n
  • w zależności od potrzeb - lepiej skompilować Redisa w 32bitowej architekturze\n
  • monitoruj, naucz się\nto nowa zabawka, zwykle działa - problemem nie jest stabilność, bo ta jest wyśmienita.\n
  • \n
  • skrypty lua\n
  • funkcjonalność eksperymentalna\n
  • język skryptowy pierwotnie zaprojektowany dla rozszerzenia funkcjonalności różnych aplikacji, jednak często używany jako samodzielny język.\n
  • \n
  • \n
  • \n
  • \n
  • \n

WebClusters, Redis Presentation Transcript

  • 1. serwer struktur danych w praktyce
  • 2. CZEŚĆ!jestem filip.
  • 3. PLAN co to jest redis? typy danych zabójcze cechyredis a memcached redis w praktyce tips & tricks
  • 4. NOSQL
  • 5. REDIS TO...zaawansowany system klucz-wartość
  • 6. REDIS TO...serwer struktur danych
  • 7. @ANTIREZ @pnoordhuis
  • 8. YYY...
  • 9. STRUKTURY DANYCH
  • 10. STRING
  • 11. STRINGredis> SET my:key "value"redis> GET my:key"value"
  • 12. STRINGredis> SET my:incr "10"redis> INCR my:incrredis> GET my:incr"11"
  • 13. STRINGredis> SET hello:world "Web"redis> APPEND hello:world "Clusters"redis> GET hello:world"WebClusters"redis> GETRANGE hello:world 0 2"Web"
  • 14. LIST
  • 15. LISTredis> LPUSH list aredis> LPUSH list bredis> RPUSH list credis> LRANGE list 0 21) "b"2) "a"3) "c
  • 16. LISTredis> LPUSH list aredis> LPUSH list bredis> RPUSH list credis> RPOPLPUSH list other:list"a"redis> LRANGE list 0 31) "c"2) "b"redis> LRANGE other:list 0 31) "a"
  • 17. SET
  • 18. SETredis> SADD post:1:tag "ruby"redis> SADD post:1:tag "rails"redis> SADD post:1:tag "redis"redis> SADD post:2:tag "redis"redis> SADD post:2:tag "resque"redis> SINTER post:1:tag post:2:tag1) "redis"
  • 19. SETredis> SADD post:1:tag "ruby"redis> SADD post:1:tag "rails"redis> SADD post:1:tag "redis"redis> SADD post:2:tag "redis"redis> SADD post:2:tag "resque"redis> SUNIONSTORE tag post:1:tag post:2:tagredis> SMEMBERS tag1) "rails"2) "redis"3) "resque"4) "ruby"
  • 20. ZSET
  • 21. ZSETredis> ZADD zset 1 3redis> ZADD zset 2 2redis> ZADD zset 3 1redis> ZRANGE zset 0 -11) "3"2) "2"3) "1"
  • 22. HASH
  • 23. HASHredis> HMSET hash string:1 Hellostring:2 WebClustersredis> HGETALL hash1) "string:1"2) "Hello"3) "string:2"4) "WebClusters"
  • 24. HASHredis> HSET hash string:1 Byeredis> HSET hash string:3 2011redis> HGETALL hash1) "string:1"2) "Bye"3) "string:2"4) "WebClusters"5) "string:3"6) "2011"
  • 25. RTFM
  • 26. ZABÓJCZE CECHY
  • 27. TRANSAKCJE
  • 28. TRANSAKCJEredis> SET account:1 30redis> SET account:2 45redis> MULTIredis> INCRBY account:1 15QUEUEDredis> DECRBY account:2 15QUEUEDredis> EXEC1) (integer) 452) (integer) 30
  • 29. PERSYSTENCJA
  • 30. PERSYSTENCJA snapshot append-only file
  • 31. PERSYSTENCJA na żądanie okresowa
  • 32. REPLIKACJA
  • 33. REPLIKACJA
  • 34. PIPELINING
  • 35. PIPELINING
  • 36. http://www.flickr.com/photos/chadelliott2012/5659144073/
  • 37. PIPELINING
  • 38. PAMIĘĆ WIRTUALNA
  • 39. PAMIĘĆ WIRTUALNA
  • 40. KLASTROWANIE
  • 41. http://www.flickr.com/photos/15708236@N07/2754478731/
  • 42. http://www.flickr.com/photos/dan4th/301092024/
  • 43. 4096 #
  • 44. KLASTROWANIE
  • 45. KLASTROWANIEredis> #1 GET foo-MOVED 3 192.168.1.1:6391redis> #2 GET foo"bar"
  • 46. KLASTROWANIEredis> #1 CLUSTER HINTS* magic *redis> #2 GET foo"bar"
  • 47. REDIS-TRIB
  • 48. MEMCACHED?
  • 49. X 100 000
  • 50. SETmemcached redis6.926125 s 8.470477 s
  • 51. PIPELINE SETmemcached redis6.926125 s 0.916335 s
  • 52. GETmemcached redis6.904938 s 7.572058 s
  • 53. PIPELINE GETmemcached redis6.904938 s 0.651953 s
  • 54. MGETmemcached redis1.010348 s 0.185136 s
  • 55. RAMmemcached redis 436 KB 1.1 MB
  • 56. RAMk 17 - 22 bajtyv 19 - 24 bajty
  • 57. STRINGmemcached redis 14 MB 13.9 MB
  • 58. INTEGERmemcached redis 11 MB 10.7 MB
  • 59. HASH"an-average-key-1" => "1""an-average-key" => "1": "1"
  • 60. HASHmemcached redis 11 MB 9 MB
  • 61. PRAKTYKA
  • 62. RESQUE
  • 63. RESTMQ
  • 64. TWITTER
  • 65. WHO’S ONLINE?
  • 66. STATYSTYKI
  • 67. WYSZUKIWANIE
  • 68. SOCIAL GRAPH
  • 69. TIPS & TRICKS
  • 70. 640K ought to beenough for anybody
  • 71. 3 != “3”
  • 72. 32 > 64 W BITACH
  • 73. http://www.flickr.com/photos/memestate/45986749/
  • 74. ONE MORE THING
  • 75. http://www.flickr.com/photos/15708236@N07/2754478731/
  • 76. -- hello.lua-- the first program in every languageio.write("Hello world, from ",_VERSION,"!n")
  • 77. redis = Redis.newscript = <<LUA local value = tonumber(redis.call(get,KEYS[1])) if value == nil then return {err = "Value atkey is not integer"} end if value > tonumber(ARGV[1]) then value = value - 1 redis.call(set, KEYS[1], value) end return valueLUAredis.set :x, 45.times { puts(redis.eval(script, 1, :x, 0)) }
  • 78. ~/Code/webclusters-redis master $ ./run lua.rb32100
  • 79. https://github.com/filiptepper/webclusters-redis
  • 80. O CZYM ZAPOMNIAŁEM?