|
|
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
У меня такой вопрос: Допустим создается веб портал, где прогнозируется большое количество посетителей соответственно встают вопросы проектирования с расчетом на это. Вот собственно моя идея (сильно не пинать в яве я новичек). 1.) прокси сервер (балансировка нагрузки) ^ ^ ^ | | | 2.) N-ное количество веб серверов (Tomcat + сервер бд в режиме репликации slave) ^ | 3.) сервер бд (в режиме репликации master) Вообщем прокси сервер (уровень #1) в зависимости от нагрузки распределяет запросы на уровень №2. На уровне #2 находится сервер БД в режиме репликации как slave тоесть он собирает данные с центрального сервера уровень #3. Соответственно что бы была целостность данных веб сервера с уровня #2 должны читать данные из локальной БД а писать на мастер сервер (уровень #3). Правильный вообще ход мысли?? Значит в приложении надо создавать два датасорса один только на чтение а другой на запись??? Как это вообще по научиному делается?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2007, 23:24:27 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
по научному это делается через XA датасоурсы и распределенные транзакции на аппликейшен серверах, которые конфигурятся как кластер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2007, 23:32:55 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
y3uпо научному это делается через XA датасоурсы и распределенные транзакции на аппликейшен серверах, которые конфигурятся как кластер а можно какуюнить ссылку на научный метод или название на англ, чтобы сам мог нагуглить.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2007, 23:59:36 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
ну, к примеру, вот тут есть http://labs.jboss.com/portal/jbossas/docs Clustering with JBoss ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2007, 00:03:23 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
y3uну, к примеру, вот тут есть http://labs.jboss.com/portal/jbossas/docs Clustering with JBoss Спасибо тебе огромное!!! :-) у меня еще такой вопрос появился, немного из другой степи но всеже... Есть веб портал: имеет ли смысл делать создавать несколько разных пользователей бд, один для тех пользователей кто не зарегался, а другой для тех кто ввел логин и пароль и соотвественно чтобы права у первого пользователя были только на чтение таблиц а у второго уже все нужные права для работы. Все это в целях безопасности... или это уже паранойя у меня? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2007, 00:16:58 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
чтобы приделать к своем приложению секьюрити надо использовать JAAS - юзай поиск, читай доки на оффсайте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2007, 11:40:05 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
y3uчтобы приделать к своем приложению секьюрити надо использовать JAAS - юзай поиск, читай доки на оффсайте... Огромнейшее спасибо :-) нашел читаю! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2007, 14:43:06 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 13:36:30 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 00:34:30 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
А какие нагрузки будут? Пользователей, транзакций читающих, транзакций пишущих? А то от этого многое зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:33:40 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
Статья, конечно, неплохая но весьма устаревшая и из иного мира - указанные решения очень и очень дорогие (и по железу - одни алтеоны чего стоят, и по лицензиям), да и на рынке сейчас совсем другие сервера живут. Почти всегда можно придумать что-нибудь оптимальнее и дешевле. По личному опыту (и не только моему), EJB и производительность вообще мало совместимы и основные проблемы с производительностью живут в БД, поэтому нужно организовывать кэширование и очень хорошо продумывать стратегию персистанса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:55:02 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
Вот ещё одна статья на которую хотел дать ссылку но совсем забыл где она находится. http://www.theserverside.com/tt/articles/article.tss?l=J2EEClustering ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:14:13 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
DPHА какие нагрузки будут? Пользователей, транзакций читающих, транзакций пишущих? А то от этого многое зависит. ну это будет автопортал, там будут в большинстве своем транзакции читающие данные, часть логики будет на стороне SQL сервера, например процедуры выборки по zip code ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 17:33:39 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
DPHСтатья, конечно, неплохая но весьма устаревшая и из иного мира - указанные решения очень и очень дорогие (и по железу - одни алтеоны чего стоят, и по лицензиям), да и на рынке сейчас совсем другие сервера живут. Почти всегда можно придумать что-нибудь оптимальнее и дешевле. По личному опыту (и не только моему), EJB и производительность вообще мало совместимы и основные проблемы с производительностью живут в БД, поэтому нужно организовывать кэширование и очень хорошо продумывать стратегию персистанса. ну да я понимаю что на БД ложится основная нагрузка, и соответственно зависит многое от оптимизированности SQL запросов. У меня такой вопрос в связи с этим (сам я недавно с ПХП только слез, поэтому кроме прямых обращений к базе других инструментов не использовал), насколько оптимальные запросы получаются к базе в результате работы инструментов типа EJB или Hibernate? имеет ли смысл заморачиватся на чистый JDBC? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 17:38:11 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
Ну, совсем чистый JDBC - это плохо, тогда уж по крайней мере обернуть его с помощью Spring. Впрочем, особых проблем в писании прямых запросов в нормально спланированной системе не вижу. Их, по идее, очень мало и они должны быть простые. Так как у нас требования по производительности были довольно существенные, от Hibernate и прочих ORM отказались сразу, так что про их код ничего сказать не могу. Впрочем, в процессе развития системы из всего J2EE остались только сервелеты и JDBC. Судя по всему, для тебя главное - это организация кэширования используемых данных и обновление этих кешей внутри кластера. Решений для этого - довольно много. Если данные меняются редко, то подумай над хранением в БД не нормализованных данных, а, например, сериализованных Java объектов (в блобах) - это может и упростить код и снять проблему оптимизации SQL запросов. И поприкидывай на тестовых примерах - нужна ли тебе вообще кластеризация, и если нужна - то на каком уровне. А то, например, если большая часть данных закэширована (как обычно и бывает), а БД хорошо спланирована, то даже недорогой сервер легко потянет сотню транзакций на изменение в секунду. И существенно большее число - на чтение. А задач, где нужно больше - очень мало и вряд ли у тебя - такой случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 18:17:56 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
ну это будет автопортал, там будут в большинстве своем транзакции читающие данные, часть логики будет на стороне SQL сервера, например процедуры выборки по zip code А вот от сложной логики на строне сервера - лучше избавится. От всего, что сложнее простого insert или update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 18:19:42 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
Предыдущий пост читать как: А вот от сложной логики на стороне сервера БД - лучше избавиться. От всего, что сложнее простого insert или select. (Брр, вот что бывает, если делать два дела сразу.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 18:59:47 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
DPHПредыдущий пост читать как: А вот от сложной логики на стороне сервера БД - лучше избавиться. От всего, что сложнее простого insert или select. (Брр, вот что бывает, если делать два дела сразу.) Спасибо тебе за ответы, буду размышлять... а насчет логики в БД это почему так?? Из за возможной переносимости между различными базами чтоли?? И еще вопрос, контроль целостности данных между таблицами чем лучше реализовывать системой внешних ключей на сервере БД или всетаки логикой в коде??? Есть какието подводные камни связанные со внешними ключами?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 20:31:22 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
1. Обычно в подобных системах узким место является БД и, реже, системы формирования HTML страничек (Struts, Tapestry и иже с ним). Второе сравнительно легко кластеризуется, а вот с эффективной кластеризацией БД при высоких нагрузках все гораздо хуже. Так что лучше как можно меньше нагружать БД - т.е. использовать простейшие запросы, минимализировать блокировки, использовать кэширование и т.п. В результате хранимые процедуры - это, скорее, зло. Как и сложные триггеры, например. Потенциальная потеря производительности без какого-либа выигрыша. В некоторых случаях без хранимых процедур сложно обойтись, но чем их меньше - тем лучше. 2. Про целостность - тут все сложнее. Мы вообще в БД кладем сериализованные объекты, что снимает вопрос целостности полностью, да еще и сильно экономит требования к БД. Но не во всех случаях это возможно, сильно зависит от бизнес-логики. Если же БД - нормальная нормализованная БД, где все сущности предметной области разложены по табличкам - то я бы на этапе разработки использовал бы FK (как вторую линию обороны при Unit тестах), а в production, если окажется, что FK начинают реально съедать производительность - их бы просто отключил. Я не измерял реальные затраты на проверку foreign key constraint и не могу сказать, насколько плохо это сказывается на производительности. Подозреваю, что меньше, чем блокировки или чрезмерная любовь к update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 21:00:11 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
DPHТак что лучше как можно меньше нагружать БД - т.е. использовать простейшие запросы, минимализировать блокировки, использовать кэширование и т.п. Сразу вспомнил вроде на Amazon был пресс релиз где они говорили что используют только какието элементарные триггеры со стороны сервера БД. а в production, если окажется, что FK начинают реально съедать производительность - их бы просто отключил. Ну вот тут уже не совсем и просто... всетаки с ключами можно настроить каскадное удаление, в моем примере запрос "DELETE userxxx FROM users_table WHERE user_id = xxx" удалил бы и юзера и его данные из всех других таблиц (корзина покупок, фотки и.т.п.). А если делать без FK ключей то придется всю эту логику удаления реализовывать в приложении. И еще такой вопросик :-) нигде не видел четкого ответа на него одни holy wars.... как принято картинки хранить? на диске файлами или в базу??? мы всегда делали файлами и проблем небыло в принципе. создавалась структура каталогов несколько уровневая чтобы все в одном не лежало и не началались тормоза на уровне файловой системы. А тут походил почитал по сети что многие уже давно в базу пихают изображения, а затем просто в кешируется также в файловой системе. Ты случайно не сталкивался с хранением картинок в базе? не просядет ли база с учетом что она "нормально нормализована" если в одной таблице хранить картинки размерчиком до 100кб, при количестве записей в среднем 200к. Понятно что все еще зависит от конкретного железа и нагрузки... но тут меня больше волнует теоретический момент из реального опыта :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 23:12:57 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
по поводу картинок - если они действительно, как ты говоришь, небольшие, то почему бы х не хранить блобами в БД... если картинки большие - это уже статический контент, тогда можно юзать апач + томкет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 01:02:54 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
[quote] Сразу вспомнил вроде на Amazon был пресс релиз где они говорили что используют только какието элементарные триггеры со стороны сервера БД. [/quote] Я когда читал описание eBay - очень веселился, у нас система за два года прошла значительную часть их пути и многие решения были один в один... Каскадное удаление и аналогичные подсластители не использовал. Соображений несколько: 1. Если система сложная, то все равно логика удаления записи обычно нетривиальна и сильно затрагивает сервер (т.к. нужно удалить объект не только из БД, но и из кэшей - а это значит, что все равно по структуре объекта придется пройти). 2. Удалять объекты из БД - это вообще дурной тон, история должна хранится вечно. Единственное возможное - перенос в архивную базу, но, опять-таки, его логика обычно столь неочевидна, что каскадное удаление скорее мешает. Про блобы. С точки зрения БД и работы промежуточного слоя хранить картинки в БД предпочтительнее - ты можешь легко управлять видом хранения соответствующего tablespace и использовать или кэширование файловой системой или какие-то конкретные настройки БД - в зависимости от своих нужд. При этом операции с ними будут гарантировано журналироваться (опять-таки, можно настраивать). Мы тестировали производительность для DB2 Express С, там все более чем достаточно по скорости доступа (и вообще рекомендую, бесплатная и продуманная БД). Если картинки нужны для отдачи клиенту на веб, то, как правильно сказали, их имеет смысл кэшировать в ФС, Apache со статическим контентом обойдется лучше. А по производительности - мы на тестах регулярно накидываем до 1E6 блобов от 10k до 10M - никаких замедлений не наблюдалось, разницы между 1E6 и 1E4 не наблюдается вообще. БД, как уже говорил, DB2 Express C. Что будет для MySQL - не знаю. Мы вообще отказались в процессе развития от хранения нормализованной информации в БД - оказалось, что быстрее и проще работать с сериализованным представлением объектов предметной области. Но тут многое зависит от специфики задачи и количества межобъектных связей - нам удалось их сильно уменьшить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 10:35:02 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
to DPH Спасибо тебе огромное за инфу, много дало мне это, действительно я думал о хранении сериализованых объектов вместо добавления таблиц с десятками полей, по которым врятли будет когдато делатся поиск, но не думал что этот способ не уступает по производительности обычному варианту. И на счет ключей да я действительно забыл про все эти кеши и прочие привязанные статические данные которые останутся если просто каскадным удалением через FK удалять. Такой вопросик возник, а как принято с сессиями поступать? к чему ты пришел из опыта? в базе хранить данные сессии или всетаки через стандартный механизм?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 22:22:55 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
branickiя думал о хранении сериализованых объектов вместо добавления таблиц с десятками полей, по которым врятли будет когдато делатся поиск, но не думал что этот способ не уступает по производительности обычному варианту. В этом решении есть несколько подводных камней: 1. Многое зависит от скорости сериализации. Например, сериализация в XML, скорее всего, будет тормозить. Стандарный вариант сериализации тоже не очень быстрый (там все через reflection). Писать свою сериализацию через readObject etc - достаточно сложно. 2. А что ты будешь делать при обновлении версии? Если в базе лежат сериализованные объекты от разных версий и, возможно, с разными структурами? Решений может быть довольно много, но их стоит продумать заранее. Вообще, смена версии в production - это всегда проблема. 3. Если объекты хранятся большие, а меняется в них какая-то мелочь, то приходится делать update всего объекта - что может быть слишком дорого. Нужно продумывать логику обновлений. 4. Отчеты... В особенности аналитические - их делать будет несколько сложнее. Так что думай, многое зависит от квалификации команды и наличия времени. Ну или планировать бюджет на консультации :) И, конечно, отталкивать нужно от реальных требований по производительности - прикинь, сколько транзакций будет в секунду, сколько из них пишущих, сколько требуют блокировок, какой бюджет на железо и на лицензии. Такой вопросик возник, а как принято с сессиями поступать? к чему ты пришел из опыта? в базе хранить данные сессии или всетаки через стандартный механизм?? Мы храним в распределенном кэше, но у нас в данном случае много специфических тонкостей, не уверен, так что смело рекомендовать не могу. У нас даже Web клиент очень толстый (AJAX) и, по сути, в сессии нужно хранить только ее id и очередь команд, которые нужно отправить на клиент. И вся эта информация, в общем, не имеет особой ценности и может быть потеряна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2007, 01:59:38 |
|
||
|
Горизонтальная масштабируемость веб приложений
|
|||
|---|---|---|---|
|
#18+
To DPH Я вот как раз и задумался что у меня напервых парах наверно очень уж не стабильно будет API, что бы можно было позволить себе хранить объекты в базе. Тем более у меня проект задумывается как open source а это тоже не признак стабильности, а вообщем тебе большое спасибо открыл глаза на многие концептуальные вещи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2007, 23:31:56 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34441429&tid=2146127]: |
0ms |
get settings: |
11ms |
get forum list: |
24ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
50ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
92ms |
get tp. blocked users: |
2ms |
| others: | 268ms |
| total: | 480ms |

| 0 / 0 |
