31
Практика применения Pinba в Badoo Денис Карасик [email protected]

Практика применения Pinba в Badoo / Денис Карасик (Badoo)

  • Upload
    ontico

  • View
    321

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Практика применения Pinba в Badoo

Денис Карасик [email protected]

Page 2: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Badoo

● ~300 000 000 зарегистрированных пользователей

● ~70K rps в пике

● PHP, MySQL, C/C++, Golang, Tarantool etc.

Page 3: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

PHP Is Not a Bottleneck AnymoreАвторы: Андрей Нигматулин, Антон Довгаль

• https://habrahabr.ru/company/badoo/blog/149695/ (Максим Матюхин, 2012 год)

• http://pinba.org/ (https://github.com/tony2001/pinba_engine/wiki ) Официальная документация

• https://habrahabr.ru/post/183104/ Intaro Pinboard

• https://habrahabr.ru/post/129042/ Мониторим PHP в реальном времени

• Написана на С (engine и php-extension)• UDP • MySQL engine• НЕ является хранилищем данных!!!• Nginx плагин (плагины для многих языков: Go, Java, Python, Ruby, etc)

Page 4: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba примеры использованияКоличество запросов

25K rps

Page 5: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba примеры использованияПотребление памяти8 Mb / request

Average script memory

Page 6: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba примеры использованияВремя запросов к внешним сервисам

Memcache get for memcache1.mlan:11211

• MAX 55272,258 req / sec

• AVG 29513,147 req / sec

• MIN 7978,757 req /sec

Page 7: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba примеры использованияNginx плагин

Requests for bphotos: 404 Not found

8 req / sec

13 req / sec

Page 8: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba примеры использования

Page 9: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba примеры использования

Page 10: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Go

PHP scriptMySQL

memcache

memcache

Some logicTimer1

Timer2Timer1

Timer3

Timer4

Timer tags:cmd_val — mcache::getserver_val — memcache1

Request tags: webpage — plain

Page 11: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: Raw tables● request● timer (id, request_id, hit_count, value)● tag (id, name) ● timertag (timer_id, tag_id, value)● active● dictionary● status

Не делаем запросы к request!!!

CREATE TABLE `request` (

`id` int(11) NOT NULL DEFAULT '0',

`hostname` varchar(32) DEFAULT NULL,

`req_count` int(11) DEFAULT NULL,

`server_name` varchar(64) DEFAULT NULL,

`script_name` varchar(128) DEFAULT NULL,

`doc_size` float DEFAULT NULL,

`mem_peak_usage` float DEFAULT NULL,

`req_time` float DEFAULT NULL,

`ru_utime` float DEFAULT NULL,

`ru_stime` float DEFAULT NULL,

`timers_cnt` int(11) DEFAULT NULL,

`status` int(11) DEFAULT NULL,

`memory_footprint` float DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='request' |

Page 12: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: отчеты

• Base (info, report_by ….)

• Timer tag (tag_info, tagN_info, tag_report, tagN_report ... )

• Request tag (rtag_info, rtag_report, rtagN_info, rtagN_report)

scripts/table_generator.php - генератор отчетов!

Агрегация по hostname, schema, script_name, server_name, status*

*

Page 13: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: отчетыCREATE TABLE `tag_report_perf` ( `script_name` varchar(128) NOT NULL DEFAULT '', `tag_value` varchar(64) DEFAULT NULL, `req_count` int(11) DEFAULT NULL, `req_per_sec` float DEFAULT NULL, `hit_count` int(11) DEFAULT NULL, `hit_per_sec` float DEFAULT NULL, `timer_value` float DEFAULT NULL, `timer_median` float DEFAULT NULL, `ru_utime_value` float DEFAULT NULL, `ru_stime_value` float DEFAULT NULL, `index_value` varchar(256) DEFAULT NULL, `p75` float DEFAULT NULL, `p95` float DEFAULT NULL, `p99` float DEFAULT NULL, `p100` float DEFAULT NULL, KEY `script_name` (`script_name`)) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag_report:perf::75,95,99,100' |

Важен порядок полей!!!

Page 14: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: Отчеты по тегам (timer) CREATE TABLE `tag_info_measure_cpq_consumer` ( `type` varchar(64) DEFAULT NULL, `consumer` varchar(64) DEFAULT NULL, `timer` varchar(64) DEFAULT NULL, ….) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tagN_info:type,consumer,timer'

3 sec

5 sec

Page 15: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Javascript is Not a Bottleneck Anymore

• https://tech.badoo.com/presentation/123/realtime-statistika-skorosti-prilogenij/ Павел Довбуш о Jinba

• https://github.com/dpp-name/jinba Jinba

Pinba для Jinba

• tagN_info — отчеты по многим тегам

• Перцентили

• Гистограммы

• Фильтрация по тегам реквеста

Page 16: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: гистограммыCREATE TABLE `v2_jinba_hv` ( `index_value` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `segment` int(11) DEFAULT NULL, `time_value` float DEFAULT NULL, `cnt` int(11) DEFAULT NULL, `percent` float DEFAULT NULL, KEY `index_value` (`index_value`(85))) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='hv.tagN_info:group,mode::75,95'

Page 17: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: перцентили CREATE TABLE `tag_info_group_server` ( `group_value` varchar(64) DEFAULT NULL, `server_value` varchar(64) DEFAULT NULL, … `p75` float DEFAULT NULL, `p95` float DEFAULT NULL, `p99` float DEFAULT NULL, `p100` float DEFAULT NULL) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag2_info:group,server::75,95,99,100'

t, sec

num

Page 18: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: перцентили

Page 19: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: отчеты request tagCREATE TABLE `photoscache_report_hitrate` ( `hostname` varchar(64) NOT NULL DEFAULT '', `tag1_value` varchar(64) DEFAULT NULL, `tag2_value` varchar(64) DEFAULT NULL, `tag3_value` varchar(64) DEFAULT NULL, ... KEY `hostname` (`hostname`)) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='rtagN_report:served_by,build,img_size'

Page 20: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: отчеты request taghttp://hostname/10035/3/2/1/28245345/d1576/t1461674977/156839_920.jpg?fit=500x500

location ~ '…..' {

... pinba_tag fit_size '500x500'; pinba_tag is_fit 1; pinba_tag img_size '920'; ...

}

Nginx (https://github.com/tony2001/ngx_http_pinba_module)

Page 21: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Pinba: отчеты request tagCREATE TABLE `resize_value_info` ( `tag_value` varchar(64) DEFAULT NULL, `req_count` int(11) DEFAULT NULL, `req_per_sec` float DEFAULT NULL, ...) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='rtag_info:fit_size'

select tag_value, req_per_sec from resize_value_info order by req_per_sec desc limit 10;+-------------+------------------+| tag_value | req_per_sec |+-------------+------------------+| 180/180 | 6986.65 || 144/144 | 3455.3 || 920/920 | 2932.37 || 216/216 | 1464.49 || 640/960 | 1145.66 || 120/120 | 1138.95 || 192/192 | 1004.72 || 480/800 | 1001.44 || 72/72 | 935.625 || 110/110 | 917.83 |+-------------+------------------+

Page 22: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

MySQL Is Not a Bottleneck Anymore

• Slowlog + Zabbix

Page 23: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

MySQL Is Not a Bottleneck Anymore

• Slowlog + Zabbix

• Коммерческие решения

Page 24: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

MySQL Is Not a Bottleneck Anymore

• Slowlog + Zabbix

• Коммерческие решения

• performance_schema + python + elastic + kibana

Page 25: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

MySQL Is Not a Bottleneck Anymore

• Slowlog + Zabbix

• Коммерческие решения

• performance_schema + python + elastic + kibana

• Pinba

Page 26: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

MySQL Is Not a Bottleneck AnymorePHP Pinba

CREATE TABLE `minba_query_details` ( `tag_value` varchar(64) DEFAULT NULL, ... `p95` float DEFAULT NULL, `p99` float DEFAULT NULL) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag_info:query::95,99'

Page 27: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

MySQL Is Not a Bottleneck Anymore

Page 28: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Memcache keys statФормат ключа: #family_name#:%s_%scont:251_23folder_key:13434_sometype

tag_info_key_hit_mchost | CREATE TABLE `tag_info_key_hit_mchost` (

`key` varchar(190) DEFAULT NULL,

`hit` tinyint(1) DEFAULT NULL,

`mchost` varchar(40) DEFAULT NULL,

...

) ENGINE=PINBA DEFAULT CHARSET=latin1

COMMENT='tagN_info:key,hit,mchost'

Page 29: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Memcache keys stat

Page 30: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Memcache keys stat

400 K rps

Page 31: Практика применения Pinba в Badoo / Денис Карасик (Badoo)

Контакты

Карасик Денис [email protected]

Антон Довгаль [email protected]

Техноблог https://tech.badoo.com/

Хабр https://habrahabr.ru/company/badoo/

Facebook https://www.facebook.com/BadooMoscow