высоко нагруженный проект. 10млн. запросов в сутки. балансировка.

MiksIr

miksir@home:~$
> репликация vs кластер. холивар?

не, плавание в терминологии ;) не стоит оперировать общими терминами в применении к частным технологиям (таким как MySQL Cluster и MySQL Replication) =)

А насчет мускуля конкретно если.... вроде как MySQL Cluster - это синхронный мультимастер? Или я что-то путаю? ;)

-~{}~ 25.08.08 18:59:

Угу
In short, whereas standard MySQL replication is asynchronous, MySQL Cluster is synchronous.
Если хорошо живется с асинхронной репликацией, то не нужна тебе синхронная репликация. Она, конечно, удобна, но по определению менее производительная.
 

Wicked

Новичок
- ноды - обычные стоечные сервера. 2 проца, 4 ядра, 4Г памяти. быстрые винты. суть в том, что нода должна быть стандартной. нужно новая нода. воткнул обычный сервер. поствил софтинку и все зажило с новой нодой.
это не всегда работает, потому что у серверов может быть разная специализация:
бд - оперативка, проц, быстрый io
файлер - много места
бэкенд - оперативка, проц
и т.д.

-~{}~ 25.08.08 22:15:

проект - продажа трафика, т.е. кликов/переходов.
еще подробнее :)

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

fixxxer

К.О.
Партнер клуба
+1

чота мне кажется что тут в реальном времени не нужно трогать базу ваще
как вариант - простой мультиплексирующий счетчик на основе того же tdb и общаться с ним по memcached протоколу из nginx
 

440hz

php.ru
подробнее

1. архитектура только проектируется и есть (у меня) уникальная возможность _сделать_грамотно_ с нуля что б потом, когда нагрузки вырастут до ожидаемых 10-50 лимонов система жила и дальше и легко(условно) масштабировалась (кол-во нод не ограничено) даже когда я уйду из проекта и новый человек мог все это поддерживать и радоваться а не ^$%$#$%#$ с "тяжелыми SQL звпросами и не выслушивать от менеджеров совету по улучшению системы т.д.". ну вы поняли...
=)

2. продажа трафика по сути редирект. на сайте продавца стоит определенный линк типа domain.com/in/?id=12345. переход по нему уводит на сайт покупателя (location: domain.com) а вот этот клик я и засчитываю, заношу в базу и потом обрабатываю и строю по ним статистику по часам. подбор куда перейти осуществляется по мноооогим параметрам начиная от страны заканчивая временем перехода.

3. 99% нагрузки на систему составляет именно эти клики/переходы. подобрать наиболее правильную/выгодную продажу основная задача такой системы. с учетом того, что параметров продажи/покупки около 15 и продавцов/покупателей около 20000, то масштабы вы себе представляете.

4. вот и надо сделать так что б система была масштабируемой и при выходе одной ноды не валилось все к чертям и меня не дергали в 3 часа ночи из за падения одного сервера из 20.

5. как разбалансить сам траф по http-нодам я умею, а вот как сделать отказоустойчивую MySQL базу пока не очень. Кластер мне очень нравится т.к. именно в нем отказ одной ноды не ведет к краху системы.

6. memcache знаю не по нслышке.
7. master-slave делал на боевых решениях, но тут ИМХО мне кажется должно быть что-то иное...

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

=============
- решения НЕ на MySQL пока не рассматриваются в силу моей малой грамотности в этих вопросах.
- да.да. порнотраф, а вы что думали? =)
 

Wicked

Новичок
3. 99% нагрузки на систему составляет именно эти клики/переходы. подобрать наиболее правильную/выгодную продажу основная задача такой системы. с учетом того, что параметров продажи/покупки около 15 и продавцов/покупателей около 20000, то масштабы вы себе представляете.
Насколько трудоёмкий этот выбор? Как его можно оптимизировать? Сколько можно выиграть, если позволять там себе разные допущения: неоптимальность цены клика в среднем порядка 10%, не очень четкая зависимость от времени суток, и т.д.? Можно ли запаздывать с показом статистики минут на дцать?

Если удастся сократить выбор ссылки до очень маленького времени, то можно поднять вот такой демон - http://www.chabotc.com/phpsocketdaemon/. Будучи урезанным до функционала отдачи статичной строки при приеме подобной же, оно на моей домашней тачке (одноядерный athlon 3200+), выступая одновременно в качестве и сервера, и клиента, обслуживает само себя со скоростью 7000 запросов в секунду :) Если у тебя будет парсинг заголовков http-запроса, это упадет где-то до 1000, что все равно довольно вкусная цифра. Но, поскольку все это выполняется в одном процессе и в одном треде, то там не должно быть никаких тяжелых и блокирующих операций, в том числе сложной логики подбора ссылки для отдачи.

Сама регистрация клика делается после того, как все отдалось клиенту, причем базу при этом трогать явно не рекомендуется. Пиши в локальные файлы. (если все-таки будешь это делать на fastcgi+fpm - http://php-fpm.anight.org/extra_features.html#fastcgi_finish_request )

Обработка и агрегация логов делается исключительно в оффлайне. Если ты _смелый_, можешь попробовать решать ее с помощью какого-нибудь MapReduce framework'а типа Hadoop ( http://www.insight-it.ru/tag/mapreduce/ - для ознакомления). Но это уже другая история .-)

4. вот и надо сделать так что б система была масштабируемой и при выходе одной ноды не валилось все к чертям и меня не дергали в 3 часа ночи из за падения одного сервера из 20.

5. как разбалансить сам траф по http-нодам я умею, а вот как сделать отказоустойчивую MySQL базу пока не очень. Кластер мне очень нравится т.к. именно в нем отказ одной ноды не ведет к краху системы.
Под "одной нодой" понимется ndb management server?

Для HA есть неплохое решение на основе репликации - http://code.google.com/p/mysql-master-master/ . Вкратце, в минимальной конфигурации: поднимается 2 сервера mysql, master-slave и одна машина с MMM, который следит за теми mysql-машинками. Как только mysql-master выходит из строя, его роль и ip берет на себя slave. Когда бывший мастер поднимается обратно, он становится слейвом для текущего мастера. И т.д.

-~{}~ 26.08.08 13:16:

вообще, кстати...
некоторое время назад я пришел к выводу, что отдельные части подобных систем нужно пытаться описать в рамках требуемых для них throughput, latency и объемов данных.

агрегация логов (формирование статистики) - по большей части - (большие?) объемы данных, high throughput и 15 minutes latency;
отдача ссылки - low latency;
отдача готовой статистики - medium latency;
и т.д.
Лично мне в таких терминах потом думается куда легче, потому что разные практики и готовые решения для решаемых задач тоже можно так описать:
мультиплексирование, memcache, ... - это обычно нужно для low latency;
mapreduce, hadoop - throughput;
всякие DFS, hybertable, hbase - объемы данных;

А mysql с этой точки зрения, наверное, ни рыба, ни мясо :)

Надеюсь, кому-нибудь эти мои размышления покажутся полезными.
 

440hz

php.ru
Автор оригинала: fixxxer
сиджы чтоле :)
оно само.

-~{}~ 26.08.08 10:56:

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

можно ли на каждой ноде иметь API кластера?
 
Сверху