powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильная организация клиент-серверной программы с БД на сервере/ах
10 сообщений из 10, страница 1 из 1
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38511917
ValeOFY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех, уважаемые форумчане!

Имеется программа, состоящая из серверной и клиентской частей. Обе части работают с БД 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 Вариант с одним сервером
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38512254
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeOFY,

1. Желательно.
2. Без замера никто точно вам нескажет. Это относится и к 1 вопросу.
Мне видна только последняя картинка. Но думаю мой ответ вам понятен.
3. Посмотрите сколько примерно "кушает" один запрос и помножьте на предполагаемое количество подключений. Добавьте еще 30% и получите примерную цифру.
4. На просторах есть масса скриптов по нагрузке БД.
Хотя по уму у компаний разработчиков есть стенды которые позволяют нагрузить не только БД но и канал. Т.е. получить более полную картину.

Еще зависит от того как написано приложение (логика на клиенте или сервере, распределение памяти, очистка стеков и т.п.), построена БД, насколько криво слеплены скрипты, ... Т.е. вопрос железа далеко не первостепенный.
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38512619
ValeOFY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за ответ.
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38512821
ValeOFY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос:
5. Клиентские программы должны обращаться к БД через какую-то программную прослойку на сервере(назову ее "ПРИМНИК ЗАПРОСОВ")(Рис.1), или непосредственно посылать запросы в БД(Рис.2)?

Как я понимаю, если злоумышленник сломает клиент, который работает непосредственно с БД через SQL-запросы, он получит всю информацию для того, чтобы перегрузить БД. А в "ПРИЕМНИКЕ ЗАПРОСОВ" можно реализовать защиту от избыточных запросов со стороны клиента, плюс в клиенте не будет никакой информации про структуру БД.

Как это обычно реализуется?

Рис.1 Через "ПРИЕМНИК ЗАПРОСОВ"


Рис.2 Непосредственно к БД
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38512876
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeOFYКак я понимаю, если злоумышленник сломает клиент, который работает непосредственно с БД через SQL-запросы, он получит всю информацию для того, чтобы перегрузить БД.

У Вас предполагается работа с базой из внешнего мира, что ли? Тогда да, открытый интерфейс БД в Интернет выставляют редко.
В качестве "приемника запросов" обычно выступает web-server, в котором есть уже и защита от DDoS, и авторизация, и всякие другие прибамбасы.
А если работа идет из внутренней защищенной сети, то проблемы "злоумышленников, перегружающих БД" обычно решаются по-другому :)
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38512903
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ValeOFY5. Клиентские программы должны обращаться к БД через какую-то программную прослойку на сервере(назову ее "ПРИМНИК ЗАПРОСОВ")(Рис.1), или непосредственно посылать запросы в БД(Рис.2)?

"ПРИМНИК ЗАПРОСОВ" - это 3-х звенная система массового обслуживания с очередями и и т.д. Применяется при неизвестном количестве клиентов.
Если количество клиентов известно, то каждый клиент непоср. цепляется к БД (классический клиент сервер) и никаких очередей.
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38513087
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeOFY5. Клиентские программы должны обращаться к БД через какую-то программную
прослойку на сервере(назову ее "ПРИМНИК ЗАПРОСОВ")(Рис.1), или непосредственно посылать
запросы в БД(Рис.2)?
"БД" это файл на диске (или несколько). "Непосредственно посылать запросы" ей не
получится. Для приёма запросов существуют СУБД, которые принимают запросы и исполняют их,
сохраняя информацию в БД или наоборот - отсылая её на клиента.

"Перегрузить БД" можно в любом случае, даже ничего не ломая.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38513460
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовать на одном сервере можно. Только так не делают, поскольку система получается плотно связанной и не масштабируемой. Обычно стараются делить систему на компоненты, которые можно запустить на как можно большем количестве отдельных железяк.

Например, можно запустить много экземпляров парсера каждый на своём сервере. И лить будет каждый в свою базу. Понятны требования. Широкой канал в интернет. Очень быстрые на запись диски в базе. Процессор не важен. Память не важна.

Далее данные реплицируются в другую базу, где строятся отчёты и выборки. Там нужны процессоры, память, быстрые на чтение диски.

Это так, вариант архитектуры.
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38513510
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeOFY,

5. Особо значения неимеет, т.к. тот же клиент подключаясь напрямую к БД подключается как правило под правами только на чтение (и как правило не всей БД а отдельных таблиц). Так что бояться что кто-то снаружи поменяет данные в БД при таком раскладе глупо. Опять же есть способы ограничить количество подключений и т.п.
Если пойдете по пути 2 серверов (п.2) то необходим будет сервер приложения (веб-сервер) который и будет разруливать нагрузку и доступы.

Вы сначала сваяйте БД и напишите все скрипты. Написать клиента потом особой сложности несоставит. Если сначала будете делать клиента то так или иначе будете постоянно переделывать.
...
Рейтинг: 0 / 0
Правильная организация клиент-серверной программы с БД на сервере/ах
    #38514284
ValeOFY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю всех ответивших! Масса полезной информации!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильная организация клиент-серверной программы с БД на сервере/ах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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