|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
привет. прежде всего, прошу простить меня, если запостил не в тот раздел. представьте ситуацию, будто бы у вас онлайн-чат. в чате, у вас, ~200000 юзеров онлайн. каждый юзер, в минуту, пишет 2 сообщения. и того, в минуту, получаем 400000 инсертов. в час получается - 24000000. ясно, что любая БД не осилит такое кол-во инсертов. в добавок, представьте, что клиентская логика на серверной стороне настолько тяжела, что вы вынуждены запустить ваш сервис на 10ти машинах одновременно, чтоб распределить нагрузку. при такой архитектуре сервиса, встает логичный вопрос: а как быть с БД? подскажите, как обычно поступают разработчики столкнувшиеся с подобной ситуацией? благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 18:44 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXman...в час получается - 24000000. ясно, что любая БД не осилит такое кол-во инсертов... это только Вам ясно. Мужики из Оралка(к примеру) об этом не слышали явно... ышо в том веке у нас на допечатной подготовке была база в которую сваливалась вся телетайпная информационная инфа в одну из баз.. и ничего, Wire обзывалась кстати... даже шустренько так обслуживала и другие бэк-граундные запросы... я так думаю, что за более 10 лет всё ышо дальше ушло вперёд... так, что.... вэлкам в реальность... (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 18:51 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
kolobok0, т.е. 24 миллиона инсертов в час, это не много? оО допустим. но вопрос в другом. пусть, к примеру, миллиард. ну или сколько-то там, чтоб точно БД не успевала. вопрос все тот же. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 18:54 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXman...чтоб точно БД не успевала.... сразу оговорюсь - в бою не был :) я о том, что на мой теоретический взгляд - вижу два вектора решения. 1) кластеризация 2) распределённые БД кластеризация - тут, скорее всего, больше технический аспект. распределённые - тут, кмк, больше софтовый. (вынос высоконагруженных частей БД отдельно, линки на другие бд и подобные вещи). где то так. (круглый) ЗЫ кстати говоря, сайты с большой нагрузкой - стараются делать как скопище снимков хэтэмээльных страниц (как не странно это кажется на первый взгляд - но это оптимум по скорости). т.е. всякая динамика - это зло в данном случае. тем более обращение к БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 19:16 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
kolobok0, kolobok01) кластеризация 2) распределённые БД кластеризация - тут, скорее всего, больше технический аспект. распределённые - тут, кмк, больше софтовый. (вынос высоконагруженных частей БД отдельно, линки на другие бд и подобные вещи). слишком общий ответ... подумаю, и постараюсь конкретизировать... kolobok0кстати говоря, сайты с большой нагрузкой - стараются делать как скопище снимков хэтэмээльных страниц (как не странно это кажется на первый взгляд - но это оптимум по скорости). т.е. всякая динамика - это зло в данном случае это понятно. но в данном вопросе вообще о сайте речь не шла. касательно динамики, несколько наводящих вопросов ;): что можно понимать как динамику? к примеру, история сообщений пользователя - это динамика? история времени логина/логаута, это тоже динамика? информация о том, сообщение пользователя было ответом на другое сообщение, или просто сообщение - тоже динамика? спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 19:45 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXman...в минуту, получаем 400000 инсертов. в час получается - 24000000. ясно, что любая БД не осилит такое кол-во инсертов.... при такой архитектуре сервиса, встает логичный вопрос: а как быть с БД?Если запись не предусматривает никакой постобработки, то складывать в простой текстовый файл, который периодически пакетно заливать в БД. Например: Тестовый стенд - виртуальная машина на удаленном сервере, 2Г памяти. Подробностей про процессор и дисковую подсистему не помню. БДselect * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production 5 rows selected.SQL*LoaderTotal logical records skipped: 0 Total logical records read: 1098526 Total logical records rejected: 0 Total logical records discarded: 0 Total stream buffers loaded by SQL*Loader main thread: 231 Total stream buffers loaded by SQL*Loader load thread: 0 Run began on Thu Mar 29 12:51:57 2012 Run ended on Thu Mar 29 12:52:22 2012 Elapsed time was: 00:00:25.24 CPU time was: 00:00:03.15 Большая часть времени ушла на прокачку данных по сети. Локально все существенно быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 20:33 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
PL99Если запись не предусматривает никакой постобработки, то складывать в простой текстовый файл, который периодически пакетно заливать в БД. постобработки никакой нет. но тут у меня еще вопрос: какой смысл складировать данные и потом скопом их вливать? ведь в таком случае мы положим БД полностью намертво. не логичней ли распределить кол-во инсертов по времени, или таки инсертить сразу по приходу? PL99Elapsed time was: 00:00:25.24 т.е. это 25 секунд? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 20:37 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanно тут у меня еще вопрос: какой смысл складировать данные и потом скопом их вливать? ведь в таком случае мы положим БД полностью намертво.PL99периодически пакетно заливать niXmanне логичней ли распределить кол-во инсертов по времени, или таки инсертить сразу по приходу?Транзакционная вставка не обеспечит необходимой производительности. niXmanPL99Elapsed time was: 00:00:25.24 т.е. это 25 секунд?Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 20:55 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
PL99периодически пакетно заливать для ораклового лоадера с включенной опцией DIRECT ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 20:57 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
PL99Транзакционная вставка не обеспечит необходимой производительности. какой смысл, в данном контексте, имеет слово "транзакционная"? и откуда это слово вообще тут взялось? зачем тут транзакции, поясните? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 21:09 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
PL99периодически пакетно заливать а почему не инсертить сразу, по приходу? в чем смысл откладывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 21:12 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanу вас, ~200000 юзеров онлайн Вот это и есть самое узкое место. Трехзвенка. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:01 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
_модniXmanу вас, ~200000 юзеров онлайн Вот это и есть самое узкое место. Трехзвенка. что такое "Трехзвенка" ? а по сабжу есть что сказать? и вообще, про высоконагруженные системы только в книжках фантазируют? в реале никто с этим не сталкивался? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:05 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanа почему не инсертить сразу, по приходу? в чем смысл откладывать?Потому что пакетом быстрее. Хотя тоже не6 решает проблемы - ведь вы скажете (ну а представим такую систему, для которой и пакетной обработки не хватит) :-) Нужно ставить реальные задачи, проектировать систему под конкретьную прогнозируемую нагрузку. Полследовательность при увеличении нагрузки очевидна - оптимизация, кеширование и пакетная обработка, распределение нагрузки на много серверов. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:09 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanи вообще, про высоконагруженные системы только в книжках фантазируют? в реале никто с этим не сталкивался?Дык критерий то какой? Первым постом вы описали слабо нагруженную систему. Я работал тоже только со слабонагруженными - всего раз в 30 больше нагрузка, чем вы описали. Что есть "сильно нагруженная"? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:11 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
alexeyvgПотому что пакетом быстрее. что значит "пакетом"? что это за режим такой? и почему он быстрее? alexeyvgХотя тоже не6 решает проблемы - ведь вы скажете скажу, потому что в топике вопрос: niXmanа как быть с БД? alexeyvgЧто есть "сильно нагруженная"? система, которая не сможет работать на одной физической PC. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:17 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanPL99периодически пакетно заливать а почему не инсертить сразу, по приходу? в чем смысл откладывать?А почему бы не почитать документацию ? Или соответствующий раздел для вашей БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:19 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
PL99, для того чтоб что-то читать, нужно знать что искать. прочел. понял. не понял одного, как пакетный режим позволит что-то ускорить в том случае, если "у БД не бывает выходных"? т.е. к примеру, нагрузка на БД приблизительно равномерно распределена по времени. не инсертя данные сразу в БД, мы лишь оттягиваем неизбежное. это первое. второе - я так понимаю, что откладывание инсерта может иметь смысл(гипотетически. хотя я в этом сомневаюсь.) только в том случае, когда откладываемые данные не нужны сразу по приходу. т.е. к примеру, через час после прихода. в общем, тема топика все таинственней, и полна загадок. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:31 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanне понял одного, как пакетный режим позволит что-то ускорить в том случае, если "у БД не бывает выходных"? т.е. к примеру, нагрузка на БД приблизительно равномерно распределена по времени. не инсертя данные сразу в БД, мы лишь оттягиваем неизбежное. это первое.Ну если он быстрее, то почему не будет ускорения??? Допустим, вставка одной записи - 1 мс, вставка 1000000 записей пакетом - 10с Получаем выйгрыш в 100 раз, если будем копить записи и вставлять пакетами по милиону. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:35 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanвторое - я так понимаю, что откладывание инсерта может иметь смысл(гипотетически. хотя я в этом сомневаюсь.) только в том случае, когда откладываемые данные не нужны сразу по приходу. т.е. к примеру, через час после прихода.Ну да, это проблема. Но во первых, не раз в час, а раз в секунду, или раз в минуту - как спроектируете. Во вторых, это решается сервером приложений - чтением из кеша. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:37 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanalexeyvgЧто есть "сильно нагруженная"? система, которая не сможет работать на одной физической PC.А вот какой критерий :-) Так вы ответ уже сами сказали, в чём вопрос тогда??? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:39 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
alexeyvg, вот...начинает проясняться.. спасибо Вам. оффтопный вопрос, позвольте. подскажите, где можно почитать про "пакетный режим" для MySQL/Postgre ? ну, или, хотя бы, по каким словам гуглить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:41 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
alexeyvgТак вы ответ уже сами сказали, в чём вопрос тогда? вопрос в том, каким образом разделяют БД на несколько физических машин так, чтоб в них были идентичные данные? как синхронизируют данные? т.е., решение в лоб - чтоб каждая машина инсертила сразу и во все остальные машины. но это, как мне кажется, слишком "деревянный" способ. или оно так и решается? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:44 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanподскажите, где можно почитать про "пакетный режим" для MySQL/Postgre ?По MySQL/Postgre я не специалист. Вы создайте тему с конкретным вопросом в форуме по этим СУБД. niXmanalexeyvgТак вы ответ уже сами сказали, в чём вопрос тогда? вопрос в том, каким образом разделяют БД на несколько физических машин так, чтоб в них были идентичные данные? как синхронизируют данные? т.е., решение в лоб - чтоб каждая машина инсертила сразу и во все остальные машины. но это, как мне кажется, слишком "деревянный" способ. или оно так и решается?По разному, зависит от конкретных требований бизнес-логики. Можно напрмер вообще не делать доступными данные на всех машинах. Допустим, все кредитные карточки мира и совершаемые операции - это некая гигантская база данных, но вместе хранить данные не обязательно, достаточно, что бы счета и карточки одного человека были на одном сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 12:16 |
|
подскажите по архитектуре высоконагруженной системы
|
|||
---|---|---|---|
#18+
niXmanи того, в минуту, получаем 400000 инсертов. в час получается - 24000000. ясно, что любая БД не осилит такое кол-во инсертов. Да почему же... Не так и много. niXmanпри такой архитектуре сервиса, встает логичным вопрос: а как быть с БД? подскажите, как обычно поступают разработчики столкнувшиеся с подобной ситуацией? шардинг, партицирование бд по, скажем, ветке форума. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 12:27 |
|
|
start [/forum/topic.php?fid=33&msg=38130205&tid=1547727]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 174ms |
0 / 0 |