SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
⾼高可⽤用和可伸缩架构
李道兵

七⽜牛云存储
2015-03
啥叫⾼高可⽤用?
• 狭义:单台机器当机后⽤用户⽆无感知
• 延伸: 单台设备(主机,⺴⽹网卡,交换机,⺴⽹网线)失效后
⽤用户⽆无感知、单个服务异常时⽤用户⽆无感知
啥叫可伸缩?
当业务量增⻓长时,可以简单通过加机器布服务来解
决,那么这个服务就是可伸缩的
你想讲啥?
想填⼀一下这张表
⾼高可⽤用 可伸缩
⼊入⼝口层
业务层
缓存层
数据库
⼊入⼝口层如何做⾼高可⽤用?
• 使⽤用⼼心跳技术: Keepalived 就提供这个功能
• ⽐比如机器A IP是 1.2.3.4,机器 B 的 IP 是 1.2.3.5, 那
么再申请⼀一个 IP 1.2.3.6(我们称之为⼼心跳IP), 平时绑
定在机器A上⾯面,如果 A 当机,那么 IP 会⾃自动绑定
在机器 B 上边.
• DNS层⾯面绑定到⼼心跳IP即可
keepalived 有什么使⽤用限制么?
• 两台机器必须在同⼀一个⺴⽹网段
• 服务监听必须监听所有IP,如果仅仅监听⼼心跳IP,那
么从机上的服务(即不持有⼼心跳IP的机器)会启动失
败
• 服务器利⽤用率下降(混合部署可以改善这⼀一点)
两台机器,两个公⺴⽹网IP,DNS上把域名同时定位到
两个IP,这样算⾼高可⽤用么?
不算,如果⼀一台机器当机,那么就有⼀一半左右的⽤用
户⽆无法访问
业务层如何做⾼高可⽤用?
业务层不要有状态,状态分散到缓存层和数据库。
只要没有状态,业务层的服务死掉后,前⾯面的nginx
会⾃自动把流量打到剩下的服务。
友情提醒:不要因为想让服务端⽆无状态就直接⽤用
cookie session, ⾥里边的坑有点⼤大,考察清楚后再⽤用
⽐比较好。
缓存层如何做⾼高可⽤用?
缓存层分得细⼀一点,保证单台缓存当机后数据库还
能撑得住即可。
中⼩小规模下缓存层和业务层可以混合部署,这样可
以节省机器。
你这也叫⾼高可⽤用,明明是祸⽔水东引嘛
也有办法,缓存机启⽤用主从两台。
主服务活着的时候,主服务读,主从服务都写。
主服务当机后,从服务升级为主服务。主服务恢复后,变成新的从服务。
这个模式也有不少变种,但⼤大部分都需要两倍的服务器,⽽而且性能下降。
数据库层有什么⾼高可⽤用⼿手段么?
MySQL 有主从模式,还有主主模式都能满⾜足你的需
求。
MongoDB 也有 ReplicaSet 的概念,基本都能满⾜足
⼤大家的需求。
⼩小结
⾼高可⽤用 可伸缩
⼊入⼝口层 ⼼心跳
业务层 服务⽆无状态
缓存层 减⼩小粒度
数据库 主从模式
可伸缩
⼊入⼝口层如何提供伸缩性?这个我知道,直接铺机器,
然后 DNS 加 IP 就可以了吧?
可以,但也有需要注意的地⽅方:
尽管⼀一个域名解析到⼏几⼗十个IP没有问题,但是很多浏览器客
户端只会使⽤用前⾯面⼏几个IP,部分域名供应商对此有优化(⽐比
如每次返回的IP顺序随机),但这个优化效果不稳定。
推荐的做法是使⽤用少量的 nginx 机器作为⼊入⼝口,业务服务器
隐藏在内⺴⽹网(HTTP类型的业务这种⽅方式居多)。另外,也
可以在客户端做⼀一些调度(特别是⾮非 HTTP 型的业务,⽐比如
直播)。
业务层伸缩性如何?
跟应付⾼高可⽤用⼀一样,保证⽆无状态是很好的⼿手段。加
机器继续⽔水平部署即可。
缓存层伸缩性如何?
如果低峰期间数据库能抗住,那么直接下线缓存然
后上新缓存就是最简单有效的办法。
如果扛不住呢?
取决于缓存类型了,可以把缓存分为三类:
1. 强⼀一致性缓存:⽆无法接受从缓存拿到错误的数据 (⽐比如
⽤用户余额,或者会被下游继续缓存这种情形)
2. 弱⼀一致性缓存: 能接受在⼀一段时间内从缓存拿到错误的
数据 (⽐比如微博的转发数)
3. 不变型缓存: 缓存key对应的value不会变更 (⽐比如从
SHA1 推出来的密码, 或者其他复杂公式的计算结果)
那什么缓存类型伸缩性⽐比较好?
弱⼀一致性和不变型缓存的扩容很⽅方便,⽤用⼀一致性
Hash 即可。
强⼀一致性情况稍微复杂⼀一些。
为什么要⽤用⼀一致性Hash?⽤用简单 Hash 不⾏行么?
如果缓存从 9 台扩容到 10 台,简单 Hash 情况下
90% 的缓存会⻢马上失效,⽽而⼀一致性Hash情况下,只
有 10% 的缓存会失效。
强⼀一致性缓存有什么问题?
1. 缓存客户端的配置更新时间会有微⼩小的差异,在这个
时间窗内有可能会拿到过期的数据。
2. 如果扩容之后裁撤节点,会拿到脏数据。⽐比如 a 这
个key 之前在机器1,扩容后在机器2,数据更新了,但
裁撤节点后key回到机器1,这时候就会有脏数据的问题
有办法解决这个问题么?
要解决问题2⽐比较简单,要么保持永不减少节点,要么节点调整间
隔⼤大于数据的有效时间
问题1可以⽤用如下⽅方法来解决:
a. 两套hash配置都更新到客户端,但仍然使⽤用旧配置
b. 逐个客户端改为只有两套hash结果⼀一致的情况下会使⽤用缓存,
其余情况从数据库读,但写⼊入缓存
c. 逐个客户端通知使⽤用新配置
数据库层⾯面如何伸缩?
⽅方法很多,⽂文档也很多,就不细讲了。
1. ⽔水平拆分
2. 垂直拆分
3. 定期滚动
总结
⾼高可⽤用 可伸缩
⼊入⼝口层 ⼼心跳 平⾏行部署
业务层 服务⽆无状态 服务⽆无状态
缓存层 减⼩小粒度 ⼀一致性Hash
数据库 主从模式 拆分与滚动
Thanks for your
attention
Q&A?

Contenu connexe

Similaire à 高可用和可伸缩架构

腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验guiyingshenxia
 
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验colderboy17
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocessbabel_qi
 
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZoom Quiet
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江imShining @DevCamp
 
Cnut 容器大会 京东
Cnut 容器大会 京东Cnut 容器大会 京东
Cnut 容器大会 京东tommy tommy
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践Wensong Zhang
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践lovingprince58
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践drewz lin
 
七牛云存储详解
七牛云存储详解七牛云存储详解
七牛云存储详解niuer7
 
稳定、高效、低碳 -淘宝软件基础设施构建实践
稳定、高效、低碳  -淘宝软件基础设施构建实践稳定、高效、低碳  -淘宝软件基础设施构建实践
稳定、高效、低碳 -淘宝软件基础设施构建实践Wensong Zhang
 
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08drewz lin
 
03 李实恭-乘云之势以智致远 0611
03 李实恭-乘云之势以智致远 061103 李实恭-乘云之势以智致远 0611
03 李实恭-乘云之势以智致远 0611ikewu83
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Dahui Feng
 
开源软件营销策略
开源软件营销策略开源软件营销策略
开源软件营销策略linhaicaoyuan
 

Similaire à 高可用和可伸缩架构 (20)

腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
 
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
 
QIoT ,QuAI
QIoT ,QuAI  QIoT ,QuAI
QIoT ,QuAI
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess
 
Dell
DellDell
Dell
 
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江
 
Cnut 容器大会 京东
Cnut 容器大会 京东Cnut 容器大会 京东
Cnut 容器大会 京东
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
 
Taobao base
Taobao baseTaobao base
Taobao base
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
 
七牛云存储详解
七牛云存储详解七牛云存储详解
七牛云存储详解
 
稳定、高效、低碳 -淘宝软件基础设施构建实践
稳定、高效、低碳  -淘宝软件基础设施构建实践稳定、高效、低碳  -淘宝软件基础设施构建实践
稳定、高效、低碳 -淘宝软件基础设施构建实践
 
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08
 
03 李实恭-乘云之势以智致远 0611
03 李实恭-乘云之势以智致远 061103 李实恭-乘云之势以智致远 0611
03 李实恭-乘云之势以智致远 0611
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
 
开源软件营销策略
开源软件营销策略开源软件营销策略
开源软件营销策略
 

Plus de LI Daobing

好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的LI Daobing
 
云存储: 三分开发,七分运维
云存储: 三分开发,七分运维云存储: 三分开发,七分运维
云存储: 三分开发,七分运维LI Daobing
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计LI Daobing
 
短视频和云存储
短视频和云存储短视频和云存储
短视频和云存储LI Daobing
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜LI Daobing
 
如何实现登出按钮
如何实现登出按钮如何实现登出按钮
如何实现登出按钮LI Daobing
 
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务LI Daobing
 
从开发到上线-实战持续交付
从开发到上线-实战持续交付从开发到上线-实战持续交付
从开发到上线-实战持续交付LI Daobing
 
HTTP协议相关的若干安全问题
HTTP协议相关的若干安全问题HTTP协议相关的若干安全问题
HTTP协议相关的若干安全问题LI Daobing
 
Debian & Packaging
Debian & PackagingDebian & Packaging
Debian & PackagingLI Daobing
 
OAuth: How And Why?
OAuth: How And Why?OAuth: How And Why?
OAuth: How And Why?LI Daobing
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash ShellLI Daobing
 
glusterfs 文件系统
glusterfs 文件系统glusterfs 文件系统
glusterfs 文件系统LI Daobing
 

Plus de LI Daobing (14)

好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的
 
云存储: 三分开发,七分运维
云存储: 三分开发,七分运维云存储: 三分开发,七分运维
云存储: 三分开发,七分运维
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计
 
短视频和云存储
短视频和云存储短视频和云存储
短视频和云存储
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜
 
如何实现登出按钮
如何实现登出按钮如何实现登出按钮
如何实现登出按钮
 
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务
 
从开发到上线-实战持续交付
从开发到上线-实战持续交付从开发到上线-实战持续交付
从开发到上线-实战持续交付
 
HTTP协议相关的若干安全问题
HTTP协议相关的若干安全问题HTTP协议相关的若干安全问题
HTTP协议相关的若干安全问题
 
Debian & Packaging
Debian & PackagingDebian & Packaging
Debian & Packaging
 
OAuth: How And Why?
OAuth: How And Why?OAuth: How And Why?
OAuth: How And Why?
 
Git 简介
Git 简介Git 简介
Git 简介
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
 
glusterfs 文件系统
glusterfs 文件系统glusterfs 文件系统
glusterfs 文件系统
 

高可用和可伸缩架构