gydtep
发表于 2021-9-22 09:44:32
例如某天一个 ES 集群突然出现大量超时请求,查看节点监控,ygc有所下降,cpu利用率一直在高位;再查看磁盘监控,发现磁盘读吞吐处于高负荷状态。
gydtep
发表于 2021-9-22 16:14:13
在 ES 中对一个查询的成本(涉及JVM中的缓存、系统内存缺页中断、IO、CPU等)进行评估本身是一件比较难的事,page cache 的监控可能能提供一定的帮助,当然还有更多的作用等待我们去探索。
gydtep
发表于 2021-9-22 16:51:48
个人从事互联网基础架构系统研发十年余,包括我自己在内的很多朋友都是轮子党。
gydtep
发表于 2021-9-23 09:45:22
业务控制层
业务控制层是 Getty 设计的精华所在,由 Connection 和 Session 组成。
gydtep
发表于 2021-9-23 16:36:11
下面以 TCP 为例介绍下 Getty 如何使用以及该类图里各个接口或对象的作用。其中 server/client 是提供给用户使用的封装好的结构,client 的逻辑与 server 很多程度上一致,因此本章只讲 server。
gydtep
发表于 2021-9-24 13:16:42
旧 session 网络发送 goroutine 探测到 网络接收 goroutine 退出后终止网络发送,进行资源回收后设定当前 session 无效;
gydtep
发表于 2021-9-24 18:37:18
在连接较少的情况下这个模型尚可稳定运行。但当集群规模到了一定规模,譬如每个服务端的连接数达 1k 以上时,单单网络连接就至少使用 3k 个 goroutine,这是对 CPU 计算资源和内存资源极大地浪费。上面三个 goroutine 中,第一个 goroutine 无可拆解,第二个 goroutine 实际是 gr pool 一部分,可优化的对象就是第三个 goroutine 的任务。
gydtep
发表于 2021-9-24 19:03:49
此时第三个 goroutine 就剩下最后一个任务:lazy reconnect。当第三个 goroutine 不存在后,这个任务完全可以放入第一个 goroutine:在当网络字节流接收 goroutine 检测到网络错误退出前的最后一个步骤,执行 lazy reconnect。
gydtep
发表于 2021-9-24 19:48:02
优化改进后的一个网络连接最多只使用两个 goroutine:
• 一个 goroutine 进行网络字节流的接收、调用 Reader 接口拆解出网络包 (package)、 lazy reconnect
gydtep
发表于 2021-9-25 14:04:15
另一个方面,新数据会从哪些地方产生呢?以前数据基本上都是由PC、手机、平板电脑产生的,而在未来,汽车、视频、智能设备以及工业互联网都是新数据产生的典型场景,而且这些场景下数据产生的速度将会迅速提升。