初识架构之高可用

架构和架构师,能够说是大部分技术人的目标或追求吧。
但架构类比于内功或修为,它不是一门武功,不能学一招走天下。
同一个架构方案在不一样公司甚至不一样团队都不必定能适用,因此更可能是经验和思考。
所以,一直以为应该写下来,不按期的更新和总结,亦或分理论学习篇和实战篇来写都好。
恰好最近在读基本架构书籍,因此就从读书笔记开始,点滴记录好了。
此篇笔记主要来自于,《大型网站技术架构》。

一、高可用的定义

什么是高可用?百科的解释是:一般来描述一个系统通过专门的设计,从而减小停工时间,而保持其服务的高度可用性。通常会用可用时间占比来度量,如99.9%、99.99%,甚至99.999%等。讲完了什么是高可用后,做者从典型的“应用、服务、数据”三层架构,分别展开来说不通层次的架构。算法

二、高可用应用

做者把应用层的特色归为高可用、业务层等。分有状态和无状态两种。
无状态的服务:这种相对来说比较之间,基本均可以横向扩容,经过Nginx、Haproxy等负载均衡代理层来进行流量转发和失效转移便可。以集群部署的方式提供服务,确保高可用。
有状态的服务:书里举例是Session的状态以及如何管理Session的状态,但除了应用层的session,实战中还有不少服务也可能被设计为有状态的。例如:某个服务每一个实例负责处理不通的号码段,A服务处理id:1-10000号的用户,B服务处理id:10001-20000...。缓存

回到书里,关于Session管理的手段:
seesion复制:仅适用于小型网站。缺点是集群规模一旦稍微大点,大量的session通讯会占用很多资源。
session绑定:利用负载均衡的hash算法,使同一用户请求落到同一台机器上。缺点很明显一旦出现某台机器宕机,该机器上用户的session信息都会丢失。
利用cookies来记录session:来回传;简单但大小受限。不过,仍是许多网站采用了这种方案。
session服务:利用如分布式缓存等技术服务开发搭建session服务。集中化管理,特别是实现SSO单点登陆的场景。服务器

三、高可用服务

做者将经过提供Rpc调用的基础服务归为此类,实际上我以为跟应用层差异不大。
无状态服务,同样能够经过负载均衡加心跳检测等手段去部署集群,确保故障转移来作到高可用。
这一节主要的几点笔记:
分级管理:有点水,讲的是核心服务分配更好的硬件以及隔离部署。其实实战中,核心服务或大型活动都应该隔离部署,这样能够避免故障引发连锁反应。好比同一台机器混布,cpu等资源被其余服务占满。同理,机房带宽等资源也有相似的可能。
超时设置:继续水。讲应用层调用服务层应该设置超时,避免服务层挂了请求还在那长时间占用资源。其实实战中无论怎么分层,也不论是同层仍是跨层调用,只要发起一个Rpc调用都应该有超时机制。
异步调用:主要讲运用消息队列将非强依赖的逻辑异步化,如注册过程的发邮件或欢迎短信等操做,能够优先保证核心流程,至于发送邮件等能够丢个消息队列异步执行便可。其实,异步化在实战中很经常使用,但我我的以为跟高可用没啥直接相关,更可能是业务解耦。
服务降级:分拒绝服务和关闭服务。拒绝服务又分按优先级拒绝或随机拒绝,实战中随机较容易,只要设置好服务的阈值,达到阈值的时候丢弃请求便可。而关闭服务,则比较果断,好比秒杀的时候关闭评论、追评或者确认收货;又好比大型直播结束后,关闭一些本来平常会进行的相关兴趣推荐等。
幂等性设计:请求可屡次提交或叫作可重放,服务能保证最终结果正确性。有些修改是自然的幂等性:资料设置。反之,加减金额、奖励发放等就不是自然幂等的,这类服务就当心对待这个问题。实战中常见手段是,利用一些流水号等方式,目的其实都是校验惟一性。cookie

四、高可用数据

做者对数据层的介绍就是CAP、数据备份和失效转移。
CAP:初步CAP原理的Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)。以及说大型网站通常保证AP,而后在某种程度上放弃C(一致性);而后再将数据一致性分为:数据强一致、数据用户一致和数据最终一致。并提到数据不一致一般出如今系统高并发写操做或集群状态不稳(故障恢复或集群扩容)的状况。
我我的以为实战中,大多数时候采用的方案就是保证最终一致。除了上面提到的集群状态不稳定外,奖励、订单等涉及多个分布式服务时均可能出现不一致,所以纠错、对帐、补偿都是很经常使用的手段。session

数据备份:定时冷备、异步热备、同步热备。
失效转移:失效确认、访问转移、最后再数据恢复后当好备胎。架构

五、高可用开发流程

服务发布:经过切流量的方式一台台灰度发布。
自动化测试:推荐Web的自动化测试工具ThoughtWorks。
预发布环境:搭建一套与现网一致,甚至与现网打通,但只能配置host内部访问的环境。用于预发布验证。
代码控制:主干发布、分支开发的模式。仍是推荐Git。
自动化发布:这个感受有点难。。
灰度发布:按Set灰度、按机器灰度、按号码段灰度,还能够作A/B Test。并发

六、网站运行监控

开源性能监控工具:Ganglia
监控数据采集:一、用户行为采集 二、服务&服务器性能操做采集 三、按期数据报告
监控管理:一、系统告警 二、失效转移 三、自动降级负载均衡

相关文章
相关标签/搜索