InterSystems 数据平台互操作功能运行维护管理基础 - Production管理与优化
Production是开发者基于InterSystems IRIS产品家族实现互操作功能的主要技术架构。而每个Production的运行依赖于三类主要的业务组件:
- 业务服务(Business Service)
- 业务流程(Business Process)
- 业务操作(Business Operation)
三类组件间以消息作为信息交换的主要媒介。因此,要保障互操作业务的稳定运行,除保障软件平台有充足的软硬件资源运行外,保障Production中消息的高效传输以及三类组件的平稳、高效运行则是运维团队面临的主要目标。下面列举的若干项任务则有助于运维团队实现这些目标:
优化业务组件运行效率
Production中的业务组件都有运行池的概念,允许业务组件运行在多个进程上并发工作以提高整体性能。运行池又可以分为私有池和参与者池两类。
私有运行池
-
- 业务组件的CPU作业的数量
- 默认为1即可工作
- 通过性能测试确定最佳的池大小
- 拥有私有池的业务组件从私有队列中处理消息
- 无适配器业务服务的池大小需设置为0
- 需要多进程时,池大小设为1可以保证信息以先进先出(FIFO)顺序处理
- 整个消息流中的所有业务组件的池大小都不应大于1
- 业务组件的CPU作业的数量
参与者池
-
- Production级的参与者池设置
- 用于处理公共队列中的请求的CPU作业的数量
- 由使用公共队列的所有业务流程共享。
- 业务流程和业务操作的池大小设置。
- 0 - 使用参与者池和公共队列
- 非0--使用私人队列,有指定的CPU作业数
- 对于FIFO,设置池大小=1
- Production级的参与者池设置
参与者池与业务流程的启停
-
- 任何一个池大小为0(仅使用公有池)的业务流程被禁用时,所有的参与者都不会启动
- 防止任何池大小为0的业务组件从公共队列中处理消息
- 要保障其他参与者正常工作
- 将要被禁用的组件的Pool Size改为大于0并应用
- 如果已经禁用,要启动其他参与者
- 保持组件禁用,但将其Pool Size为大于0并应用
- 任何一个池大小为0(仅使用公有池)的业务流程被禁用时,所有的参与者都不会启动
Production的运行维护
Production本身具备一系列的运行状态管理功能,帮助运维团队在生产环境上处理Production运行的一系列任务,包括
Production运行维护 – 自动启动
-
- Ensemble > 管理 自动启动Production > 选择要自动启动的Production
- 在Ensemble启动时自动启动Production
- 如果需要的话,会自动调用RecoverProduction()方法,恢复Production状态
- 系统级启用开关
- 系统管理 > 配置 > 其他设置 > 启动 > EnsembleAutoStart
- 默认情况下为 "真"。
- 在排除故障时,可能需要禁用。
- Ensemble > 管理 自动启动Production > 选择要自动启动的Production
Production运行维护 – 强制关闭
-
- 如果Production关闭得太慢
- 等待关闭超时
- 显示强制关闭按钮
- 如果Production关闭得太慢
Production运行维护 – 更新
-
- 运行的组件与它的底层类代码不同步,需要Production来更新
- 业务组件进程因错误而意外关闭,需要重新启动
- 设置的改变需要业务组件重新启动
- 更新按钮出现在Production配置页面。
- 运行的组件与它的底层类代码不同步,需要Production来更新
Production运行维护 – 恢复
-
- 在非正常关机和一些错误之后出现
- 如果需要,自动启动Production将在启动前自动恢复
Production运行维护 – 中断
-
- 在配置页面上显示
- Production被关闭时如果满足如下条件之一:
- 有同步消息在等待响应。
- 或者,队列非空,意味着Production还没处理完消息
- 或者,消息仍在被组件处理
- 或者,有级别较高的告警请求
-
- Production中断后的选项
- 重新启动Production以完成消息的处理
- 如果启动后消息仍然被组件不断重试(提示故障未排除)
- 修复导致重试的问题
- 挂起消息
- 中断消息
- 如果启动后消息仍然被组件不断重试(提示故障未排除)
- 重新启动Production以完成消息的处理
- 在测试系统中(决不能是生产系统),如果你决定必须完全清除所有队列,请调用Ens.Director类的CleanProduction()方法
- do ##class(Ens.Director).CleanProduction()
- Production中断后的选项
Production的配置
Production本身是基于InterSystems的大量预制组件经开发或直接部署产生的软件包,因此将包含大量不需要在代码中固定写好的配置项,例如远程连接的地址,扫描数据表使用的SQL等。运维团队的工作之一,就是在外部环境发生变化,例如第三方系统部署地址发生变化时,通过调整Production的设置来应对变化,而无需更改已部署的代码。
凭据
-
- 用于登录远程系统。
- 在出站适配器的凭据设置中指定
- 在Ensemble > 配置 > 凭据中设置
- 用于登录远程系统。
Production配置数据的来源
导出Production
|
部署Production
Ensemble à 管理 à 部署变化 à 部署
会创建回滚文件及部署日志
导出与部署的当前限制
- 除业务组件外,组件配置、规则、DT等组件运行依赖的部件不会自动被识别,需要人工选取并导出
- DSN, 凭据等含安全信息的配置不会被导出(实例级配置,非Production级配置),需要手动在部署端配置。产品化研发中需要考虑通过自定义任务定期同步到备机或其他实例。
清除Production数据
当Production在生产中运行较长时间后,往往会累积大量的告警,事件日志和互操作消息等运行数据。用户可选择定期删除一部分不再需要的数据,保证磁盘空间的充裕。
直接执行
Ensemble > 管理 > 清除管理数据
直接执行清除任务受限于浏览器进程超时设置,如在清除过程中触发超时,将导致清除进程失效退出,中断消息清除过程。
对于大量消息累积的场景,请使用后台任务周期性执行确保清除效果。由于删除数据时也将产生大量的journal,删除前应在journal所在存储上保留充裕的空间。
后台任务
系统操作 > 任务管理器 > 新任务
空闲超时设置
|
Production运行监控
IRIS平台为用户提供了一系列工具展现组件的运行状态。运维团队需要频繁地使用这些工具用于定位和诊断故障,识别性能瓶颈等。
Production监视器
-
- 一页式监控业务服务、业务操作、队列和错误。
- 点击单个组件了解详情
- 提供对队列和事件日志的访问
事件日志
检索、过滤和清除日志
联合使用事件日志和可视化追踪
-
- 错误、警报和警告事件日志条目显示在可视化追踪中
- 点击图标可以查看事件日志详情
- 错误、警报和警告事件日志条目显示在可视化追踪中
业务规则日志
-
- Ensemble > 查看 > 业务规则日志
- 每次尝试匹配规则时的条目
- 空原因表示没有匹配的规则
- Ensemble > 查看 > 业务规则日志
日志内容
I/O 记录
|
组件状态指示器
|
消息队列
-
- 要查看队列
- Ensemble > 监视器 > 队列 > 在队列中点击消息查看详情
- Production配置页 > 选择组件 > 队列Tab
- 组件在给定的#秒内没有活动
- 可以查看、挂起和中断整个队列的消息处理
- 要查看队列
消息队列与性能调优
消息队列的变化常常可以用于评估组件性能及识别性能瓶颈,运维团队可以根据瓶颈所在位置和上下游组件队列的变化情况调整Pool Size获得优化性能。
忽然暴增的队列
-
- 如果发生在业务操作
- 通常由外部系统导致
- 连接中断
- 暴增的业务高峰
- 通常由外部系统导致
- 如果发生在业务流程
- 业务流程可能出现错误,导致它以某种方式 "卡住”
- 如果发生在业务操作
长期堆积的队列
-
- 如果发生在业务操作
- 可能是在向外部应用程序发送消息时出现持续延迟
- 看看外部系统的性能问题是否能得到解决。
- 如果不能,考虑增加池子的大小设置(除非需要FIFO)
- 可能是在向外部应用程序发送消息时出现持续延迟
- 如果发生在业务流程
- 考虑增加池(私有池或参与者池)大小的设置(除非需要FIFO)
- 可能有算法缺陷,考虑优化
- 如果发生在业务操作
多个队列长期堆积
-
- 潜在的原因
- 主机容量不够(内存/CPU/IO)
- Ensemble需要更多的资源(内存、CPU)
- 底层的Caché实例可能需要调整(内存、IO)
- 永远不要低估低速存储的影响
- 潜在的原因
作业
-
- 提供关于CPU作业运行配置项的信息
- Job # = 操作系统进程ID
- 状态
- Dequeuing - 等待信息被处理(最常看到的)
- Running - 工作,重试或无限循环
- Quiescent - 生产关闭期间的状态
- Error
- 提供关于CPU作业运行配置项的信息
-
- 能够按照日程周期运行的作业非常适合用于执行系统运维任务
- 周期性清除过期Production数据
- 按照备份策略周期性执行全量、累积和增量备份
- 定期清除过期的数据库journal
- 定期对数据库进行一执行检查
- 定期对数据库执行压缩截断释放空间(慎用)
- 定期将无法通过mirror同步的配置推送到备机(例如DSN、凭据等)
- 能够按照日程周期运行的作业非常适合用于执行系统运维任务
活动量监控
-
- 活动量和持续时间监视器显示每个接口的统计数据
- Ensemble > 监视器 > 活动量和持续时间。
- 按时间段过滤(分钟、小时、天、周、月、年)
- Ensemble > 监视器 > 活动量和持续时间。
- 可以根据需要建立自己的仪表盘来显示所需数据
- 也可通过SQL查询
- 活动量和持续时间监视器显示每个接口的统计数据
-
- 启用活动量收集
- 将Ens.Activity.Operation.Local Business Operation添加到Production中
- 为统计数据指定存储命名空间
- 为Production启用统计数据收集
- do ##class(Ens.Util.Statistics).EnableStatsForProduction()
- 为命名空间的Web应用程序启用DeepSee
- 系统管理 > 安全 > 应用程序 > Web应用程序
- 将Ens.Activity.Operation.Local Business Operation添加到Production中
- 使用PurgeActivityData任务进行清理。
- 使用作业控制周期任务
- 启用活动量收集