全球案例分享 | 性能!性能!性能!
2019.11.12当您的 Jira Software 实例从 10 个增加到 10,000 个用户时,您会怎么做?这正是美国领先的医疗信息技术供应商 Cerner 副总裁 Brian Wallace 和知识架构师 Mike Damman 面临的问题,他们需要满足不断增长的团队需求。如何保证如此庞大的实例的可靠性?可以采取哪些措施减少停机影响?这些是 Cerner 团队解决的一些问题,我们发现了挑战,并提出了一些很好的解决方案。
挑战一:在全球范围内扩展 Jira Software
Cerner 有三个 Jira Software Server 联合实例,成千上万的开发者每天的每个时段全球范围内都在使用这些实例。Jira Software 迅速成为团队工作的关键应用,每一分钟的停机或性能下降都会使 Cerner 团队成员难以更好地服务于客户。他们需要一种提供高高可用性的解决方案。
2015 年秋,Cerner 决定从服务器升级到 Data Center,能够集群多个主动服务器,为用户提供对 Jira Software 的不间断访问。这在当时并不仅很重要,而且他们知道未来一年将增加数千名用户,因此,还需要一种可以随之扩展的解决方案。
挑战二:高可用性的风险
Cerner 使用 Zabbix 和 Splunk 监控 Jira 实例,为了提供真正的高可用,他们确定了一个需要立即解决的问题,就是 REST API 的滥用。日志分析显示,团队成员使用 REST API 获取实时状态更新,无论团队知情意否,他们每一秒都在读取 Jira Software 实例。Cerner 不希望限制用户创建自定义仪表板或自行获取所需数据,但显然应该采取一些措施来解决问题。
Damman 表示,“我们希望能够将 REST 调用隔离到单一服务器,不对其他用户产生影响”。使用多节点集群,实现智能地分流,将一个节点专门用于外部 REST API 请求。此外,Cerner 还希望保证所有外部请求都转到此专用节点,让用户手动将域名更改为 IP 地址或其他域名是不可靠的。此时,他们联系了大客户技术经理(TAM),帮助他们找到更好的解决方案。
外部集成(机器人)增长的影响与人工交互不同,可能会给集群中单个节点带来压力,使其他人不能使用该节点。
解决方案:智能分流流量
Cerner 要求在配置 Data Center 之后,可以确保所有外部 REST API 请求与其他流量区分开。他们计划在负载均衡器后的集群中部署四个节点,每个节点执行以下服务:
.节点 1 :外部 REST API 节点
.节点 2 和 3 :正常使用节点
.节点 4 :管理员和高级用户节点;不在负载均衡器中,只能通过 IP 地址访问
TAM 最初认为最好使用负载均衡器,将所有带有"/rest"的请求路由到 REST API 节点。但是,经过一些测试后,他们发现 REST API 也在 Jira Software 中使用,包括登录页面,所以只使用 “/rest” 意味着仍然会将 REST API 流量与正常使用混在一起。
通过与其他一些 TAM 合作,他们发现,可以通过在请求中查找 “/rest” 并且用 HTTP 请求头(HTTP referrer header)检索到请求发生的原始位置,隔离 REST API 请求。如果有人试图登录 Jira Software 或已经在用 Jira Software,将被定向或保留在正常使用节点上。否则,如果有人或机器在请求 REST API,将被定向到 REST API 节点。
经过几轮测试,Cerner 在 2015 年 10 月正式上线了 Jira Software Data Center。
实现规模性能
在实施 Data Center 配置第一周,REST API 节点流量是其他两个节点的 4 倍。与单一服务器实例相比,响应时间更快,非管理节点的 CPU 使用率降低,并且在将 Jira Software 扩展到数千个新用户之后,2016 年没有出现一次意外中断。
响应时间
Cerner 需要确保在继续增加用户的同时维持或改善应用程序响应时间。这种架构表明,Cerner 可以将响应时间缩减近一半 - 从 150 秒减少到 80 秒。即使在峰值流量期间,特别是在加载页面时,也能保持稳定的响应时间。
“ 2014 年,我们出现了 55 次停机,2015 年,我们通过扩展将停机数量减少到 7 次。现在有了 Jira Software Data Center,2016 年,虽然使用量一直在增长,但是没有出现一次意外停机。”
MIKE DAMMAN,知识架构师,CERNER