Балансировка нагрузки на сервер SSAS. Синхронизация схем
Архитектура крупных моделей SSAS зиждется на работе нескольких серверов. Пользователь отправляет запрос к базе, а балансировщик нагрузки решает на какой сервер его отправить. В связи с этим возникает проблема поддержки актуальной, единой информации модели на каждом сервере.
К сожалению, нет механизма автоматической синхронизации схем и данных модели между серверами. Реализация лежит на плечах разработчика.
Ниже представлены полезные скрипты для поддержания актуальной схемы данных на разных серверах одной модели
Скрипт PowerShell для копирования схемы модели с сервера источника на целевой сервер:
$assembly = [System.Reflection.Assembly]
$assembly::LoadWithPartialName("Microsoft.AnalysisServices.Tabular") > $null
$serverNameSRC = "SuorceServer"
$serverNameTag = "TargetServer"
$dbName = "SSASDBname"
# connect to source server
$svrSRC = new-Object Microsoft.AnalysisServices.Tabular.Server
$svrSRC.Connect($serverNameSRC)
$dbSRC = $svrSRC.Databases[$dbName ]
# connect to target server
$svrTag = new-Object Microsoft.AnalysisServices.Tabular.Server
$svrTag.Connect($serverNameTAG)
$script = [Microsoft.AnalysisServices.Tabular.JsonScripter]::ScriptCreateOrReplace($dbSRC)
$svrTag.Execute($script)
$svrSRC.Disconnect()
$svrTag.Disconnect()Скрипт JSON для синхронизации моделей (можно вставить в job):
{
"synchronize":{
"database":"name_TargetDB",
"source":"ConnectionString_SourceDB",
"synchronizeSecurity":"copyAll",
"applyCompression":true
}
}Пример шага задания синхронизации:
в SSMS можно синхронизировать только 1 куб. Если моделей больше, можно написать скрипт на powershell, который последовательно синхронизирует все модели. Дополнительно возможно проверять отличие последней даты обновления. если она разная, то запускать синхронизацию, иначе нет.