powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Разработка масштабируемой ИС
25 сообщений из 42, страница 1 из 2
Разработка масштабируемой ИС
    #37107731
rustyhex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Столкнулся с такой проблемой. Планируется разработать ИС с числом пользователей ~25к (тонкие клиенты, вначале их будет меньше, чем 25к, но не суть важно). Также помимо тонких клиентов планируется web-интерфейс с аналогичными функциями. Задача состоит в основном в назначении заданий, разбитых по группам (т.е. в базе будут храниться задания 25 тыщ юзеров, группы заданий, данные юзеров, ну и некоторые служебные данные). Юзеры могут назначать задания, создавать группы и т.д.

Не знаю как решить вопрос масштабируемости, тк опыта проектирования высоконагруженных систем у меня, к сожалению, нет. Читал разные статьи, но всё равно в голове каша.

В данный момент приблизительный состав системы такой:
MongoDB стоит на отдельном сервере, в нём задания, группы заданий и данные юзеров.
Думаю хранить группу со вложенными заданиями в одной записи.
На другом сервере поднят web. Сервер приложений делать не планируется, тк все действия ограничены CRUD.

Цeль: Разобраться и сделать полностью рабочую систему, чтобы всё стабильно работало и были обеспечены приемлемые задержки для юзеров (не более 1с.).

Непонятны такие моменты:

- Нужно ли для системы с такой нагрузкой ставить load balancer? (не знаю даже приблизительных цифр, в каком случае он нужен)
- Нужно ли делать репликацию базы Mongo, с 2 серверами Master и Slave (больше серверов не потяну по фин. соображениям)?
- Стоит ли данные юзеров дублировать на Web-Сервере, чтобы снизить нагрузку на основную БД?

Прошу советов по части вышеизложенного. Ну или хотя бы правильных ссылок. Зараннее спасибо!
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37107884
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erlang посмотрите. Недавно смотрел диплом, там похожая задача была решена. Только ПО - игры на Flash.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37109965
rustyhex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал про erlang, понравилось. Но непонята следующая вещь.
Если каждый процесс будет подключаться к БД, то БД наверное не потянет.
А если делать одно общее подключение в parent, то тоже не дело, будут задержки. Как быть?
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37110430
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Э, а где тут нагрузка?
Информация по 25 000 пользователей - это копейки, тут лучше просто реляционную БД поставить.
Даже если будут очень-очень активные пользователи , то получим где-то тысячу запросов в секунду в пиках, достаточно простых.
Реально же, подозреваю, и десятка операций в секунду в пике не наберется. Но тут надо посмотреть на задачу внимательно.

Я бы поставил
приличную реляционную БД (ну, например, DB2 Express C),
один сервер приложений (кэширование, бизнес-логика, работа с правами доступа и т.д.).
Если с железом плохо, а нагрузки очень большие - то java. Если все не так плохо - то можно и какой-нибудь python.
Ну и для веб-клиентов - еще и веб-сервис (тонкие клиенты ходят напрямую к серверу приложений).

В общем, все достаточно там просто, думать особо не надо, никаких извращений с Erlang и MongoDB не требуется.

Если нужна надежность - то средствами БД.
Масштабируемость - в основном на уровне сервера приложений и кэширования данных.

А вообще - можно хоть на PHP делать, взлетит...

Это дипломная работа или коммерческий проект? Если второе - то найдите консультанта с опытом. Денег потратите гораздо меньше, чем выкинете на всякие экзотические решения.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37110605
Hauer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rustyhexНо непонята следующая вещь.
Если каждый процесс будет подключаться к БД, то БД наверное не потянет.
А если делать одно общее подключение в parent, то тоже не дело, будут задержки. Как быть?

Ну уж это-то совсем не проблема. Тут всё давно уже придумали:

раз
два - более общая идея.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37110622
Hauer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rustyhex,

И, кстати, мне кажется, что тут надо не просто число пользователей смотреть. Их хоть миллион может быть - и БД потянет и остальное. Вопрос, скорее, в том, сколько одновременных запросов может быть и насколько они могут быть тяжелыми в единицу времени.
Т.е., подход DPH3 именно то, что нужно. Единственно что, DPH3 сделал какие-то предположения, не будучи полностью в курсе Вашей ситуации - просто нет информации. Но у Вас она должна быть, хотя бы в и в оценочном виде.

Если у Вас появятся такие оценки, то вполне реально сделать прототип и прогнать его через Web Stress, например. Сразу станут понятны узкие моменты.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37112613
rustyhex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчёт пулов спасибо, видел такое в сурцах апача, просто даже не вспомнил про них в данном контексте, все мысли были erlang'oм забиты :)

Уважаемый DPH3, подскажите, пожалуйста, что вы понимаете под "приличной" БД.
И чем DB2 лучше PostgreSQL помимо повышенного внимания к безопасности и улучшенной обработки ошибок?
И ещё, если мне не изменяет память, репликация поддерживается только в коммерческих версиях DB2. Поправьте, если ошибаюсь.

И насчёт java, её виртуальная машина довольно тормозная (насколько я знаю), как она поможет справиться с нагрузками? JIT-компиляция конечно здорово, но для того же python есть psyco.

Цель не просто сделать "чтобы работало хоть как-то", а разобраться самому во всех аспектах.

Всем спасибо за ценные советы!
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37112759
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rustyhex,

Приличная - это с нормальным оптимизатором запросов и надежная.
Т.е. из большой тройки + Postgress + Informix. Может, еще кто-то справиться.

У DB2 очень хороший оптимизатор, очень хороший SQL, куча удобных для трехзвенки фенечек, при этом она проста в настройке и бесплатная версия дает достаточно функциональности (и без ограничения на объем БД).
Если же покупать годовую поддержку (2K$ в год, т.е. мелочи), то это еще и HADR и репликация.

По сравнению с Postgress - хороший оптимизатор, вылизанная репликация и HADR(аналог появился только в 9ке и опыта использования пока нет), простота администрирования, несколько очень специальных фенечек, удобных для трехзвенки.

Но если есть опыт использования Postgress - то стоит брать его. Если опыта работы с БД нет - то лучше DB2.

Про Java.
Не знаю, откуда вы услышали про тормознутость виртуальной машины Java, первый раз про такое слышу. Все остальные виртуальные машины - точно хуже, да и значительная часть компилированных языков дают производительность не лучше.
Основные плюсы Java - под нее уже есть много всякого хорошего, при этом язык стимулирует писать приличный код и популярна.
Erlang сам по себе, кстати, дает производительность меньше, нежели Java, выигрыш (в некоторых применениях) у приложений Erlang скорее за счет другой архитектуры решений.

Расскажите про задачу поподробнее, может там и есть подводные камни, которые требуют действительно экстремальной производительности.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37113393
rustyhex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача в общем-то не очень сложная. Клиенты проходят аутентификацию на сервере приложений и шлют ему шифрованные данные в JSON. Шифроваться всё будет асимметричным алгоритмом шифрования (есть опасения насчёт загрузки CPU).
Сервер приложений скидывает всё это в БД

25к юзеров.
Возьмём среднего юзера - 100 операций записи за 8 часов (за 28800 сек). Итого: 25000 * 100 / 28800 = 86,8 оп/сек. Ну для начала можно взять в 2 раза меньше - 12500 юзеров, а проблему их увеличения решить с помощью вертикального масштабирования. Т.е. будет 44 операции записи.

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

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

И вопрос насчёт mysql, чем он плох? С xtradb (форк innodb) говорят хорош.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37113438
rustyhex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить, главная проблема заключается в сервере приложений. Точнее в том, как проверять, появились ли новые сообщение. Пока такой вариант: клиент периодически подключается и проверяет по дате обновления группы время последней модификации.

Данная схема выбрана, тк у клиента нет постоянного выхода в инет.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37114145
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возьмет JMS - там реализация очередей с поддержкой персистентности сообщений (то что вам и надо) есть.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37114165
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>rustyhex, 9 фев 11, 19:55 [10210929]
>Столкнулся с такой проблемой ...

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

С уважением, Владимир.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37114168
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевсерьезный недостаток - сложность.

это самый главный недостаток. ВМоисеев, удалось за это время превратить прототип в действующих образец?
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37115589
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rustyhexКлиенты проходят аутентификацию на сервере приложений

А как именно они аутентифицируются?

Шифроваться всё будет асимметричным алгоритмом шифрования (есть опасения насчёт загрузки CPU).

А чем https не устроил? Тогда и с CPU проблем не будет.

Сервер приложений скидывает всё это в БД

Без кэширования? И это все, что делает БД?
По идее, проверку прав тоже лучше делать на AppLayer. Как и кэширование данных по группам.

Ну для начала можно взять в 2 раза меньше - 12500 юзеров, а проблему их увеличения решить с помощью вертикального масштабирования. Т.е. будет 44 операции записи.

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

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

Хм. А может взять какой-нибудь ejabberd и просто его настроить для этих задач? Ну или любой другой мессенджер. А то задача то стандартная неимоверно.

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

Глупость. Динамические запросы стоят заметно дороже (а в таком варианте придется делать именно динамический SQL).
Да и непонятно, а что в такой схеме вообще будет выигрываться.

И вопрос насчёт mysql, чем он плох? С xtradb (форк innodb) говорят хорош.
Э, а чем он хорош? Впрочем, пока нет цифр о требуемой надежности и безопасности, выбирать БД рановато. Но я бы с MySQL для этой задачи не связывался, делать на нем очереди довольно неудобно....

Пока такой вариант: клиент периодически подключается и проверяет по дате обновления группы время последней модификации.

Ну, вполне нормально, если не раз в секунду клиент будет соединяться. Раз в минуту - уже нормально. Но вообще соединение - это дорогая операция. И - лучше не по дате обновления, а по номеру последнего сообщения, это надежнее и не зависит от правильности выставления даты на клиенте.

Возьмет JMS - там реализация очередей с поддержкой персистентности сообщений (то что вам и надо) есть.

JMS - это, все-таки, стандарт на работу с очередями из Java. Реализаций JMS довольно много, можно найти подходящую.
Вообще, работу с очередями не так уж и сложно реализовать в БД (впрочем, в MySQL - сложно).

Ну а то, что там предлагали на .Net - это что-то совсем странное и для каких-то непонятных целей. Впрочем, так как проект так и не закончен и документации нет, то и смотреть туда не стоит.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37116887
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>DPH3, вчера, 18:05 [10234355]
>... Ну а то, что там предлагали на .Net ...так как проект так и не закончен ...то и смотреть туда не стоит.

Странное умозаключение.
По ссылке есть две статьи, достаточно подробно расписывают схему построения прототипа. На сайте лежат также два проекта на C# VS 2010. Есть проект клиентского приложения и проект сервера приложений.
Нужна соответствующей сложности задача, точнее какой-либо серьезный проект (в смысле заказчика и в смысле бабок) для создания программной системы по схеме прототипа (не палить же из пушки по воробьям).
Но одному подобную схему не осилить за разумные сроки.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37117253
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

Ну как-бы так помягче сказать...
Распределенные нагруженные системы - вещь, на самом-то деле, довольно простая. И если за три года не удалось сделать рабочего прототипа и просчитать нагрузку - это говорит уже о многом.
Ну и почитав статьи - становится понятно, что представления о том, как делаются надежные, нагруженные и масштабируемые системы у автора нет. Многие существенные проблемы даже не рассматриваются, а вот всяким несущественным мелочам типа организации транспорта и низкоуровнего протокола придается большое значение.
Впрочем, .Net - не самый лучший инструмент для подобных задач.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37118386
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rustyhex,

возьмите любую пристойную СУБД, желательно с HTTP-сервером в том же процессе, и не занимайтесь экзотикой. Которую из таких СУБД лучше знаете --- на той и пишите.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37119395
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruпристойную СУБД, желательно с HTTP-сервером в том же процессе
Ой, а в чем смысл HTTP-сервера в том же процессе?
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37119453
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3iv_an_ruпристойную СУБД, желательно с HTTP-сервером в том же процессе
Ой, а в чем смысл HTTP-сервера в том же процессе?На IPC экономить, вестимо. Особенно если число одновременно окучиваемых веб-клиентов в разы больше числа процессорных ядер.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37119576
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru,

Хм, для подобной задачи, подозреваю, расходы на IPC будут, прямо скажем, не слишком заметны. Тут даже обмен в локальной сети с БД не окажет существенного влияния на скорость. Генерация html-контента и работа с жестким диском потребуют заметно больше ресурсов.

А где http-сервер встроен прямо в процесс БД? И как там решают проблемы безопасности этого процесса, например?
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37121117
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>DPH3, вчера, 14:37 [10238710]
> ...Распределенные нагруженные системы ... Ну и почитав статьи ...
Батенька, позвольте полюбопытстствовать, кто Вы - академик или студент?
Дайте ссылочку на Выши труды в этой области.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37121267
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Ну, например, http://download.yandex.ru/company/experience/rit2008/highload_philipp.pdf
Остальное, если нужно, сами найдете, занятие не сложное...
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37121288
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3например, http://download.yandex.ru/company/experience/rit2008/highload_philipp.pdf

Речь идет об web online системах в документе. Не расшифруете, что в этом разрезе понимается под "сложной бизнес-логикой", или, если можно адрес такой системы, чтобы посмотреть. Спасибо.
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37121291
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или речь идет о сложности реализации?
...
Рейтинг: 0 / 0
Разработка масштабируемой ИС
    #37121300
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm,
Лучше найдите запись доклада, в инете где-то есть. Все-таки, слайды презентации - это только вспомогательный текст. А рассматриваемые системы - почти любые, где одновременно и (относительно) высокая нагрузка и сложная бизнес-логика. Из того, что запомнилось из сделаного лично - букмекерская система (с всевозможным риск-менеджментом, где как раз сложность в основном и живет). Но в докладе, понятное дело, не только мой опыт суммирован, темой то давно занимаюсь, так что поанализировать есть что.
Как раз про Web в докладе довольно мало (хотя по большей части интересная нагрузка вылезает именно в таких задачах (ну и в научных, разумеется - но вот тут как раз опыта нет).
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Разработка масштабируемой ИС
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]