Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Async servlet db connection / 25 сообщений из 54, страница 1 из 3
09.04.2014, 22:08
    #38610510
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Вопрос такой есть ли от такого решения профит?
Есть 1000 пользователей , у каждого создается и храниться сессия, все активно обращаются к базе за данными , база mysql.
Есть tomcat 7 c maxThreads="100" - не более 100 тредов .
DataSource - это pool c3p0 propertise , где создается 10 коннетов базе.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
@WebServlet("/foo", asyncSupported=true)
public class MyServlet extends HttpServlet {

@Resourse(name = "myDBRef")
private DataSource dataSource;

//есть ли смысл создавать больше?
private ScheduledThreadPoolExecutor executor = new ThreadPoolExecutor(10);


    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        // Обрабатываем запрос
        // Формируем контекст асинхронной обработки
        final AsyncContext aCtx = request.startAsync(req, res);
        // запускаем обращение к медленным ресурсам в отдельном потоке.
        executor.submit(new Callable<Object>(){  
                    public Object call() throws Exception  
                    {  
                             //  тут соединение с базой и получение данных.
                             //  а если это будет не процедура а select ?
                              Connection conn = dataSource.getConnection();   
                              CallableStatement cst = conn.prepareCall("call doSomeAnalytics()");  
                              cst.execute();   
                              async.getResponse().getWriter().print("Database procedure executed");   
                              async.complete();  
                              conn.close();
                              return this;   
                    }  

    }
}



1)будет ли такой сервлет эффективнее обычного не синхронного ?
2)ThreadPoolExecutor - имеет ли смысл создавать больше 10 тредов? (по количеству коннектов к базе ?)
3)
...
Рейтинг: 0 / 0
09.04.2014, 22:12
    #38610513
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
3) как я понимаю Если все потоки заняты, то запрос ставится в очередь (по умолчанию = 100) ?
...
Рейтинг: 0 / 0
09.04.2014, 22:26
    #38610526
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Соотношение числа запросов к размеру пула определяется исключительно скоростью обработки запросов.
Т.е. не протестируете - не узнаете. Но десять подключений к базе для тысячи активных пользователей - "этврятли".
...
Рейтинг: 0 / 0
09.04.2014, 22:32
    #38610530
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Atum13) как я понимаю Если все потоки заняты, то запрос ставится в очередь (по умолчанию = 100) ?Неправильно - запрос обламывается.
Поэтому - не надо экономить на размере пула запросов сервлет-контейнера.
...
Рейтинг: 0 / 0
09.04.2014, 22:40
    #38610535
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Basil A. Sidorov,

а как установить счетчик запросов которые обломились???

ServletFilter ?
...
Рейтинг: 0 / 0
09.04.2014, 23:14
    #38610556
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Atum1а как установить счетчик запросов которые обломились???Зачем? Лог смотрите.
...
Рейтинг: 0 / 0
26.04.2014, 10:57
    #38626451
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
возник такой вот вопрос , после прочтения доков

по сервлетам

http://docs.oracle.com/javaee/7/tutorial/doc/servlets017.htm

и по сокетам

http://docs.oracle.com/javaee/7/tutorial/doc/websocket.htm


модель сайта такая : клиент подключился - авторизовался на сайте - и больше ничего не делает - только смотрит "мультик" и и посылает запрос на обновление данных. ( ajax GET getInfo()) - ему вернеться json .

чтобы не мучить сервер постоянные запросами о том обновились ли данные или нет - можно пойти таким путем
(асинхронный чат или сокеты)

я правильно понял что :

на асинхронных сервлетах можно построить такую схему общения ,как :

клиенты подключаются (авторизуются ) для них создается сессия и они добавляются в очередь ...

как только появились обновления- они автоматом в цикле все рассылаются клиентам - по средствам long pooling и того что
сервлет асинхронный и держит соединение .

вопрос какие накладные расходы на http сессию ? если у нас 5000 пользователей ,
значит ли это что нам надо в среднем 5 МБ одну http сессию - итого (5*5000 = 25 Гб оперативки?)


сколько весит сессия? ( tomcat ? jetty?)

как постоит такой чат? асинхронный тред будет делать out.flush() - чтобы отправить новые данные?

Второй подход - это вебсокеты :

как описано тут

http://findevelop.blogspot.de/2013/02/websocket-tomcat-7.html


но тогда вопрос - в такой схеме максимальное количество пользователей какое? 60000 ? по количеству портов или как?

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

Сколько это по памяти?

по какому пути пойти?
...
Рейтинг: 0 / 0
26.04.2014, 12:24
    #38626489
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
смотри websockets - это решение твоих проблем
можно организовать клиентов по типу "пидписки" если событие отвечает данной подписки - ему отправляются данные, причем данные могут отправлятся без подключения к базе, можно проанализировать изменения и отправить клиенту данные без обращения к базе.
websockets снимают нагрузка на сервер многократно, если у тебя 5000 клиентов и каждый долбит сервер в ожидании обновлений, и каждое требование это обращение к базе....даже если каждое обращение раз в минуту...бедняжка сервер...
websockets снимает это, обращение к базе будут только при изменении данных, ну и если это изменение требует обязательного обращения к базе, но при этом обращение будет одно и данные будут разосланы множеству "подписчиков"
основное преимущество websockets - сервер сам рассылает данные, а не отправляет их по запросу.
причем это будет работать и для клиента-браузера, и для клиента-андроида. для сервера никакой разницы нет.
одновременно обслуживаются клиенты на андроидах и браузерах - с софтом меньше проблем
правда во всех примерах есть один ньюанс, о котором умалчивается....
я его решил.
я тащусь от websockets .....
количество подключений - вопрос интересный, но 60 000 подключений (клиентов) - это круто....
...
Рейтинг: 0 / 0
26.04.2014, 16:46
    #38626597
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
вадясмотри websockets - это решение твоих проблем
можно организовать клиентов по типу "пидписки" если событие отвечает данной подписки - ему отправляются данные

причем это будет работать и для клиента-браузера, и для клиента-андроида. для сервера никакой разницы нет.
одновременно обслуживаются клиенты на андроидах и браузерах - с софтом меньше проблем
правда во всех примерах есть один ньюанс, о котором умалчивается....
я его решил.
я тащусь от websockets .....
количество подключений - вопрос интересный, но 60 000 подключений (клиентов) - это круто....

тогда сразу два вопроса :

Первый что за нюанс?
Второй как быть с безопасностью - websockets и прозрачные прокси ?! будут ли сокеты работать везде?
...
Рейтинг: 0 / 0
26.04.2014, 17:17
    #38626611
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
т.е с асинхронностью вот хороший пример :

https://plumbr.eu/blog/how-to-use-asynchronous-servlets-to-improve-performance
...
Рейтинг: 0 / 0
26.04.2014, 17:59
    #38626629
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Сервлет-контейнер принял запрос, сервлет обнаружил, что есть изменения и отправил отклик.
Сервлет-контейнер принял запрос, сервлет обнаружил, что изменений пока нет, сформировал часть заголовков ответа.
Сервлет подождал секунд тридцать и, если изменений не появилось, сформировал остальные заголовки и отправил отклик "нет изменений".
Т.е. в самом худшем случае клиент будет опрашивать сервер не чаще двух раз в минуту. Никого не напряжёт.
...
Рейтинг: 0 / 0
26.04.2014, 18:28
    #38626645
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Basil A. SidorovСервлет-контейнер принял запрос, сервлет обнаружил, что изменений пока нет, сформировал часть заголовков ответа.
Сервлет подождал секунд тридцать и, если изменений не появилось, сформировал остальные заголовки и отправил отклик "нет изменений".Сервлет-контейнер принял запрос, сервлет обнаружил, что изменений пока нет и, если в течении тридцати секунд изменений не появилось, отправил отклик "нет данных".
...
Рейтинг: 0 / 0
26.04.2014, 19:55
    #38626682
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
авторПервый что за нюанс?
Второй как быть с безопасностью - websockets и прозрачные прокси ?! будут ли сокеты работать везде?

мыло в профиле, позволю себе сохранить интригу :)
с безопасностию - существуют wss, которые к тому ж спокойно ходят через прокси, в отличие от ws
я для авторизации использую типа http://findevelop.blogspot.de/2013/10/web-spring-security-100.html
и после авторизации включаю (открываю) страницы для работы с передачей данных по websocketss


если изменения данных раз в 5 минут ( к примеру) - сервер 5 минут курит бамбук.
изменение пришло - сервер отработал 0.05 (ну или чуть больше, по месту) и курит бамбук...
никакого таймера на клиентах, на сервере....
и логика работы прозрачная.
для мобильных - трафик ниже плинтуса

авторТ.е. в самом худшем случае клиент будет опрашивать сервер не чаще двух раз в минуту. Никого не напряжёт.
один клиент конечно не напряжёт. а если их 5000? 5000 пустых обращений в минуту....
...
Рейтинг: 0 / 0
26.04.2014, 20:38
    #38626693
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
вадяодин клиент конечно не напряжёт. а если их 5000? 5000 пустых обращений в минуту....При пяти тысячах клиентов опрос два раза в минуту станет последней проблемой с которой вы будете разбираться. Если, конечно, вообще заметите эту проблему.
...
Рейтинг: 0 / 0
26.04.2014, 21:07
    #38626700
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Basil A. Sidorovвадяодин клиент конечно не напряжёт. а если их 5000? 5000 пустых обращений в минуту....При пяти тысячах клиентов опрос два раза в минуту станет последней проблемой с которой вы будете разбираться. Если, конечно, вообще заметите эту проблему.

5000 клиентов в минуту = 80 в секунду не много, но это пустые обращения,
и куча коонектов к базе..
и оперативность получения данных клиентом страдает...
при ws данные на клиенте обновляются практически "мнгновенно".
и загрузка сервера намного меньше - соответственно, требования к серверу меньше.
если есть современное, более качественное решение - зачем использоать старое?
я работал с прочими решениями, куча головняков.
особенно когда данные от сервера - через довольно долгие запросы/процедуры.
причем через ws клиент может получать данные по любому количеству процессов.
к примеру куча графиков на экране и все отображают данные в реальном времени, а не с задержкой.
и главное - логика проще некуда, пришли данные - изменения в базу при помощи хранимки, из этой же храмнимки данные для рассылки.
кода минимум.
...
Рейтинг: 0 / 0
26.04.2014, 21:12
    #38626703
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
вадя5000 клиентов в минуту = 80 в секунду не много, но это пустые обращения,
и куча коонектов к базе..Если "куча коннектов", то это кривые руки. Никто не заставляет брать соединение из пула раньше времени и держать его вне пула дольше, чем надо.
...
Рейтинг: 0 / 0
26.04.2014, 21:31
    #38626714
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
если есть инструмент, при котором множество проблем просто не возникают, и поэтому незачем задумываться даже голове с прямыми руками, надо использовать этот инструмент, а на голову загружать более нужными задачами.
я ведь не говорю что решений нет без ws, просто с ws решения более красивые и дешёвые. и прямые ручки могут заработать больше.
при ws (повторюсь) клиент может быть и браузером, и приложением - серверу на это наплевать - он отправляет данные однообразно, не надо делать разный код для отправки браузеру и приложению.
...
Рейтинг: 0 / 0
26.04.2014, 21:54
    #38626735
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
вадяпри ws (повторюсь) клиент может быть и браузером, и приложением - серверу на это наплевать - он отправляет данные однообразно, не надо делать разный код для отправки браузеру и приложению.На уровне HTTP не различаются браузеры и приложения.
...
Рейтинг: 0 / 0
26.04.2014, 21:57
    #38626741
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Basil A. Sidorov,
ты отвергаешь ws?
или?
ты их пробовал?
...
Рейтинг: 0 / 0
26.04.2014, 22:21
    #38626768
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
Atum1модель сайта такая : клиент подключился - авторизовался на сайте - и больше ничего не делает - только смотрит "мультик" и и посылает запрос на обновление данных. ( ajax GET getInfo()) - ему вернеться json .

чтобы не мучить сервер постоянные запросами о том обновились ли данные или нет - можно пойти таким путем
(асинхронный чат или сокеты)
всё таки - связь двухсторонняя или нет?
Асинхронность \ чат \ простой сайт с пулом - никак не связаны между собой.
Выбери из 3-х вопросов - один.
По 1 вопросу у тебя не требуется асинхронность, чат и обновление клиента с сервера.
...
Рейтинг: 0 / 0
26.04.2014, 22:21
    #38626771
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
вадя,
для ws тут нет ТЗ imho
...
Рейтинг: 0 / 0
26.04.2014, 23:12
    #38626810
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
любой из 3 просто решается через ws
...
Рейтинг: 0 / 0
26.04.2014, 23:16
    #38626814
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
вадялюбой из 3 просто решается через ws
ты отвергаешь HTTP?
или?
ты их пробовал?
...
Рейтинг: 0 / 0
26.04.2014, 23:26
    #38626823
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
вадяты отвергаешь ws?
или?
ты их пробовал?Я отвергаю восторги по поводу их появления.
Нет, не пробовал и не собираюсь.
...
Рейтинг: 0 / 0
26.04.2014, 23:31
    #38626826
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Async servlet db connection
я не отвергаю HTTP
я делаю проекты на ws.
и впервом проекте (когда ws ещё только появились) у меня используется два протокола jax-ws и ws
ws "идет поверх" http, поэтому отвергать http просто неразумно.
я не отвергаю старые инструменты, я утверждаю, что с новым инструментом (ws/wss) можно пржние проблемы решать намного проще, а некоторых проблем просто нет.
у ws есть один недостаток -ie10
отлично с ними работают FF и CHrome.
поэтому выбор зависит от задачи.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Async servlet db connection / 25 сообщений из 54, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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