SlideShare a Scribd company logo
Web Scale

                           Взорвётся всё



Леонид Евдокимов
Второй омский IT-субботник, январь 2013, vk.com/omskit
О чём
Juggler   рост нагрузки с 1k до 10k машин


MongoDB   о свойствах и особенностях
Python    о доставке сигналов смеха для
MySQL     о пользе суррогатных ключей
Linux     об учете накладных расходов
FreeBSD   о внезапной сложности простого
Juggler
Система мониторинга событий
Внутри:    MySQL, MongoDB, Python
В обвязке: nginx или lighttpd, flup или uWSGI


Подробнее: «Мониторинг со всех сторон»
YaC 2011, Алексей Симаков, clck.ru/L5GF
MongoDB
   NoSQL СУБД
   Быстрая как /dev/null
   Не использует JOIN


   mongodb-is-webscale.com
MongoDB

find({x:1})


                vs.


          update({x:1},
                 {$set:{pad:"A…A"}})
MongoDB
> find({x: 1})
{"_id": ObjectId("4f…c3"), "x": 1 }
{"_id": ObjectId("4f…c3"), "x": 1,
"pad": "A…A" }
>


v2.0.2 — взорвано
MongoDB
double-update ≈ ½ quad damage


> update(..., {$push: {big object}})


                    «Scaling with MongoDB»
                    by Michael Schurter 2011
Слушатель, доверяй, но проверяй!
MongoDB

/usr/bin/mongod


                  vs.


                  /usr/sbin/logrotate
MongoDB
jira/SERVER-3339 — при ротации логов…
… stackoverflow в обработчике SIGABRT
… deadlock в malloc()


Починка базы медленнее, чем MyISAM!
MongoDB
jira/SERVER-3339 — при ротации логов…
… stackoverflow в обработчике SIGABRT
… deadlock в malloc()


Починка базы медленнее, чем MyISAM!


Ответ: db.runCommand("logRotate")
Python
Однопоточный
«Медленный»
GIL
Python
Однопоточный
«Медленный»
GIL


Ответ: multiprocessing
Python

/usr/lib/python2.7/multiprocessing


                 vs.


                 /usr/sbin/logrotate
Python
bugs/issue8296 — про multiprocessing
Происходит deadlock из-за EINTR и смерти
одного из тредов
…ох уж эти сигналы!


Ответ: kill -9 -${sid}
                                           :-)
MongoDB & Python
Окончательный ответ на вопрос logrotate,
доставки сигналов и всего такого:


«Delivering Signals for Fun and Profit»
by Michal Zalewski
                                    clck.ru/4RGgy
always look on the bright side of life vulnerability
MySQL
На этот раз не про
сигналы
MySQL
На этот раз не про
сигналы
В mysql все сигналы
обрабатываются в
отдельном потоке


На этот раз — про
JOIN
MySQL

LEFT JOIN


             vs.


                   RIGHT OUTER JOIN
MySQL

LEFT JOIN


             vs.


                   RIGHT OUTER JOIN
                   На самом деле - нет
MySQL
SELECT … FROM t1 LEFT JOIN t2
ON t1.type = 'HOST'
AND t1.host_name = t2.object_name
AND t1.check_name = t2.check_name
LEFT JOIN t1_1 … LEFT JOIN t2_1 …
RIGHT OUTER JOIN t1_2 …
MySQL
mysqld: Incorrect key file for table
'/var/tmp/#sql17161_b3_3.MYI';
try to repair it
MySQL
SELECT … FROM t1 LEFT JOIN t2
ON   t1.type = 'HOST'
AND t1.host_name = t2.object_name
AND t1.check_name = t2.check_name …


host_name, object_name, check_name
- varchar(128) COLLATE utf8_bin
MySQL
MEMORY   maximum key length is 3072 bytes
MyISAM   maximum key length is 1000 bytes
MySQL
MEMORY    maximum key length is 3072 bytes
MyISAM    maximum key length is 1000 bytes


Created_tmp_disk_tables: MEMORY → MyISAM
MySQL
MEMORY    maximum key length is 3072 bytes
MyISAM    maximum key length is 1000 bytes


Created_tmp_disk_tables: MEMORY → MyISAM


При выходе за key_len: MEMORY ↴ MyISAM
                 BADABOOM storage engine
MySQL
Помогают…
… суррогатные INTEGER ключи
… tmp_table_size & max_heap_table_size
                 You can’t hardware yourself
                out of a performance problem
                  you softwared yourself into.
                               – Cary Millsap
Linux & FreeBSD
Linux

/bin/ping


                vs.


        setsockopt(fd, SO_RCVBUF, …)
Linux
SO_RCVBUF
… The kernel doubles this value (to allow space
for bookkeeping overhead).
                                 – man 7 socket
Linux
А теперь пошлем ICMP PING на 10000 хостов
Перенесем «пинговалку» в vm на основе KVM
…
Linux
Задержка пакета от входа до recvmsg()
возросла в десятки раз (пики до 50ms!)
RCVBUF, кажется, достаточно большой для
нескольких тысяч 28-байтных пакетов
Но входящие PONG не помещаются в
RCVBUF при такой задержке
Linux
Измеряем: gist.github.com/4454323
«Bookkeeping overhead» до ¾ kbyte / pkt


Накладные расходы в ≈27.5 раз выше
описанных в man page
Linux
ICMP PING — не очень интересен


Что происходит в UDP (VoIP, игры) сокетах?
Почему KVM настолько повышает latency?
FreeBSD

rename()


             vs.


                     FreeBSD-8.2
FreeBSD
Сказ о rename() и о том, как скушать все PID'ы
и уснуть в D-state

●   В N потоков: rename(tmp, dest_dir)
●   В M потоков: exists(dest_dir/fname)
●   Порождать новый worker-поток, если
    старый не ответил за время T
FreeBSD
В FreeBSD-9.0 VFS уже починили и этот
deadlock в rename() исчез


Ответ: pool, queue & two strict ulimits
IT
Окончательный ответ на вопрос разработки,
протекающих абстракций и всего такого:


           Закон больших чисел
              Взорвётся всё


                   Даже /dev/null. Я не шучу.
Q&A


Леонид Евдокимов, разработчик ПО
leon@darkk.net.ru || http://darkk.net.ru
                 AKA @mathemonkey

More Related Content

ODP
Константин Осипов (Mail.Ru)
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PDF
Максим Дунин, Nginx, Inc.
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Константин Осипов (Mail.Ru)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Максим Дунин, Nginx, Inc.
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Современная операционная система: что надо знать разработчику / Александр Кри...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...

What's hot (20)

PDF
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
PDF
Механика DDoS (Александр Крижановский)
PDF
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
PDF
Архитектура растущего проекта, на примере ВКонтакте
PPTX
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
ODP
Sysoev Freebsd7
PPTX
Контейнерная виртуализация. Золушка в облаках / Юрий Устинов (Русоникс)
PDF
Контейнерная виртуализация. Золушка в облаках
PPTX
Повышаем отказоустойчивость без дорогих решений
PPT
CUDA Course 2010 at MSU
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PDF
Cassandra
PPTX
Apache Storm: от простого приложения до подробностей реализации
PDF
Anton Turetckii "What does it take to build a host?"
PPTX
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
Software Transactional Memory
PPTX
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
PDF
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Механика DDoS (Александр Крижановский)
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Архитектура растущего проекта, на примере ВКонтакте
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Sysoev Freebsd7
Контейнерная виртуализация. Золушка в облаках / Юрий Устинов (Русоникс)
Контейнерная виртуализация. Золушка в облаках
Повышаем отказоустойчивость без дорогих решений
CUDA Course 2010 at MSU
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Cassandra
Apache Storm: от простого приложения до подробностей реализации
Anton Turetckii "What does it take to build a host?"
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Software Transactional Memory
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Ad

Viewers also liked (7)

PPTX
2014-01-04 01 Анна Тарасенко. Вредные советы организаторам мероприятий
PPTX
2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита.
PDF
2014-09-06 03 Владислав Коробов. Как я пытаюсь успевать
PDF
2014-08-02 04 Андрей Фаткулин. JavaScript и коалы
PDF
2014-11-01 02 Иван Зезюля. To go или не to go
PDF
2013-08-03 01 Михаил Подгурский. АБС - 20 лет внутренней разработки
PPTX
2014-10-04 01 Андрей Сидоренко. Нельзя просто так взять и разработать удобны...
2014-01-04 01 Анна Тарасенко. Вредные советы организаторам мероприятий
2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита.
2014-09-06 03 Владислав Коробов. Как я пытаюсь успевать
2014-08-02 04 Андрей Фаткулин. JavaScript и коалы
2014-11-01 02 Иван Зезюля. To go или не to go
2013-08-03 01 Михаил Подгурский. АБС - 20 лет внутренней разработки
2014-10-04 01 Андрей Сидоренко. Нельзя просто так взять и разработать удобны...
Ad

Similar to 2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все (20)

PDF
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
PDF
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
PPTX
Практический опыт использования некоторых современных решений репликации MySQL
PDF
MySQL 101
PPTX
Mysql replication DevConf 2012
PDF
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
PDF
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
PDF
Как мы храним 75 млн пользователей (Денис Бирюков)
PDF
Павел Пушкарев - Базы данных: легковесная реляционная высокопроизводительная ...
PPTX
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
PPTX
Open source субд глазами обычного программиста
PDF
Облако в Badoo год спустя
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
PPT
hl++ Rubtsov
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PPTX
Опыт использования NoSQL-хранилищ (Андрей Новиков)
PPTX
Hosting for forbes.ru_
PDF
Devconf2013 new-features-in-mysql-and-mariadb
PPTX
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
Практический опыт использования некоторых современных решений репликации MySQL
MySQL 101
Mysql replication DevConf 2012
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
Как мы храним 75 млн пользователей (Денис Бирюков)
Павел Пушкарев - Базы данных: легковесная реляционная высокопроизводительная ...
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Open source субд глазами обычного программиста
Облако в Badoo год спустя
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
hl++ Rubtsov
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Hosting for forbes.ru_
Devconf2013 new-features-in-mysql-and-mariadb
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"

More from Омские ИТ-субботники (20)

PDF
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
PDF
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
PDF
2017-05-06 02 Илья Сиганов. Зачем учить машины?
PDF
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
PDF
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
PDF
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
PDF
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
PDF
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
PDF
2017-02-04 02 Яков Лило. Решение задач
PDF
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
PDF
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
PDF
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
PDF
2016-12-03 03 Евгений Тюменцев. DSL на коленке
PDF
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
PDF
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
PDF
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
PDF
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
PDF
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
PDF
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
PDF
2016-09-17 03 Василий Полозов. WebRTC
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-05-06 02 Илья Сиганов. Зачем учить машины?
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
2017-02-04 02 Яков Лило. Решение задач
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 03 Евгений Тюменцев. DSL на коленке
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
2016-09-17 03 Василий Полозов. WebRTC

2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все