|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Доброго времени суток. Нужен совет по архитектуре веб приложения. Перед началом разработки пытаюсь определиться с общим видом высоко нагруженного многопользовательского веб приложения, с учетом возможности последующего масштабирования. Первоначальная схема следующая (для веб приложения) client -> nginx ->memcached -> apache -> memcached-> pl-proxy -> pgbouncer -> postgresql. Схема( прошу прощения за кривость, ничего под рукой кроме mspainta нет) На картинке все узлы которые в одном экземпляре могут дублироваться для отказоустойчивости. "p/ proxy" на рисунке это криво нарисованный pl/proxy от skype. Проблема в том, что клиент может быть не только браузер но и десктоп приложение, и мобильный клиент. Под знаком вопрос на рисунке ( по моему мнению ) должно стоять что-то, что балансирует запросы от десктоп-клиента, кеширует ответы, и организует взаимодействие с API которой лежит на бэкенде веб серверов (на рисунке Application API). Не знаю как правильно это организовать. Подскажите пожалуйста, как правильно мобильный(приложение) и десктоп(приложение) клиенты должны взаимодействовать с архитектурой такого веб приложения. Критика приветствуется, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2010, 12:00 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
проблема в том, что архитектура зависит от выбранного фреймворка-каркаса вэб-приложения. Т.к. масштабируемость уже "зашита" в них. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2010, 15:46 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Zeleboba, Если бы это была винда и .net, то с помощью WCF было бы круто. Для java не знаю - вот RMI , говорят... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 12:05 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Rmi это да, но это просто способ соединения и вызова удаленных функций. Он , к сожалению, не дает ответа на вопрос о балансирке нагрузки ( распределении запросов ) по серверам с API. Серверов приложений то несколько. А также не дает ответа о том как грамотно реализовать кеширование ответов. Есть идея воспользоваться следующим способом - транслировать каким-то образом запросы/ответы от и к десктоп клиенту в http запросы с какой-то пометкой что они от десктоп клиента и взаимодействовать через nginx как и само веб приложение ( далее ВП ). Но я не знаю практикуется ли такой способ - мне он кажется кривым. На самом деле задача очень распространенная - большинство тех кто сейчас делает многопользовательские ВП либо сразу делают клиента для мобильных/десктоп приложений либо закладывают возможность на будущее. Но какой-то внятной статьи на эту тему мне найти не удалось( пока ). Да, кстати - многие популярные веб приложения открывают свой API для всех остальных в свободное пользование. Так как, по моему представлению, схема ВП у них похожа на ту что я нарисовал , то это означает что у них уже реализована балансировка запросов к их API(распределение нагрузки запросов по серверам с API) и кеширование ответов. Это мне и нужно - вопрос только в том какие готовые(по возможности) технологии нужно использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 15:02 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Хотя больше интересны балансировка т.к кеширование уже есть позади серверов с api ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 15:13 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Непонятно что такое в этой схеме "Apache"? Apache Httpd (зачем он нужен при наличии в качестве фронтэнда nginx)? Apache Tomcat (при таком размахе почему не полноценный JavaEE-сервер)? Полноценный JavaEE сервер приложений уже имеет встроенный функционал по кэшированию объектов и кластеризации приложения. Не web-клиенты на Java взаимодействуют с серверной частью через RMI-IIOP, или, если клиент написан не на Java, Corba/IIOP, SOAP. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2010, 12:03 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Спасибо за комментарии KachalovНепонятно что такое в этой схеме "Apache"? Apache Httpd (зачем он нужен при наличии в качестве фронтэнда nginx)? Apache Tomcat (при таком размахе почему не полноценный JavaEE-сервер)? Apache имеется в виду полноценный сервер приложений. KachalovПолноценный JavaEE сервер приложений уже имеет встроенный функционал по кэшированию объектов и кластеризации приложения. Вы правы. Я выбрал такую схему просто потому что она является на данный момент распространенной практикой в промышленных приложениях. KachalovНе web-клиенты на Java взаимодействуют с серверной частью через RMI-IIOP, или, если клиент написан не на Java, Corba/IIOP, SOAP. Согласен, но как оранизовать связку клиент - несколько серверов с api? Его запрос 1 а серверов приложений много. На какой из серверов клиенту подключаться? Кто-то дожен так-же как и в веб приложении заниматься распределением запросов от клиента. В веб приложении эту функцию как раз выполняет nginx. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2010, 20:49 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Я не ответил про nginx KachalovНепонятно что такое в этой схеме "Apache"? Apache Httpd (зачем он нужен при наличии в качестве фронтэнда nginx)? Apache Tomcat (при таком размахе почему не полноценный JavaEE-сервер)? Nginx в моей схеме выполняет роль балансировщика (распределителя)запросов к серверам apache. Это его основная функция в данной схеме. Также он может хранить и отдавать часть статического контента. То есть nginx 1 а серверов приложений много. Вроде является распространенной практикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2010, 20:56 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Хм. А какая нагрузка будет и какой профиль и какие задачи? Вообще, если разделить уровень бизнес-логики и уровень презентации, то все станет несколько проще. Т.е. есть сервер приложений, сидящий за тем же nginx, а перед ним - или JSPшки (или, лучше, какой-нибудь другой шаблонизатор) или десктопы или что-то еще. И, да, memcached - это средство для кэширования, что оно делает перед applayer? Ну и, конечно, полноценные J2EE сервера для полноценных приложений использовать не стоит. И, да, почему PostgresSQL? Или это наиболее знакомая БД? А вообще балансировку нагрузки можно делать разными способами - nginx, cisco, балансером на FreeBSD etc - это, в общем, уже что больше знакомо сисадмину :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 03:19 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
DPH3Хм. А какая нагрузка будет и какой профиль и какие задачи? Я бы отнес это к многопользовательской интеллектуальной игре (без флеша, и графики, легкий javascript) где пользователи делятся на группы и в этой группе выполняют различные действия. Нагрузка не известна, но в группе может быть не ограниченное количество одновременно выполняющих простые действия пользователей. Причем результаты действий других пользователей видны если не сразу то с небольшой задержкой. Масштабирование заложить хотелось бы сразу таким образом, чтобы масштабировать горизонтально можно было бы просто с помощью добавления параметров с новыми серверами в настройках узлов . DPH3Вообще, если разделить уровень бизнес-логики и уровень презентации, то все станет несколько проще. Согласен. Можно вообще разнести презентацию и api по разным серверам. Для простоты представим что на рисунке теперь не 3 сервера с презентацией и api а 6 серверов - 3 с презентацией и 3 с api. Теперь точка входа для взаимодействия для всех типов клиентских приложений а так же для уровня презентации это сервера с api. DPH3Т.е. есть сервер приложений, сидящий за тем же nginx, а перед ним - или JSPшки (или, лучше, какой-нибудь другой шаблонизатор) или десктопы или что-то еще. Описал как раз такой вариант. Но тогда возникает тот-же вопрос который я все время задаю в своих постах выше: Какой компонент будет заниматься балансировкой запросов от клиентов и равномерно распределять по серверам с api? Например мой мобильный клиент должен обратиться к API бизнес логики. К какому серверу с API ему коннектиться? Позже, допустим, будет не 3 а 10 серверов с API. Как организовать распределение таких вот клиентских запросов к серверам с api? Как быть если клиент взамиодействует с api по rmi? Насколько я помню rmi клиенту надо явно указать на какой сервер коннектиться. А мне нужно к кластеру. Можно , конечно, самому написать балансировщик с одной точкой входа но скорее всего я просто плохо разбираюсь в теме и есть стандартные решения которые нужно использовать. DPH3И, да, memcached - это средство для кэширования, что оно делает перед applayer? Да, я на рисунку просто пытался показать что кешировать можно не только страницы но и обьекты, То есть и элементы презентации и элементы логики. memcached один. DPH3Ну и, конечно, полноценные J2EE сервера для полноценных приложений использовать не стоит.tomcat презентация + nginx бизнес логика? DPH3И, да, почему PostgresSQL? Или это наиболее знакомая БД? Из открытых бд на мой взгляд наиболее перспективная. Выбор был между mysql и postgre. DPH3А вообще балансировку нагрузки можно делать разными способами - nginx, cisco, балансером на FreeBSD etc - это, в общем, уже что больше знакомо сисадмину :) Чем делать балансировку rmi соединений если клиент взаимодействует с его помошью? Cпасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 17:03 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
DPH3 Какой компонент будет заниматься балансировкой запросов от клиентов и равномерно распределять по серверам с api? Если у тебя API - stateless и через http (что вообще-то для данной задачи вполне разумно), то вариантов куча: 1) nginx 2) cisco-вый железный роутер 3) софтовый роутер на каком-нибудь *nix (там куча более-менее стандартных вариантов, в РФ традиционно предпочитают решения на FreeBSD) Конкретный вариант - пусть выбирает сисадмин, что ему более знакомо и что вписывается в бюджет. Снаружи, понятное дело, есть только один общий на весь кластер IPшник. DPH3Ну и, конечно, полноценные J2EE сервера для полноценных приложений использовать не стоит.tomcat презентация + nginx бизнес логика? Э, бизнес-логика - это простые сервлеты под томкатом, разумеется. Презентационный слой - на том движке, на котором сможешь. Лучше - простой шаблонизатор. Вон, есть Python-овский шаблонизатор и интеграционный уровень от hh.ru - вполне ничего. Или Яндексовский XScript. DPH3И, да, почему PostgresSQL? Или это наиболее знакомая БД? Из открытых бд на мой взгляд наиболее перспективная. Выбор был между mysql и postgre. MySQL, конечно, не о чем. Но из бесплатных есть еще как минимум IBM DB2 Express C. Постгресс - это, конечно, хорошо, но глюков хватает. Чем делать балансировку rmi соединений если клиент взаимодействует с его помошью? Для начала - а не надо вообще использовать rmi в общении с клиентом. Так же, как и не надо писать клиента на Java (ну, в крайнем случае, можно на Eclipse RCP - если граничные условия подходят). Если у тебя общий API для всех (а это - разумно), то это какой-нибудь REST+Json, оттуда и пляши. Впрочем, rmi тоже должно быть пофиг, ему отдается ip сервера или кластера. Ему-то какая разница. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 17:25 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
DPH3, Спасибо за полезные комментарии. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 15:13 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
DPH3Лучше - простой шаблонизатор. Вон, есть Python-овский шаблонизатор и интеграционный уровень от hh.ru - вполне ничего. Прошу прощения что влезаю с неким оффтопиком, просто заинтересовало о чем речь в выделенном мной фрагменте цитаты? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 12:22 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
ZelebobaApache имеется в виду полноценный сервер приложений. - в линейке продуктов от Apache Foundation нет "полноценного" сервера приложений. В контексте Java приложений, "полноценный сервер приложений" - это продукт полностью реализующий JavaEE-стек (пример: GlassFish, WebLogic, WebSphere, JBoss APP Server) ZelebobaNginx в моей схеме выполняет роль балансировщика (распределителя)запросов к серверам apache. Это его основная функция в данной схеме. Также он может хранить и отдавать часть статического контента. То есть nginx 1 а серверов приложений много. ... Чем делать балансировку rmi соединений если клиент взаимодействует с его помошью? - балансировку нагрузки между серверами приложений можно производить простым DNS Round Robin, также этот вопрос подробно освещен в Интернет: тынц DPH3Ну и, конечно, полноценные J2EE сервера для полноценных приложений использовать не стоит. - не полноценным не стоит рассуждать о полноценном. DPH3бизнес-логика - это простые сервлеты под томкатом, разумеется. - это вариант, причем не самый лучший, особенно с учетом того что ТС нуждается не только в web-клиенте DPH3MySQL, конечно, не о чем - в сочетании с JPA/EJB легко посоревнуется в производительности и гибкости с любым другим решением DPH3не надо писать клиента на Java ТС: Проблема в том, что клиент может быть не только браузер но и десктоп приложение, и мобильный клиент . - очевидно клиента для мобилы надо писать на Python и отдавать в мобилу JSON Блин, Java специально для этого и создана - конечно на Java! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 13:45 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
OZKAПрошу прощения что влезаю с неким оффтопиком, просто заинтересовало о чем речь в выделенном мной фрагменте цитаты? Вообще, всяких XSLT-ориентированных шаблонизаторов сейчас на рынке несколько. Есть XScript - это разработка Яндекса, сейчас в open-source, XSLT + lua Есть Frontik - это разработка hh.ru (по мотивам XScript), XSLT+Python https://github.com/hhru/frontik http://andrewsumin.livejournal.com/ Мое мнение: для быстрой и "грязной" разработки - лучше фронтик. для больших и сложных проектов лучше XScript В XScript четче отделятся бизнес-логика от логики отображени, а в фронтике постоянно есть соблазн их перемешать. Основная беда XSLTшных шаблонизаторов - не самая замечательная производительность, особенно для сложных проектов. Но так как горизонтальное масштабирование на уровне фронтов для подобных проектов проблемы не составляет - то производительность не особо существенна, дешевле поставить еще парочку машин ) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 17:20 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Kachalov- балансировку нагрузки между серверами приложений можно производить простым DNS Round Robin Опс.. Хм, а перед тем, как давать подобные советы - в продакшне под высокой нагрузкой подобную схему использовали? И как? - в сочетании с JPA/EJB легко посоревнуется в производительности и гибкости с любым другим решением О, нагруженную систему на сочетании EJB и MySQL - в студию. С техническими решениями, параметрами нагрузки и стоимостью разработки. Хуже решения как-то даже и в голову не приходит.... Вообще, JPA и нагрузка - сочетание очень сомнительное и для очень странных решений. Личный опыт подобных проектов есть? Если нет - то и не стоит предлагать такое. Блин, Java специально для этого и создана - конечно на Java! Опс. J2ME на мобильниках еще кое-как живет, на смартфонах уже, фактически, умерла. Увы, java - в первую очередь серверное решение. Ну, еще Android, конечно (хотя там та еще Java). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 17:34 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Опс. J2ME на мобильниках еще кое-как живет, на смартфонах уже, фактически, умерла. Увы, java - в первую очередь серверное решение. Ну, еще Android, конечно (хотя там та еще Java). Я как-раз присматриваюсь к Android, а там только java и используется. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2010, 14:23 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Zeleboba, Угу. Но все-равно рекомендую использовать не rmi в качестве транспорта, а что-то более универсальное. Меньше проблем будет. Кстати, когда будете проектировать API, не забудьте, что клиенты и сервера обновляются отнюдь не синхронно. Поддержку версионности лучше сразу добавлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2010, 14:57 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
DPH3Но все-равно рекомендую использовать не rmi в качестве транспорта, а что-то более универсальное. - CORBA? SOAP? Все эти транспортные протоколы поддерживает JavaEE-сервер DPH3Кстати, когда будете проектировать API, не забудьте, что клиенты и сервера обновляются отнюдь не синхронно. Поддержку версионности лучше сразу добавлять. - Java Web Start? прекрасная технология для stanalone-приложений которые периодически нуждаются в обновлениях ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2010, 15:36 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Kachalov, Ой. Нормальных ORB-серверов под Java просто нет, а SOAP нужен примерно там же, где и EJB 2.0 (т.е. практически нигде). Сейчас проще и правильнее использовать http(s) в качестве транспорта, с REST+JSON поверх. А уж идею использовать JavaWebStart для андроида повеселила, да... К тому же проблему версионности JWS все равно не решает нефига :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2010, 23:43 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
DPH3Ой. Нормальных ORB-серверов под Java просто нет - Вам наверняка видней DPH3SOAP нужен примерно там же, где и EJB 2.0 (т.е. практически нигде). - про SOAP насмешили, а что касается EJB 2.1, то он нужен там где он уже есть, в остальных случаях нужен EJB 3.1 DPH3Сейчас проще и правильнее использовать http(s) в качестве транспорта, с REST+JSON поверх. - не для всех программирование это делание web-сайтов DPH3А уж идею использовать JavaWebStart для андроида повеселила, да... К тому же проблему версионности JWS все равно не решает нефига :) - причем тут Android? ведь ясно написал: KachalovJava Web Start? прекрасная технология для standalone-приложений которые периодически нуждаются в обновлениях - а про обновления, читаем в первоисточнике ( Lesson: Java Web Start ): авторUpdates to a Java Web Start application are automatically downloaded when the application is run standalone from the user's desktop ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 10:50 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
DPH3, Тоже склоняюсь к http+json. Посмотрел что foursquare перешел на это в своем api. Friendfeed тоже смотрю построил на этом свой API. автор Сейчас проще и правильнее использовать http(s) в качестве транспорта, с REST+JSON поверх. Итак, как я понял, итог такой: Я использую единый API для всех клиентов - в моем случае это сервера с сервлетами стоящие за nginx. Запросы к API приходят на nginx который и занимается балансировкой всех запросов от всех клиентов на сервера с API. Клиенты: браузер, iphone, android - ну может еще десктоп. Все клиенты общаются с единым сервером с API через nginx. Браузер: В случае с клиентом-браузером перед API стоит еще слой который готовит html для браузера который тоже как и все остальные клиенты использует API для генерации html. В html который отправляется клиенту будет также java script который уже в браузере клиента через ajax который по мере надобности будет обращаться к тому же API и брать json обьекты. Iphone и Android: Мобильные клиенты используют библиотеки для работы с json и http и взаимодействуют напрямую с API из мобильного приложения. Мобильные приложения должны, однако, обновляться через RPC ( видимо). Все. Если я где-то ошибся, пожалуйста, поправте. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 15:34 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
ZelebobaDPH3, Тоже склоняюсь к http+json. Посмотрел что foursquare перешел на это в своем api. Friendfeed тоже смотрю построил на этом свой API. А также Facebook, Yandex, CoachDB и т.д. Очередной common way, в общем. Все клиенты общаются с единым сервером с API через nginx. Единственное - что схема аутентификации/авторизации может быть разная для разных типов клиента. Но это от задачи зависит. (hint - посмотрите на OAuth 2.0) Браузер: В случае с клиентом-браузером перед API стоит еще слой который готовит html для браузера который тоже как и все остальные клиенты использует API для генерации html. В html который отправляется клиенту будет также java script который уже в браузере клиента через ajax который по мере надобности будет обращаться к тому же API и брать json обьекты. А тут, обычно, или-или. Или мы генерим html на сервере - и тогда много js на клиенте нам и не очень нужно. Или генерим полностью на сервере - и тогда нам и шаблонизатор html не нужен вообще. Решение - зависит от задач. Ну, можно и смешивать, конечно, но аккуратно. Мобильные приложения должны, однако, обновляться через RPC ( видимо). И для айфона и для андроида схема автоматического обновления предусмотрена внутри самой системы, так что тут можно не задумываться. Благо все равно распространять приложения проще через маркет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2010, 14:30 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
DPH3 , Спасибо за ответ. А тут, обычно, или-или. Или мы генерим html на сервере - и тогда много js на клиенте нам и не очень нужно. Или генерим полностью на сервере - и тогда нам и шаблонизатор html не нужен вообще. Решение - зависит от задач. Ну, можно и смешивать, конечно, но аккуратно. Честно говоря, до конца фразу не понял: .Или мы генерим html на сервере.. и Или генерим полностью на сервере... - не понял в чем разница тут - генерим в обоих случаях на сервере, но в одном случае не полностью? Я правильно понимаю, что в любом случае слой презентации, который занимается генерацией html (сервер на котором мы полностью генерим html) является как бы клиентом по отношению к этому единому api, и делает к этому серверу с api http запросты - точно так же как это делают и мобильные клиенты, результаты запросов использует для генерации html и результат отправляет в браузер? То есть моб клиенты коннектятся непосредственно к серверу с api(json на http), а браузер по http коннектиться к серверу со слоем презентации, а слой презентации далает запросы на сервер с api (json на http). Иными словами связка в случае с web приложением такая : браузер --http-> сервер презетнации --http+json--> сервер с api ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2010, 11:23 |
|
Архитектура web/desktop/mobile приложения
|
|||
---|---|---|---|
#18+
Zeleboba Честно говоря, до конца фразу не понял: .Или мы генерим html на сервере.. и Или генерим полностью на сервере... - не понял в чем разница тут - генерим в обоих случаях на сервере, но в одном случае не полностью? Ой, опечатка ( Конечно, во втором случае - полностью на клиенте (в браузере). Прошу прощения ( Я правильно понимаю, что в любом случае слой презентации, который занимается генерацией html (сервер на котором мы полностью генерим html) является как бы клиентом по отношению к этому единому api, и делает к этому серверу с api http запросты - точно так же как это делают и мобильные клиенты, результаты запросов использует для генерации html и результат отправляет в браузер? С идеальном случае - да. Но вот только далеко не все шаблонизаторы/веб-каркасы могут работать с json, поэтому может понадобиться какой-то промежуточный слой. Впрочем, если html формируется на клиенте (браузере), то такой слой не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2010, 17:47 |
|
|
start [/forum/topic.php?fid=33&fpage=28&tid=1548139]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
102ms |
get tp. blocked users: |
1ms |
others: | 312ms |
total: | 496ms |
0 / 0 |