原作者: http://www.iteye.com/news/32723
一、什么是高可用
高可用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自动故障转移。
末了,希望文章的思路是清晰的,希望大家对高可用的概念和实践有个系统的认识.
相关推荐
"MySQL性能优化和高可用架构实践" 本书《MySQL性能优化和高可用架构实践》是一本详细介绍MySQL性能优化和高可用架构实践的书籍,旨在帮助读者提升MySQL数据库的性能和可靠性。本书的内容涵盖了查询优化的基本原则和...
综上所述,《高可用架构 第1卷》将深入讲解这些概念和技术,帮助读者理解如何构建和优化高可用的互联网系统,以应对不断变化的业务需求和挑战。阅读这本书,你将掌握构建高效、稳定且具有高可用性的现代系统所需的...
在中国电信综合平台开发运营中心技术部总监兼架构师高保庆的《高可用电信统一账号认证平台技术架构实践》主题分享中,详细介绍了中国电信统一帐号认证平台的技术架构设计与实践经验。以下是从标题、描述以及提供的...
### 从大型电商架构演进看互联网高可用架构设计 #### 一、互联网架构演进 **五种架构模型介绍** 1. **单体架构**:最初期的软件架构模式,将所有功能集成在一个紧密耦合的应用程序中。易于理解和部署,但随着系统...
总结来说,《互联网高可用架构》涵盖了从理论到实践的全面指导,为企业构建和优化高可用架构提供了宝贵的知识和经验。通过理解这些概念和技术,企业能够更好地应对各种挑战,提供更高水平的在线服务,从而赢得用户的...
### 互联网高并发架构技术实践 #### 单机时代的架构变迁与挑战 互联网早期,特别是在杭研这样的初创团队中,由于资源有限和技术条件所限,单机架构成为了快速开发产品和上线网站的一种常见选择。这一阶段,应用...
本篇将探讨Redis的高可用架构最佳实践,主要涉及Redis Sentinel、Redis Master-Slave复制、Redis Cluster、Twemproxy和Codis等方案。 首先,Redis Sentinel是Redis的高可用性解决方案之一,它可以监控、故障检测...
以下是B站高可用技术架构实践中的几个关键知识点。 1. DNS解析优化 DNS(域名系统)是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。B站通过优化DNS解析,可以...
1-3-移动支付背后的高可用架构-陈斌 1-4-蚂蚁金服异地多活与容灾-刘浩(庄辛) 1-5-分布式应用无银弹—分布式应用架构核心要素的设计方法探讨-董健 1-6-当当架构平台化之道-张亮 1-7-豆瓣的服务化体系改造-田忠博 ...
《互联网金融分布式架构...综上,互联网金融分布式架构实践不仅涉及技术层面的创新,也强调业务模式的优化。通过科技能力的整合,金融机构能够更好地服务大众,提高风控效率,同时应对不断变化的市场环境和业务需求。
### 互联网高并发+高可用+海量用户架构实践 #### 一、单点系统可用性架构与优化方向 **互联网架构师的任务**:确保架构设计紧密贴合业务需求,任何脱离实际业务需求的设计都难以发挥最大价值。 **互联网架构的...
- 负载均衡:负载均衡技术是高可用架构中的核心,它能够合理地分配流量,提高应用处理能力,并减少响应时间。 - 可编程控制:通过内置的可编程接口,可以对网络流量进行精细的控制和管理。 - 应用健康检查:通过...
在互联网行业中,构建高可用和高并发的业务架构是一项至关重要的任务。这涉及到对系统设计原则的深刻理解和实践经验。海恩法则和墨菲定律在系统设计中起着指导作用,提醒我们在面对潜在问题时,必须保持警惕并深入...
在构建大型互联网高可用网站业务架构的过程中,设计者必须遵循一系列原则和策略,以确保系统的稳定性和可靠性。本文主要探讨了互联网项目开发中的一些核心概念,包括海恩法则和墨菲定律,以及如何通过高可用设计来...
《企业互联网的架构实践》深入探讨了这一趋势下的关键技术和最佳实践。 #### 二、企业互联网架构的核心概念 - **企业中台**:作为连接前端业务应用与后端系统的关键桥梁,中台提供了统一的服务接口和数据共享平台...
《高可用架构(第1卷)》由数十位一线架构师的实践与经验凝结而成,选材兼顾技术性、前瞻性与专业深度。各技术焦点,均由极具代表性的领域专家或实践先行者撰文深度剖析,共同组成“高可用”的全局视野与领先高度,...
【标题】:“大型峰值业务背后的高可用架构实践”是一份深度探讨如何在面临大规模业务峰值时,构建稳定、可靠的IT系统架构的专业文档。这份41页的PDF文档,旨在分享和解析如何通过高可用架构来应对瞬时流量激增带来...
社交业务高可用架构的关键运维技术主要包括以下几个方面: ...通过上述架构演进和技术实践,社交业务的高可用架构可实现高并发处理、高可用性保障、可扩展性增强,以及快速响应业务需求变化的能力。
贴吧架构实践”主要聚焦于百度贴吧这一中国领先的在线社区平台的技术架构,尤其是其面对大数据量、高并发访问、快速开发及复杂应用类型时所采取的策略与解决方案。百度贴吧,作为百度旗下的一个大型综合性社区,不仅...