系统的稳定性建设

简介:  静儿来面试新美大这个部门的时候,HR跟我说我们是最核心的部门,没有之一。我以为这是句夸张的招人用的玩笑。结果来了发现,额,这句话是很公正客观的。现在上上下下组成了一支牛人团队,请来了其他部门很多资深高手进行封闭开发,确保我们系统的稳定性。  选择一份工作,必然要考虑的是:我们是做基础设施的,还是做平台的,还是做核心链路的。业务方面讲究领域驱动,各个领域目标也不同。  基础设施最重要的指标是稳定性、性能、扩展性。平台讲究多业务,通用性,人效。所谓人效就是我这个平台有些自动化的东西不能满足需求,需要靠手工来完成,这样开发人员的人效就低。如果一个平台需要输入的东西很多,而且还需要多步骤审核

静儿来面试新美大这个部门的时候,HR跟我说我们是最核心的部门,没有之一。我以为这是句夸张的招人用的玩笑。结果来了发现,额,这句话是很公正客观的。现在上上下下组成了一支牛人团队,请来了其他部门很多资深高手进行封闭开发,确保我们系统的稳定性。


  选择一份工作,必然要考虑的是:我们是做基础设施的,还是做平台的,还是做核心链路的。业务方面讲究领域驱动,各个领域目标也不同。


  基础设施最重要的指标是稳定性、性能、扩展性。平台讲究多业务,通用性,人效。所谓人效就是我这个平台有些自动化的东西不能满足需求,需要靠手工来完成,这样开发人员的人效就低。如果一个平台需要输入的东西很多,而且还需要多步骤审核,审核不够自动,那么输入人效低,运营的人效也低。如果平台的用户是外部用户,他们输入繁琐,这个用漏斗分析法来分析,得出来的流失率会高。


checklist:


  核心链路最重要的是稳定性。如果拿到一手烂代码,到了非重构不可的程度。那么重构之前要弄明白几个问题:原系统TOP5的主要问题是哪些?我重构了就能解决这些问题吗?重构之后怎样保证很长一段时间内不需要再次大规模重构?


  对于任何一个系统,都要设计一个checklist。比如比较重要的:

 

大分类  小分类  check项目
 基础组件依赖  缓存  挂了是否可用、跟其他系统共用?
   MYSQL 跟其他系统共用、慢查询、大事务、连接池监控状况、大表、读写分离、主从延时敏感?
   MQ  挂了是否可用、依赖消息的发送顺序?
   日志  建议应用日志不超过磁盘的30%,使用日志组件的性能和稳定性?
   其他组件,如databus  是否有监控?是否单点?自动fail over?
 依赖内外部系统  下游系统1  timeout配置?重试次数?满足幂等性?TP99?挂掉后是否稳定?
   下游系统2  timeout配置?重试次数?满足幂等性?TP99?挂掉后是否稳定?
 被依赖内外部系统  上游系统1  是否限流?timeout配置?重试次数?满足幂等性?TP99?挂掉后是否稳定?
   上游系统2 是否限流? timeout配置?重试次数?满足幂等性?TP99?挂掉后是否稳定?
 核心接口性能 核心接口1  QPS、TP99、可用性?
  核心接口2  QPS、TP99、可用性?
 JVM  基本配置  堆栈配置、线程使用的监控报警、fullgc异常、无界队列、批量更新cache?
   容量预估  高峰期CPU load、高峰期内存、高峰期磁盘IO、高峰期网卡、是否有两到三倍冗余?


组件和版本:


  维护系统稳定性要注意选择合适组件和版本。


  比如Apache Tomcat被纰漏有高危漏洞。当在应用配置文件web.xml中显式的配置DefaultServlet的readonly属性值为false时,恶意用户能够通过PUT请求方法上传文件,如果上传的是可执行文件,将会导致远程命令被执行。


  jackson-databind2.9版本前有反序列化漏洞,它可能语序未经身份验证的用户通过将而已制作的输入发送到ObjectMapper的readValue方法来执行代码。如果服务器反序列化了不安全的数据,能造成服务器执行恶意代码。建议升级到2.9.2以上。


  比如Apache Struts发布S2-054和S2-055安全公告,两个漏洞皆是因为调用了有问题的组件而产生的漏洞。


  S2-054漏洞由于Apache Struts REST插件使用了过时的JSON-lib库,这个库很容易受到攻击,攻击者可以构造特制的JSON恶意请求造成DOS攻击。


  由于Apache Struts调用了存在反序列化漏洞的Jackson JSON库,导致了反序列化漏洞。


外部依赖:


  外部依赖,比如我们的下游系统、或者缓存,MQ等等。都需要在系统里处理好它们出问题的情况。测试方法是:将这些依赖的端口禁用,流量打过来后观察系统。系统线程数有没有飙升,超时是否合理,有没有异步化,有没有熔断?最重要的是:事务里不允许有外部依赖。

 

相关文章
|
消息中间件 缓存 监控
系统稳定性建设实践总结
2020年,注定是个不平凡的一年。疫情的蔓延打乱了大家既定的原有的计划,同时也催生了一些在线业务办理能力的应用诉求,作为技术同学,需要在短时间内快速支持建设系统能力并保障其运行系统稳定性。恰逢年终月份,正好梳理总结下自己的系统稳定性建设经验和思考。
系统稳定性建设实践总结
|
6天前
|
移动开发 监控 前端开发
从0-1的建设云上稳定性
本文将从前后端的视角整体看下我们在云上稳定性治理的一些路径和经验。首先从平台的系统架构模型出发,站在全局视角看下整个平台的风险。
450 1
|
12月前
|
存储 运维 Prometheus
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.1监控预警体系建设
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.1监控预警体系建设
213 0
|
8月前
|
运维 监控 容灾
建设强大系统:提升高可用、可靠性和稳定性的秘诀
建设强大系统:提升高可用、可靠性和稳定性的秘诀
|
9月前
|
Cloud Native 新能源 Java
充换电企业开迈斯低成本提升线上应用稳定性的最佳实践
充换电企业开迈斯低成本提升线上应用稳定性的最佳实践
342 1
|
12月前
|
弹性计算 监控 负载均衡
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(3)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(3)
136 0
|
12月前
|
运维 监控 测试技术
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(4)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(4)
107 0
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(4)
|
12月前
|
弹性计算 运维 监控
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(2)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(2)
157 0
|
12月前
|
弹性计算 运维 安全
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(1)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1 游戏业务稳定性保障——5.1.1新游上线稳定性保障实践(1)
186 0
|
12月前
|
弹性计算 数据安全/隐私保护
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1游戏业务稳定性保障
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.1游戏业务稳定性保障
117 0