powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Горизонтальная масштабируемость веб приложений
25 сообщений из 25, страница 1 из 1
Горизонтальная масштабируемость веб приложений
    #34429480
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такой вопрос:
Допустим создается веб портал, где прогнозируется большое количество посетителей соответственно встают вопросы проектирования с расчетом на это. Вот собственно моя идея (сильно не пинать в яве я новичек).

1.) прокси сервер (балансировка нагрузки)

^ ^ ^
| | |

2.) N-ное количество веб серверов (Tomcat + сервер бд в режиме репликации slave)

^
|

3.) сервер бд (в режиме репликации master)



Вообщем прокси сервер (уровень #1) в зависимости от нагрузки распределяет запросы на уровень №2.

На уровне #2 находится сервер БД в режиме репликации как slave тоесть он собирает данные с центрального сервера уровень #3.

Соответственно что бы была целостность данных веб сервера с уровня #2 должны читать данные из локальной БД а писать на мастер сервер (уровень #3).

Правильный вообще ход мысли??

Значит в приложении надо создавать два датасорса один только на чтение а другой на запись???

Как это вообще по научиному делается??
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34429482
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по научному это делается через XA датасоурсы и распределенные транзакции на аппликейшен серверах, которые конфигурятся как кластер
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34429500
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
y3uпо научному это делается через XA датасоурсы и распределенные транзакции на аппликейшен серверах, которые конфигурятся как кластер

а можно какуюнить ссылку на научный метод или название на англ, чтобы сам мог нагуглить....
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34429503
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, к примеру, вот тут есть
http://labs.jboss.com/portal/jbossas/docs

Clustering with JBoss
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34429512
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
y3uну, к примеру, вот тут есть
http://labs.jboss.com/portal/jbossas/docs

Clustering with JBoss

Спасибо тебе огромное!!! :-)

у меня еще такой вопрос появился, немного из другой степи но всеже...

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

Все это в целях безопасности... или это уже паранойя у меня? :-)
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34429646
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы приделать к своем приложению секьюрити надо использовать JAAS - юзай поиск, читай доки на оффсайте...
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34429779
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
y3uчтобы приделать к своем приложению секьюрити надо использовать JAAS - юзай поиск, читай доки на оффсайте...

Огромнейшее спасибо :-) нашел читаю! :-)
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34431155
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34439018
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz http://www.javaworld.com/jw-02-2001/jw-0223-extremescale.html

Спасибо! читаю :-)
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34440321
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
А какие нагрузки будут?
Пользователей, транзакций читающих, транзакций пишущих?
А то от этого многое зависит.
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34440423
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
Статья, конечно, неплохая но весьма устаревшая и из иного мира - указанные решения очень и очень дорогие (и по железу - одни алтеоны чего стоят, и по лицензиям), да и на рынке сейчас совсем другие сервера живут.
Почти всегда можно придумать что-нибудь оптимальнее и дешевле.

По личному опыту (и не только моему), EJB и производительность вообще мало совместимы и основные проблемы с производительностью живут в БД, поэтому нужно организовывать кэширование и очень хорошо продумывать стратегию персистанса.
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34440507
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё одна статья на которую хотел дать ссылку но совсем забыл где она находится.
http://www.theserverside.com/tt/articles/article.tss?l=J2EEClustering
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34441406
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPHА какие нагрузки будут?
Пользователей, транзакций читающих, транзакций пишущих?
А то от этого многое зависит.

ну это будет автопортал, там будут в большинстве своем транзакции читающие данные, часть логики будет на стороне SQL сервера, например процедуры выборки по zip code
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34441429
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPHСтатья, конечно, неплохая но весьма устаревшая и из иного мира - указанные решения очень и очень дорогие (и по железу - одни алтеоны чего стоят, и по лицензиям), да и на рынке сейчас совсем другие сервера живут.
Почти всегда можно придумать что-нибудь оптимальнее и дешевле.

По личному опыту (и не только моему), EJB и производительность вообще мало совместимы и основные проблемы с производительностью живут в БД, поэтому нужно организовывать кэширование и очень хорошо продумывать стратегию персистанса.

ну да я понимаю что на БД ложится основная нагрузка, и соответственно зависит многое от оптимизированности SQL запросов.

У меня такой вопрос в связи с этим (сам я недавно с ПХП только слез, поэтому кроме прямых обращений к базе других инструментов не использовал), насколько оптимальные запросы получаются к базе в результате работы инструментов типа EJB или Hibernate? имеет ли смысл заморачиватся на чистый JDBC?
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34441580
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
Ну, совсем чистый JDBC - это плохо, тогда уж по крайней мере обернуть его с помощью Spring.
Впрочем, особых проблем в писании прямых запросов в нормально спланированной системе не вижу.
Их, по идее, очень мало и они должны быть простые.


Так как у нас требования по производительности были довольно существенные, от Hibernate и прочих ORM отказались сразу, так что про их код ничего сказать не могу. Впрочем, в процессе развития системы из всего J2EE остались только сервелеты и JDBC.

Судя по всему, для тебя главное - это организация кэширования используемых данных и обновление этих кешей внутри кластера. Решений для этого - довольно много.

Если данные меняются редко, то подумай над хранением в БД не нормализованных данных, а, например, сериализованных Java объектов (в блобах) - это может и упростить код и снять проблему оптимизации SQL запросов.

И поприкидывай на тестовых примерах - нужна ли тебе вообще кластеризация, и если нужна - то на каком уровне.
А то, например, если большая часть данных закэширована (как обычно и бывает), а БД хорошо спланирована, то даже недорогой сервер легко потянет сотню транзакций на изменение в секунду. И существенно большее число - на чтение.
А задач, где нужно больше - очень мало и вряд ли у тебя - такой случай.
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34441585
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
ну это будет автопортал, там будут в большинстве своем транзакции читающие данные, часть логики будет на стороне SQL сервера, например процедуры выборки по zip code
А вот от сложной логики на строне сервера - лучше избавится. От всего, что сложнее простого insert или update.
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34441695
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
Предыдущий пост читать как:

А вот от сложной логики на стороне сервера БД - лучше избавиться. От всего, что сложнее простого insert или select.

(Брр, вот что бывает, если делать два дела сразу.)
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34441822
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPHПредыдущий пост читать как:

А вот от сложной логики на стороне сервера БД - лучше избавиться. От всего, что сложнее простого insert или select.

(Брр, вот что бывает, если делать два дела сразу.)

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

И еще вопрос, контроль целостности данных между таблицами чем лучше реализовывать системой внешних ключей на сервере БД или всетаки логикой в коде??? Есть какието подводные камни связанные со внешними ключами??
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34441863
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
1. Обычно в подобных системах узким место является БД и, реже, системы формирования HTML страничек (Struts, Tapestry и иже с ним). Второе сравнительно легко кластеризуется, а вот с эффективной кластеризацией БД при высоких нагрузках все гораздо хуже.
Так что лучше как можно меньше нагружать БД - т.е. использовать простейшие запросы, минимализировать блокировки, использовать кэширование и т.п.
В результате хранимые процедуры - это, скорее, зло. Как и сложные триггеры, например.
Потенциальная потеря производительности без какого-либа выигрыша.
В некоторых случаях без хранимых процедур сложно обойтись, но чем их меньше - тем лучше.

2. Про целостность - тут все сложнее.
Мы вообще в БД кладем сериализованные объекты, что снимает вопрос целостности полностью, да еще и сильно экономит требования к БД. Но не во всех случаях это возможно, сильно зависит от бизнес-логики.
Если же БД - нормальная нормализованная БД, где все сущности предметной области разложены по табличкам - то я бы на этапе разработки использовал бы FK (как вторую линию обороны при Unit тестах), а в production, если окажется, что FK начинают реально съедать производительность - их бы просто отключил.
Я не измерял реальные затраты на проверку foreign key constraint и не могу сказать, насколько плохо это сказывается на производительности. Подозреваю, что меньше, чем блокировки или чрезмерная любовь к update.
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34441971
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPHТак что лучше как можно меньше нагружать БД - т.е. использовать простейшие запросы, минимализировать блокировки, использовать кэширование и т.п.

Сразу вспомнил вроде на Amazon был пресс релиз где они говорили что используют только какието элементарные триггеры со стороны сервера БД.


а в production, если окажется, что FK начинают реально съедать производительность - их бы просто отключил.

Ну вот тут уже не совсем и просто... всетаки с ключами можно настроить каскадное удаление, в моем примере запрос "DELETE userxxx FROM users_table WHERE user_id = xxx" удалил бы и юзера и его данные из всех других таблиц (корзина покупок, фотки и.т.п.).

А если делать без FK ключей то придется всю эту логику удаления реализовывать в приложении.

И еще такой вопросик :-) нигде не видел четкого ответа на него одни holy wars.... как принято картинки хранить? на диске файлами или в базу???

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

А тут походил почитал по сети что многие уже давно в базу пихают изображения, а затем просто в кешируется также в файловой системе.

Ты случайно не сталкивался с хранением картинок в базе? не просядет ли база с учетом что она "нормально нормализована" если в одной таблице хранить картинки размерчиком до 100кб, при количестве записей в среднем 200к.

Понятно что все еще зависит от конкретного железа и нагрузки... но тут меня больше волнует теоретический момент из реального опыта :-)
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34442031
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу картинок - если они действительно, как ты говоришь, небольшие, то почему бы х не хранить блобами в БД... если картинки большие - это уже статический контент, тогда можно юзать апач + томкет...
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34442510
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
[quote]
Сразу вспомнил вроде на Amazon был пресс релиз где они говорили что используют только какието элементарные триггеры со стороны сервера БД.
[/quote]
Я когда читал описание eBay - очень веселился, у нас система за два года прошла значительную часть их пути и многие решения были один в один...

Каскадное удаление и аналогичные подсластители не использовал. Соображений несколько:
1. Если система сложная, то все равно логика удаления записи обычно нетривиальна и сильно затрагивает сервер (т.к. нужно удалить объект не только из БД, но и из кэшей - а это значит, что все равно по структуре объекта придется пройти).

2. Удалять объекты из БД - это вообще дурной тон, история должна хранится вечно.
Единственное возможное - перенос в архивную базу, но, опять-таки, его логика обычно столь неочевидна, что каскадное удаление скорее мешает.

Про блобы.
С точки зрения БД и работы промежуточного слоя хранить картинки в БД предпочтительнее - ты можешь легко управлять видом хранения соответствующего tablespace и использовать или кэширование файловой системой или какие-то конкретные настройки БД - в зависимости от своих нужд. При этом операции с ними будут гарантировано журналироваться (опять-таки, можно настраивать). Мы тестировали производительность для DB2 Express С, там все более чем достаточно по скорости доступа (и вообще рекомендую, бесплатная и продуманная БД).

Если картинки нужны для отдачи клиенту на веб, то, как правильно сказали, их имеет смысл кэшировать в ФС, Apache со статическим контентом обойдется лучше.


А по производительности - мы на тестах регулярно накидываем до 1E6 блобов от 10k до 10M - никаких замедлений не наблюдалось, разницы между 1E6 и 1E4 не наблюдается вообще. БД, как уже говорил, DB2 Express C. Что будет для MySQL - не знаю.
Мы вообще отказались в процессе развития от хранения нормализованной информации в БД - оказалось, что быстрее и проще работать с сериализованным представлением объектов предметной области. Но тут многое зависит от специфики задачи и количества межобъектных связей - нам удалось их сильно уменьшить.
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34444801
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to DPH

Спасибо тебе огромное за инфу, много дало мне это, действительно я думал о хранении сериализованых объектов вместо добавления таблиц с десятками полей, по которым врятли будет когдато делатся поиск, но не думал что этот способ не уступает по производительности обычному варианту.

И на счет ключей да я действительно забыл про все эти кеши и прочие привязанные статические данные которые останутся если просто каскадным удалением через FK удалять.

Такой вопросик возник, а как принято с сессиями поступать? к чему ты пришел из опыта? в базе хранить данные сессии или всетаки через стандартный механизм??
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34444921
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
branickiя думал о хранении сериализованых объектов вместо добавления таблиц с десятками полей, по которым врятли будет когдато делатся поиск, но не думал что этот способ не уступает по производительности обычному варианту.

В этом решении есть несколько подводных камней:
1. Многое зависит от скорости сериализации. Например, сериализация в XML, скорее всего, будет тормозить. Стандарный вариант сериализации тоже не очень быстрый (там все через reflection).
Писать свою сериализацию через readObject etc - достаточно сложно.
2. А что ты будешь делать при обновлении версии? Если в базе лежат сериализованные объекты от разных версий и, возможно, с разными структурами? Решений может быть довольно много, но их стоит продумать заранее. Вообще, смена версии в production - это всегда проблема.
3. Если объекты хранятся большие, а меняется в них какая-то мелочь, то приходится делать update всего объекта - что может быть слишком дорого. Нужно продумывать логику обновлений.
4. Отчеты... В особенности аналитические - их делать будет несколько сложнее.

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


Такой вопросик возник, а как принято с сессиями поступать? к чему ты пришел из опыта? в базе хранить данные сессии или всетаки через стандартный механизм??

Мы храним в распределенном кэше, но у нас в данном случае много специфических тонкостей, не уверен, так что смело рекомендовать не могу. У нас даже Web клиент очень толстый (AJAX) и, по сути, в сессии нужно хранить только ее id и очередь команд, которые нужно отправить на клиент. И вся эта информация, в общем, не имеет особой ценности и может быть потеряна.
...
Рейтинг: 0 / 0
Горизонтальная масштабируемость веб приложений
    #34445491
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To DPH

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

Тем более у меня проект задумывается как open source а это тоже не признак стабильности, а вообщем тебе большое спасибо открыл глаза на многие концептуальные вещи!
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Горизонтальная масштабируемость веб приложений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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