Baddo бд сайт знакомств

About Badoo company / Habr

baddo бд сайт знакомств

статей от авторов компании Badoo. Big Dating баз данных без даунтайма на примере самой нагруженной БД в Badoo .. Сайт. spanglers.info 2) Сайты знакомств: badoo loveplanet tinder. Я заметил, что множество сайтов знакомств использует одну и ту же БД, и у меня. В году он создал сайт spanglers.info и одноименную фирму со от « Мамбы» сотни сайтов знакомств, включая принадлежащие где за абонентскую плату получаешь доступ к базе данных, — объясняет он.

Неинвазивные оптимизации Любые изменения структуры большой и нагруженной базы данных обходятся довольно дорого из-за сложности процесса миграции данных. Поэтому прежде всего следует исчерпать все варианты оптимизаций, которые не затрагивают структуру данных, а ограничиваются кодом и SQL- запросами. Возможно, этого будет достаточно, чтобы отодвинуть проблему чрезмерной нагрузки на пару лет, что позволит вам в это время заняться чем-то более важным для бизнеса. Чем лучше вы понимаете вашу систему, тем проще вам будет найти подходы для подобных оптимизаций.

Убедитесь, что вы собираете все метрики, которые могут вам помочь. Речь идёт не только о системных метриках вроде CPU usage и RAM usage или метриках конкретной БД, но и о application-level метриках приложения, которое завязано на оптимизируемой базе данных.

Сколько запросов в секунду у разных типов операций? Какое у них время отклика? Каков размер входных и выходных данных?

baddo бд сайт знакомств

Именно по этим метрикам вы сможете судить об успешности проведённых оптимизаций. Вряд ли вам нужна оптимизация, которая немного снизит CPU usage на сервере БД, но при этом увеличит время отклика вашего приложения в десять. Анализ другой частой операции показал, что, несмотря на то, что она выполняется на каждый HTTP-запрос, в реальности данные, которые она извлекает, используются крайне редко. Мы перевели этот запрос на ленивую модель.

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

И вам вряд ли захочется узнать об этом только после проведения долгой миграции данных на продакшене. Чем ближе конфигурация вашего стенда будет к конфигурации продакшена, тем более надёжные вы получите результаты. Важным моментом является и обеспечение правильной нагрузки стенда.

Badoo, Москва - Big Dating / Статьи / Хабр

Прогон случайных или одних и тех же запросов может привести к недостоверным результатам. Наилучший вариант — использование реальных запросов с продакшена. За сутки мы собрали лог размером 65 Гб из млн запросов.

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

Однако в вашем случае это может быть не. Если вы хотите нагружать тестовый стенд запросами на запись, придётся собирать каждый запрос, так как пропуск запросов на запись может привести к ошибкам консистентности на тестовом стенде. Следующий этап — это корректно проиграть лог на стенде. Мы использовали воркеров на PHP, запущенных из нашего скриптового облакакоторые читают собранный лог из быстрой очереди и последовательно выполняют запросы.

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

Миллиард за знакомство

Этим же инструментарием можно воспользоваться, чтобы провести тест на отказ: Это даст вам чёткое понимание того, сколько ещё нагрузки может выдержать ваша БД.

После тестирования новой схемы данных важно также провести контрольный тест на оригинальной структуре БД. Если его результаты и текущие показатели на продакшене сильно различаются, прежде всего следует разобраться в причинах.

Возможно, тестовый сервер сконфигурирован некорректно и данным нагрузочного тестирования нельзя доверять. Также стоит убедиться в том, что новый код работает корректно. Нет особого смысла тестировать производительность запросов, которые не выполняют нужную работу. Хорошую службу вам сослужат интеграционные тесты, которые проверяют, возвращают ли старый и новый API одинаковые значения на одни и те же вызовы API.

После получения результатов по всем идеям остаётся только выбрать варианты с наилучшим соотношением между ценой и качеством и внедрить новую схему на продакшене.

ПРИТВОРИЛСЯ ДЕВУШКОЙ В БАДУ - Веб-Шпион #1

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

В случае с UDB мы, к сожалению, такое позволить себе не. Второй фактор, влияющий на сложность изменения схемы, — это планируемый масштаб изменений. Если все предполагаемые изменения таблиц не выходят за рамки просто альтера например, добавление пары новых индексов или колонокто их можно провернуть типовыми процессами вроде pt-online-schema-change и gh-ost для MySQL или альтером слейва с последующей сменой их местами.

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

baddo бд сайт знакомств

Так что же делать? Мы применили следующий алгоритм: Добиваемся состояния, когда одновременно существуют старая и новая схемы с актуальными данными. Стоит немного сказать о том, что такое push-уведомления.

Каждое приложение для iOS имеет возможность присылать вам уведомления, даже когда оно не запущено конечно, если вы это не запретите.

Система офлайн-уведомлений Badoo / Блог компании Badoo / Хабр

Доставка уведомлений в таком случае осуществляется через сервера Apple, а не напрямую. Когда вы устанавливаете приложение на свой iPhone, Apple сообщает разработчику идентификатор установленного приложения в своей системе, который мы используем как адрес для отправки сообщений. Такая же система существует и для Android-смартфонов, но доставка уже осуществляется через сервера Google.

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

Общая логика такова, что есть уведомления, содержащие информацию только об одном типе событий 2 посетителя, 5 сообщений и. Для электронных писем существует несколько отдельных шаблонов о новых сообщениях, посетителях и. Для push-уведомлений мы составили тексты на каждый отдельный тип событий в нескольких вариантах. Уведомления для iOS отличаются от Android тем, что последние могут иметь заголовок, текст и картинку, а первые только текст, но большей длины.

Как устроена архитектура системы? С одной стороны, во время использования сайта пользователи генерируют события, которые сразу же добавляются в БД. На графике можно увидеть соотношение событий за 24 часа в одном из двух наших дата-центров точные цифры на графиках попросили не публиковать: С другой стороны, на нескольких серверах непрерывно запущен php-скрипт, который постоянно опрашивает БД, есть ли уведомления, время отправки которых уже подошло. Ниже можно увидеть график количества пользователей, для которых готовы уведомления: Если нужно отправить уведомление на смартфон, то запись в БД помечается специальным флагом и откладывается на 10 минут.

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

При каждом запросе страницы от зарегистрированного пользователя мы посылаем команду в БД для очистки всех его событий.

Бывает так, что пользователь попал на промо-страницу и, не увидев ничего нового, ушёл с сайта. На таких страницах, где видны не все счетчики новых событий, мы указываем, какие конкретно события нужно чистить.

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

Для того чтобы отправлять уведомления, используется более сложная логика определения онлайн-статуса. Сначала мы проверяем Last Access: