- 入门指南
- 要求
- 最佳实践
- 安装
- 正在更新
- 身份服务器
- High Availability Add-On
云端部署
有多个企业云部署选项可用于托管 Orchestrator,例如 Amazon Web Services (AWS)、Microsoft Azure 或 Google Cloud Platform (GCP)。 在这里,我们将详细介绍使用 Azure 基础架构即服务 (IaaS) 产品进行的大型可扩展部署。 需要以下服务:
- Orchestrator 的虚拟机可用性集
- Elasticsearch 的 VM 可用性集
- Azure SQL Server
- Azure 负载均衡器
- Azure Redis Cache for multi-node deployments
- 分布式 DNS 服务(如 Cloudflare)
架构
单节点架构
多节点架构
硬件要求
This section describes the hardware configurations used for the performance testing listed in Scaling Your Deployment, below.
Orchestrator 节点
每个 Orchestrator 节点都必须进行如下配置:
| VCPUs | RAM (GB) | SSD (GB) |
|---|---|---|
| 16 | 32 | 128 |
SQL 服务器
SQL Server 虚拟机规格必须根据 Orchestrator 节点的数量进行扩展:
| Orchestrator 节点 | VCPUs | RAM (GB) |
|---|---|---|
| 1-2 | 8 | 16 |
| 5 | 16 | 32 |
| 10 | 16 | 64 |
Elasticsearch 可用性集
Elasticsearch 可用性集由 3 个主节点和 6 个数据节点组成,共 9 个节点,每个节点具有以下规格:
| VCPUs | RAM (GB) | OS SSD (GB) | Data SSD (TB) |
|---|---|---|---|
| 8 | 16 | 128 (with 5000 IOPS and 100 MB/s Throughput) | 1 (with 5000 IOPS and 200 MB/s Throughput) |
软件要求
| 软件 | 版本 |
|---|---|
| 操作系统 | Windows Server 2016 |
| 数据库 | SQL Server 2017 |
| 日志记录 | Elasticsearch 6.4.0 |
The versions listed above are those used for the deployments and performance tested loads described. For all versions compatible with Orchestrator, see here.
负载平衡
对于多节点部署,建议使用两个 Azure 标准负载均衡器:
- 一个用于 Orchestrator 服务器;
- 一个用于 Elasticsearch 服务器。
Azure Redis Cache
Multi-node Orchestrator deployments use the RESP (REdis Serialization Protocol) for communication, and thus can be configured using any solution implementing this protocol, such as Azure Redis Cache in this example.
仅当使用 UiPath 高可用性加载项时,UiPath 才支持 Orchestrator 的高可用性部署。
对于多节点部署,建议使用两个单独的 Redis 实例:
- 具有 6GB 缓存的 Azure Redis 高级缓存 - 用于会话状态和用户实体关联的主节点;
- Azure Redis 基本缓存 - 用于缩放 SignalR 服务。
配置
UiPath.Orchestrator.dll.config 设置
-
通过在
serverdiagnostics索引中设置writeTo参数,将所有 Orchestrator 节点设置为向 Elasticsearch 报告,而不是向其各自的 Windows 事件日志报告,如下所示:<logger name="*" minlevel="Warn" writeTo="serverElasticBuffer"/><logger name="*" minlevel="Warn" writeTo="serverElasticBuffer"/> -
启用 Quartz 作业集群,如下所示:
<add key="quartz.jobStore.clustered" value="true" /><add key="quartz.jobStore.clustered" value="true" /> -
在“部署”部分中,配置 NuGet 存储库,如下所示:
<add key="NuGet.Repository.Type" value="Composite" /> <add key="Deployment.Libraries.AllowTenantPublish" value="true" /> <add key="Processes.AllowUpdateWithRunningJobs" value="true" /><add key="NuGet.Repository.Type" value="Composite" /> <add key="Deployment.Libraries.AllowTenantPublish" value="true" /> <add key="Processes.AllowUpdateWithRunningJobs" value="true" /> -
在“负载均衡器” 部分中,按如下方式配置 Redis 实例,并确保将连接字符串和密码替换为各自的值:
<add key="LoadBalancer.UseSqlServer" value="false"/> <add key="LoadBalancer.UseRedis" value="true"/> <add key="LoadBalancer.Redis.ConnectionString" value="<your.redis.cache.windows.net>:6379,password=****"/> <add key="LoadBalancer.SignalR.UseRedisScaleout" value="true"/> <add key="LoadBalancer.SignalR.RedisScaleout.ConnectionString" value="<your.second.Redis.Server>:6379,password=********"/><add key="LoadBalancer.UseSqlServer" value="false"/> <add key="LoadBalancer.UseRedis" value="true"/> <add key="LoadBalancer.Redis.ConnectionString" value="<your.redis.cache.windows.net>:6379,password=****"/> <add key="LoadBalancer.SignalR.UseRedisScaleout" value="true"/> <add key="LoadBalancer.SignalR.RedisScaleout.ConnectionString" value="<your.second.Redis.Server>:6379,password=********"/> -
在数据库连接字符串中设置
Max Pool Size,如下所示:<add connectionString="Data Source=172.16.100.12;Initial Catalog=UiPath;User ID=admin;Password=*******;Max Pool Size=700" name="Default" providerName="System.Data.SqlClient" /><add connectionString="Data Source=172.16.100.12;Initial Catalog=UiPath;User ID=admin;Password=*******;Max Pool Size=700" name="Default" providerName="System.Data.SqlClient" />备注:Be sure to replace the
Data Source,Initial Catalog,User ID, andPasswordparameters with the respective values of your Orchestrator Azure service. See here for more details. -
设置 Elasticsearch 的缓冲区大小,如下所示:
<target name="robotElasticBuffer" xsi:type="BufferingWrapper" bufferSize="1000" flushTimeout="5000"><target name="robotElasticBuffer" xsi:type="BufferingWrapper" bufferSize="1000" flushTimeout="5000">
Scaling Your Deployment
Orchestrator 规模集中所需的节点数量取决于正在部署的机器人数量:
| Orchestrator 规模集节点 | 机器人数量 |
|---|---|
| 1 | 最多 4,000 个 |
| 2 | 最多 8,000 个 |
| 5 | 最多 24,000 个 |
| 10 | 最多 48,000 |
这些部署已使用上述硬件和软件配置进行测试,在以下指定负载下没有表现出性能损失。
性能测试
静态数据
静态数据是指现有的初始 Orchestrator 负载。
| 实体 | 一个节点 | 两个节点 | 五个节点 | 十个节点 |
|---|---|---|---|---|
|
租户 |
40 |
80 |
240 |
480 |
|
环境 |
2,000 |
4,000 |
12,000 |
24,000 |
|
机器人
|
4,000
|
8,000
|
24,000
|
48,000
|
|
包 |
8,000 |
16,000 |
48,000 |
96,000 |
|
流程 |
4,000 |
8,000 |
24,000 |
48,000 |
|
队列 |
200 |
420 |
1,200 |
2,400 |
|
队列项目 |
1,120,000 |
1,500,000 |
3,000,000 |
5,000,000 |
|
资产 |
40,000 |
80,000 |
240,000 |
480,000 |
|
计划 |
400 |
800 |
2,400 |
4,800 |
动态数据
动态数据是指在执行流程时添加到 Orchestrator 或在 Orchestrator 中更改的数据。
| 实体 | 一个节点 | 两个节点 | 五个节点 | 十个节点 |
|---|---|---|---|---|
| Queue Items (per day) | 112,000 | 175,000 | 672,000 | 1,250,000 |
| Jobs (per minute) | 2,000 | 4,000 | 12,000 | 24,000 |
| Logs (per minute) | 20,000 | 20,000 | 20,000 | 25,000 |
| Nuget Downloads (Maximum per minute) | 2,000 | 4,000 | 12,000 | 24,000 |
| Robots Connected (Maximum) | 4,000 | 8,000 | 24,000 | 48,000 |
| Heartbeat (per minute) | 10,000 | 20,000 | 60,000 | 120,000 |
| SignalR Notifications (per minute) | 2,000 | 4,000 | 12,000 | 24,000 |
| 忙碌的机器人 | 2,000 | 4,000 | 12,000 | 24,000 |
| 可用的机器人 | 2,000 | 4,000 | 12,000 | 24,000 |