Как стать автором
Обновить

Комментарии 15

Заслуживает уважения проделанная работа. На выходных буду тестировать. Биг сенкс.
Все это неплохо, но основная задача HS — повышение производительности. И то, что либа съедает кусок этой самой производительности, не есть хорошо.

Как по мне, библиотека для работы с HS должны быть все же написана на С
Согласен, производительность основной профит.
У меня в TODO есть пункт выпустить С версию. На данный момент это не законченный продукт, промежуточный итог, которым я поделился.

Даже в таком варианте библиотека может пригодиться, если нужно разгрузить сервер с БД, часть нагрузки перейдет на бекенды с PHP(формирование и обработка запросов\ответов), которые горизонтально масштабировать проще.
Как насечт попробовать написать её на Zephir?
issue себе уже добавил с месяц назад, сделаем, нужно только время
У всех 3-х была пара общих проблем:
— отсутствие поддержки суффиксов;
— отсутствие поддержки авторизации;
— слабая документация;
— уровень покрытия тестами не очень высок.

могу сказать, что на то время, когда были реализованы указанные в статье продукты, прошло более трех лет, тогда в основном был PHP 5.1, это было до появления PSR, что касается авторизации, то первоночально она в HS вообще отсутствовала, а реализоватьбиблиотеки и модули для использования HS в своих проектах было нужно, по этому ни кого не ждали. А потом у разработчиков накопились другие проблемы с другими проектами. Это болезнь многих опенсоурсных проектов… Кто-то что-то полезное сделал, потом продукт развивается, а автор этого проекта уже работает над другой задачей. И поддержка, и документация отстаёт от реального положения.

а за библиотеку спасибо, правда статья не ответила на главный вопрос почему «Не стоит бояться использовать HandlerSocket»? а там очень много подводных камней, про которых ну ни слова…
Да с опенсурсом такое случается, я ни в коем случае не обвинял авторов, поэтому не знаю для чего вы это написали.
Ну как же ни слова, если вы имеете ввиду, что я не перечислил полный стек особенностей HS(например лок на таблицы при открытии индекса до закрытия сокета и тому подобное), то в этом случае я согласен, но эти вещи гуглятся на раз, я лишь постарался рассказать особенности, о которых не нашел в интернете. Ну и конечно же окружение для работы с HS, с моей точки зрения, та вещь, которой не хватает людям, чтобы начать им пользоваться — об этом в статье я как раз и говорил.
HS во всю используется уже в Badoo. Не буду пересказывать выступление Аверина — обращайтесь к первоисточнику — там и про про подводные камни и кратко мануал — слайды с конференции
И кстати совсем недавно, был обещан код клиента.
я нагуглил презентацию Аверина из Badoo: www.slideshare.net/HDConf/handlersocket-39967288
Ссылки на исходники я там не нашел, но нашел исходники в его архиве со слайдами:
averin.ru/slides/CodeFest%202013%20%d0%b8%20%d0%a0%d0%98%d0%a2%202013/HandlerSocket.php.src
averin.ru/slides/CodeFest%202013%20%d0%b8%20%d0%a0%d0%98%d0%a2%202013/Sharded%20handlerSocket.php.src

Похоже что они тоже используют PHP реализацию. И 3мс на запрос из презентации это подтверждают.
3мс — это очень много. у нас за 6мс вынимаются данные обычными SQL запросами. Если сравнивать с мемкешом (примерно 1мс), то разница в 3 раза становится критична.

Мы используем HS для проверок авторизации и получении еще некоторой системной информации с 8 слейвов. При нагрузке примерно в 15к rps мы имеем среднее время ответа порядка 0.7мс в самое загруженное время и 0.4мс ночью. Используем модуль code.google.com/p/php-handlersocket/

Только что посмотрел в нашей пинбе, в среднем при отрисовке самой популярной странице на вызов find тратится 0,5 мс (при использовании класса на PHP). Скорее всего, цифры товарища Сергея Аверина были приведены для условно «нагруженной» базы. Выполнение же SQL select на одной из весьма нагруженных баз (свыше 10к SQL rps) занимает в среднем 0,7 мс. То есть, сетевая задержка играет намного большую роль, чем накладные расходы на PHP-код.
Если внимательно смотреть презентацию, то становится понятно, что время ответа зависит от условий использования, железа и т. д.
В презентации есть use case с 0,5 мс временем ответа стабильно.

Мы переехали на C-версию либы уже после того, как была сделана презентация.
Как мы знаем из протокола HS, перед запросом нужно открыть индекс [орерация «P»], время выполнения операции которого на 50% больше, чем выполнение выполнения самого запроса. Если мы имеем обращение по первичному индексу, то сравнение SQL и HS приблизительно такие: 337 и 319 мкс. Как видим, выиигрываем от использования технологии HS совсем не много. Однако, если первоночально открытть индекс [орерация «P»], а потом в цикле делать запросы, то время одного запроса будет составлять 125-220 мкс. Выигрыш получается в два-три раза. Тесты делались на таблице 100К записей структуры: id,text. Тест реализован в рамках разработки си демона, время мерилось gettimeofday, но тест также нельзя назвать идеальным, так как сюда включалось некоторое незначительное время на выполнение враппера кода;

Помню ваши коммиты :)
Самому библиотека так и не пригодилась — у меня сейчас совсем другое тонкое место и расти в нём можно только по ресурсам CPU к сожалению :(
На поддержку HSPHP откровенно забил после того как остался не решённым этот issue github.com/DeNA/HandlerSocket-Plugin-for-MySQL/issues/91
С Ahiguti ковырять было веселее — он отвечал чаще и на почту,
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации