摘要: 背景 公司近期开通了一条访问美国机房的 1G 专线,并基于 TCP 建立了一套数据传输服务。上线后发现一个严重的问题:应用程序发送队列中的数据大量积压,最终导致程序 OOM Kill,但观察监控发现专线带宽利用率只有 50% - 60%。 经过沟通,发现运维同事当时使用 iperf3 测试专线带宽使 阅读全文
posted @ 2020-10-14 20:55 buttercup 阅读(3077) 评论(2) 推荐(1) 编辑
摘要: 背景 现有个处理股票行情消息的系统,其架构如下: 由于数据量巨大,系统中启动了 15 个线程来消费行情消息。消息分配的策略较为简单:对 symbol 的 hashCode 取模,将消息分配给其中一个线程进行处理。 经过验证,每个线程分配到的 symbol 数量较为均匀,于是系统愉快地上线了。 运行一 阅读全文
posted @ 2020-10-03 22:25 buttercup 阅读(1431) 评论(2) 推荐(5) 编辑
摘要: 从 CPU 时间说起... 下面这个是 top 命令的界面,相信大家应该都不陌生。 top - 19:01:38 up 91 days, 23:06, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 151 total, 1 running, 149 sl 阅读全文
posted @ 2022-10-11 16:58 buttercup 阅读(907) 评论(0) 推荐(0) 编辑
摘要: 背景 今年在公司内部主导了两个的行情数据系统的构建,两者均使用到了常见的时序数据压缩算法。 这里简单总结一下过程中积累的一些经验。 让我们先来思考一个问题:压缩算法生效的前提是什么? 数据本身至少要符合以下两种特性其一: 数据存在冗余 数据符合特定的概率分布 在时序数据领域,数据冗余度与相似度较高, 阅读全文
posted @ 2022-06-27 00:08 buttercup 阅读(2944) 评论(2) 推荐(1) 编辑
摘要: 背景 出于数据安全的考虑,自研了一个低成本的时序数据存储系统,用于存储历史行情数据。 系统借鉴了 InfluxDB 的列存与压缩策略,并基于 HBase 实现了海量存储能力。 由于运维同事缺乏 Hadoop 全家桶的运维经验,只能由我这个研发临时兼职,亲自指挥亲自部署了。 Hadoop 发行版选择 阅读全文
posted @ 2022-04-30 17:33 buttercup 阅读(784) 评论(1) 推荐(0) 编辑
摘要: 背景 JDK 动态代理存在的一些问题: 调用效率低 JDK 通过反射实现动态代理调用,这意味着低下的调用效率: 每次调用 Method.invoke() 都会检查方法的可见性、校验参数是否匹配,过程涉及到很多 native 调用,具体参见 JNI 调用开销 反射调用涉及动态类解析,这种不可预测性,导 阅读全文
posted @ 2021-09-11 23:02 buttercup 阅读(694) 评论(0) 推荐(0) 编辑
摘要: 时序数据基础 时序数据特点 时序数据TimeSeries是一连串随时间推移而发生变化的相关事件。 以下图的 CPU 监控数据为例,同个 IP 的相关监控数据组成了一条时序数据,不相关数据则分布在不同的时间序列上。 常见时序数据有: 监控日志:机器的 CPU 负载变化 用户行为:用户在电商网站上的访问 阅读全文
posted @ 2021-08-30 10:33 buttercup 阅读(17886) 评论(2) 推荐(3) 编辑
摘要: 博文索引 Redis 对象与编码 Redis 持久化 Redis 主从复制 Redis 哨兵 Redis 缓存淘汰 Redis 集合统计 Redis 简介 优点 多功能 提供了丰富的数据结构,可以满足很多实用场景,基本上能做到开箱即用 并且支持管道、事务、发布订阅、缓存过期、Lua脚本支持等高级功能 阅读全文
posted @ 2021-02-18 14:29 buttercup 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 博文索引 KafkaBroker 简析 KafkaConsumer 简析 KafkaProducer 简析 KafkaMirrorMaker 的不足以及一些改进 Kafka 简介 数据是系统的燃料,系统的效率高低很大程度取决于数据流转是否及时: 将数据从生产源头移动到分析处理终端,这个过程完成得越快 阅读全文
posted @ 2021-02-14 22:31 buttercup 阅读(248) 评论(1) 推荐(0) 编辑
摘要: Kafka 依赖 Zookeeper 来维护集群成员的信息: Kafka 使用 Zookeeper 的临时节点来选举 controller Zookeeper 在 broker 加入集群或退出集群时通知 controller controller 负责在 broker 加入或离开集群时进行分区 le 阅读全文
posted @ 2021-02-14 12:59 buttercup 阅读(2567) 评论(0) 推荐(0) 编辑
摘要: 统计功能是一类极为常见的需求,比如下面这个场景: 为了决定某个功能是否在下个迭代版本中保留,产品会要求统计页面在上新前后的 UV 作为决策依据。 简单来说就是统计一天内,某个页面的访问用户量,如果相同的用户再次访问,也只算记为一次访问。 下面我们将从这个场景出发,讨论如何选择的合适的 Redis 数 阅读全文
posted @ 2021-02-13 22:27 buttercup 阅读(1636) 评论(0) 推荐(0) 编辑
摘要: 本文从源码层面分析了 redis 的缓存淘汰机制,并在文章末尾描述使用 Java 实现的思路,以供参考。 相关配置 为了适配用作缓存的场景,redis 支持缓存淘汰(eviction)并提供相应的了配置项: maxmemory 设置内存使用上限,该值不能设置为小于 1M 的容量。 选项的默认值为 0 阅读全文
posted @ 2021-02-13 11:01 buttercup 阅读(4992) 评论(0) 推荐(2) 编辑