高性能分布式系统
自17年来杭后,接手了一个大流量高并发的分布式系统,对于响应时间(RT)和吞吐量(QPS)有较高的要求。埋头苦干半年,总结了一些经验,这里集中整理一下。
基本要求
分布式系统的基本要求一般来说有下面四点:
高性能
首先就是性能了,性能是衡量一个系统的最重要的指标。
性能一般可以通过RT和QPS来描述,如:系统在达到14w QPS峰值时,RT平稳在3ms以内
。
一般来说,可以通过压力测试模拟线上真实用户请求的方式来进行对系统对性能测试。
只有明确了系统所能承受最大的QPS值后,才可能对系统进行可度量的架构优化。
RT是对用户体验影响最明显的指标,没有用户能忍受一个响应非常迟缓的系统
高可用
高可用设计的目标是:在某些服务器宕机的情况下,仍提供无损服务
服务可用的计算公式是:全年服务可用时间/全年时间
如,若某服务全年因为某故障导致服务不可用时间为5分钟,此时该服务的值为:((60 * 60 * 24 * 365) - (5 * 60)) / (60 * 60 * 24 * 365) = 99.9990%
可伸缩
可伸缩性说的直白点就是,可以通过加机器来获得集群容量的提升,在增减机器的同时不影响线上正常业务的接待
为了达到可伸缩特性,一般会将服务设计为无状态的,或者将状态统一存储来达到无状态服务,如:分布式Session
易扩展
当系统大到一定程度时,整个系统会变的很难维护,业务依赖非常繁琐
一个方法有多个业务公用,在改动这个方法时就需要考虑多个场景
一个系统被多个工程师维护,在修改系统时就可能遇到代码管理的问题
一个优秀的系统是从业务维度做好切分,做到合理的内聚和耦合,解决代码管理和人员管理的问题
基本思路
如何让系统做到真正到高性能分布式系统呢,我们需要对于命题进行拆分
缓存
CDN
页面缓存
分布式缓存
- Memcached
- Redis
本地缓存
Guava
缓存击穿
布隆过滤器
数据库
分库分表
读写分离
高可用
无状态服务
上面有聊到实现服务的可伸缩性的重要手段就是将服务做成无状态的
因为只有当服务是无状态的时,才能做到一台机器宕机,另一台顶上的效果
常用场景就是用户登录的Session,当用户登录后需要记录Session在服务端,客户端请求中上传Cookie