文章
· 八月 10, 2022 阅读大约需 8 分钟

InterSystems 数据平台互操作功能运行维护管理基础 - Production管理与优化

Production是开发者基于InterSystems IRIS产品家族实现互操作功能的主要技术架构。而每个Production的运行依赖于三类主要的业务组件:

  • 业务服务(Business Service)
  • 业务流程(Business Process)
  • 业务操作(Business Operation)

三类组件间以消息作为信息交换的主要媒介。因此,要保障互操作业务的稳定运行,除保障软件平台有充足的软硬件资源运行外,保障Production中消息的高效传输以及三类组件的平稳、高效运行则是运维团队面临的主要目标。下面列举的若干项任务则有助于运维团队实现这些目标:

优化业务组件运行效率

Production中的业务组件都有运行池的概念,允许业务组件运行在多个进程上并发工作以提高整体性能。运行池又可以分为私有池和参与者池两类。

私有运行池

 

    • 业务组件的CPU作业的数量
      • 默认为1即可工作
      • 通过性能测试确定最佳的池大小
      • 拥有私有池的业务组件从私有队列中处理消息
    • 无适配器业务服务的池大小需设置为0
    • 需要多进程时,池大小设为1可以保证信息以先进先出(FIFO)顺序处理
      • 整个消息流中的所有业务组件的池大小都不应大于1

 

参与者池

    • Production级的参与者池设置
      • 用于处理公共队列中的请求的CPU作业的数量
      • 由使用公共队列的所有业务流程共享。
    • 业务流程和业务操作的池大小设置。
      • 0 - 使用参与者池和公共队列
      • 0--使用私人队列,有指定的CPU作业数
      • 对于FIFO,设置池大小=1

参与者池与业务流程的启停

    • 任何一个池大小为0(仅使用公有池)的业务流程被禁用时,所有的参与者都不会启动
      • 防止任何池大小为0的业务组件从公共队列中处理消息
      • 要保障其他参与者正常工作
        • 将要被禁用的组件的Pool Size改为大于0并应用
      • 如果已经禁用,要启动其他参与者
        • 保持组件禁用,但将其Pool Size为大于0并应用
        •  

Production的运行维护

Production本身具备一系列的运行状态管理功能,帮助运维团队在生产环境上处理Production运行的一系列任务,包括

Production运行维护 自动启动

    • Ensemble  > 管理 自动启动Production > 选择要自动启动的Production
      • Ensemble启动时自动启动Production
      • 如果需要的话,会自动调用RecoverProduction()方法,恢复Production状态
    • 系统级启用开关
      • 系统管理 > 配置 > 其他设置 > 启动  > EnsembleAutoStart
      • 默认情况下为 ""
      • 在排除故障时,可能需要禁用。

Production运行维护 强制关闭

    • 如果Production关闭得太慢
      • 等待关闭超时
      • 显示强制关闭按钮

Production运行维护 更新

    • 运行的组件与它的底层类代码不同步,需要Production来更新
      • 业务组件进程因错误而意外关闭,需要重新启动
      • 设置的改变需要业务组件重新启动
    • 更新按钮出现在Production配置页面。

Production运行维护 恢复

    • 在非正常关机和一些错误之后出现
    • 如果需要,自动启动Production将在启动前自动恢复

Production运行维护 中断

    • 在配置页面上显示
    • Production被关闭时如果满足如下条件之一:
      • 有同步消息在等待响应。
      • 或者,队列非空,意味着Production还没处理完消息
      • 或者,消息仍在被组件处理
      • 或者,有级别较高的告警请求
    • Production中断后的选项
      • 重新启动Production以完成消息的处理
        • 如果启动后消息仍然被组件不断重试(提示故障未排除)
          • 修复导致重试的问题
          • 挂起消息
          • 中断消息
    • 在测试系统中(决不能是生产系统),如果你决定必须完全清除所有队列,请调用Ens.Director类的CleanProduction()方法
      • do ##class(Ens.Director).CleanProduction()

 

Production的配置

Production本身是基于InterSystems的大量预制组件经开发或直接部署产生的软件包,因此将包含大量不需要在代码中固定写好的配置项,例如远程连接的地址,扫描数据表使用的SQL等。运维团队的工作之一,就是在外部环境发生变化,例如第三方系统部署地址发生变化时,通过调整Production的设置来应对变化,而无需更改已部署的代码。

 

凭据

    • 用于登录远程系统。
      • 在出站适配器的凭据设置中指定
      • Ensemble > 配置 > 凭据中设置

 

Production配置数据的来源

 

600

 

导出Production

  • 配置页  > Production设置 > 操作选项卡 > 导出
    • 创建与类/部件相关的XML文件
    • 验证是否需要额外的类
  • 可用于
    • 部署到另一个实例中
    • 部署到另一个命名空间
    • 保存Production

 

 

部署Production

Ensemble à 管理 à 部署变化 à 部署

会创建回滚文件及部署日志

导出与部署的当前限制

  • 除业务组件外,组件配置、规则、DT等组件运行依赖的部件不会自动被识别,需要人工选取并导出
  • DSN, 凭据等含安全信息的配置不会被导出(实例级配置,非Production级配置),需要手动在部署端配置。产品化研发中需要考虑通过自定义任务定期同步到备机或其他实例。

 

清除Production数据

Production在生产中运行较长时间后,往往会累积大量的告警,事件日志和互操作消息等运行数据。用户可选择定期删除一部分不再需要的数据,保证磁盘空间的充裕。

直接执行

Ensemble > 管理 > 清除管理数据

 

直接执行清除任务受限于浏览器进程超时设置,如在清除过程中触发超时,将导致清除进程失效退出,中断消息清除过程。

对于大量消息累积的场景,请使用后台任务周期性执行确保清除效果。由于删除数据时也将产生大量的journal,删除前应在journal所在存储上保留充裕的空间。

后台任务

系统操作 > 任务管理器 > 新任务

 

空闲超时设置

    • 组件被标记为不活动,如果
      • 组件在给定的#秒内没有活动
    • 黄色表示不活动的组件
      • Production监控
      • 配置页面

 

 

 

Production运行监控

IRIS平台为用户提供了一系列工具展现组件的运行状态。运维团队需要频繁地使用这些工具用于定位和诊断故障,识别性能瓶颈等。

Production监视器

    • 一页式监控业务服务、业务操作、队列和错误。
    • 点击单个组件了解详情
    • 提供对队列和事件日志的访问

 

事件日志

检索、过滤和清除日志

联合使用事件日志和可视化追踪

    • 错误、警报和警告事件日志条目显示在可视化追踪中
      • 点击图标可以查看事件日志详情

 

业务规则日志

    • Ensemble > 查看 > 业务规则日志
      • 每次尝试匹配规则时的条目
      • 空原因表示没有匹配的规则

 

日志内容

 

I/O 记录

    • 组件配置
      • 除了Production信息外,还对输入和输出数据进行存档
        • TCP输入输出
        • 文件输入输出
      • 输入和输出数据显示在可视化跟踪窗口中

 

组件状态指示器

    • 状态指示器提供业务组件健康状况的可视化
      • 绿色 正常
      • 黄色 不活动(项目空闲时间超过其空闲超时设置)
      • 红色 - 错误。
      • 灰色 - 禁用。
      • 暗绿色或暗灰色 -- Production目前没有运行
      • 紫色 - 遇到失败但在重试的信息

 

 

消息队列

    • 要查看队列
      • Ensemble > 监视器 > 队列 > 在队列中点击消息查看详情
      • Production配置页 > 选择组件 > 队列Tab
    • 组件在给定的#秒内没有活动
    • 可以查看、挂起和中断整个队列的消息处理

消息队列与性能调优

消息队列的变化常常可以用于评估组件性能及识别性能瓶颈,运维团队可以根据瓶颈所在位置和上下游组件队列的变化情况调整Pool Size获得优化性能。

 

忽然暴增的队列

    • 如果发生在业务操作
      • 通常由外部系统导致
        • 连接中断
        • 暴增的业务高峰
    • 如果发生在业务流程
      • 业务流程可能出现错误,导致它以某种方式 "卡住

 

长期堆积的队列

    • 如果发生在业务操作
      • 可能是在向外部应用程序发送消息时出现持续延迟
        • 看看外部系统的性能问题是否能得到解决。
        • 如果不能,考虑增加池子的大小设置(除非需要FIFO
    • 如果发生在业务流程
      • 考虑增加池(私有池或参与者池)大小的设置(除非需要FIFO
      • 可能有算法缺陷,考虑优化

 

多个队列长期堆积

    • 潜在的原因
      • 主机容量不够(内存/CPU/IO
      • Ensemble需要更多的资源(内存、CPU)
      • 底层的Caché实例可能需要调整(内存、IO
    • 永远不要低估低速存储的影响

 

作业

    • 提供关于CPU作业运行配置项的信息
      • Job # = 操作系统进程ID
    • 状态
      • Dequeuing - 等待信息被处理(最常看到的)
      • Running - 工作,重试或无限循环
      • Quiescent - 生产关闭期间的状态
      • Error
    • 能够按照日程周期运行的作业非常适合用于执行系统运维任务
      • 周期性清除过期Production数据
      • 按照备份策略周期性执行全量、累积和增量备份
      • 定期清除过期的数据库journal
      • 定期对数据库进行一执行检查
      • 定期对数据库执行压缩截断释放空间(慎用)
      • 定期将无法通过mirror同步的配置推送到备机(例如DSN、凭据等)

 

活动量监控

 

    • 活动量和持续时间监视器显示每个接口的统计数据
      • Ensemble > 监视器 > 活动量和持续时间。
        • 按时间段过滤(分钟、小时、天、周、月、年)
    • 可以根据需要建立自己的仪表盘来显示所需数据
    • 也可通过SQL查询

    • 启用活动量收集
      • Ens.Activity.Operation.Local Business Operation添加到Production
        • 为统计数据指定存储命名空间
      • Production启用统计数据收集
        • do ##class(Ens.Util.Statistics).EnableStatsForProduction()
      • 为命名空间的Web应用程序启用DeepSee
        • 系统管理 > 安全 > 应用程序 > Web应用程序
    • 使用PurgeActivityData任务进行清理。
      • 使用作业控制周期任务
讨论 (0)1
登录或注册以继续