• Web-Оповещения в нагруженных проектах

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

      Есть несколько вариантов решения такого класса задач. Наиболее оптимальное и распространенное решение – это подписка на события. Как это реализуется в нагруженных проектах?
      Читать дальше →
    • Система рейтингов в высоконагруженном проекте

        Рассказ будет про один контентный проект, в котором мне пришлось переделать архитектуру. Ранее была реализована классическая Лампа-схема (Linux-Apache-MySQL-PHP). Но кол-во посетителей прибавлялось и прибавлялось, уже стало подходить к 1М хостов и сервер БД переставал справляться. Первым делом, я предложил докупить еще один серак, но в данном сегменте конвертация в партнерских программах довольно низкая, так что, руководство проекта немного пожмотилось.

        Если, интересно, как мне пришлось изменить архитектуру и при этом еще прикрутить систему ротации и рейтингов, то добро пожаловать под кат.
        Читать дальше →
      • Из говнокода в Highload. Используем ТАРАНtool. 5 рецептов повышения производительности

          Ко мне обратился один руководитель стартапа социальной игры с просьбой увеличить производительность своего проекта. На этом этапе был сделан и запущен прототип проекта. И надо отдать должное разработчикам, что проект работал и даже приносил какую-то прибыль. Но, запускать рекламную компанию не имело смысло, так как проект не выдерживал ни каких нагрузок. Валился MySQL (35% ошибок).

          Код проекта… В общем у меня осталось впечатление, что писал его недоученный студент… И это, немотря на то, что уже был сделан частичный рефакторинг другим программистом. Единственное, что радовало, то это то, что не использовался какой-либо фреймворк. Конечно, это вечно флеймовый вопрос: Иисус или Магомед? Быть или не Быть? Unix или Windows? Использовать или не Использовать? ИМХО, Моё мнение: фреймворки заточены под узкий круг типовых задач. Социальный проект — задача, как правило, не типовая… Но, в целом, мне проект показался интересным и я решил взяться за улучшение. На этом вступление можно закончить…

          Наверно, про повышение производительности и тему highload не писал только ленивый WEB разработчик, знающий хоть что-то в этой области. Принципиально, что-то нового, в данной статье вы не найдёте. Основные идеи разработки highload проектов, были мною изложены в цикле статей HighLoad. Три кита.. Если вам интересно, как я увеличил производительность PHP проекта, используя NoSQL хранилище tarantool, то Добро пожаловать под кат.

          Хотя, принципиально можно использовать другое, подходящее под данный круг задач, key/value хранилище, и реализация серверной логики может быть на любом другом скриптовом языке.
          Читать дальше →
        • Confetti — простая и быстрая конфигурация Вашего проекта

            Если Вы пишете проект чуть более среднего, то как правило сталкиваетесь с настройками и конфигурированием. Есть не мало решений на С/С++, хочу рассказать еще про одно довольно-таки простое и красивое решение от Компании mail@Ru, которое я использовал в своем проекте

            Сам я пользовался разными парсерами конфига, в последних проектах использовал re2c (конфиг был похож на конфиг nginx). У re2c есть даже немного общего с Конфети — это кодогенерация:
            никаких настроечных файлов и структур кодить не надо, все за вас сделает Маг Confetty.

            К сожалению, документации ни какой, иначе не было бы этой статьи. Интересующим, милости просим…
            Читать дальше →
          • PHP модуль для Tarantool

              imageTarantool это разработка компании Mail.ru. Представляет высокопроизводительное key/value no-Sql решение.Отсутствие портов для популярных языков программирования сдерживает популярность данной БД. Попытался восполнить данный пробел.
              Ветка экспериментальная. Исходники
              Далее примеры.
              Читать дальше →
            • Tarantool Данные и Протокол


                Tarantool это замечательное высокопроизводительное no-Sql решение, разработка компании Mail.Ru. Исходники

                Данное решение позволяет использовать как режим key/value, так и выборку множества записей в рекордсет по одному или нескольким критериям (полям поиска). Аналогов в рунете и не только, я пока не встречал. С натяжкой можно сравнить редис. Но в редисе — списковые данные и их нельзя выбирать по ключу. Судя до утверждениям разработчиков, скорость доступа по ключу превосходит memcache, при этом еще в бэдграунде осуществляется постоянное сохранение данных на диск. Но к сожалению, данная разработка имеет единственный perl клиент для доступа к данным, из-за чего не имеет такой популярности, как например у redis или memcache.

                В doc/box-protocol источников есть описание Протокола, которое я в настоящее время переработал для написания клиента на Си и PHP. Изучив Протокол, вы можете реализоать нативный клиент на любимом Вам языке. Надеюсь, данная статья в этом Вам пригодится.

                Читать дальше →
              • HandlerSocket на AddConf Санкт-Петербург 29-30 апреля

                  На AddConf будет мой доклад «Ускоряем MySQL в десятки раз с использованием HandlerSocket».

                  В докладе будут рассмотрены практические вопросы использования HandlerSocket в системе билинга и сбора статистики, будет рассмотрен протокол HandlerSocket, рассказаны приемы отладки, применяемые утилиты и методы, возможные острые углы.

                  А так же будет обозрение и результаты использования совместно с технологией sphinx и в качестве модуля nginx и обзор аналогичной технологии innoDb-memcache.

                  Хочется услышать пожелания к материалам доклада (что добавить а что наф. не нужно), а так же приглашаю его прослушать в живую.

                  Презентация

                  PS. Графика при конвертации немного сбилась. В оригинале этого нет.

                  Промокод на 5% скидку «Александр Календарев — читаю» .

                  ссылки по теме:
                  Первый опыт работы с Handler Socket & php_handlersocket
                  Некоторые тонкости Update & Insert в Handler Socket
                  nginx модуль
                • http_handlersocket_json_module

                    О назначении модуля можно догодаться из названия. О HandlerSocket говорят много и на разных языках (в основном на японском, английском и последнее время немного на русском).
                    Модуль NGX_HTTP_HANDLERSOCKET_JSON_MODULE обращается к данным MySQL через протокол HandlerSocket и отдает данные в формате JSON. Область применения AJAX.
                    Исходники

                    О конфигурации, особенностях и ограничениях можно почиать ниже.
                    Читать дальше →
                  • Первый опыт работы с Handler Socket & php_handlersocket

                      handlersocket

                      Немного вскружилла голову статья Использование MySQL как NoSQL — История о том, как достичь 750,000 запросов в секунду (Перевод моего друга Вадима). Есть и другие материалы по этой теме. И вот дошли руки до экспериментов.

                      Под PHP разработано три разных клиента:
                      extension code.google.com/p/php-handlersocket
                      PEAR openpear.org/package/Net_HandlerSocket
                      PHP native github.com/tz-lom/HSPHP

                      Ниже приведены мои впечатления о первых экспериментах.
                      Читать дальше →
                    • Быстрый автокомплит с использованием libscgi

                        Недавно была опубликована статья "libscgi — эффективное решение для простых и быстрых скриптов". Хотелось бы продолжить ранее представленую тему с более практической стороны. Как уже догадались из название — речь пойдет об скрипте автокомпита.

                        Пользователей, и меня в частности, всегда разражали эти уж медленные автокомплиты. Бывает наберешь уже почти все слово, как появляется выпадающая менюшка. Понятно, что JavaScript сам по себе медленный. Но если еще автокомплит будет тормозить на стороне сервера, то вообще как-то кисло получается. Выход есть, если на серверной части использовать, что-то более быстрое, как вариант можно использовать бинарный скрипт с использованием libscgi. Исходники тут. Чуть ниже подробности.
                        Читать дальше →
                      • libscgi — эффективное решение для простых и быстрых скриптов

                          Очень часто необходимо реализовать простое легкое решение, которое должно отработать довольно быстро. А с использованием технологии AJAX это стало еще актуальнее. Это может быть как скрипт автокомплита, скрипт специфического поиска, вывод информации из справочника. Ранее использовались cgi скрипты. При больших нагрузках они оказались не очень эффективными и были разработаны протоколы fcgi и scgi. Следует заметить что производительность scgi сервера довольно-таки высокоя (более 1500 запр/сек) и памяти занимает всего 600K.

                          Протокол Simple Common Gateway Interface (SCGI) — это протокол по взаимодействию приложений с веб (http) серверами. Большинство современных WEB-серверов (Apache/nginx/lighttpd) имеют встроенную поддержку scgi. Ниже дано краткое описание использование простой библиотечки, которая представляет собой scgi сервер.

                          Исходники тут.
                          Читать дальше →
                        • Повышение производительности за счет блочного кеширования

                            Тема блочного кеширования и ssi не раз проскакивала на Хабре. Ниже я представлю еще одну реализацию, использующего блочное кеширование, а также исходники фреймворка, использующего эти принципы, которые можно найти тут. А как это работает — прочитать ниже.
                            схема кеширования блоками
                            Читать дальше →
                          • Сервер подсчета кликов

                              Если ваш проект использует подсчет кликов и на нем есть какая-либо солидная нагрузка, то вы наверно задумывались об отдельном решении.

                              История разработки уходит в один проект торгово-рекламной площадки, где необходимо было учитывать кол-во переходов. Было решение на РНР. Но это давало видимую задержку в 0.5-1 сек, что очень раздражало разработчиков (в частности меня) и я думаю пользователей тоже.

                              По этому, когда пришлось разрабатывать аналогичный проект, мне пришлось искать альтернативы.
                              Читать дальше →
                            • Домашний датацентр или как начать не имея за душой ни гроша

                                датацентр под столомВы молоды, амбициозны, полны сил и идей, и готовы перевернуть весь Мир! Но как правило, все хорошие начинания всегда заканчивается на самом банальном — нет средств для их реализации. Инвесторы готовы вложить в Ваш проект средства, но им нужно доказать «как Вашу состоятельность, так и состоятельность Вашего проекта». А, имея мешок идей и ничего за плечами — есть большая вероятность, что в «Вас Не Поверят». Как начать, не имея стартового капитала?
                                Читать дальше →
                              • AMQP-REST

                                  про AMQP говорили много. Очередная разработка, ориентированная на AJAX.
                                  Возможности:
                                  • читать из очереди одно сообщение
                                  • читать из очереди все сообщения
                                  • узнать длинну очереди
                                  • публиковать сообщение в обмен

                                  Данные возвращаются в JSON.
                                  Читать дальше →
                                • Служба мгновенных собщений своими руками

                                    Все мы привыкли пользоваться аськой, многие этот функционал реализуют в своих проектах, кто-то использует БД, или сервер очередей, например memcacheq. Есть готовые решения, типа eJabber.

                                    Если интересно, как можно сделать это самому, то wellcom под каст, где будет рассмотрена серверная часть «Службы мгновенных сообщений». С клиентской, я надеюсь, разберетесь сами…
                                    Читать дальше →
                                  • Lib amqpcpp wrapper for librabbitmq

                                      За последние полтора года активно набирает популярность Сервер очередей RabbitMQ, который работает по протоколу AMQP. Про данный протокол уже было достаточно статей на Хабре. В инструментарии есть библиотека librabbitmq

                                      На основе этой библиотеке выложил в Google Code проект С++ библиотеки amqpcpp, которая является упрощенным интерфейсом к librabbitmq. Документации нет, примеров использования в дистрибутиве только три. Под кастом краткое изложение АПИ и примеры ее использования. Использование стало проще.
                                      Читать дальше →