设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

高性能高并发系统的稳定性保障(2)

发布时间:2021-01-07 06:30 所属栏目:53 来源:网络整理
导读:复制 通过复制提高读吞吐量、容灾、异构 通过数据分片,提高写吞吐量 程序双写:一致性难以控制,逻辑复杂,幂等性要求.完全把控复制和切换时机.异构系统唯一选择.?同步双写(数据一致性高,影响性能,不适合多个复制集)

复制

  • 通过复制提高读吞吐量、容灾、异构
  • 通过数据分片,提高写吞吐量
  • 程序双写:一致性难以控制,逻辑复杂,幂等性要求.完全把控复制和切换时机.异构系统唯一选择.?同步双写(数据一致性高,影响性能,不适合多个复制集);?异步双写(数据一致性差,性能高,适合多个复制集);CDC[Change Data Capture](canal,databus等)
  • 底层存储复制机制:一致性由底层控制,对应用端透明.程序和底层存储配合切换

扩容

  • 每年大促前的核心工作:该扩容了吗?现状分析;扩容规划(关键系统峰值20倍吞吐量);扩容依据(架构梳理、线上压测);
  • 扩容checklist:前(部署、DB授权….);后(配置更新、LB更新、接入日志、接入监控….)
  • 应用扩容、数据扩容、写扩容、读扩容
  • 垂直扩容:加内存、升级SSD、更换硬件.数据复制、切换
  • 水平扩容:数据迁移或初始化

现状分析:去年双十一到目前,峰值时的性能数据;软硬件性能指标;数据存储容量.

扩容规划;流量规划:核心系统20倍吞吐量;数据增长量规划;扩容依据;架构梳理;线上压测.

读扩容比写扩容难;读写分离.

异步化

  • 解耦利器
  • 削峰填谷
  • 页面异步化
  • 系统异步化
  • JMQ
  • 状态机(worker)+DB
  • 本地队列
  • 集中式缓存队列

本地内存队列:实时价格回源服务响应之后,通过BlockingQueue异步更新前端缓存.本地日志队列:库存预占.集中式缓存队列:商品变更任务下发系统.

异步化的一些例子:

1、操作系统内核的高速缓存队列,磁盘延迟刷盘;

2、mysql数据库复制、redis复制;

异步化需要注意的是:

1、任务要落地;

2、不可避免的重复执行,需要幂等;

3、是否需要保证顺序、如何保证顺序.

缓存

  • 久经考验的局部性原理
  • 多级缓存:浏览器browser cache、cdn、nginx本地redis缓存、本地JVM缓存、集中式缓存…
  • 缓存前置:2/8原则、单品页、实时价格、库存状态
  • 一致性、延迟权衡
  • 缓存主节点负责写,和最重要的校验
  • 通过CDC监听数据库binlog主动更新缓存
  • CPU不是瓶颈,网络才是
  • 优化编码,减少尺寸
  • 优化操作
  • 优化拓扑

如何保障稳定性

宏观

  • 提高可用性
  • 分组和隔离
  • 限流
  • 降级
  • 监控和故障切换

可用性

  • 可用性衡量指标:几个9
  • 可用性度量:A = MTBF / (MTBF + MTTR)
  • 减少故障、加长可用时间
  • 减少故障修复时间(发现、定位、解决)
  • 冗余复制、灾备切换,高可用的不二法门
  • 如何快速切换?
  • 切换的影响
  • 监控、ThoubleShooting、软件质量的影响

可行性指标:999,一周10分钟;9999,一周1分钟不可用.可用性:从客户角度.可用性度量:A = MTBF / (MTBF + MTTR),其中MTBF表示mean time betweenfailures,而MTTR表示maximum time to repair or resolve.

高可用行性的成本和收益,好钢用在刀刃上.

如何快速切换:有可以切换的?可以不重启应用么? 操作快捷么?演练过么?

切换的影响:切换目标资源能否承受新增的压力;切换是否影响状态(数据的一致性、丢失问题).

监控到位、即时,减少故障发现时间;监控全面,增加故障分析时可以参考的数据.

troubleshooting的能力,踩坑的精力,COE,问题本质、根源的追查.

软件质量:编码是否健壮、(异常处理、防御性、2/8原则)超时处理、日志是否全面合理、线程名称等等.

测试:case是否全面、自动回归.

上线:是否灰度:N+1,N+2;回滚方案、数据回滚.

分组和隔离

  • 网络流量隔离:大数据单独部署,QOS;
  • 业务系统隔离:秒杀系统独立出主交易;
  • 流量分组:对使用者按照重要程度、请求量、SLA要求等因素分级
  • 存储的分组:按照使用者重要程度、实时性要求等因素,将数据库的复制集分组

传统世界的例子:道路被划分为高速道路、自行道、人行道等,各行其道.

流量分组

举例:商品基础信息读服务.对使用者按照重要程度、请求量、SLA要求等因素分级,将服务实例和存储分组:交易、生产、网站、移动、promise、ERP…

读写分离

举例:商品主数据服务.按照使用者重要程度、实时性要求等因素,将数据库分组:ERP、POP、网站、大数据平台…
限流

  • 限流原则:影响到用户体验,谨慎使用
  • 区分正常流量和超预期流量:限流标准来自压力测试、折算
  • 读少限,写多限
  • 客户端配合限流
  • 不同分组的限流阈值
  • 各层限流手段

前置限流,快速失败:比如通过提供给调用方的JSF客户端,封装限流逻辑.

Nginx层限流:自主研发的模块;几个规则:账户,IP,系统调用流程.

应用限流:减少并发数线程数;读少限,写多限;DB限流;连接数.

降级

  • 保证用户的核心需求
  • 降级需要有预案和开关:确定系统和功能级别,是否可降,影响如何;降级需要有开关
  • 非关键业务屏蔽:购物车的库存状态
  • 业务功能模块降级:实时价格更新不及时;peking库,保订单管道、生产,暂停统计相关
  • 数据降级:动态降级到静态;远程服务降级到本地缓存:采销岗服务

监控和切换

  • 无所不在的监控:网络流量;操作系统指标;服务接口调用量、TP99、错误率…;日志;业务量变化;太多监控了,如何提高监控的质量
  • 切换:切换开关;成熟的流程可自动化;数据的重要性、一致性,要求强一致的,可以人工介入;系统的指标没法判断、监控点不全的,需人工判断决定

review

Nginx层限流:自主研发的模块;几个规则:账户,写多限;DB限流;连接数.

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读