摘要: 库安装 首先,安装 Mock 类生成工具 Mockery: go install github.com/vektra/mockery/v2@v2.45.1 实际上,你也可以手动创建 Mock 类。 生成 Mock 类 假设你在 internal/metrics 包下有如下定义的接口: package 阅读全文
posted @ 2024-10-21 12:09 superpigwin 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 在proto中,可以使用OneOf类型,使用一个字段存储不同类型的数据。类似go中的interface。 假设有proto如下,Val是一个OneOf数据类型,它可以为double/int/str...中的任意一种。 TestPB中引用了value,类型为Val。 syntax = "proto3" 阅读全文
posted @ 2023-10-11 19:56 superpigwin 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 在python3之后,随着async/await引入,异步调用以全新而便捷的方式让人眼前一亮。 首先,尽量用async/await定义协程 这里以使用aiohttp请求网络,async函数中,不要使用blocking io(比如requests,传统的mysql/redis库),否则仍然会阻塞全局。 阅读全文
posted @ 2022-12-04 20:05 superpigwin 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 背景 在服务刚刚搭建时,通常的思维就是根据API编写业务逻辑: // SendStream ... func (d *Svc) SendStream(stream MyApi_data.ProxyDialOut_SendStreamServer) error { for { ... data, er 阅读全文
posted @ 2022-09-26 14:37 superpigwin 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 最近添哥一直反映,他手下的设备以grpc stream的方式向我服务端发送数据。偶然会收到错误。现象如下: 连接已经建立了一段时间,正常使用。 突然client.Send 返回 eof。 客户端有报错:connection reset by peer 在服务端找到错误:context cancele 阅读全文
posted @ 2022-07-13 19:18 superpigwin 阅读(2534) 评论(0) 推荐(0) 编辑
摘要: udp的服务端有一个大坑,即如果收包不及时,在系统缓冲写满后,将大量丢包。 在网上通常的示例中,一般在for循环中执行操作逻辑。这在生产环境将是一个隐患。是的,俺就翻车了。 go强大简易的并发能力可以用在处理udp数据上。 PoolSizeUDP := 1472 listener, err := n 阅读全文
posted @ 2022-06-29 18:56 superpigwin 阅读(879) 评论(0) 推荐(1) 编辑
摘要: 概览 在telemetry采集中,由于数据量极大,一般采用分布式架构;使用消息队列来进行各系统的解耦。有系统如下: 设备将各类数据上报给采集器,采集器充当格式转换的角色。将各类不同的设备数据转换为统一的格式。 采集器将数据写入到消息队列中,后端的其它服务,如“分析”,“告警”等服务从消息队列中取数据 阅读全文
posted @ 2022-06-22 13:13 superpigwin 阅读(768) 评论(2) 推荐(2) 编辑
摘要: 背景 最近,上线的采集器忽然时有OOM。采集器本质上是一个grpc服务,网络设备通过grpc协议将数据上报后,采集器进行格式等整理后,发往下一个系统(比如分析,存储)。 打开运行环境,发现特性如下: 每个采集器实例,会有数千个设备相连。并且会建立一个双向 grpc stream,用以上报数据。 cp 阅读全文
posted @ 2022-05-24 19:09 superpigwin 阅读(1564) 评论(0) 推荐(0) 编辑
摘要: 最近开发的telemetry采集系统上线了。听起来高大上,简单来说就是一个grpc/udp服务端,用户的机器(路由器、交换机)将它们的各种统计数据上报采集、整理后交后端的各类AI分析系统分析。目前华为/思科的大部分设备支持。 上线之后,各类用户开始找来要求帮忙定位问题,一般是上报的数据在后端系统中不 阅读全文
posted @ 2022-05-23 13:16 superpigwin 阅读(385) 评论(0) 推荐(0) 编辑