kill bottlenecks with gearman, sphinx, and memcached, confoo 2011

Post on 25-May-2015

1.486 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Killing Bottlenecks

1paul reinheimer @preinheimer

1Thursday, March 10, 2011

Goals for TodayIntroduce Tools

Help you recognize problems

Hints on implementation

Horror Stories

2

2Thursday, March 10, 2011

Provides a simple queue service

Workers connect and identify work they can complete, clients hand off jobs when available

Created by Danga Interactive (livejournal)

3

3Thursday, March 10, 2011

Stores data in memory

really really fast!

Many servers can be used at once to provide a single large datastore

Created by Danga Interactive (livejournal)

4

4Thursday, March 10, 2011

Excellent search tool

Import data from a variety of sources (commonly a database), index it quickly, then run searches

5

5Thursday, March 10, 2011

Know Thyself

6

6Thursday, March 10, 2011

Workers sign up with work they can do, many workers can each sign up with a different set of jobs.

Clients connect to Gearman and pass off jobs, this is done asynchronously, they get to keep working

Failed jobs are re-submitted a specified number of times.

7

7Thursday, March 10, 2011

Workers sign up with work they can do, many workers can each sign up with a different set of jobs.

Clients connect to Gearman and pass off jobs, this is done asynchronously, they get to keep working

Failed jobs are re-submitted a specified number of times.

8

Gearman

8Thursday, March 10, 2011

Clients

9

9Thursday, March 10, 2011

Workers

10

10Thursday, March 10, 2011

Managing Workers

11

11Thursday, March 10, 2011

Managing Workers

12

12Thursday, March 10, 2011

Managing Workers

13

13Thursday, March 10, 2011

Managing Workers

13

13Thursday, March 10, 2011

Managing Workers

13

13Thursday, March 10, 2011

Supervisor

14

14Thursday, March 10, 2011

Gearman AlternativesRabitMQ

Amazon Simple Queue Service

ZeroMQ

15

15Thursday, March 10, 2011

Stores data in memory

really really fast!

Many servers can be used at once to provide a single large datastore

Created by Danga Interactive (livejournal)

16

16Thursday, March 10, 2011

17

Promises

17Thursday, March 10, 2011

Promises

memcached doesn't lie, it just doesn't make promises

18

18Thursday, March 10, 2011

Promises

it makes a promise

19

19Thursday, March 10, 2011

Promises

data will no longer be available after it expires

20

20Thursday, March 10, 2011

Promises

When memcached doesn't have the information you need, get it elsewhere.

Use a read-through caching callback or put it in your caching object.

memcached is allowed to lose data!

21

21Thursday, March 10, 2011

Consistent Hashing

22

22Thursday, March 10, 2011

Hot Items = Hot Servers

23

23Thursday, March 10, 2011

Hot Items = Hot Servers

23

23Thursday, March 10, 2011

Memcached Alternativesredis

Berkeley DB

Tokyo Cabinet

Tokyo Tyrant

Voldemort

Riak

24

24Thursday, March 10, 2011

Excellent search tool

Import data from a variety of sources (commonly a database), index it quickly, then run searches

25

25Thursday, March 10, 2011

26

id title year rating1 TMNT 1988 9.5

2 Goonies 1989 9.0

3 The Postman 1992 3.5

4 Alien 1994 8.5

26Thursday, March 10, 2011

27

id title year rating studio category1 TMNT 1988 9.5 x action

2 Goonies 1989 9.0 y adventure

3 The Postman 1992 3.5 z boring

4 Alien 1994 8.5 a awesome

27Thursday, March 10, 2011

28

id title year rating studio category1 TMNT 1988 9.5 x action

2 Goonies 1989 9.0 y adventure

3 The Postman 1992 3.5 z boring

4 Alien 1994 8.5 a awesome

28Thursday, March 10, 2011

28

id title year rating studio category1 TMNT 1988 9.5 x action

2 Goonies 1989 9.0 y adventure

3 The Postman 1992 3.5 z boring

4 Alien 1994 8.5 a awesome

id actor1 Mel Gibson

2 Shredder

3 Sigourney Weaver

id tag1 kids

2 awesome

3 sci-fi

id producer1 1

2 2

3 3

4 4

film_id tag_id1 2

2 3

3 4

4 5

id director1 blue

2 red

3 green

4 orange

film_id description1 Four awesome turtles...

2 Friends, pirates, goonies.

3 Nap

4 They tried to turn around

28Thursday, March 10, 2011

29

id title year rating studio category1 TMNT 1988 9.5 x action

2 Goonies 1989 9.0 y adventure

3 The Postman 1992 3.5 z boring

4 Alien 1994 8.5 a awesome

id actor1 Mel Gibson

2 Shredder

3 Sigourney Weaver

id tag1 kids

2 awesome

3 sci-fi

id producer1 1

2 2

3 3

4 4

film_id tag_id1 2

2 3

3 4

4 5

id director1 blue

2 red

3 green

4 orange

film_id description1 Four awesome turtles...

2 Friends, pirates, goonies.

3 Nap

4 They tried to turn around

29Thursday, March 10, 2011

29

id title year rating studio category1 TMNT 1988 9.5 x action

2 Goonies 1989 9.0 y adventure

3 The Postman 1992 3.5 z boring

4 Alien 1994 8.5 a awesome

id actor1 Mel Gibson

2 Shredder

3 Sigourney Weaver

id tag1 kids

2 awesome

3 sci-fi

id producer1 1

2 2

3 3

4 4

film_id tag_id1 2

2 3

3 4

4 5

id director1 blue

2 red

3 green

4 orange

film_id description1 Four awesome turtles...

2 Friends, pirates, goonies.

3 Nap

4 They tried to turn around

film_id producer_id1 1

2 2

3 3

4 4

film_id tag_id1 1

2 2

3 3

4 4

film_id actor_id1 1

2 2

3 3

4 4

film_id tag_id1 1

2 2

3 3

4 4

film_id director_id1 1

2 2

3 3

4 4

film_id desc_id1 1

2 2

3 3

4 4

29Thursday, March 10, 2011

30

SELECT `dvd_scenes`.`scene_id`, `dvds`.`dvd_id`, `dvds`.`name`, `dvds`.`name` AS sort_title, `dvds`.`featured` AS premium, `dvds`.`description`, `dvds`.`date_released`, `dvds`.`channel_id`, `dvds`.`studio_id`, `dvd_scenes_dyn`.`times_viewed` AS sub_order, `dvd_scenes_dyn`.`rating` AS rating, `channels`.`name` AS channel_name, `studios`.`name` AS studio_name, `channels_keywords`.`keywords` AS channel_keywords, GROUP_CONCAT(DISTINCT `categories`.`name` ORDER BY `categories`.`name` DESC SEPARATOR ', ') AS categories_list, GROUP_CONCAT(DISTINCT `models`.`name` ORDER BY `models`.`name` DESC SEPARATOR ', ') AS models_listFROM `dvd_scenes` INNER JOIN dvds ON dvds.dvd_id = dvd_scenes.dvd_id INNER JOIN dvd_scenes_dyn ON dvd_scenes_dyn.id = dvd_scenes.scene_id LEFT JOIN scenes_categories ON dvd_scenes.scene_id = scenes_categories.scene_id LEFT JOIN categories ON `scenes_categories`.`category_id` = categories.category_id LEFT JOIN studios ON studios.studio_id = dvds.studio_id LEFT JOIN scenes_models ON scenes_models.scene_id = dvd_scenes.scene_id LEFT JOIN `channels` ON channels.channel_id = dvds.channel_id LEFT JOIN `channels_keywords` ON dvds.channel_id = channels_keywords.channel_id LEFT JOIN `models` ON scenes_models.model_id = models.model_idWHERE dvds.is_active = 1 AND dvd_scenes.is_active = 1 AND dvds.date_released < UNIX_TIMESTAMP() AND dvds.date_released > 0 AND dvds.channel_id NOT IN (21,26)GROUP BY scene_id

30Thursday, March 10, 2011

31

sphinx

http://www.flickr.com/photos/waldenpond/4237758518/

31Thursday, March 10, 2011

Sphinx AlternativesLucene

With Elastic Search

solr

32

32Thursday, March 10, 2011

Assigning Problems

33

33Thursday, March 10, 2011

AppendixPaul Reinheimer - @preinheimer - http://blog.preinheimer.com

Memcached - http://memcached.org/

supervisor - http://supervisord.org/

Sphinx - http://sphinxsearch.com/

Gearman - http://gearman.org/

34

34Thursday, March 10, 2011

35

5 Stars!

35Thursday, March 10, 2011

Feedback

36

http://joind.in/2867

36Thursday, March 10, 2011

top related