Перейти к содержанию

Особенности работы TESSA в режиме SaaS

TESSA поддерживает работу в режиме SaaS с рядом ограничений и особенностей, которые будут рассмотрены далее.

Для режима работы SaaS используется следующая схема:

  • имеется набор кластеров;
  • у кластера есть набор инстансов;
  • каждый инстанс представляет собой группу web сервисов, объединённых общим именем, для балансировки нагрузки.

Работа плагинов chronos на веб-сервисе

Основной особенностью является перенос части плагинов Chronos на веб-сервис. Необходимо помнить, что в этом случае плагины будут работать независимо в рамках головного веб-сервиса инстанса кластера, выступающего в роли планировщика.

Работа с исходящей почтой

Следующей особенностью является обработка почты, которая выполняется в рамках Chronos, работающего в составе кластера, который обслуживает все инстансы кластера.

Note

Целевой почтовый сервер должен поддерживать email alias не только в режиме forwarding, но и в режиме отправки от имени этого alias-а.

Отправка почты выполняется в два этапа:

  • накопление почты в общем outbox для кластера;
  • отправка накопленной почты специальным плагином SaasMailSender в Chronos для кластера.

Рассмотрим каждый из этих этапов.

Каждое из писем, предназначенных для отправки в кластере должно быть помещено в общую таблицу Outbox кластера, от таблицы Outbox в БД TESSA эта таблица отличается наличием строковой колонки с именем инстанса.

Колонка Тип Описание
ID Guid Not Null идентификатор письма
Created DateTime Not Null дата создания
Email String(Max) Null адресаты для письма
Subject String(255) Null тема письма
Body String(Max) Null текст письма
Attempts Int32 Not Null счётчик неудачных попыток отправки письма
LastErrorDate DateTime Null дата последней зафиксированной ошибки отправки письма
LastErrorText String(256) Null описание последней зафиксированной ошибки отправки письма
Info BinaryJson Null дополнительные параметры в виде сериализованного JSON класса Tessa.Notices.MailInfo
Instance String(Max) Not Null имя сервера в кластере

Имя подключения к базе с такой общей таблицей-накопителем писем задаётся в поле SettingsSaaSMailDb, а само подключение должно содержаться в секции ConnectionStrings. Имя инстанса кластера задаётся в поле SettingsSaaSInstance.

За отправку писем в режиме SaaS отвечает плагин SaasMailSender.

Important

Этот плагин предназначен исключительно для работы в рамках Chronos и не предназначен для работы непосредственно на веб-сервисе.

Important

Если планируется использовать для отправки писем плагин SaasMailSender, то необходимо отключить стандартный плагин MailSender для исключения коллизий и другого непредсказуемого поведения.

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

  • имя строки подключения к базе данных с письмами SettingsSaaSMailDb;
  • имя кластера SettingsSaaSCluster;
  • специальный токен доступа SettingsSaaSAccessToken к сервису получения информации о кластере;
  • настройки подключения к сервису получения информации о кластере SettingsSaaSClusterInfo;
  • приватный ключ и его пароль, обеспечивающий доступ для режима SaaS к данным веб-сервисов для каждого из инстансов кластера. Путь задаётся в поле SettingsSaaSKeyPath, а пароль в SettingsSaaSKeyPassword.

Important

Необходимо, чтобы у всех веб-сервисов был зарегистрирован парный публичный ключ от указанного в SettingsSaaSKeyPath приватного ключа.

Плагин получает все письма со всех инстансов кластера и отправляет их, при этом, содержимое необходимых файлов, прикрепляемых к письму, получаются запросами от соответствующего веб-сервиса инстанса. Также особенностью является то, что все настройки подключения к почтовому серверу берутся из конфигурационного файла, это параметры, начинающиеся с MailSender.; однако, при отправке письма, в поле From устанавливается значение, специфичное для конкретного инстанса и полученное при помощи сервиса получения информации о кластере.

Important

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

Note

Содержимое файлов получается при помощи механизма токенов доступа к контенту системы. При этом, время действия токена задаётся в настройке MailSender.SaasAuthTokenExpiration.

Настройки SaaS в конфигурационном файле app.json

Все настройки режима работы SaaS содержатся в блоке SettingsSaaS файла app.json. В зависимости от места использования: веб-сервис или Chronos, используются те или иные настройки. Для настроек, специфичных для конкретного места использования, это указывается явно, в иных случаях - настройки используются всеми потребителями.

Note

Отсутствие секции SettingsSaaS в конфигурационном файле означает, что режим SaaS выключен, аналогично заданию "Enabled": false.

Имя Тип Описание
Enabled логический Определяет, что веб-сервис работает в режиме SaaS
MailDb строковый Содержит имя строки подключения к общей базе данных для накопления исходящих писем в кластере.
Важно!
В составе строк подключения ConnectionStrings должна быть строка с указанным здесь псевдонимом (alias-ом)
Instance строковый Содержит имя инстанса в кластере.
Используется только веб-сервисом
Cluster строковый Содержит имя кластера.
Используется только Chronos
AccessToken строковый Содержит токен доступа для запроса данных из сервиса информации о кластере.
Используется только Chronos
KeyPath строковый Путь к приватному ключу для удостоверения отправляемых на веб-сервис команд из плагинов Chronos.
Ключ должен содержать необходимые для выполнения операций права доступа. Для отправки почты это saas-files, saas-mail.
Используется только Chronos
KeyPassword строковый Пароль к приватному ключу.
Используется только Chronos
ClusterInfo объект Настройки для подключения к веб-сервису получения информации о кластере.
Используется только Chronos

Рассмотрим данные настроек подключения к веб-сервису получения информации о кластере ClusterInfo.

Имя Тип Описание
BaseAddress строковый Адрес веб-сервиса
Timeout строка Таймаут выполнения запросов к веб-сервису.
По умолчанию 40 минут
ProxyUri строка Адрес и порт для прокси-сервера. Базовый адрес и адрес прокси должны быть указаны как IP-адрес или имя сервера, но не как localhost (loopback-интерфейс игнорирует прокси)
ProxyClass строка Настройка изменяет стандартный прокси-объект System.Net.IWebProxy на класс с указанным именем типа. Класс должен иметь конструктор с единственным параметром типа Uri - это адрес из настройки ProxyUri

Пример настроек для веб-сервиса:

"SaaS": { "Enabled": true, "MailDb": "outbox", "Instance": "instanceName" }

Пример настроек для Chronos:

"SaaS": { "Enabled": true, "MailDb": "outbox", "Cluster": "clusterName", "AccessToken": "clusterInfoServiceAccessToken", "KeyPath": "SaaSKeyPath", "KeyPassword": "SaasKeyPassword",

"ClusterInfo": { "BaseAddress": "https://clusterInfoService", } }

Back to top