2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:281622
用户头像

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

关注

评论

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

从外包到拿下阿里offer,这2年5个月13天到底发生了什么?

Java 程序员 架构 面试

99% 的同学写不出好代码,都是因为这个问题!

程序员鱼皮

Java c++ Python 自学编程 经验分享

Dubbo 服务治理

青年IT男

dubbo

Logstash-数据流引擎

进击的梦清

大数据 Linux 运维 后端 Logstash

ModelArts的雪中送炭,让我拿下CCF BDCI华为Severless工作负载预测亚军

华为云开发者联盟

modelarts 工作负载 大赛 severless lstm架构

不愧是Alibaba技术官,Kafka的精髓全写这本“限量笔记”里,服了

Java 大数据 架构 面试

5分钟速读之Rust权威指南(十三)

wzx

rust

深入剖析 MySQL 自增锁

leonsh

MySQL 数据库

大数据采集和常见问题

数据社

大数据 数据采集 5月日更

唵嘛呢叭咪吽|靠谱点评

无量靠谱

不含敌意的坚决|靠谱点评

无量靠谱

iOS基础原理题目汇总

程序员 面试 iOS 知识体系

IoT系列,树莓派监控开关状态

IT蜗壳-Tango

IT蜗壳 IT蜗壳教学 5月日更

6000 字 |Redis 分布式锁|从青铜到钻石的演进方案

悟空聊架构

redis 缓存 分布式锁 redis分布式锁 6月日更

react源码解析2.react的设计理念

全栈潇晨

React React Hooks react源码

《面试官:谈谈你对索引的认知》之B-树

架构精进之路

MySQL 索引结构 6月日更

百度爱番番与Servicemesh不得不说的故事

百度Geek说

文本分析基本流程

Qien Z.

文本分析 5月日更

人生算法:愿景,设计人生导航系统

石云升

读书笔记 愿景 5月日更

网络攻防学习笔记 Day31

穿过生命散发芬芳

5月日更 网络攻防

通证经济— 激励机制、社会生产、后资本主义

CECBC

【Flutter 专题】116 图解 PhysicalModel & PhysicalShape 裁切小组件

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

HTTP协议

IT视界

网络协议 HTTP 网络通信协议

聊一聊我最近使用的uniCloud是个什么玩意

麦洛

uniapp unicloud

dex优化对Arouter查找路径的影响

vivo互联网技术

android mongodb

One-on-One Meeting

escray

学习 5月日更 朱赟的技术管理课

模块五作业

c

架构实战营

在 Python 中解析和修改 XML,你会么?

华为云开发者联盟

Python xml 字符串 Python XML 解析器

架构之:软件架构漫谈

程序那些事

架构 系统架构 软件设计 程序那些事

自制文件系统 —— 1 什么文件系统

奇伢云存储

Linux 文件系统 Go 语言

智慧光伏能源-园区光伏发电能源管控可视化

一只数据鲸鱼

数据可视化 智慧园区 智慧能源 能源管理 光伏发电

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