Anfield

You'll Never Walk Alone!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

openresty cosocket 连接池踩坑

发表于 2020-12-25 | 分类于 编程语言 | | 阅读次数:
cosocket 是 OpenResty 世界中技术、实用价值最高部分。是各种 lua-resty-* 非阻塞库的基础,让我们可以用非常低廉的成本,优雅的姿势,比传统 socket 编程效率高好几倍的方式进行网络编程。无论资源占用、执行效率、并发能力都非常出色。 最近有业务线同事反馈云端vad参数概率性不生效了,恰好最近在做集群迁移,同时有两个集群对外提供服务,拿到recordId看了一下出问题的 ...
阅读全文 »

lua require的缓存

发表于 2020-12-14 | 分类于 编程语言 | | 阅读次数:
0x0 背景最近在配合自动化pipeline上线,需要websocket长连接给服务增加prestop机制,大致原理是通过k8s的prestop hook触发更新前优雅退出的逻辑。 通过prestop hook执行我们的检测脚本, 检测脚本会定期请求服务暴露的/prestop接口,该接口会做两件事情: 检测当前实例中活跃连接的数量,如果没有活跃连接的则返回ok, 表示可以关闭服务了 设置pres ...
阅读全文 »

casrserver分离计算内核

发表于 2020-09-27 | 分类于 架构设计 | | 阅读次数:
背景最近研究的同事对识别内核做了一些优化,将原先集成在casrserver的内核计算逻辑单独抽离出来做成了服务并且测试后性能有提升,需要casrserver服务配合做一些改造,我之前也有过类似的想法,这次正好识别工程团队没有人力支持,加上我之前维护过casrserver, 于是就去协助casrserver改造了。在修改之前先介绍一下当前的架构 当前架构 如上图,当前casrserver中既处理了网 ...
阅读全文 »

casrserver性能优化记录

发表于 2020-06-16 | 分类于 性能优化 | | 阅读次数:
上一篇讲述了casrserver分离计算内核的方案,介绍了实现该方案需要进行的改造内容。在实现完这套新的方案后,提供给识别团队改造内核的同事做压测,压测下来新方案的性能有不少的提升,同时我这边也对重构完的casrserver做了一些性能的优化。 casrserver是基于openresty的一个长连接服务,对外提供基于websocket协议的接口, 支持实时的语音流上行,casrserver和识别 ...
阅读全文 »

http 连接closed问题记录

发表于 2020-05-17 | 分类于 编程语言 | | 阅读次数:
0x0 问题现象最近服务在调整QoS,旺哥搜线上日志的时候反馈给我dds-gray有pasc相关的报错,报错如下:12020-03-12T14:10:06+08:00 ddsserver-gray-8872-smooth-4283622188-srb6v dds: 2020/03/12 14:10:06 [error] 9#9: *4 [lua] pasc_client.lua:196: getP ...
阅读全文 »

websocket协议解读

发表于 2020-03-05 | 分类于 协议 | | 阅读次数:

websocket协议

RFC 6455

消息结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 0               1               2               3            
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
阅读全文 »

利用火焰图排查热词服务性能问题

发表于 2019-08-20 | 分类于 性能优化 | | 阅读次数:

问题背景

最近在配合研究部门重构ezmt,顺手把热词服务训练相关的模块进行了重构(其实接手这个服务捋清了逻辑后早就想重构了,这次正好趁机搞一下)。在联调结束后,用wrk压了一下性能,结果大跌眼镜,开了6个worker, 但是提高压测的线程数和连接数,QPS始终不见上涨, 几轮压下来QPS只有16-17左右,随着压力的上升,timeout现象非常严重。

于是单独对上游的ezmt热词训练服务压了一下,QPS在29左右

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[[email protected] /home/aidu35/work/third/wrk]$ ./wrk -t 2 -c 10  -d 30s --latency  -s scripts/hotword.lua http://10.12.8.19:8001
Running 30s test @ http://10.12.8.19:8001
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 341.88ms 46.86ms 520.05ms 69.14%
Req/Sec 15.19 6.48 40.00 89.67%
Latency Distribution
50% 341.40ms
75% 373.19ms
90% 403.02ms
99% 451.30ms
875 requests in 30.06s, 0.92MB read
Requests/sec: 29.10
Transfer/sec: 31.17KB

难道是重构后性能下降明显?于是我们将版本回退为重构前的版本又压测了一遍QPS还不到10

进入容器查看了一下压测时的情况,实际cpu和内存的占用都非常低,这种情况,怀疑有很大可能是网络进程中出现了阻塞调用,于是准备抓取网络进程的off-cpu火焰图。

阅读全文 »

CLOSE_WAIT 填坑

发表于 2019-08-09 | 分类于 编程语言 | | 阅读次数:

前一阵加了一个活跃连接数的监控,顺手发现了服务里一个协程泄露的坑,后面看了commit记录这个bug从这个项目开始就一直存在了。。。

0x0 背景

最近在ddsserver上加入了客户端活跃连接数的监控。这个服务是一个使用openresty开发的项目,连接数监控有现成的nginx c module,加入参数 –with-http_stub_status_module 重新编译openresty后在nginx.conf加入

1
stub_status on

在lua代码中直接可以访问这个内置变量 ngx.var.connections_active 来获取当前的连接数,将这个变量集成进prometheus监控里

1
monitor_logger:set("metric_connections", ngx.var.connections_active, {"active"})

在本地测试没有问题后就美滋滋地更新到线上了。

阅读全文 »

rsync cache之坑

发表于 2019-07-17 | 分类于 linux | | 阅读次数:

0x0 背景

我们的网站平台上提供了可定制的语言模型功能,用户在使用定制工具定制完成后,这些模型需要让语音识别服务能够访问到。
为了识别服务能够更快的加载这些资源文件,我们需要将资源同步到每台部署有语音识别服务端物理机器上。

我们快速搭建了一套同步的服务,就是上一篇中提及的resync-server,resync-broker和resync-agent。 我们在每台需要在本地使用这些资源的机器上启动了一个resync-agent,它的作用是实时地将定制平台上新产生的资源拉到本地。

阅读全文 »

一次OR timer使用不当导致的内存问题记录

发表于 2019-07-15 | 分类于 编程语言 | | 阅读次数:

好久没更新博客了, 前一阵踩了一个openresty中使用timer的坑,特此记录一下。

0x0 背景

团队6月份在规划华北机房的事情,运维同事在华北部署了一套resync-broker 和 resync-agent, broker挂在了华东的server下面, 恰好华北机房内跑broker的机器只有8G内存,在运行一段时间后,容器直接OOM了。

阅读全文 »
12…7
gerrard

gerrard

代码搬运工

63 日志
14 分类
61 标签
RSS
GitHub CSDN Weibo E-Mail

今日诗词:正在加载今日诗词....


© 2021 gerrard
由 Hexo 强力驱动主题 — NexT.Pisces v5.1.4
访问人数 总访问量 次