четверг, 6 декабря 2012 г.

Golang

          Небольшая подборка статей/книг для всех люителей языка Go, или тех кто только собирается изучить его:
1. Coding in Go  - несколько статей на тему того как эффективно решать некоторые типичные задачи возникающие при программированиии на Go. Например кэширование значений или автоматическое восстановление процессов.
2. Learniung Go by Miek Gieben  Хорошая книжка для тех кто решил изучить этот замечательный язык.
3. Network Programming with Go  - Еще одна книжка по Go, но уже в формате HTML.

среда, 5 декабря 2012 г.

Magento performance monitoring

    Для того чтобы понимать реальную целесообразность той или иной оптимизации мне давно был нужен инструмент который имитирует активность покупателя при покупке товаров. Основная нагрузка на сайт при этом возникает на этапе выбора товара, так как количество реальных покупателей не превышает нескольких процентов от количества уникальных пользователей.  Поэтому я написал инструмент который эмулирует обход пользователем всех категорий и продуктов на сайте.  Он показывает статистику по каждому запросу в формате аналогичному siege:


HTTP/1.1 200  162.988ms 47355 bytes ==> http://www.beta.butik.ru/zhenskaja-odezhda/topy-i-majki/
HTTP/1.1 200  173.232ms 48667 bytes ==> http://www.beta.butik.ru/zhenskaja-odezhda/brjuki/
HTTP/1.1 200  166.899ms 47204 bytes ==> http://www.beta.butik.ru/zhenskaja-odezhda/brjuki/kapri/
HTTP/1.1 200  176.659ms 48203 bytes ==> http://www.beta.butik.ru/zhenskaja-odezhda/dzhempery-i-svitery/
HTTP/1.1 200  170.251ms 43253 bytes ==> http://www.beta.butik.ru/zhenskaja-odezhda/kupalniki/kupalnyj-kostjum/
HTTP/1.1 200  177.7ms 48763 bytes ==> http://www.beta.butik.ru/zhenskaja-odezhda/futbolki/
HTTP/1.1 200  179.643ms 46227 bytes ==> http://www.beta.butik.ru/zhenskaja-odezhda/shorty-i-bridzhi/

А также суммарную статистику по каждому типу страниц: 
===================================================================
|| Product
===================================================================
Transactions: 262 hits
Availability: 94.66 %
Elapsed time: 14m20.925383s 
Data transferred: 11698965 bytes
Response time: 3.285974744s
Transaction rate: 0.30
Successful transactions: 248
Failed transactions: 0
HTTP error transactions: 14
Longest transaction: 15.342011s 
Shortest transaction: 85.219ms 
===================================================================
|| Category
===================================================================
Transactions: 256 hits
Availability: 100.00 %
Elapsed time: 12m7.691699s 
Data transferred: 11154863 bytes
Response time: 2.842545699s
Transaction rate: 0.35
Successful transactions: 256
Failed transactions: 0
HTTP error transactions: 0
Longest transaction: 15.229138s 
Shortest transaction: 72.136ms 
===================================================================
|| Total stats
===================================================================
Transactions: 518 hits
Availability: 97.30 %
Elapsed time: 26m28.617082s 
Data transferred: 22853828 bytes
Response time: 3.066828343s
Transaction rate: 0.33
Successful transactions: 504
Failed transactions: 0
HTTP error transactions: 14
Longest transaction: 15.342011s 
Shortest transaction: 72.136ms 

Все это добро лежит на гитхабе : https://github.com/yvasiyarov/magento-perfomance-checker
Список опций можно посмотреть вот так: 
Usage of magento-perfomance-checker:
  -magento_base_url="": Magento base url
  -magento_database="magento": Magento database
  -mysql_host="localhost": MySQL host
  -mysql_login="root": MySQL login
  -mysql_password="root": MySQL password
  -mysql_port=3306: MySQL port
  -no_connections=50: Number of parallel connections
  -num_cpu=1: Number of used CPU

Memcached

     Давно искал способ сбрасывать кэш memcached при деплое без использования sudo:
echo "flush_all" | /bin/netcat -q 2 127.0.0.1 11211
    Eще одно - хозяйке на заметку:
watch "echo stats | nc 127.0.0.1 11211" - просмотр статистике по использованию memcached прямо в консоли

iPhone 5 & Ubuntu

        Оказывается если iPhone 5 подключить к Ubuntu через  USB то он показывается как обычная флешка. И никаких iTunes ставить не надо :-) Это порадовало. Но сам iPhone 5 - не фонтан. Не рекомендовал бы переходить с 4S на пятерку.

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

Golang and supervisor

  Попробовал использовать Supervisor (http://supervisord.org) для обеспечения отказоустойчивости Go фронтэнда. Оказался очень даже доволен результатом. Простая настройка и установк, куча опций. Плюс к тому он еще и логи фронтенда собирать может. Короче думаю с этим можно жить. Единственная сложность возникла на этапе установки нужных разрешений: в случае если супервизору чего-то нехватает - он просто умирает, а так как он уже отключился от консоли - ты собственно ничего не видишь. Для того чтобы отладить все эти проблемы нужно запустить его первый раз с ключом -n 

пятница, 23 ноября 2012 г.

Go(golang) vs PHP по взрослому

      Я давно хотел устроить сравнение скорости Go и PHP на какой-нибудь реальной задаче  и в условиях близких к боевым. Интернеты кишат синтетическими тестами - например  вычисление квадратных корней в милион потоков  - причем эти тесты чаще всего выполняются на ноутбуке. 
    Итак, есть реальная задача - backend для автосаджеста городов. На вход передается набранная строка - возвращается список возможных городов в JSON. Сами города находятся в sphinx, в количестве 30 тысяч. 
Что с чем сравниваем:
    Текущая реализация написана на PHP c использованием фреймворка Yii. Состоит буквально из 10 строчек, 5 из которых комментарии. Естественно используется opcode cacher.  
   Go реализация занимает чуть побольше - 35 строчек кода. Тестировалось 2 варианта FastCGI и HTTP. Различаются они фактически только подключаемой библиотекой - "net/http" или "net/http/fcgi".  Забегая вперед сразу скажу - разница между этими реализациями лежит в пределах погрешности - менее 1 сотой секунды.
    На чем собственно проводилось тестирование: PHP реализация была разложена на 2-х фронтах(Intel Xeon 8CPU/32GB RAM/Ubuntu 12.xx).  Go реализация была разложена только на одном фронте - потому как деплойный скрипт написан именно под PHP, а раскидывать ручками больше чем на один сервер было лень.
       Как тестировалось: был сгенерирован список URL для siege, состоящий примерно из 250 тысяч различных запросов к автосаджестеру. siege запускался с одного из фронтов - чтобы не учитывать сетевые задержки. Тестировалось с 30, 40 и 50 одновременных соединений.
        Итак результаты:
При 30 одновременных соединениях
Среднее время ответа: PHP - 0.36 секунд, Go - 0.01 секунда.
Самая длинная транзакция: PHP 12.04 секунды, Go - 5.02 секунд.
Самая короткая транзакция: PHP 0.02 секунды, Go - 0.00 секунд.

При 40 одновременных соединениях
Среднее время ответа: PHP - 0.65 секунд, Go - 0.09 секунд.

При 50 одновременных соединениях
Среднее время ответа: PHP - 0.96 секунд, Go - 0.22 секунд.

Выводы:
1. Переписывание на Go данной задачи выглядит более чем оправдано.  
2. При увеличении числа одновременных подключений разница между GO и PHP сильно сокращается. Объяснение этому одно - начинает засасывать sphinx - который запущен только на одном сервере. Также на это повлияло то что siege был запущен на одном из фронтов. 

Также я сравнивал варианты когда обращение идет к Go серверу напрямую и через Nginx: результат порадовал - среднее время ответа различается буквально на 0.01-0.02 секунды. Что в общем еще раз доказывает что проксирование через Nginx работает очень быстро.

Еще я проводил сравнение при разных GOMAXPROCS: результат фактически не изменился. Чего собственно и следовало ожидать в данных условиях.

   

вторник, 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 поэтому он будет работать гарантировано медленнее чем первый клиент, но хотябы работает.  Плюч ко всему архитектура этого выглядит наиболее продуманной среди всех вариантов. Сразу видно людей знакомых с пэттернами проектирования.

воскресенье, 12 августа 2012 г.

Взбесило

Сегодня наткнулся на лучшую реализацию кэширования которая только может быть возможна:
https://github.com/Idol-IT/iwi

Пример кода - как этот чудо алгоритм должен был использоватся:


Yii::import('ext.iwi.Iwi');
$picture = new Iwi('images/sample.jpg');
$picture->resize(100,100, Iwi::NONE);
echo $picture->cache();
Вроде все классно, взяли картинку, сжали - закэшировали. Но господа веселые, цель кэширования - это не просто складывать барахлишко в кэш, но хотябы пытаться использовать его. Ну авторы забыли - подумаеш - с кем не бывает - подумал я и полез в код искать метод для проверки кэша. Благо документации нет практически никакой кроме этого README файла. 
Оказалось что не напрасно. Потому что метода для проверки кэша у них в принципе нет. А нахера он нужен. Главное же закэшировать а не брать из кэша.
Посидел -подумал как брать из кэша. Оказалось что никак. Нужно для каждой комбинации действий хранить закэшированный URL. Короче я решил что - в топку эту поделку, это как раз тот случай когда проще выкинуть и написать самому что тебе надо, чем с этим гавно разгребатся.

пятница, 10 августа 2012 г.

Хозяйке на заметку

Несколько полезных ссылок - напочитать.
http://dtrace.org/blogs/brendan/ - много полезного про исследования производительности систем
http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html - шпаргалка по базовым утилитам
http://www.markleith.co.uk/ очень полезный блог по MySQL оптимизации
http://www.percona.tv/mysql-conference/using-mysql-5-5-performance-schema использование perfomance schema в MySQL

четверг, 14 июня 2012 г.

Иерархия статических страниц на Magento

Нашел наконецто модуль для организации иерархии статических страниц в Magento. Низкий поклон автору за его работу - потому как модуль абсолютно бесплатный.
Подробнее о нем - http://www.johannreinke.com/en/2012/01/10/magento-cms-pages-in-a-tree-structure/
В добавок ко всему он выложил его в удобном для всех разумных существ виде - а именно как репозиторий на гитхабе, чем избавил всех от необходимости иметь секс с magento connect.
В общем этот модуль - must have для любого магенто магазина. 

воскресенье, 13 мая 2012 г.

Балансировка HTTP запросов

Сегодня восполнил свой пробел в области балансировки HTTP траффика. Оказывается что кроме round robin DNS, Nginx и HAProxy еще существует такая замечательная вещь как LVS. Для себя решил что нужно будет обязательно попробовать LVS как только переедем на собственные сервера.
Настройка LVS на русском языке - очень полезная статья про установку LVS на хабре
Practical Load Balancing by Peter Membrey, Eelco Plugge, and Dawid House   - книжка про балансировку нагрузки написанная на очень простом языке. Довольно многословная книжка, даже для специалиста среднего уровня - пол книжки можно пропустить. Не понимаю зачем  требовалось объяснять основы TCP/IP и HTTP в книге, посвященной балансировки нагрузки. Мне всегда казалось что люди занимающиеся балансировкой нагрузки - четко представляют себе как работают данные протоколы.  Но если пропустить весь словесный понос - то можно дочитать до подробного описания установки LVS и кое-какую информацию по оптимизации Nginx.

Пока гуглил на тему влияния worker_cpu_affinity на производительность Nginx наткнулся на http://tengine.taobao.org/ - китайский форк Nginx в котором привязка воркеров к процессорам делается автоматически.

суббота, 12 мая 2012 г.

Github Issues 2.0

На этой неделе зашел потыкать палочкой issues  на github и был очень приятно удивлен. Если раньше они годились только для code review и как мелкие заметки самому себе - то сейчас они прямотаки преобразились. Теперь в принципе там есть все необходимое для базового управления задачами. Это конечно ни разу не Jira  но для управления задачами на уровне небольших групп программистов - самое то. Интеграция с репозиториями - гораздо лучше чем в Jira, одно только закрытие задач при коммите чего стоит. Многие возразят что для Jira тоже есть плагины связывающие задачи и коммиты в репозиторий - но эти плагины так написаны, что лучше бы уж и не брались.  На прошлом месте работы мы пытались использовать один из подобных плагинов - примерно с месяц промучались пока не выяснили что этот плагин делает запрос к репозиторию на каждый показ страницы с задачей - поэтому у нас то репозиторий становился "задумчивым", то сервер самой Jira. Исходя из этого github issues 2.0 - самое то для управления задачами внутри команды программистов. Полное описание возможностей github issues 2.0 можно посмотреть здесь

      

пятница, 4 мая 2012 г.

Magento-баг в аутентификации

Сегодня наткнулся на весьма досадную багу в системе аутентификации магенты. Если сессия протухает и клиент сразу же пытается залогинится - логин не работает. То есть клиента перенаправляют на страницу логина, он вводит корректные логина/парол - нажимает отправить -  и его опять перенаправляют на эту же страницу. Молча. Никакого сообщения об ошибке или успешности логина. После продолжительного шаманства выяснились некоторые детали: 
1. Проблема существует только в клиентской части - в админке таже самая последовательность действи не воспроизводит проблему. 
2. При каждой попытке session ID меняется. 
3. При удалении всех кук проблема также пропадает.
Из второго пункта можно сделать вывод что при каждой попытке заводится новая сессия, а старая соответсвенно теряется. После некоторой медитации над заголовками запросов я попробовал отключить флаг - "HTTP only" в настройках сессии - и угадал. После установки этого флага в "No", все заработало.

суббота, 21 апреля 2012 г.

На стачку!

В минувшие выходные на моей малой Родине, в городе Ульяновске прошла отличная конференция веб разработчиков: На стачку
Там было куча интересных докладов:
1. NoSQL под нагрузкой: практика. Подробно рассмотрены redis, mongodb, memcachedb.  Популярно объяснили почему не стоит использовать mongodb когда данные не помещаются в памяти. На мой взгляд это практически означает профнпригодность этой базы данных. Потому как в случае когда все данные помещаются в памяти - любая база может выдавать в общем-то приемлемые результаты, если конечно руки из правильного места растут. В общем этот доклад всем рекомендую к просмотру.
2. Нагруженный поиск на Sphinx. Роман Павлушко - очень подробно разобраны стратегии оптимизации sphinx. Также рекомендуется всем кто планирует использовать его в своих проектах.

Еще осталось штук пять докладов которые планирую отсмотреть в ближайшее время - о них напишу подробнее после просмотра. В заключении хочется сказать огромное спасибо авторам конференции за хорошее качество видео - оно на порядок привышает качество на многих столичных конференциях.

понедельник, 9 апреля 2012 г.

Hip-Hop от Facebook

Вчера попытался опробовать hiphop php в деле. Итог: полдня убито в попытках собрать компилятор, который,  в результате выдавал segmentation fault. Мораль сей басни такова - послушайте авторов сего творения - если хотите его использовать - установите cent os на виртуалку и играйтесь. Боюсь что на большее он пока не тянет. 

воскресенье, 8 апреля 2012 г.

VMware

Сегодня поимел секса с настройкой shared folders  для Ubuntu 11.10 server и VMware Fusion 3.1.3. VMware tools упорно отказывались работать, причем сама VMware упорно настаивала что VMware Tools установлены и работают, однако shared folder как небыло так и нет. Раза три я их сносил и устанавливал по всякому - а счастье все не наступало - из драйвер файловой системы отказывался устанавливаться на ядро 3.x. Хотя в документации поддержка Ubuntu server 11.10 была заявлена.
В конце концов я забил на родные tools и попытался установить open-vm-tools.  Как ни странно - установка прошла на удивление легко:
sudo apt-get install --no-install-recommends open-vm-tools
После этого я добавил вот такую строчку в /etc/fstab:
.host:/  /mnt/hgfs  vmhgfs  defaults,noauto,uid=1000,gid=1000   0   0

Добавил в udev правило для загрузки драйвера файловой системы shared folders:
ACTION=="add", KERNEL=="vmhgfs", RUN+="/bin/mount /mnt/hgfs"
Это  правило можно поместить в любой файл в директории /etc/udev/rules.d/
После этого нам остается только подмонтировать эту файловую систему:
mkdir /mnt/hgfs
sudo mount /mnt/hgfs
И - о чудо, эта дрянь заработала :-)


Learning Go

Я давно интересовался возможностью применения GO в реальных системахи даже измерял  производительность GO На мой взгляд это как минимум это очень многообещающий язык. Недавно вышла его первая стабильная версия - надо будет взглянуть насколько он изменился за это время. Как минимум они обещали новый шаблонизатор написать, поскольку тем что был в то время в практических целях было пользоватся невозможно. Для этого в самый раз будет: Learning Go

XHGui & siege

Сегодня прочитал статью Profiling a PHP Application, подчерпнул для себя один крайне полезный инструмент: XHGui. Сам xhprof  я использую довольно давно, а вот про этот приятный интерфейс к нему не знал. Дефолтный интерфейс xhprof поражает своей убогостью... хотя свои прямый функции выполнять позволяет. Вот скрин XHGui:
Другой старый знаклмый siege - давно его пользую для простых случаев, но все никак не могу заставить себя дочитать мануал до конца, чтобы использовать его в полную силу.

суббота, 7 апреля 2012 г.

openark kit

Вчера открыл для себя openark kit - набор утилит для работы с MySQL. В отличии от своего старшего брата - Percona Toolkit написаны на python. Функциональность этих двух пакетов конечно пересекается, но есть и кое какие уникальные инструменты. В общем надо будет как-нибуть их опробовать в условиях, приближенных к боевым.

пятница, 30 марта 2012 г.

Luxe Fast Pages

Только что зарелизил новый модуль - Luxe Fast Pages. Оптимизирует работу статических страниц в Magento. Первый новый модуль за последние 1.5 года :-)

HR-ы ламоды, они такие HR-ы...

Вчера стал свидетелем прелестной комедии в трех действиях.

Действие первое: Одна из HR компании Lamoda, а именно Мария Касьянова отправила через Мой Круг предложение о работе одному из моих друзей. Казалось бы - что тут такого... да в общем то ничего - за исключением того что человек уже работал в компании Lamoda около года - и в профиле у него это было черным по белому написано. При этом назвала человека другим именем. Так дважды облажаться  за один раз могут только наши HR-ы.

Действие второе: программисты - народ юморной, и ничтоже сумняшеся подигрываем ей. Меняем в профиле последнее место работы на компанию под крайне правдоподобным названием "Купибатон", и отвечаем что крайне заинтересованы ее предложением и готовы встретится завтра же. Мария радостно соглашается, а весь IT офис  смеется до изнеможения в ожидании собеседования.

Действие третье: Мария радостно присылает резюме программиста ему же на служебный email, с примечанием что он завтра должен будет пособеседовать сам себя. Просто epic fail. Согласитесь, не каждому человеку в жизни дается возможность самому себя прособеседовать ?

PS
proof ниже

четверг, 29 марта 2012 г.

HandlerSocket

Наткнулся на очень интересную презентацию по HandlerSocket:

Самое интересное в конце: модуль для NGINX для обращения к HandlerSocket через AJAX.

Интересная альтернатива Percona + HandlerSocket

Наткнулся на очень интересный эксперимент -  товарищи из финской комнапии Innobase решили скрестить ужа с ежом и не получить при этом метр колючей проволоки. Если быть конкретнее - они предложии использовать Memcached протокол для обращения напрямую к InnoDB плагину MySQL сервера.
Детали тут: http://blogs.innodb.com/wp/2011/04/nosql-to-innodb-with-memcached/
Выглядит как отличная альтернатива Percona+HandlerSocket
Правда у HandlerSocket есть одно преимущество - через него можно работать с любыми storage engine, а не только с InnoDB

понедельник, 26 марта 2012 г.

Дурдом под названием Lamoda

PS
Репортер задачи: MD ламоды
Исполнитель: продукт менеджер ламоды
Для выполнение задачи потребовалось ровно 3 минуты.
Цирк да и только :-)

Всем любителям переписать все с нуля посвящается

- Папа, а почему солнце всегда встает на восходе, а заходит на западе?
 папа поворачивает голову с красно-воспаленными глазами к сыну
 - Всегда восходит на востоке?
 сын: - Всегда
 папа: - заходит всегда на западе?
 сын: - Да
 папа: - ничего не глючит? все работает нормально?
 сын: - да, все нормально
 папа: - Ну так и не трогай там нихрена!

понедельник, 19 марта 2012 г.

Не так давно занимался оптимизацией Magenta, а именно вычисления карты и отображения страницы карты и окончательно понял что xhprof - must have для любого PHP программиста. Он умеет с легкостью необычайно показывать всю глубину ужаса происходящего внутри системы:

воскресенье, 18 марта 2012 г.

Мониторинг системы

Пара полезных статей с описанием утилит для мониторинга загрузки системы: http://habrahabr.ru/post/140010/ http://habrahabr.ru/post/114082/ Если в кратце:
atop 2 - отличня замена стандартному top  
iftop - смотреть сетевую активность
htop - удобно мониторит процессы и память, удобно отстреливать процессы
vmstat - информация о потреблении памяти, дисковой активности и загрузке процессора. По сравнению с другими утилитами из списка - довольно убогая :-)
iotop - показывает дисковую активность и ничего кроме этого. Зато это единственное она делает отлично :-)
mctop - мониторинг состояния memcached, более подробно тут - http://habrahabr.ru/post/58198/  
nethogs - мониторинг сетевой активности, интересная игрушка :-)
Кроме того есть много интересных утилит для мониторинга в состеве percona-tools - но это уже отдельная тема

Безопасность и ZF

http://habrahabr.ru/post/140145/ Об SQL инъекциях в Zend Framework - на что стоит обратить внимание при code review