company_banner
  • Judy-массивы в PHP

      В Badoo используется много сервисов на C и C++, большинство из которых работают с огромными объёмами данных. Как правило, сервисы выступают в роли «быстрого кэша» или «быстрой базы данных», т.е. совершают различные операции с массивами однотипных данных. Для быстрого доступа к данным мы давно и успешно используем Judy-массивы (англ. Judy arrays). Но однажды нам захотелось странного: обрабатывать большие массивы целых чисел на PHP, и мы сразу вспомнили про Judy.

      Немного истории

      Judy-массивы были изобретены Дугласом Баскинсом (англ. Douglas Baskins) в начале 2000-го года. Проект их разработки финансировался компанией HP, но примерно через два года был закрыт. За это время было выпущено четыре версии, причём разработка последней заняла больше года, и в ней разработчики смогли в два раза ускорить Judy, в два раза уменьшить потребление памяти, хоть и далось это нелёгкой ценой: объём кода вырос в 5 раз, а его сложность  ― на порядок.
      Читать дальше →
    • Проверь Badoo на прочность! Месяц поиска уязвимостей

        Компания Badoo, вслед за своими коллегами ― крупнейшими представителями IT-индустрии, такими как Google, Facebook и Яндекс, начинает платить за найденные уязвимости. Мы объявляем конкурс «Проверь Badoo на прочность!», который стартует 19 марта и продлится ровно месяц.

        Участвовать в конкурсе могут все желающие, кроме сотрудников Badoo. Каждый участник может отправить любое количество заявок.
        Участники обязуются сохранять найденные уязвимости в тайне до тех пор, пока Badoo не сообщит об их исправлении в таблице заявок, но не дольше чем до 31 мая 2013 года.
        Мы платим за все найденные новые уязвимости.
        Уязвимости будут ранжированы от 5-й (500 фунтов стерлингов) до 1-й категории (50 фунтов стерлингов) в зависимости от их критичности. Категорию критичности определяет жюри конкурса.

        К тому же у нас есть специальный приз! По итогам конкурса 3 самых активных участника получат по 1000 фунтов. Если вы нашли что-то очень серьезное, то мы можем выдать супер-премию выше 500 фунтов.
        Читать дальше →
      • Процесс разработки в Badoo

          Сегодня мы проведём экскурсию по цеху разработки Badoo, в котором создаётся новый функционал нашего сайта, расскажем о самом процессе — от постановки задачи и до момента выкладки в боевое окружение.

          За время существования компании её рабочий процесс эволюционировал от стохастического к хорошо контролируемому и понятному. Ещё полтора-два года назад никто точно не мог ответить на вопрос, какие задачи попали в сегодняшнюю выкладку, а менеджер опрашивал программистов, кто и что выложил. Сейчас же процесс максимально автоматизирован, таск-трекер тесно связан с системой контроля версий, задачи проходят несколько стадий проверки. При этом сохранилась высокая скорость разработки: нормальной считается ситуация, когда задача появилась утром, а после обеда новый функционал уже доступен пользователям на сайте.
          Что ж, пройдём?
        • AIDA. Автоматизация работы с Git, JIRA и TeamCity

            При разработке и тестировании какого-либо продукта появляется много рутинной работы. Чтобы избежать ошибок, связанных с человеческим фактором, мы используем AIDA.

            AIDA (англ. Automated Interactive Deploy Assistant) — это учётная запись, значительно облегчающая работу с Git, TeamCity и JIRA.
            Сегодня речь пойдет о том, как с её помощью нам удалось автоматизировать многие рабочие процессы.

            В первую очередь мы вспомним об используемой в Badoo системе контроля версий, далее расскажем о том, как было автоматизировано создание веток релиза и осуществлено автоматическое слияние веток в Git, поговорим о существенной помощи AIDA в работе с JIRA (контроль и изменение статуса задач, заполнение полей) и ТeamCity (непрерывная интеграция и развёртывание на тестовое окружение).
            Читать дальше →
          • Москва или Лондон – где вечеринка лучше?

              В этом году в Badoo по традиции состоялись две рождественские вечеринки, одна в Москве, а вторая в Лондоне. Но в этот раз на обеих велась видеосъёмка.

              Скажите, какая из двух вечеринок вам нравится больше?

              Лондон:

              Посмотреть видео из Москвы
            • Автоматизированный рефакторинг в большом проекте

                Если вы работаете в большой команде разработчиков над одним и тем же проектом, то рефакторинг становится очень сложной задачей. Приведем пример: мы хотим переименовать функцию do_something() в do_something_with_blackjack(). Мы переименовали все вхождения этой функции в своей ветке и отправили задачу на тестирование. В тот же момент кто-то другой добавил ещё один вызов функции, но со старым названием, тоже в своей ветке. По отдельности наборы изменений будут работать, а вот после слияния получится ошибка.

                В статье будет рассмотрен приём, который можно назвать «автоматизированный рефакторинг» — использование самописных скриптов, которые делают нужную работу за вас, позволяя провести рефакторинг после слияния всех веток и перед непосредственной выкладкой на staging/production.

                На примере phpBB будет показано, как можно «отрефакторить» вызовы SQL-запросов, чтобы они использовали автоматическое экранирование входных данных (и таким образом помочь в решении проблемы SQL-инъекций).
                Читать дальше →
              • Внутреннее устройство Git: хранение данных и merge

                  В процессе перехода с SVN на Git мы столкнулись с необходимостью переписывания наших внутренних инструментов, связанных с развёртыванием кода, которые ориентировались на существование линейной истории правок (и разработку в trunk). На Хабре уже публиковались возможные решения этой проблемы через Git-SVN, но мы пошли другим путём. Нам нужна поддержка таких возможностей Git, как branching и merge, поэтому мы решили разобраться в основах, как же работает Git и каким способом должна осуществляться интеграция с ним.
                  Читать дальше →
                • Надежный код при высоких нагрузках

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

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

                      Puppet — довольно удобный инструмент для управления конфигурациями. По сути, это система, которая позволяет автоматизировать настройку и управление большим парком машин и сервисов.

                      Базовой информации о самой системе много, в том числе и на Хабре: здесь, здесь и здесь. Мы же постарались собрать в одной статье несколько «рецептов» использования Puppet под действительно большими нагрузками — в «боевых условиях» Badoo.

                      О чём пойдет речь:

                      • Puppet: ликбез;
                      • кластеризация, масштабирование;
                      • асинхронный Storeconfigs;
                      • сбор отчётов;
                      • анализ полученных данных.

                      Читать дальше →
                    • Мониторинг производительности PHP-кода с помощью Pinba

                        Давайте представим себе типичный, набирающий популярность стартап, использующий, например, PHP или Python. Сначала все находится на одном сервере — PHP (или Python), Apache, MySQL. Затем вы выносите MySQL на отдельный сервер, устанавливаете nginx для раздачи контента, возможно, добавляете memcached для кеширования и еще несколько серверов приложений…

                        Со временем число серверов будет расти, и рано или поздно вы зададитесь вопросами
                        «А что сейчас вообще происходит с системой? Как часто выполняется тот или иной скрипт и как долго? Какие операции занимают большую часть времени?» Системы мониторинга типа Zabbix дают лишь общую, поверхностную картину состояния приложения.

                        Чтобы получить ответы на эти вопросы, в Badoo был разработан сервиc мониторинга и статистики в реальном времени — Pinba. В данной статье мы расскажем о нашем опыте использования его для мониторинга и профайлинга нашей системы.
                        Читать дальше →

                      Самое читаемое