阅读更多

11顶
2踩

互联网

原创新闻 互联网高可用架构技术实践

2017-10-25 10:23 by 副主编 jihong10102006 评论(3) 有11501人浏览
引用
来源:GitBook

一、什么是高可用

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间

假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。

百度的搜索首页,是业内公认高可用保障非常出色的系统,甚至人们会通过www.baidu.com能不能访问来判断“网络的连通性”,百度高可用的服务让人留下啦“网络通畅,百度就能访问”,“百度打不开,应该是网络连不上”的印象,这其实是对百度HA最高的褒奖。

二、如何保障系统的高可用

我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。

保证系统高可用,架构设计的核心准则是:冗余。有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。所以,又往往是通过“自动故障转移”来实现系统的高可用。接下来我们看下典型互联网架构中,如何通过冗余+自动故障转移来保证系统的高可用特性。

三、常见的互联网分层架构

常见互联网分布式架构如上,分为:
  • (1)客户端层:典型调用方是浏览器browser或者手机应用APP
  • (2)反向代理层:系统入口,反向代理
  • (3)站点应用层:实现核心应用逻辑,返回html或者json
  • (4)服务层:如果实现了服务化,就有这一层
  • (5)数据-缓存层:缓存加速访问存储
  • (6)数据-数据库层:数据库固化数据存储
整个系统的高可用,又是通过每一层的冗余+自动故障转移来综合实现的。

四、分层高可用架构实践
1. 客户端层->反向代理层的高可用

客户端层到反向代理层的高可用,是通过反向代理层的冗余来实现的。以nginx为例:有两台nginx,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived存活探测,相同virtual IP提供服务。

自动故障转移:当nginx挂了的时候,keepalived能够探测到,会自动的进行故障转移,将流量自动迁移到shadow-nginx,由于使用的是相同的virtual IP,这个切换过程对调用方是透明的。

2. 反向代理层->站点层的高可用

反向代理层到站点层的高可用,是通过站点层的冗余来实现的。假设反向代理层是nginx,nginx.conf里能够配置多个web后端,并且nginx能够探测到多个后端的存活性。

自动故障转移:当web-server挂了的时候,nginx能够探测到,会自动的进行故障转移,将流量自动迁移到其他的web-server,整个过程由nginx自动完成,对调用方是透明的。

3. 站点层->服务层的高可用

站点层到服务层的高可用,是通过服务层的冗余来实现的。“服务连接池”会建立与下游服务多个连接,每次请求会“随机”选取连接来访问下游服务。

自动故障转移:当service挂了的时候,service-connection-pool能够探测到,会自动的进行故障转移,将流量自动迁移到其他的service,整个过程由连接池自动完成,对调用方是透明的(所以说RPC-client中的服务连接池是很重要的基础组件)。

4. 服务层>缓存层的高可用

服务层到缓存层的高可用,是通过缓存数据的冗余来实现的。 缓存层的数据冗余又有几种方式:第一种是利用客户端的封装,service对cache进行双读或者双写。

缓存层也可以通过支持主从同步的缓存集群来解决缓存层的高可用问题。

以redis为例,redis天然支持主从同步,redis官方也有sentinel哨兵机制,来做redis的存活性检测。

自动故障转移:当redis主挂了的时候,sentinel能够探测到,会通知调用方访问新的redis,整个过程由sentinel和redis集群配合完成,对调用方是透明的。

说完缓存的高可用,这里要多说一句,业务对缓存并不一定有“高可用”要求,更多的对缓存的使用场景,是用来“加速数据访问”:把一部分数据放到缓存里,如果缓存挂了或者缓存没有命中,是可以去后端的数据库中再取数据的。

这类允许“cache miss”的业务场景,缓存架构的建议是:

将kv缓存封装成服务集群,上游设置一个代理(代理可以用集群的方式保证高可用),代理的后端根据缓存访问的key水平切分成若干个实例,每个实例的访问并不做高可用。

缓存实例挂了屏蔽:当有水平切分的实例挂掉时,代理层直接返回cache miss,此时缓存挂掉对调用方也是透明的。key水平切分实例减少,不建议做re-hash,这样容易引发缓存数据的不一致。

5. 服务层>数据库层的高可用

大部分互联网技术,数据库层都用了“主从同步,读写分离”架构,所以数据库层的高可用,又分为“读库高可用”与“写库高可用”两类。

服务层>数据库层“读”的高可用

服务层到数据库读的高可用,是通过读库的冗余来实现的。

既然冗余了读库,一般来说就至少有2个从库,“数据库连接池”会建立与读库多个连接,每次请求会路由到这些读库。

自动故障转移:当读库挂了的时候,db-connection-pool能够探测到,会自动的进行故障转移,将流量自动迁移到其他的读库,整个过程由连接池自动完成,对调用方是透明的(所以说DAO中的数据库连接池是很重要的基础组件)。

服务层>数据库层“写”的高可用

服务层到数据库写的高可用,是通过写库的冗余来实现的。

以mysql为例,可以设置两个mysql双主同步,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived存活探测,相同virtual IP提供服务。

自动故障转移:当写库挂了的时候,keepalived能够探测到,会自动的进行故障转移,将流量自动迁移到shadow-db-master,由于使用的是相同的virtual IP,这个切换过程对调用方是透明的。

五、总结

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。

方法论上,高可用是通过冗余+自动故障转移来实现的。

整个互联网分层系统架构的高可用,又是通过每一层的冗余+自动故障转移来综合实现的,具体的:
(1)客户端层到反向代理层的高可用,是通过反向代理层的冗余实现的,常见实践是keepalived + virtual IP自动故障转移。
(2)反向代理层到站点层的高可用,是通过站点层的冗余实现的,常见实践是nginx与web-server之间的存活性探测与自动故障转移。
(3)站点层到服务层的高可用,是通过服务层的冗余实现的,常见实践是通过service-connection-pool来保证自动故障转移。
(4)服务层到缓存层的高可用,是通过缓存数据的冗余实现的,常见实践是缓存客户端双读双写,或者利用缓存集群的主从数据同步与sentinel保活与自动故障转移;更多的业务场景,对缓存没有高可用要求,可以使用缓存服务化来对调用方屏蔽底层复杂性。
(5)服务层到数据库“读”的高可用,是通过读库的冗余实现的,常见实践是通过db-connection-pool来保证自动故障转移。
(6)服务层到数据库“写”的高可用,是通过写库的冗余实现的,常见实践是keepalived + virtual IP自动故障转移。

末了,希望文章的思路是清晰的,希望大家对高可用的概念和实践有个系统的认识.
  • 大小: 46.2 KB
  • 大小: 17.5 KB
  • 大小: 12.4 KB
  • 大小: 17.6 KB
  • 大小: 14.9 KB
  • 大小: 20.2 KB
  • 大小: 15.2 KB
  • 大小: 11.8 KB
  • 大小: 21.7 KB
  • 大小: 21.4 KB
  • 大小: 20.5 KB
  • 大小: 23 KB
  • 大小: 26.6 KB
  • 大小: 20.2 KB
  • 大小: 16.3 KB
  • 大小: 12.4 KB
来自: 58沈剑
11
2
评论 共 3 条 请登录后发表评论
3 楼 dick1305 2017-12-21 10:09
总结的很好啊。学习了。要是能讲下具体的实现技术就更完美了。
2 楼 DawnBells 2017-12-05 13:41
1 楼 wanghaibing 2017-11-01 15:26
写的不错啊

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Redis 高可用架构最佳实践.ppt

    Redis 高可用架构最佳实践.ppt

  • B站高可用技术架构实践.pdf

    B站高可用技术架构实践.pdf

  • 互联网高并发+高可用+海量用户架构实践

    互联网高并发+高可用+海量用户架构实践

  • A2M 2022年互联网架构与AI技术峰会PPT合集(86份).zip

    微服务单元化架构实践 打造流量用户收入的自动化增长算法闭环 基于目标驱动的全链路项目管理实践 基于OKR价值交付的敏捷实践 研发效能项目管理结合的工程实践 数据科学在音乐推荐中的实践和应用 多模态预训练技术在...

  • 构建高并发高可用的电商平台架构实践.docx

    构建高并发高可用的电商平台架构实践.docx构建高并发高可用的电商平台架构实践.docx构建高并发高可用的电商平台架构实践.docx构建高并发高可用的电商平台架构实践.docx构建高并发高可用的电商平台架构实践.docx构建...

  • 构建高并发高可用的电商平台架构实践.pdf

    构建高并发高可用的电商平台架构实践.pdf构建高并发高可用的电商平台架构实践.pdf构建高并发高可用的电商平台架构实践.pdf构建高并发高可用的电商平台架构实践.pdf构建高并发高可用的电商平台架构实践.pdf构建高并发...

  • 互联网企业网络架构优化实践从应用交付到云计算

    资源名称:互联网企业网络架构优化实践从应用交付到云计算内容简介:应用交付网络架构设计从应用交付到云计算案例分析通过本地负载均衡和广域网负载均衡处理,屏蔽用户端对真实服务的感知,使系统运维可以实时、在线...

  • 《MySQL性能优化和高可用架构实践》简介与推荐序

    #好书推荐##好书奇遇季#《MySQL性能优化和高可用架构实践》,京东当当天猫都有发售。腾讯云架构师宋立桓倾情奉献,定价59元,网店打折销售其实没多少钱。 互联网公司里面几乎很少有公司不用MySQL,国内互联网巨头都...

  • 高可用架构 (第1卷).part2

    《高可用架构(第1卷)》由数十位一线架构师的实践与经验凝结而成,选材兼顾技术性、前瞻性与专业深度。各技术焦点,均由极具代表性的领域专家或实践先行者撰文深度剖析,共同组成“高可用”的全局视野与领先高度,...

  • 高可用架构 (第1卷).part1

    《高可用架构(第1卷)》由数十位一线架构师的实践与经验凝结而成,选材兼顾技术性、前瞻性与专业深度。各技术焦点,均由极具代表性的领域专家或实践先行者撰文深度剖析,共同组成“高可用”的全局视野与领先高度,...

  • 电信运营商级安全高可用互联网帐号认证体系技术架构实践-高保庆

    电信综合平台开发运营中心技术部总监兼架构师高保庆带来《高可用电信统一账号认证平台技术架构实践》主题分享,主要介绍中国电信统一帐号认证平台的技术架构实践。

  • Spring Boot Starter-kit:含多种技术应用,如数据库、认证机制,有应用结构.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

  • 包含 Spring Boot 等系列技术参考指南中文版及相关资源的仓库.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

  • Unity3d 3D模型描边代码 懒人直接上代码

    Unity3d 3D模型描边代码 懒人直接上代码

  • java毕业设计-基于SSM的超市管理系统【代码+部署教程】

    原文链接:https://alading.blog.csdn.net/article/details/141710476 包含功能: 经理管理:负责经理信息维护与权限分配,确保管理层操作的安全性和高效性。 员工管理:管理员工信息,包括招聘、离职、考勤及权限设置,优化人力资源配置。 商品分类管理:对商品进行科学分类,便于商品检索与管理,提升顾客购物体验。 商品信息管理:维护商品详细信息,如名称、价格、描述等,确保信息准确无误。 商品入库管理:监控商品入库流程,记录库存变化,实现库存精准管理。 商品销售管理:处理销售事务,包括销售记录、退货处理,支持销售业绩分析。 缺货提醒管理:自动检测库存水平,及时发出缺货警告,保障商品供应连续性。 商品收银管理:处理交易结算,支持多种支付方式,确保收银过程快速准确。 供应商管理:维护供应商信息,评估合作效果,优化供应链,保证商品质量与供应稳定性。

Global site tag (gtag.js) - Google Analytics