SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
Pconnect:  граната  в  руках  обезьяны

            Сергей  Аверин
                         —  это:
Социальная  сеть  для  знакомств  с  новыми  людьми
В  Top-­‐200  Alexa  c  2007  года
127  миллионов  зарегистрированных  пользователей
10  миллионов  пользователей  в  день
2  миллиона  фотографий  загружаются  ежедневно
                         —  это:
30  тыс.  запросов/сек  к  PHP  backends
MySQL,  PHP,  C/C++,  Linux,  nginx,  PHP-­‐FPM,  memcached
Много  своего
Pconnect  —  что  это?
Persistent  connecmon/keep-­‐alive/connecmon  reuse  —  по  сути  одно  и  то  же
Pconnect  в  мире  FastCGI-­‐демонов
Плюсы:
   •   Экономия  ресурсов  сервера
   •   Меньшая  нагрузка  на  сеть
   •   Экономия  времени  и  ускорение  отклика
Действительно  Plug’n’Play?
hvp://www.php.net/manual/en/features.persistent-­‐connecmons.php:

   “Persistent  connec,ons  were  designed  to  have  one-­‐to-­‐one  
   mapping  to  regular  connec,ons.  That  means  that  you  should  
   always  be  able  to  replace  persistent  connec,ons  with  non-­‐
   persistent  connec,ons,  and  it  won't  change  the  way  your  script  
   behaves.”
                         Это  маркетинг.  И  не  более  того.
В  реальности
Чаще  всего  не  Plug’n’Play
Должны  быть  рассчитаны  на  pconnect:
   •   протокол
   •   клиентская  библиотека
   •   серверное  ПО
Не  «серебряная  пуля»
В  больших/highload  системах  более  ощутимо
Проблемы
Софт  не  рассчитан  на  большое  кол-­‐во  открытых  соединений
Сколько  памяти  съедает  инициализированный  коннект?
Выделяется  ли  в  софте  по  треду/процессу  на  коннект?
Есть  ли  ограничение  на  кол-­‐во  коннектов  с  одного  адреса?
Ограничения  сетевой  подсистемы  Linux
Проблемы
Разберитесь  в  коде
Не  закрывайте  хорошие  соединения  функцией  fclose
Проверьте,  как  работает  ваш  extension,  особенно  все  его  warning’и  и  
error’ы
   •   hvp://www.php.net/manual/en/memcached.addservers.php
В  php  вам  поможет  ftell($socket)
Проблемы
Когда  нужно  закрывать  соединения
При  синтаксических  ошибках
При  тайм-­‐аутах
Если  вы  не  дочитали  ответ  до  конца
Проблемы
Stateful  протоколы
Вы  всегда  знаете  состояние  полученного  соединения?
Транзакции/переменные/авторизация
Реинициализация  соединения
Проблемы
Асинхронная  природа  сокетов
Должна  быть  возможность  сопоставления  запросов  и  ответов
   •   Единственное,  где  я  это  нашел,  это  в  mongoDB  и  MessagePack-­‐RPC
       hvp://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol
       hvp://wiki.msgpack.org/display/MSGPACK/Design+of+RPC
Способ,  которым  мы  пользуемся  (не  дает  гарантии)
Проблемы
set_Ome_limit
Есть,  было  и  будет  в  FastCGI-­‐демонах
Терминация  запроса  пользователем
Shutdown  обработчик
Проблемы
Ограниченный  функционал  FastCGI-­‐демонов
Клиентские  библиотеки  зачастую  бездумно  написаны
Не  всегда  можно  понять  новое  ли  это  соединение
Нет  полноценных  connecmon  pool’ов
От  теории  к  практике
Badoo  Desktop
• Бесплатная  Win/Mac  программа
• Поддерживает  ваш  онлайн-­‐статус  на  сайте  
• Уведомления  о  новых  событиях
• Дает  нам  местоположение  пользователя
• Удобный  доступ  к  разделам  badoo.com
Badoo  Desktop
• 3  млн.  пользователей  в  месяц  
• 1  млн.  подключенных  программ  в  пике
• 20  тыс.  запросов/сек  к  PHP  backends
Наш  setup




             persistent
Программы  —>  Frontend
Есть  способ  сделать,  чтобы  «просто  работало»:
   •   Гарантии  доставки  нет
   •   Ответы  являются  отдельными  командами
   •   Одна  программа  —  одно  соединение
   •   Есть  сохранение  порядка
   •   Нарезкой  байт  на  отдельные  команды  занимается  демон,  держащий  
       соединения
Frontend  —>  Backend
Отдельный  hvp-­‐запрос  на  каждую  входящую  команду
Pconnect  пока  нет,  но  планируем  через  HTTP  Keep-­‐Alive
hvp://en.wikipedia.org/wiki/HTTP_persistent_connecmon
Backend  —>  MySQL
Протокол  на  pconnect  полностью  не  рассчитан
Есть  packet  number,  но  оно  обнуляется  с  каждым  новым  запросом
Есть  реинициализация  соединения,  используйте  mysqli_connect
Тред  на  коннект
Для  нас  малоинтересно,  баз  много,  php-­‐серверов  много,  запросы  редки
hvp://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol
Backend  —>  HandlerSocket
Протокол  на  pconnect  не  рассчитан,  зато  коннект  ест  мало  ресурсов
Используем  pconnect
Написали  свою  библиотеку  на  php
Проверяем,  что  получили  ключ,  который  просили
Получили  прирост  в  3—5  раз
hvp://mnyurl.com/64vwn52
Backend  —>  Memcached
Протокол  на  pconnect  не  рассчитан,  зато  коннект  ест  мало  ресурсов
Используем  pconnect
Extension  нормально  работать  не  смог,  написали  свою  библиотеку  на  php
Тщательно  ловим  все  ошибки
Проверяем,  что  получили  ключ,  который  просили
Получили  прирост  в  2  раза
hvps://github.com/memcached/memcached/blob/master/doc/protocol.txt
hvp://code.google.com/p/memcached/wiki/MemcacheBinaryProtocol
Backend  —>  своя  in-­‐memory  DB
Протокол  на  pconnect  не  рассчитан
Используем  pconnect
Только  команды  на  запись,  ответ  только  либо  OK  либо  ERROR
Гарантии  записи  нет  и  мы  к  этому  готовы
Каждая  отдельная  ошибка  нам  не  важна,  они  всегда  идут  только  пачками
Продвинутые  подходы
Ленивая  инициализация
В  handlersocket-­‐протоколе  есть  открытие  индекса  таблицы
Без  pconnect  открывали  каждый  раз  после  коннекта
С  pconnect  ловим  ошибку  про  неизвестный  индекс
Теперь  мы  можем  открывать  его  только  если  это  нужно
Pipelining
Если  в  протоколе  есть  
уникальный  request-­‐response  
id  на  каждый  запрос,  то  
будет  надежно  работать
Connecmon  pooling
Плюсы:
   •   Уменьшение  времени  получения  коннекта
   •   Упрощает  код
   •   Дает  контроль  над  использованием  ресурсов
Бывает  внутри  процесса  и  в  виде  отдельного  демона
   •   Внутри  FastCGI  —  пишите  сами,  плюс  у  некоторых  extension’ов  есть  
       свои  пулы.  В  мире  Python  —  SQLAlchemy
   •   Вне  процесса  сложнее  и  функциональнее,  обычно  есть  доп.  логика
Connecmon  pooling
pgpool  —  PostgreSQL  connecmon  pool  daemon
   • hvp://pgpool.projects.postgresql.org/
   • В  Postgres  процесс  на  коннект

MySQL  Proxy  —  швейцарский  нож
  • hvp://forge.mysql.com/wiki/MySQL_Proxy_FAQ
  • load  balancing,  failover,  query  analysis/modificamon,  R/W  spli›ng

SQL  Relay  —  ODBC,  Oracle,  MySQL,  PostgreSQL,  Sybase,  MS  SQL  Server,  IBM  
DB2,  Firebird,  SQLite  and  MS  Access
   • hvp://sqlrelay.sourceforge.net/sqlrelay/faq.html
Чеклист
1)  Что  конкретно  вы  экономите  и  с  какими  последствиями?
2)  Потянет  ли  это  все  ваша  система?
3)  Вы  разобрались  с  кодом,  ошибками,  закрываете  коннект  когда  нужно?
4)  Рассчитан  ли  протокол  на  pconnect?
5)  Если  нет,  вы  подстелили  себе  соломы?
6)  Вы  правильно  работаете  со  stateful  протоколом?
7)  Вы  используете  connecmon  pool  для  экономии  ресурсов?
8)  Вы  готовы  писать  свои  велосипеды?
Спасибо!

  Вопросы?
        Контакты:
hvp://twiver.com/ryba_xek
       s@averin.ru
  hvp://averin.ru/slides/
Badoo  ищет  классных  людей!
Нам  нужны:
   •   умный  и  вменяемый  PHP/MySQL  
       программист
   •   релиз-­‐менеджер
   •   QA  специалисты
Что  даём:
   •   интересную  работу
   •   2000  евро  за  успешную  рекомендацию

Weitere ähnliche Inhalte

Was ist angesagt?

Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Ontico
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Ontico
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1rit2011
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...AvitoTech
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Ontico
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Ontico
 
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Unigine Corp.
 
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton TsitouFwdays
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...KazHackStan
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиковITCrowd Almaty
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemKazHackStan
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...KazHackStan
 

Was ist angesagt? (20)

Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
 
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиков
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
Framework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs ChaliceFramework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs Chalice
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
 

Ähnlich wie Pconnect: граната в руках обезьяны (Сергей Аверин)

(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Sergey Xek
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Страх и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаСтрах и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаMikhail Chinkov
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийsnowytoxa
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоАлександр Ежов
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...IT-Portfolio
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Ontico
 
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийАнтон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийPositive Hack Days
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Ontico
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf Conference
 
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...Positive Hack Days
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo Development
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 

Ähnlich wie Pconnect: граната в руках обезьяны (Сергей Аверин) (20)

(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Sivko
SivkoSivko
Sivko
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Страх и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаСтрах и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжиниринга
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
 
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийАнтон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Middleware
MiddlewareMiddleware
Middleware
 

Mehr von Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Pconnect: граната в руках обезьяны (Сергей Аверин)

  • 1. Pconnect:  граната  в  руках  обезьяны Сергей  Аверин
  • 2.                          —  это: Социальная  сеть  для  знакомств  с  новыми  людьми В  Top-­‐200  Alexa  c  2007  года 127  миллионов  зарегистрированных  пользователей 10  миллионов  пользователей  в  день 2  миллиона  фотографий  загружаются  ежедневно
  • 3.                          —  это: 30  тыс.  запросов/сек  к  PHP  backends MySQL,  PHP,  C/C++,  Linux,  nginx,  PHP-­‐FPM,  memcached Много  своего
  • 4. Pconnect  —  что  это? Persistent  connecmon/keep-­‐alive/connecmon  reuse  —  по  сути  одно  и  то  же Pconnect  в  мире  FastCGI-­‐демонов Плюсы: • Экономия  ресурсов  сервера • Меньшая  нагрузка  на  сеть • Экономия  времени  и  ускорение  отклика
  • 5. Действительно  Plug’n’Play? hvp://www.php.net/manual/en/features.persistent-­‐connecmons.php: “Persistent  connec,ons  were  designed  to  have  one-­‐to-­‐one   mapping  to  regular  connec,ons.  That  means  that  you  should   always  be  able  to  replace  persistent  connec,ons  with  non-­‐ persistent  connec,ons,  and  it  won't  change  the  way  your  script   behaves.” Это  маркетинг.  И  не  более  того.
  • 6. В  реальности Чаще  всего  не  Plug’n’Play Должны  быть  рассчитаны  на  pconnect: • протокол • клиентская  библиотека • серверное  ПО Не  «серебряная  пуля» В  больших/highload  системах  более  ощутимо
  • 7. Проблемы Софт  не  рассчитан  на  большое  кол-­‐во  открытых  соединений Сколько  памяти  съедает  инициализированный  коннект? Выделяется  ли  в  софте  по  треду/процессу  на  коннект? Есть  ли  ограничение  на  кол-­‐во  коннектов  с  одного  адреса? Ограничения  сетевой  подсистемы  Linux
  • 8. Проблемы Разберитесь  в  коде Не  закрывайте  хорошие  соединения  функцией  fclose Проверьте,  как  работает  ваш  extension,  особенно  все  его  warning’и  и   error’ы • hvp://www.php.net/manual/en/memcached.addservers.php В  php  вам  поможет  ftell($socket)
  • 9. Проблемы Когда  нужно  закрывать  соединения При  синтаксических  ошибках При  тайм-­‐аутах Если  вы  не  дочитали  ответ  до  конца
  • 10. Проблемы Stateful  протоколы Вы  всегда  знаете  состояние  полученного  соединения? Транзакции/переменные/авторизация Реинициализация  соединения
  • 11. Проблемы Асинхронная  природа  сокетов Должна  быть  возможность  сопоставления  запросов  и  ответов • Единственное,  где  я  это  нашел,  это  в  mongoDB  и  MessagePack-­‐RPC hvp://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol hvp://wiki.msgpack.org/display/MSGPACK/Design+of+RPC Способ,  которым  мы  пользуемся  (не  дает  гарантии)
  • 12. Проблемы set_Ome_limit Есть,  было  и  будет  в  FastCGI-­‐демонах Терминация  запроса  пользователем Shutdown  обработчик
  • 13. Проблемы Ограниченный  функционал  FastCGI-­‐демонов Клиентские  библиотеки  зачастую  бездумно  написаны Не  всегда  можно  понять  новое  ли  это  соединение Нет  полноценных  connecmon  pool’ов
  • 14. От  теории  к  практике
  • 15. Badoo  Desktop • Бесплатная  Win/Mac  программа • Поддерживает  ваш  онлайн-­‐статус  на  сайте   • Уведомления  о  новых  событиях • Дает  нам  местоположение  пользователя • Удобный  доступ  к  разделам  badoo.com
  • 16. Badoo  Desktop • 3  млн.  пользователей  в  месяц   • 1  млн.  подключенных  программ  в  пике • 20  тыс.  запросов/сек  к  PHP  backends
  • 17. Наш  setup persistent
  • 18. Программы  —>  Frontend Есть  способ  сделать,  чтобы  «просто  работало»: • Гарантии  доставки  нет • Ответы  являются  отдельными  командами • Одна  программа  —  одно  соединение • Есть  сохранение  порядка • Нарезкой  байт  на  отдельные  команды  занимается  демон,  держащий   соединения
  • 19. Frontend  —>  Backend Отдельный  hvp-­‐запрос  на  каждую  входящую  команду Pconnect  пока  нет,  но  планируем  через  HTTP  Keep-­‐Alive hvp://en.wikipedia.org/wiki/HTTP_persistent_connecmon
  • 20. Backend  —>  MySQL Протокол  на  pconnect  полностью  не  рассчитан Есть  packet  number,  но  оно  обнуляется  с  каждым  новым  запросом Есть  реинициализация  соединения,  используйте  mysqli_connect Тред  на  коннект Для  нас  малоинтересно,  баз  много,  php-­‐серверов  много,  запросы  редки hvp://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol
  • 21. Backend  —>  HandlerSocket Протокол  на  pconnect  не  рассчитан,  зато  коннект  ест  мало  ресурсов Используем  pconnect Написали  свою  библиотеку  на  php Проверяем,  что  получили  ключ,  который  просили Получили  прирост  в  3—5  раз hvp://mnyurl.com/64vwn52
  • 22. Backend  —>  Memcached Протокол  на  pconnect  не  рассчитан,  зато  коннект  ест  мало  ресурсов Используем  pconnect Extension  нормально  работать  не  смог,  написали  свою  библиотеку  на  php Тщательно  ловим  все  ошибки Проверяем,  что  получили  ключ,  который  просили Получили  прирост  в  2  раза hvps://github.com/memcached/memcached/blob/master/doc/protocol.txt hvp://code.google.com/p/memcached/wiki/MemcacheBinaryProtocol
  • 23. Backend  —>  своя  in-­‐memory  DB Протокол  на  pconnect  не  рассчитан Используем  pconnect Только  команды  на  запись,  ответ  только  либо  OK  либо  ERROR Гарантии  записи  нет  и  мы  к  этому  готовы Каждая  отдельная  ошибка  нам  не  важна,  они  всегда  идут  только  пачками
  • 25. Ленивая  инициализация В  handlersocket-­‐протоколе  есть  открытие  индекса  таблицы Без  pconnect  открывали  каждый  раз  после  коннекта С  pconnect  ловим  ошибку  про  неизвестный  индекс Теперь  мы  можем  открывать  его  только  если  это  нужно
  • 26. Pipelining Если  в  протоколе  есть   уникальный  request-­‐response   id  на  каждый  запрос,  то   будет  надежно  работать
  • 27. Connecmon  pooling Плюсы: • Уменьшение  времени  получения  коннекта • Упрощает  код • Дает  контроль  над  использованием  ресурсов Бывает  внутри  процесса  и  в  виде  отдельного  демона • Внутри  FastCGI  —  пишите  сами,  плюс  у  некоторых  extension’ов  есть   свои  пулы.  В  мире  Python  —  SQLAlchemy • Вне  процесса  сложнее  и  функциональнее,  обычно  есть  доп.  логика
  • 28. Connecmon  pooling pgpool  —  PostgreSQL  connecmon  pool  daemon • hvp://pgpool.projects.postgresql.org/ • В  Postgres  процесс  на  коннект MySQL  Proxy  —  швейцарский  нож • hvp://forge.mysql.com/wiki/MySQL_Proxy_FAQ • load  balancing,  failover,  query  analysis/modificamon,  R/W  spli›ng SQL  Relay  —  ODBC,  Oracle,  MySQL,  PostgreSQL,  Sybase,  MS  SQL  Server,  IBM   DB2,  Firebird,  SQLite  and  MS  Access • hvp://sqlrelay.sourceforge.net/sqlrelay/faq.html
  • 29. Чеклист 1)  Что  конкретно  вы  экономите  и  с  какими  последствиями? 2)  Потянет  ли  это  все  ваша  система? 3)  Вы  разобрались  с  кодом,  ошибками,  закрываете  коннект  когда  нужно? 4)  Рассчитан  ли  протокол  на  pconnect? 5)  Если  нет,  вы  подстелили  себе  соломы? 6)  Вы  правильно  работаете  со  stateful  протоколом? 7)  Вы  используете  connecmon  pool  для  экономии  ресурсов? 8)  Вы  готовы  писать  свои  велосипеды?
  • 30. Спасибо! Вопросы? Контакты: hvp://twiver.com/ryba_xek s@averin.ru hvp://averin.ru/slides/
  • 31. Badoo  ищет  классных  людей! Нам  нужны: • умный  и  вменяемый  PHP/MySQL   программист • релиз-­‐менеджер • QA  специалисты Что  даём: • интересную  работу • 2000  евро  за  успешную  рекомендацию