|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
Здравствуйте! Столкнулся с такой проблемой. Планируется разработать ИС с числом пользователей ~25к (тонкие клиенты, вначале их будет меньше, чем 25к, но не суть важно). Также помимо тонких клиентов планируется web-интерфейс с аналогичными функциями. Задача состоит в основном в назначении заданий, разбитых по группам (т.е. в базе будут храниться задания 25 тыщ юзеров, группы заданий, данные юзеров, ну и некоторые служебные данные). Юзеры могут назначать задания, создавать группы и т.д. Не знаю как решить вопрос масштабируемости, тк опыта проектирования высоконагруженных систем у меня, к сожалению, нет. Читал разные статьи, но всё равно в голове каша. В данный момент приблизительный состав системы такой: MongoDB стоит на отдельном сервере, в нём задания, группы заданий и данные юзеров. Думаю хранить группу со вложенными заданиями в одной записи. На другом сервере поднят web. Сервер приложений делать не планируется, тк все действия ограничены CRUD. Цeль: Разобраться и сделать полностью рабочую систему, чтобы всё стабильно работало и были обеспечены приемлемые задержки для юзеров (не более 1с.). Непонятны такие моменты: - Нужно ли для системы с такой нагрузкой ставить load balancer? (не знаю даже приблизительных цифр, в каком случае он нужен) - Нужно ли делать репликацию базы Mongo, с 2 серверами Master и Slave (больше серверов не потяну по фин. соображениям)? - Стоит ли данные юзеров дублировать на Web-Сервере, чтобы снизить нагрузку на основную БД? Прошу советов по части вышеизложенного. Ну или хотя бы правильных ссылок. Зараннее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2011, 19:55 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
erlang посмотрите. Недавно смотрел диплом, там похожая задача была решена. Только ПО - игры на Flash. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2011, 22:18 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
Почитал про erlang, понравилось. Но непонята следующая вещь. Если каждый процесс будет подключаться к БД, то БД наверное не потянет. А если делать одно общее подключение в parent, то тоже не дело, будут задержки. Как быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2011, 19:02 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
Э, а где тут нагрузка? Информация по 25 000 пользователей - это копейки, тут лучше просто реляционную БД поставить. Даже если будут очень-очень активные пользователи , то получим где-то тысячу запросов в секунду в пиках, достаточно простых. Реально же, подозреваю, и десятка операций в секунду в пике не наберется. Но тут надо посмотреть на задачу внимательно. Я бы поставил приличную реляционную БД (ну, например, DB2 Express C), один сервер приложений (кэширование, бизнес-логика, работа с правами доступа и т.д.). Если с железом плохо, а нагрузки очень большие - то java. Если все не так плохо - то можно и какой-нибудь python. Ну и для веб-клиентов - еще и веб-сервис (тонкие клиенты ходят напрямую к серверу приложений). В общем, все достаточно там просто, думать особо не надо, никаких извращений с Erlang и MongoDB не требуется. Если нужна надежность - то средствами БД. Масштабируемость - в основном на уровне сервера приложений и кэширования данных. А вообще - можно хоть на PHP делать, взлетит... Это дипломная работа или коммерческий проект? Если второе - то найдите консультанта с опытом. Денег потратите гораздо меньше, чем выкинете на всякие экзотические решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2011, 04:21 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
rustyhexНо непонята следующая вещь. Если каждый процесс будет подключаться к БД, то БД наверное не потянет. А если делать одно общее подключение в parent, то тоже не дело, будут задержки. Как быть? Ну уж это-то совсем не проблема. Тут всё давно уже придумали: раз два - более общая идея. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2011, 09:41 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
rustyhex, И, кстати, мне кажется, что тут надо не просто число пользователей смотреть. Их хоть миллион может быть - и БД потянет и остальное. Вопрос, скорее, в том, сколько одновременных запросов может быть и насколько они могут быть тяжелыми в единицу времени. Т.е., подход DPH3 именно то, что нужно. Единственно что, DPH3 сделал какие-то предположения, не будучи полностью в курсе Вашей ситуации - просто нет информации. Но у Вас она должна быть, хотя бы в и в оценочном виде. Если у Вас появятся такие оценки, то вполне реально сделать прототип и прогнать его через Web Stress, например. Сразу станут понятны узкие моменты. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2011, 09:48 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
Насчёт пулов спасибо, видел такое в сурцах апача, просто даже не вспомнил про них в данном контексте, все мысли были erlang'oм забиты :) Уважаемый DPH3, подскажите, пожалуйста, что вы понимаете под "приличной" БД. И чем DB2 лучше PostgreSQL помимо повышенного внимания к безопасности и улучшенной обработки ошибок? И ещё, если мне не изменяет память, репликация поддерживается только в коммерческих версиях DB2. Поправьте, если ошибаюсь. И насчёт java, её виртуальная машина довольно тормозная (насколько я знаю), как она поможет справиться с нагрузками? JIT-компиляция конечно здорово, но для того же python есть psyco. Цель не просто сделать "чтобы работало хоть как-то", а разобраться самому во всех аспектах. Всем спасибо за ценные советы! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2011, 22:30 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
rustyhex, Приличная - это с нормальным оптимизатором запросов и надежная. Т.е. из большой тройки + Postgress + Informix. Может, еще кто-то справиться. У DB2 очень хороший оптимизатор, очень хороший SQL, куча удобных для трехзвенки фенечек, при этом она проста в настройке и бесплатная версия дает достаточно функциональности (и без ограничения на объем БД). Если же покупать годовую поддержку (2K$ в год, т.е. мелочи), то это еще и HADR и репликация. По сравнению с Postgress - хороший оптимизатор, вылизанная репликация и HADR(аналог появился только в 9ке и опыта использования пока нет), простота администрирования, несколько очень специальных фенечек, удобных для трехзвенки. Но если есть опыт использования Postgress - то стоит брать его. Если опыта работы с БД нет - то лучше DB2. Про Java. Не знаю, откуда вы услышали про тормознутость виртуальной машины Java, первый раз про такое слышу. Все остальные виртуальные машины - точно хуже, да и значительная часть компилированных языков дают производительность не лучше. Основные плюсы Java - под нее уже есть много всякого хорошего, при этом язык стимулирует писать приличный код и популярна. Erlang сам по себе, кстати, дает производительность меньше, нежели Java, выигрыш (в некоторых применениях) у приложений Erlang скорее за счет другой архитектуры решений. Расскажите про задачу поподробнее, может там и есть подводные камни, которые требуют действительно экстремальной производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2011, 02:44 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
Задача в общем-то не очень сложная. Клиенты проходят аутентификацию на сервере приложений и шлют ему шифрованные данные в JSON. Шифроваться всё будет асимметричным алгоритмом шифрования (есть опасения насчёт загрузки CPU). Сервер приложений скидывает всё это в БД 25к юзеров. Возьмём среднего юзера - 100 операций записи за 8 часов (за 28800 сек). Итого: 25000 * 100 / 28800 = 86,8 оп/сек. Ну для начала можно взять в 2 раза меньше - 12500 юзеров, а проблему их увеличения решить с помощью вертикального масштабирования. Т.е. будет 44 операции записи. Запросы несложные - будут сообщения юзеров, отсортированные по группам. Несколько групп будут в одной учётной записи. Клиентам надо выдавать новые сообщения в группе, но только тем, которые вошли и имеют право на доступ к данной группе. Сами сообщения локально хранятся у клиентов и будут периодически синхронизироваться с базой. Один человек посоветовал мне хранить каждую группу заданий в отдельной табблице. И сделать одну большую таблицу для всех групп, с полем, в котором будет название таблицы. Как вы на это смотрите? И вопрос насчёт mysql, чем он плох? С xtradb (форк innodb) говорят хорош. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2011, 22:21 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
Забыл добавить, главная проблема заключается в сервере приложений. Точнее в том, как проверять, появились ли новые сообщение. Пока такой вариант: клиент периодически подключается и проверяет по дате обновления группы время последней модификации. Данная схема выбрана, тк у клиента нет постоянного выхода в инет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2011, 23:37 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
Возьмет JMS - там реализация очередей с поддержкой персистентности сообщений (то что вам и надо) есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2011, 23:01 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
>rustyhex, 9 фев 11, 19:55 [10210929] >Столкнулся с такой проблемой ... Посмотрите здесь вариант построения многоуровневой-распределенной-защищенной-масштабируемой информационной системы. Прототип имеет серьезный недостаток - сложность. С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2011, 23:29 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
ВМоисеевсерьезный недостаток - сложность. это самый главный недостаток. ВМоисеев, удалось за это время превратить прототип в действующих образец? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2011, 23:33 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
rustyhexКлиенты проходят аутентификацию на сервере приложений А как именно они аутентифицируются? Шифроваться всё будет асимметричным алгоритмом шифрования (есть опасения насчёт загрузки CPU). А чем https не устроил? Тогда и с CPU проблем не будет. Сервер приложений скидывает всё это в БД Без кэширования? И это все, что делает БД? По идее, проверку прав тоже лучше делать на AppLayer. Как и кэширование данных по группам. Ну для начала можно взять в 2 раза меньше - 12500 юзеров, а проблему их увеличения решить с помощью вертикального масштабирования. Т.е. будет 44 операции записи. Операции записи очень плохо "вертикально масштабируются". И не стоит считать, что все действия среднего юзера в течении дня будут равномерно распределены по рабочему времени, стоит прикинуть нагрузку в пиках и подумать, что с ней делать. Запросы несложные - будут сообщения юзеров, отсортированные по группам. Несколько групп будут в одной учётной записи. Клиентам надо выдавать новые сообщения в группе, но только тем, которые вошли и имеют право на доступ к данной группе. Сами сообщения локально хранятся у клиентов и будут периодически синхронизироваться с базой. Хм. А может взять какой-нибудь ejabberd и просто его настроить для этих задач? Ну или любой другой мессенджер. А то задача то стандартная неимоверно. Один человек посоветовал мне хранить каждую группу заданий в отдельной табблице. И сделать одну большую таблицу для всех групп, с полем, в котором будет название таблицы. Как вы на это смотрите? Глупость. Динамические запросы стоят заметно дороже (а в таком варианте придется делать именно динамический SQL). Да и непонятно, а что в такой схеме вообще будет выигрываться. И вопрос насчёт mysql, чем он плох? С xtradb (форк innodb) говорят хорош. Э, а чем он хорош? Впрочем, пока нет цифр о требуемой надежности и безопасности, выбирать БД рановато. Но я бы с MySQL для этой задачи не связывался, делать на нем очереди довольно неудобно.... Пока такой вариант: клиент периодически подключается и проверяет по дате обновления группы время последней модификации. Ну, вполне нормально, если не раз в секунду клиент будет соединяться. Раз в минуту - уже нормально. Но вообще соединение - это дорогая операция. И - лучше не по дате обновления, а по номеру последнего сообщения, это надежнее и не зависит от правильности выставления даты на клиенте. Возьмет JMS - там реализация очередей с поддержкой персистентности сообщений (то что вам и надо) есть. JMS - это, все-таки, стандарт на работу с очередями из Java. Реализаций JMS довольно много, можно найти подходящую. Вообще, работу с очередями не так уж и сложно реализовать в БД (впрочем, в MySQL - сложно). Ну а то, что там предлагали на .Net - это что-то совсем странное и для каких-то непонятных целей. Впрочем, так как проект так и не закончен и документации нет, то и смотреть туда не стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2011, 18:05 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
>DPH3, вчера, 18:05 [10234355] >... Ну а то, что там предлагали на .Net ...так как проект так и не закончен ...то и смотреть туда не стоит. Странное умозаключение. По ссылке есть две статьи, достаточно подробно расписывают схему построения прототипа. На сайте лежат также два проекта на C# VS 2010. Есть проект клиентского приложения и проект сервера приложений. Нужна соответствующей сложности задача, точнее какой-либо серьезный проект (в смысле заказчика и в смысле бабок) для создания программной системы по схеме прототипа (не палить же из пушки по воробьям). Но одному подобную схему не осилить за разумные сроки. С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2011, 12:59 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
ВМоисеев, Ну как-бы так помягче сказать... Распределенные нагруженные системы - вещь, на самом-то деле, довольно простая. И если за три года не удалось сделать рабочего прототипа и просчитать нагрузку - это говорит уже о многом. Ну и почитав статьи - становится понятно, что представления о том, как делаются надежные, нагруженные и масштабируемые системы у автора нет. Многие существенные проблемы даже не рассматриваются, а вот всяким несущественным мелочам типа организации транспорта и низкоуровнего протокола придается большое значение. Впрочем, .Net - не самый лучший инструмент для подобных задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2011, 14:37 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
rustyhex, возьмите любую пристойную СУБД, желательно с HTTP-сервером в том же процессе, и не занимайтесь экзотикой. Которую из таких СУБД лучше знаете --- на той и пишите. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2011, 23:03 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
iv_an_ruпристойную СУБД, желательно с HTTP-сервером в том же процессе Ой, а в чем смысл HTTP-сервера в том же процессе? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2011, 12:28 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
DPH3iv_an_ruпристойную СУБД, желательно с HTTP-сервером в том же процессе Ой, а в чем смысл HTTP-сервера в том же процессе?На IPC экономить, вестимо. Особенно если число одновременно окучиваемых веб-клиентов в разы больше числа процессорных ядер. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2011, 12:37 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
iv_an_ru, Хм, для подобной задачи, подозреваю, расходы на IPC будут, прямо скажем, не слишком заметны. Тут даже обмен в локальной сети с БД не окажет существенного влияния на скорость. Генерация html-контента и работа с жестким диском потребуют заметно больше ресурсов. А где http-сервер встроен прямо в процесс БД? И как там решают проблемы безопасности этого процесса, например? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2011, 13:02 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
>DPH3, вчера, 14:37 [10238710] > ...Распределенные нагруженные системы ... Ну и почитав статьи ... Батенька, позвольте полюбопытстствовать, кто Вы - академик или студент? Дайте ссылочку на Выши труды в этой области. С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2011, 21:03 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
ВМоисеев, Ну, например, http://download.yandex.ru/company/experience/rit2008/highload_philipp.pdf Остальное, если нужно, сами найдете, занятие не сложное... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2011, 23:20 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
DPH3например, http://download.yandex.ru/company/experience/rit2008/highload_philipp.pdf Речь идет об web online системах в документе. Не расшифруете, что в этом разрезе понимается под "сложной бизнес-логикой", или, если можно адрес такой системы, чтобы посмотреть. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2011, 23:43 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
или речь идет о сложности реализации? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2011, 23:45 |
|
Разработка масштабируемой ИС
|
|||
---|---|---|---|
#18+
iscrafm, Лучше найдите запись доклада, в инете где-то есть. Все-таки, слайды презентации - это только вспомогательный текст. А рассматриваемые системы - почти любые, где одновременно и (относительно) высокая нагрузка и сложная бизнес-логика. Из того, что запомнилось из сделаного лично - букмекерская система (с всевозможным риск-менеджментом, где как раз сложность в основном и живет). Но в докладе, понятное дело, не только мой опыт суммирован, темой то давно занимаюсь, так что поанализировать есть что. Как раз про Web в докладе довольно мало (хотя по большей части интересная нагрузка вылезает именно в таких задачах (ну и в научных, разумеется - но вот тут как раз опыта нет). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2011, 23:59 |
|
|
start [/forum/topic.php?fid=33&msg=37114145&tid=1548092]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
125ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 228ms |
0 / 0 |