如果是其他rpc应用非http请求的 , 也提供了对应的filter拦截器来获取出入参 。
在获取到出入参后 , sdk对其中大报文 , 主要是出参进行了压缩 , 并将整个数据定义为一个JAVA对象 , 做protobuf序列化 , 通过UDP方式往自己对应的worker集群轮询传输 。
(2)链路上自己打印的一些关键信息 , 如调用其他系统的的出入参 , 自己打印的一些info、error信息>
sdk分别提供了log4j、logback、log4j2三个常用日志框架的自定义appender , 用户可以通过在自己的日志配置文件(如logback.xml)中 , 将我自定义的appender定义出来即可 , 那么后续用户在代码里所有打印的info、error等日志都会执行这个自定义appender 。
同样 , 这个自定义appender也是将日志暂存内存 , 然后异步UDP外送到worker 。
这里主要有两个地方需要注意 , 一是当压缩后的报文依旧超出udp最大报文值时 , 即通过http送出 。二是这一次请求 , 链路中可能会使用多线程、线程池技术 , 为避免链路tracer的唯一id在线程池丢失 , sdk采用了TransmittableThreadLocal来保持链路的ID , 这个查一下就懂 。
总体来说 , client端实现较为简单 , 省略了写本地磁盘、消费文件发MQ等等步骤 , 整体只有一次Protobuf序列化操作 , 对CPU、接入方性能影响极小 , 采用UDP外送 , 不需要worker的任何回复 , 也不用考虑tcp模式下worker消费慢导致自己阻塞的问题 。整体非常简洁高效 。
Worker端消费日志并入库worker端是调优的重点 , 由于要接收海量客户端发来的日志 , 解析后入库 , 所以worker需要具备很强的缓冲能力 。
我们都能看出来 , 系统的瓶颈点肯定在入库这个阶段 , 解析日志 , 抽取字段都是效率很高的 , 而且完全可以通过控制线程的数量来控制住 , 而入库将强受限于clickhouse的写入性能 。至于clickhouse是如何做的优化 , 后面会有clickhouse集群负责人来讲一下做了哪些优化 。
为了做好这个缓冲 , 即便日志接收量大于入库量 , 我们也要能接下来这些数据 , 尽量不丢失 。首先硬件上 , 采用大内存机器 , 8核32G的容器 , 来尽量多屯一些数据 。其次 , 采用了双缓冲队列 , 先将所有接收的数据放一个队列 , 然后多线程消费、解析成可供入库的行数据 , 再放入一个待入库队列 , 然后批量入库 。
那么我们做的这些操作 , 能支撑什么样的数据量呢?
通过线上的应用和严苛的压测 , 这样一台单机Docker容器 , 每秒可以处理原始日志1-5千万行 , 譬如一条用户请求 , 中途产生了共计1千多行日志 , 那么这样的一台worker单机 , 每秒可以处理2万客户端QPS 。对外写clickhouse数据库 , 每秒可以写200多M比较稳定 。
通过对上文的了解 , 我们知道 , 这些数据都是被压缩过的 , 直至库里面的都是压缩过的 , 只有当最终用户查询时 , 才会进行解压 。所以 , 这200M , 基本相当于原始数据1G多的大小 。
也就是说 , 只要clickhouse写入速度跟的上 , 这个系统仅需100台就可以极其高效地处理原始秒级百G的日志 。对比写MQ的方案 , 中途所有会出现瓶颈的点如MQ写磁盘速度、消费拉取速度等 , 都将不复存在 。这是一个纯内存交换的链路系统 。
强悍的Clickhouse通过以上的了解 , 我们可以清楚的看到 , worker作为一个纯内存计算的组件 , client端通过worker的数量进行hash均匀分发到各个worker , 所以worker可以动态扩容而且不存在性能瓶颈 , 其唯一受限制的就是写入库的速度 。
倘若写库速度跟不上 , 则worker必须要拿有限的内存去屯下发来的大量数据 , 一旦写满则就会开始丢弃接收到的数据 。所以整个系统的瓶颈点 , 就是写库的速度 。
Clickhouse是面向海量数据实时、多维分析、高性能的新一代OLAP数据库管理系统 , 实现了向量化执行和SIMD指令 , 对内存中的列式数据 , 一个batch调用一次SIMD指令 , 大幅缩短了计算耗时 , 带来数倍的性能提升 。目前已成为驱动京东集团业务增长、创新的“超级引擎” 。那么在京东App秒级百G日志传输存储架构中 , Clickhouse如何支撑大吞吐量数据的写入 , 主要在于两点
推荐阅读
- APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加
- 铁路12306提醒!抢票时,请认准官方APP候补功能
- Apple TV 到底是个什么东西,国内买来能干嘛?
- 微软|Win11看图App是残疾!教你找回Win7照片查看器
- 国外APP界面设计欣赏!可参考布局
- 原生运行安卓App,真的比模拟器更加优越?
- APP渗透测试——APP抓包
- 使用黑域解锁安卓12APP进程数量限制
- 国家中小学智慧教育平台移动端“智慧中小学”app正式上线
- 苹果用户注意,新的攻击漏洞,可能会不知不觉偷走你的重要信息