вторник, 30 октября 2012 г.

Golang and MySQL

Просмотрев все имеющиеся на данный момент реализации MySQL клиентов для Go пришел к выводу что самая работоспособная из них - mymysql (https://github.com/ziutek/mymysql)
Остальные давно не развиваются и по видимому заброшены разработчиками.

вторник, 23 октября 2012 г.

Go lang installation

Самый простой способ установки языка Go в убунте:
sudo apt-get install golang-go golang-doc golang-dbg vim-syntax-go

Причем последний пакет у меня почему-то не заработал - подсветка в vim так и не заработала. Пришлось воспользоватся советом http://eax.me/go-lang/:

mkdir -p ~/.vim/syntax/
cd ~/.vim/syntax/
wget http://go.googlecode.com/hg-history/release/misc/vim/syntax/go.vim
mkdir -p ../ftdetect/
echo 'au BufRead,BufNewFile *.go set filetype=go' > ../ftdetect/go.vim 

Handlersocket клиенты для PHP

У меня долго не хватало времени написать этот пост, но поскольку сегодня у нас в офисе внезапно вырубилось электричество у меня неожиданно образовалось парочка свободных часов и я решил посвятить его написанию своего гневного обзора HS клиентов для PHP. Итак начнем.

1. php-handlersocket (http://code.google.com/p/php-handlersocket/) Во многих статьях по HS рекомендуют именно этот экстеншен. Я тоже его до поры до времени использовал. Ровно до тех пор пока дело не дошло до нагрузочного тестирования.   По сути в рамках этого проекта существуют две разные реализации клиента hsclient and native. Одна из которых(hsclient) вообще не работает(за что ей большое человеческое спасибо). Она просто вызывает segmentation fault при обращении к соответсвующим функциям. На то чтобы разбиратся с ней я убил всего пол дня - после сравнительно непродолжительного секса с участвием strace я  понял что дело это гиблое и решил скомпилировать этот же модуль но с использованием native реализации. Эта реализация оказалась гораздо коварнее - она очень хорошо работает в ситуации когда и MySQL и веб сервер находятся на одной машине - то есть на машине разработчика и на тестовым сервере. Но как только дело дошло до нагрузочного тестирования - и MySQL сервер оказался на другом физическом сервере и в другом сегменте LAN (возможно это тоже сыграло свою роль) я заметил проблемы. Примерно 10% запросов к странице заканчивались 500 ошибкой. Смотрю в логи - PHP ругается что в записях получаемых через HandlerSocket нехватает полей. В базе все поля в наличии - а Handler Socket читает их не до конца в некоторые рандомные моменты времени. Причем только при большом количестве одновременных соединений. С помощью tcpdump я сдампил все пакеты между MySQL сервером и выяснил что нужные данные всетаки приходят в полном объеме - но Handler Socket их не читает. На этом мое терпение кончилось и я решил отказатся от этого разширения. Посмотрев на его страницу внимтельнее я обнаружил большое количество баг репортов - но ни один из них так и не был отвечен с апреля месяца. Очевидно что данное разширение не поддерживается больше - так что если вы не хотите внезапно переписывать весь проект на другой экстеншен перед релизом - не стоит с ним связыватся.

2. Следующим на очереди Net_HandlerSocket (http://openpear.org/package/Net_HandlerSocket). После непродолжительных  попыток заставить его работать я понял что эта возьня не стоит свечь.  Плагин очень давно не обновлялся, генерирует кучу варнингов и вообще не содержит тестов.

3. HSPHP (https://github.com/tz-lom/HSPHP) - единственный работающий кандидат. Да это не модуль PHP поэтому он будет работать гарантировано медленнее чем первый клиент, но хотябы работает.  Плюч ко всему архитектура этого выглядит наиболее продуманной среди всех вариантов. Сразу видно людей знакомых с пэттернами проектирования.