Особенности работы 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",
}
}