|
|
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
Приветствую всех, уважаемые форумчане! Имеется программа, состоящая из серверной и клиентской частей. Обе части работают с БД MS SQL Server 2012. Серверная часть - парсер, который раз в сутки по несколько часов (а возможно и круглосуточно) собирает информацию с сайтов, организует ее и заносит в БД. Предполагается постоянное плотное использование интернет-канала, а в одну из таблиц SQL Server'а постоянно заносятся собранные данные командой INSERT. После выполнения цикла основных работ по сбору данных, парсер будет некоторое время плотно работать с SQL Server'ом: многими таблицами, копировать, объединять, создавать новые и.т.п. Куча разных комманд, большой объем данных. Предполагается сильная нагрузка на несколько минут в сутки. ("Активная фаза") Клиентская часть - просмотрщик данных из некоторых таблиц БД. (SELECT + JOIN). Эти таблицы обновляются 1 раз в сутки (когда парсер выполняет "активную фазу". Предполагается большое количество одновременно активных клиентов (>1000), нагрузка изменяется соответственно времени суток. Вопросы: 1. Для реализации такой системы, обязателен выделенный сервер? 2. Можно ли это реализовать на одном сервере с широкополосным интернет-каналом, или использовать 2 независимых сервера - один для серверной, другой - для клиентской частей программы, с отдельными интернет-каналами, а используемые клиентом таблицы просто копировать на "клиентский сервер" c "серверного" после обновления? ( надеюсь понятно). Во вложениях я нарисовал что-то типа принципиальных схем. 3. Какова должна быть пропускная способность интернет-канала/каналов. Как ее определить исходя из предполагаемой нагрузки от клиентских запросов? 4. Позволяет ли функционал MS SQL Server 2012 сымитировать одновременную запросы на сервер от большого числа клиентов, для определения производительности БД? В общем, как правильнее физически организовать такую структуру для минимизации узких мест в производительности? Я понимаю, что некоторые вещи можно сказать только применительно к конкретной программе и БД. Буду рад любой помощи. Рис.1 Вариант с двумя серверами Рис.2 Вариант с одним сервером ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 12:11 |
|
||
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
ValeOFY, 1. Желательно. 2. Без замера никто точно вам нескажет. Это относится и к 1 вопросу. Мне видна только последняя картинка. Но думаю мой ответ вам понятен. 3. Посмотрите сколько примерно "кушает" один запрос и помножьте на предполагаемое количество подключений. Добавьте еще 30% и получите примерную цифру. 4. На просторах есть масса скриптов по нагрузке БД. Хотя по уму у компаний разработчиков есть стенды которые позволяют нагрузить не только БД но и канал. Т.е. получить более полную картину. Еще зависит от того как написано приложение (логика на клиенте или сервере, распределение памяти, очистка стеков и т.п.), построена БД, насколько криво слеплены скрипты, ... Т.е. вопрос железа далеко не первостепенный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 15:45 |
|
||
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
Благодарю за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 23:07 |
|
||
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
Еще вопрос: 5. Клиентские программы должны обращаться к БД через какую-то программную прослойку на сервере(назову ее "ПРИМНИК ЗАПРОСОВ")(Рис.1), или непосредственно посылать запросы в БД(Рис.2)? Как я понимаю, если злоумышленник сломает клиент, который работает непосредственно с БД через SQL-запросы, он получит всю информацию для того, чтобы перегрузить БД. А в "ПРИЕМНИКЕ ЗАПРОСОВ" можно реализовать защиту от избыточных запросов со стороны клиента, плюс в клиенте не будет никакой информации про структуру БД. Как это обычно реализуется? Рис.1 Через "ПРИЕМНИК ЗАПРОСОВ" Рис.2 Непосредственно к БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 10:07 |
|
||
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
ValeOFYКак я понимаю, если злоумышленник сломает клиент, который работает непосредственно с БД через SQL-запросы, он получит всю информацию для того, чтобы перегрузить БД. У Вас предполагается работа с базой из внешнего мира, что ли? Тогда да, открытый интерфейс БД в Интернет выставляют редко. В качестве "приемника запросов" обычно выступает web-server, в котором есть уже и защита от DDoS, и авторизация, и всякие другие прибамбасы. А если работа идет из внутренней защищенной сети, то проблемы "злоумышленников, перегружающих БД" обычно решаются по-другому :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 11:13 |
|
||
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
ValeOFY5. Клиентские программы должны обращаться к БД через какую-то программную прослойку на сервере(назову ее "ПРИМНИК ЗАПРОСОВ")(Рис.1), или непосредственно посылать запросы в БД(Рис.2)? "ПРИМНИК ЗАПРОСОВ" - это 3-х звенная система массового обслуживания с очередями и и т.д. Применяется при неизвестном количестве клиентов. Если количество клиентов известно, то каждый клиент непоср. цепляется к БД (классический клиент сервер) и никаких очередей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 11:44 |
|
||
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
ValeOFY5. Клиентские программы должны обращаться к БД через какую-то программную прослойку на сервере(назову ее "ПРИМНИК ЗАПРОСОВ")(Рис.1), или непосредственно посылать запросы в БД(Рис.2)? "БД" это файл на диске (или несколько). "Непосредственно посылать запросы" ей не получится. Для приёма запросов существуют СУБД, которые принимают запросы и исполняют их, сохраняя информацию в БД или наоборот - отсылая её на клиента. "Перегрузить БД" можно в любом случае, даже ничего не ломая. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 13:47 |
|
||
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
Реализовать на одном сервере можно. Только так не делают, поскольку система получается плотно связанной и не масштабируемой. Обычно стараются делить систему на компоненты, которые можно запустить на как можно большем количестве отдельных железяк. Например, можно запустить много экземпляров парсера каждый на своём сервере. И лить будет каждый в свою базу. Понятны требования. Широкой канал в интернет. Очень быстрые на запись диски в базе. Процессор не важен. Память не важна. Далее данные реплицируются в другую базу, где строятся отчёты и выборки. Там нужны процессоры, память, быстрые на чтение диски. Это так, вариант архитектуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 17:45 |
|
||
|
Правильная организация клиент-серверной программы с БД на сервере/ах
|
|||
|---|---|---|---|
|
#18+
ValeOFY, 5. Особо значения неимеет, т.к. тот же клиент подключаясь напрямую к БД подключается как правило под правами только на чтение (и как правило не всей БД а отдельных таблиц). Так что бояться что кто-то снаружи поменяет данные в БД при таком раскладе глупо. Опять же есть способы ограничить количество подключений и т.п. Если пойдете по пути 2 серверов (п.2) то необходим будет сервер приложения (веб-сервер) который и будет разруливать нагрузку и доступы. Вы сначала сваяйте БД и напишите все скрипты. Написать клиента потом особой сложности несоставит. Если сначала будете делать клиента то так или иначе будете постоянно переделывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 18:39 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38514284&tid=1541029]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 133ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...