Mastodon
跳过正文
  1. Posts/

每日阅读

·1108 字·3 分钟·
reading - 这篇文章属于一个选集。
§ : 本文

得物技术
#

mp.weixin.qq.com
原文链接
Flink ClickHouse Sink:生产级高可用写入方案|得物技术

这篇介绍的是得物Flink + ClickHouse的方案,它们在实时大数据处理场景中主要被应用于日志处理(海量应用日志实时写入分析库)和监控分析(业务指标、APM 数据的实时聚合)。

这些场景的共同特点是:

  • 数据量大:百万级 TPS,峰值可达千万级。
  • 写入延迟敏感:需要秒级可见。
  • 数据准确性要求高:不允许数据丢失。
  • 多表写入:不同数据根据分表策略写入不同的表。
技术方案

字节跳动技术团队
#

mp.weixin.qq.com
原文链接
BSave - 数据切面工程在字节的大规模实践

数据切面工程是字节团队内部的理念,核心思想是在数据存储的边界引入对业务透明的操作层,将原本需要业务关注的通用数据操作,转移到一系列透明操作层中。

概述

具体来说,它就是在业务代码和存储之间,插入一个透明层,让加解密、审计、规则校验这些能力对业务无感知地生效,将这些与业务逻辑无关的“通用能力”从业务代码中彻底剥离,交由一个统一、专业的基础设施BSave 在线数据切面 BSaveAgent来解决。

它可以两种形态存在:

  1. Sidecar: 作为一个独立的进程,与业务应用部署在同一个主机或容器Pod中。业务流量通过本地回环网络(localhost)发送到Sidecar,再由Sidecar转发给下游存储。这种方式的优势在于其与语言无关。
  2. SDK: 在语言内部实现切面,这样减少了一次网络跳跃,性能开销更低。
分层

在业务访问存储时,请求流量会被BSave Sidecar透明劫持。劫持后,流量首先进入Protocol层,经过协议解析与转换,还原为结构化的数据对象,便于系统理解与处理。

随后,系统基于流量特征(如命令类型、数据大小、目标实例等)通过Plugin Loader调度层动态决策应执行的插件链路。该过程可结合规则引擎等机制,实现智能化的插件路由与策略匹配。

确定插件链后,请求依次经过各Plugin Solution插件进行数据加工,例如加密(TBE)、大 Key 压缩、访问控制等。处理完成后,数据被重新封装并通过原链路向下传递至后端存储(Downstream)。

flow

同理,来自存储的响应(Response)也会被Sidecar捕获,经过反向的协议解析、插件处理(如解密、脱敏)和数据重构,最终返回至业务服务(Upstream)。

流

然后它还支持根据不同存储的协议特性,选择不同的通信模式:

  • MySQL:通信方式是典型的Ping-Pong方式,即”一问一答“。适合使用半双工通信方式。
  • Redis:Redis的Pipeline无边界标识,允许一次发送多个命令,并有较高的性能要求。全双工能避免半双工的串行等待,吞吐更稳、尾延迟更好
通信

另外除了在线数据切面,后面又扩展了离线数据切面和数据同步切面等等。

同步
离线
tinuvile
作者
tinuvile
一个笨小孩
reading - 这篇文章属于一个选集。
§ : 本文