Особенности работы 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 |
имя сервера в кластере |
Имя подключения к базе с такой общей таблицей-накопителем писем задаётся в поле Settings
→SaaS
→MailDb
, а само подключение должно содержаться в секции ConnectionStrings
. Имя инстанса кластера задаётся в поле Settings
→SaaS
→Instance
.
За отправку писем в режиме SaaS
отвечает плагин SaasMailSender
.
Important
Этот плагин предназначен исключительно для работы в рамках Chronos и не предназначен для работы непосредственно на веб-сервисе.
Important
Если планируется использовать для отправки писем плагин SaasMailSender
, то необходимо отключить стандартный плагин MailSender
для исключения коллизий и другого непредсказуемого поведения.
Плагин отвечает за отправку всех писем от всех инстансов кластера. Для корректной работы нужно задать:
- имя строки подключения к базе данных с письмами
Settings
→SaaS
→MailDb
; - имя кластера
Settings
→SaaS
→Cluster
; - специальный токен доступа
Settings
→SaaS
→AccessToken
к сервису получения информации о кластере; - настройки подключения к сервису получения информации о кластере
Settings
→SaaS
→ClusterInfo
; - приватный ключ и его пароль, обеспечивающий доступ для режима
SaaS
к данным веб-сервисов для каждого из инстансов кластера. Путь задаётся в полеSettings
→SaaS
→KeyPath
, а пароль вSettings
→SaaS
→KeyPassword
.
Important
Необходимо, чтобы у всех веб-сервисов был зарегистрирован парный публичный ключ от указанного в Settings
→SaaS
→KeyPath
приватного ключа.
Плагин получает все письма со всех инстансов кластера и отправляет их, при этом, содержимое необходимых файлов, прикрепляемых к письму, получаются запросами от соответствующего веб-сервиса инстанса. Также особенностью является то, что все настройки подключения к почтовому серверу берутся из конфигурационного файла, это параметры, начинающиеся с MailSender.
; однако, при отправке письма, в поле From
устанавливается значение, специфичное для конкретного инстанса и полученное при помощи сервиса получения информации о кластере.
Important
Для работы данного механизма, необходимо, чтобы почтовый сервер поддерживал механизм mail alias
-ов и допускал использование их в поле From
писем.
Note
Содержимое файлов получается при помощи механизма токенов доступа к контенту системы. При этом, время действия токена задаётся в настройке MailSender.SaasAuthTokenExpiration
.
Настройки SaaS в конфигурационном файле app.json¶
Все настройки режима работы SaaS
содержатся в блоке Settings
→SaaS
файла app.json
. В зависимости от места использования: веб-сервис или Chronos, используются те или иные настройки. Для настроек, специфичных для конкретного места использования, это указывается явно, в иных случаях - настройки используются всеми потребителями.
Note
Отсутствие секции Settings
→SaaS
в конфигурационном файле означает, что режим 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",
}
}