Вопрос

Привет! Мы разрабатываем мультитенантное приложение в Asp.Net с отдельной базой данных для каждого арендатора, в котором одним из требований является мониторинг использования полосы пропускания для каждого арендатора.

Я пытался выполнить поиск, но не нашел особой помощи по этой теме. Мы хотим точно отслеживать, какая пропускная способность используется для каждого арендатора, при этом каждый арендатор может иметь свой собственный домен верхнего уровня, поддомен или комбинацию того и другого.

Итак, каковы доступные варианты? Те, о которых я могу думать, могут быть

  1. Мониторинг журналов IIS означает отдельное приложение, которое будет рассчитывать пропускную способность для каждого арендатора.
  2. Регистрируйте каждый запрос и ответ арендатора из приложения, а затем на основе этого рассчитывайте общее использование полосы пропускания.
  3. Используйте некоторые сторонние компоненты, если они доступны.

Итак, какой подход, по вашему мнению, будет лучшим, и есть ли другой способ сделать это?

Это было полезно?

Решение

Хорошо, вот идея (которую я не проверял, оставлю это вам)

На global.asax используйте одну из этих функций (найдите ту, которая имеет действительный окончательный размер)

Application_PostRequestHandlerExecute
Application_ReleaseRequestState

и получите размер, который вы отправили

Response.Filter.Length

Нет необходимости упоминать, что вы получаете имя файла вызова, используя

HttpContext.Current.Request.Path

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

Здесь следует отметить, что вам нужно сначала проверить эту идею, чтобы увидеть, работает ли она, и, возможно, улучшить ее, и, по моему мнению, если вы сжимаете страницы на сервере, их длина неправильная, и, возможно, вам нужно сжать их на Global.asax, чтобы иметь фактическую длину.

Надеюсь, это поможет.

Другие советы

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

По моему опыту, попытка сегментировать трафик на основе хоста затруднена.Вместо этого, если вы предоставите каждому арендатору собственный IP-адрес для приложений, вы сможете найти программы, которые будут отслеживать пропускную способность на основе IP.

ДОБАВЛЕНИЕ Структура IIS заключается в том, что у вас есть один веб-сайт для управления ими всеми для всех арендаторов, и при входе в систему система разветвляется на соответствующую базу данных?Если это так, это может создать проблемы с управлением версиями, поскольку все сайты арендаторов должны будут иметь одну и ту же схему, и все они должны будут обновляться одновременно при обновлении приложения, так что потребуется изменение схемы.

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

tenant1_site/appvirtualdir
tenant2_site/appvirtualdir
...

Где appvirtualdir указывает на один и тот же физический путь для всех сайтов клиента.Когда все клиенты имеют одну и ту же версию приложения, все они используют буквально один и тот же код.Если у вас есть этот сценарий и какая-то аутентификация, вам в любом случае понадобится один IP-адрес для каждого арендатора из-за SSL.SSL будет привязываться только к IP и порту, в отличие от не-SSL, который будет привязываться к IP, порту и хосту.Если бы это было так, то мониторинг трафика на основе IP все равно был бы проще и точнее, поскольку это можно было бы делать на маршрутизаторе или через сетевой монитор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top