开发更高质量的服务
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc
1.引言
产品要求的功能都都开发完了,但这并不是终结。怎么样做才能让我们的服务具有更好的质量。
笔者结合自己的遇到的问题和工作中的经验,并以提问的方式,给读者一点点建议
2. 提问
重要性不分先后
2.1 如果服务器重启,服务是否能自动拉起?
2.2 如果程序异常退出,服务是否能够自动拉起?
2.3 如果程序异常退出,能够自动拉起,那么你怎么知道服务是否发生了重启?
2.4 如果是web服务,QPS是多少?每个URL的QPS是多少?
峰值是多少?一般在什么时间点触发?
每种URL的请求量是否合理?
2.5 如果是web服务,每个请求的响应时间是多少?TP90?TP99分别是多少?
2.6 异常请求(比如HTTP非200的比例是多少?)什么样的比例是合理的?为什么?
2.7 如果是多实例部署,那么整个系统的承载极限是多少?如果达到了极限,瓶颈在哪儿(木桶原理中所谓的短板)
2.8 服务都有哪些依赖项(微服务/数据库/文件系统)
其中哪些是无状态的,哪些是弱状态的,哪些是强状态的。这些外部服务和系统,是否已经做到高可用?能否做到快速扩容?
2.9 服务消耗的带宽多少?是否有可能达到带宽上限
如果是面向公网的服务,请求是否已经进行了压缩?
2.10 服务在部署上,是否已经做到了二地三机房
每个地区的网络线路,是否能做到2套或2套以上
(防止光纤被挖断的情况)
2.11 DNS服务是否能够对后端服务进行探活,自动修改域名的解析列表
2.12 部署是否实现了自动化
如果服务需要紧急扩容,该怎么做?
基于docker的容器化方案,还是ansible脚本?
2.13 文档是否完整,文档是否能与代码保持一致
2.14 如果是比较复杂的业务系统,是否有完整的自动化测试脚本
2.15 如果使用了数据库,比如用到了Redis/MySQL
Redis连接池和MySQL连接池,是否已经打满(达到最大的poolSize)
打满之后,程序是会等待,还是报错?
2.16 如果使用了Redis,每次Redis操作的耗时是多少?TP90?TP99?
有没有慢查询?这些慢查询是否合理?
2.17 如果使用了MySQL,SQL是否做过审核
哪些表的操作频率最高?那种类型的操作最多?
有没有慢查询?这些慢查询是否合理?
有没有联表过多的查询?
2.18 如果使用了cache,cache的命中率是多少?cache容量是否达到上限?
cache会不会与数据库存储不一致,不一致是否可以容许
cache的容量是否达到上限,是否已经触发了LRU
2.19 如果使用了负载均衡,负载均衡与服务之间是长连接吗?
如果服务和其它服务有交互,他们之间是长连接吗?
2.20 服务所在机器CPU负载怎么样?连接数高吗?
是否有大量的TIME_WAIT
和CLOSE_WAIT
2.21 是否做了tracing
2.22 是否记录了access log
2.23 服务是否能够优雅退出?
2.24 服务如果是异常退出,是否会造成数据不一致?
如果有可能造成不一致,那么如何发现这种不一致?有没有对应修复的策略
比如在交易系统中的定期对账
2.25 这个服务中,哪些部分是最核心的,是否能做熔断降级处理
比如一个新闻客户端,如果出现服务出现故障,可以降级为新闻只读,但是无法评论
2.26 如果是API服务,有没有对请求做超时处理
防止请求一直阻塞。
2.27 如果调用方是APP,那么是否在APP中,埋有探针,以便日后分析排障
2.28 数据库有没有定期备份?
如果已经做了备份,是否是备份在异构的数据库中
2.29 如果是API服务,是否有请求频率限制
如果有是按照用户维度,还是按照IP维度来限制?
写的太好了,哈哈