QCon 演讲火热征集中,快来分享你的技术实践与洞见! 了解详情
写点什么

Plaid.com 的监控系统如何实现与 9600 多家金融机构的集成

  • 2018-08-03
  • 本文字数:1862 字

    阅读完需:约 6 分钟

金融技术企业 Plaid.com 已实现与 9600 多家金融机构的集成,从这些机构获取并处理数据供企业后期使用。由于集成的异构本质以及所集成机构的数量,并且同一度量在不同的集成可能会有不同的解释,需要报警的度量也不同,所以实现监控集成是一个挑战。为解决在可扩展性和低延迟要求上的挑战,Plaid 使用AWS Kinesis、Prometheus、Alertmanager 和 Grafana 重构了企业的监控系统

Plaid 前期实现的监控系统严重依赖于 Elasticsearch (ES)的日志系统。其中由 Nagios 查询 ES 集群,并将所有的报警发送给 PagerDuty。该系统不仅缺乏用户定制能力,而且由于 ES 的存储周期会因为日志规模的增加而降低,系统无法随不断增加的流量而扩展。鉴于旧系统缺乏对度量的历史查看视图、需手工配置报警,以及对日志更改具有脆弱的依赖性,因此团队重新考虑了监控的方法。他们从分析企业的需求着手,根据特定的用例确定需要监控哪些度量,以及如何监控这些度量。功能需求中包括基于客户的影响和实现仪表显示的代价,确定度量的优先级别,实现技术则聚焦于可扩展性、低延迟查询、支持高基数,以及开发人员使用系统的易用性。

团队选定 Prometheus 作为时序数据库、 Kinesis 作为事件流处理器、Alertmanager 实现报警功能,并用 Grafana 实现可视化。其中,选定后三者主要考虑到这些系统的灵活性,并且 Prometheus 和 Grafana 相互间工作良好。团队重新设计了监控流水线,使得实现导出标准度量的服务可直接使用标准的流水线,其它服务则发送事件到 Kinesis 并由事件消费者拉取事件生成度量。两类服务最终都在 Prometheus 生成度量,这可使流水线的其余部分保持不变。在通常情况下,一个事件可在 5 秒内生成度量。

作为 Prometheus 项目的组成部分, Alertmanager 中存在一些基于文件的配置。新集成(进而导致新度量)的加速是否会成为系统维护的一个潜在挑战?InfoQ 就此问题的细节联系了 Plaid 的软件工程师 Joy Zheng

我们可以根据警报类别而不是单个警报设置规则,因此 Alertmanager 的手工配置文件并非一个大问题。例如,我们可以通过设定规则,让系统通知 Pagerduty 处理所有高优先级的警报,而由 Slack 处理优先级较低的警报。另一方面,考虑到系统面对如此数量的集成,Prometheus 配置对我们来说无疑是一个挑战。我们初步实现的监控依赖于手工配置文件,而后续项目正在构建从 JS 代码生成配置文件的工具,不再需要根据照每个集成规则做复制粘贴。

目前看来,团队在实现易用性的目标上取得了很好的进展。团队的 45 位工程师中,有 31 人对监控配置做出了贡献。标准的流水线并不需要任何仪表显示(instrumentation),由代码库间共享的软件库自动导出度量。Zhang 详细介绍了他们是如何实现标准化度量间的转化:

共享库有助于强化通用度量命名,因为此时命名是由软件库控制的,而所有调用服务需要做的是为自身指定一个标签。对某些标签使用 ProtoBuf 枚举值,这进一步有助于我们实现标准化。但我们尚未针对自定义的每项服务度量给出一种强大的命名约定,因为当前很难在 Prometheus 中发现未命名的度量。目前,我们采用的可发现性解决方案主要是使用一些针对各个服务的最重要 Prometheus 度量构建 Grafana 仪表板。

Plaid 以联邦配置方式运行 Prometheus,对度量值做有限度的留存。但在 Zhang 看来,这对于历史数据而言不是一个挑战,“我们最初使用 Prometheus,即聚焦于即刻报警功能,因此只保存数个月的历史,这并非一个大问题。我们看到,更多用例需要使用对度量的历史分析。因此,我们将于近期上线一个后续项目,实现将 Prometheus 度量导出到我们的长期数据仓库(在 AWS Redshift 上)”。

由于网络延迟或重排序,流数据可能存在乱序抵达问题,或是在客户端产生延迟的问题。据 Zhang 介绍,Plaid 使用 Kinesis 处理该问题:

使用 Kinesis 使我们可以维持流数据的次序,即便是出现 Kinesis 消费者宕机的情况。我们已经看到,事件消费者会由于网络延迟而产生几分钟的滞后,进而奋起直追,最终会生成 1 到 2 个虚假页面。使用 Kinesis 的另一个优点是能够使用并行读取器,这样我们可具有一个并行的“预生产”监控环境。由于该环境也从同一事件流中读取,因此我们可在该环境中全面测试监控的变化。通常从事件消费者角度看,我们可看到非常好的稳定性。

监控也将在部署流水线中发挥作用。代码在推送到生产环境之前,将首先推送到一个内部的预生产(Staging)环境。在将部署交付后续环境之前,Plaid 当前的工作流通常需要开发人员检查仪表板(包括监控度量)的情况。

查看英文原文: Plaid.com’s Monitoring System for 9600+ Integrations

2018-08-03 10:281160
用户头像

发布了 391 篇内容, 共 137.7 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

本以为自己MySQL够牛逼了,直到亲自去阿里受虐了一次!

Java架构师迁哥

TCP和HTTP中的KeepAlive机制总结

陈德伟

nginx TCP 性能 网络 HTTP

架构师训练营第一周作业

邓昀垚

数字资产钱包开发方案,区块链数字钱包软件源码

13530558032

区块链技术智能合约有哪些实际的应用场景

CECBC

智能合约 区块链技术

数字货币交易所技术开发,交易所源码

13530558032

Spring Boot CLI 介绍

hungxy

Spring Boot Spring Boot CLI

DDD+微服务实战:什么是DDD?

AI代笔

微服务 领域驱动设计 DDD

华为HMS的“生态雪球”,滚动在万物智联的新跑道

脑极体

Java异常面试题(2020最新版)

Java架构师迁哥

LeetCode题解:622. 设计循环队列,使用双向链表,JavaScript,详细注释

Lee Chen

大前端 LeetCode

Java程序员博客系统推荐!我调研了100来个 Java 开源博客系统,发现这 5 个最好用!

Java 项目管理 计算机 框架设计

架构师训练营第一周学习总结

邓昀垚

极客大学架构师训练营

Java-技术专题-JMX超详细解读

洛神灬殇

面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

小林coding

乐观锁 高并发 操作系统 计算机基础

银行数仓体系发展之路

易观大数据

易观方舟Argo+CRM | 让企业数据发挥更大价值

易观大数据

一文详解分布式缓存(附代码)

架构师修行之路

缓存 分布式 分布式缓存

甲方日常 17

句子

生活 随笔杂谈

未来已来!全球一流科技盛会——云栖大会9月17日线上隆重举办

北柯

数字经济时代来临 区块链护航数字资产安全

CECBC

金融 数字时代

QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考

艾小仙

架构 编程语言

架构大作业

赵龙

Week15

一叶知秋

架构师训练营第 1 期-第一周命题作业

arthur

天猫成立房产部门,利用区块链承载交易多项服务功能

CECBC

区块链 房地产

架构师训练营1期 -- 第一周作业

曾彪彪

极客大学架构师训练营

区块链支付系统开发技术方案,USDT支付系统搭建

13530558032

Java-技术专题-AQS和Volatile和Synchronized实现原理

洛神灬殇

实战案例丨GaussDB for DWS如何识别坏味道的SQL

华为云开发者联盟

数据库 sql 算子

Spring-boot 单元测试

陈靓-哲露

Plaid.com的监控系统如何实现与9600多家金融机构的集成_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章