前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >系统架构实践与总结-冗余

系统架构实践与总结-冗余

作者头像
一行舟
发布于 2022-08-25 06:14:01
发布于 2022-08-25 06:14:01
6040
举报
文章被收录于专栏:一行舟一行舟

冗余是架构设计上常用的技术手段,通常用来保证系统的高可用。

典型应用场景

下面具体介绍反向代理和MySQL集群两个场景下,如何通过冗余来保障高可用。

反向代理

传统的web站点,经常使用Nginx做反向代理。反向代理作为整个网站的入口,通常会承担流量转发、安全防护等工作,保证其高可用至关重要。为了保证反向代理的高可用,Nginx+Keepalived是一种常用的解决方案。

Nginx+Keepalived通常有两种实现方式:

  1. 主备方案:一台机器对外提供服务,对应一个VIP;另外一台或多台做备份。正常状况下备机不接流量,当主机出现故障时,Keepalived检测到故障并执行切换逻辑。
  2. 多主方案:每一台机器同时对外提供服务,对应多个VIP;当某一台机器出现故障时,Keepalived检测到故障将机器下线,并完成流量切换工作。

总结

本场景中,通过冗余提供超出实际访问量的Nginx服务和Keepalved检测,在故障发生时,完成流量切换以达到反向代理层的高可用。在主备份方案中,备机通常处于闲置状态,造成了“资源浪费“;而且在发生故障切换流量的过程中,主机上这一时段的请求会出现问题;而且突然大流量的切换也容易引发备机故障。相比之下多主的方案,多台机器都处于工作中,流量分布更加均匀,出现问题的概率更低,是更优雅的方案。不过在多主方案中,每一台机器平时承接的流量最好是其极限值的30%左右,如果过高的话当发生流量切换时容易出现连锁反应,过低会造成资源浪费。

不管是哪一种方案,都提供了冗余的承载能力,才能有后续的流量转移,所以在此场景下冗余是高可用的必要前提。

MySQL集群

介绍我了解的两种MySQL部署模式

MySQL+Keepalved

用户通过VIP访问Master和Slave节点,每个节点采用Keepalved探活。配置主从关系,进行数据同步。当Master节点故障时,把Slave节点提升为主节点。

基于MHA的高可用架构:

部署一份MHA的Manager节点,在MySQL各个实例部署MHA Node节点。MHA可以实现秒级的故障自动转移。当然MySQL节点之间的数据同步还要依赖MySQL自身的数据同步方式。

总结

以上两种数据库部署架构都采用了主从结构,以减轻 Master 节点的读压力。同时为了保证集群的高可用性,分别采用 Keepalived 和 MHA 完成故障迁移。不过这一切的前提还是冗余

我们就拿 MySQL+Keepalved 这种部署方式来说,当 Master 节点发生故障需要下线时,所有的读写都需要迁移到 Slave 节点,这势必导致 Slave 节点流量上升,单个 Slave 节点如果没有冗余的能力能承接请求,Slave 节点也会很快发生故障。换句话说 Slave 节点在分担读流量的同时也为集群提供了冗余的处理能力。

更全面的考虑冗余

除了上述两种场景,在微服务架构中冗余设计的思路更是随处可见。不过要想把冗余设计好并没有那么简单。当我们考虑到时间、地理位置、时延、环境等因素时事情就变得复杂起来了。

时间维度:如何保证冗余服务的时间一致性;如何妥善处理故障迁移时间段内的请求都是比较难处理的问题。

地理位置:通过多中心、异地部署增强系统的高可用,此时还需要保证请求就近选择服务。

时延:在冗余的服务中,请求因为物理链路传输会产生时延,尤其是跨国业务,网络开销很容到达几百ms,此时要想保证冗余服务正常对接也是非常苦难的。

除了系统部署架构上的冗余,我们在开发具体的业务应用时也会用到冗余的思想,比如我们的数据源是否既可以从常规位置获取又可以从备份服务中获取;再比如为了应对网络环境的不稳定性,我们可以让浏览器同时发起两个长链接请求,选择率先链接成功的一个使用;再比如可以同时调用多个第三方服务,选择第一个返回的结果使用。

总结

本文我们介绍了反向代理和MySQL集群两种场景中冗余部署的架构,分析了设计冗余架构时要考虑的更多因素,还列举了具体业务中一些冗余思想的运用。冗余虽然会造成一定的浪费,但同时又是高可用、提升性能的必要+有效手段。

欢迎私信交流,指出文章的不足之处或提出您的疑虑。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一行舟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
10款常见MySQL高可用方案选型解读
关于对高可用的分级我们暂不做详细的讨论,这里只讨论常用高可用方案的优缺点以及选型。
AI乔治
2018/05/11
6.3K2
美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新。同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望。 MMM
庞小明
2018/03/09
4K0
美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
Nginx+Keepalived 集群高可用
为保证业务7*24小时不间断运行从而提供高效、稳定、可靠的信息化服务,前端采双Nginx+Keepalived,Nginx反向代理到后端文件集群实现负载均衡(Load Balancing),Keepalived实现集群高可用(High Available),主Nginx故障后虚拟IP自动漂移到备Nginx。
Kevin song
2021/03/24
1.2K0
Nginx+Keepalived 集群高可用
MySQL 8 大集群架构的优缺点总结
很多开发者可能都没有接触过 MySQL 的架构部署,但是大多数应该都听过集群架构吧。其实 MySQL 集群架构,总结来说一共有好多种,今天我主要总结一下其中常用的 8 种集群架构。
业余草
2019/03/22
7.7K0
MySQL 8 大集群架构的优缺点总结
MYSQL之MHA、MYCAT综合分析
    你可以把它看做是一个监控MySQL的工具,当master挂了之后,起一个slave作为master,另外一台slave重新作为新master的备库;
用户7353950
2022/05/10
1.1K0
MYSQL之MHA、MYCAT综合分析
面试系列-mysql高可用
两个节点可以采用简单的一主一从模式,或者双主模式,并且放置于同一个VLAN中,在master节点发生故障后,利用keepalived/heartbeat的高可用机制实现快速切换到slave节点;
用户4283147
2022/10/27
1.1K0
面试系列-mysql高可用
一张图简介分布式架构架全貌
前言: 本文在书写之前,拜读了张开涛:《亿级流量网站架构核心技术》一书,该书写的系统性很强,建议购买阅读。 本文仅代表个人观点。 本文通过一张图,将分布式开源技术的知识点串起来,方便整体了解和查阅。
魏新宇
2018/03/22
2.3K0
一张图简介分布式架构架全貌
nginx+keepalived搭建高可用负载均衡
如果一台Nginx服务器宕机了,那么整个网站就会挂掉,所以要实现Nginx的高可用,一台挂掉还会有另一台顶上去,从而保证网站可持续的提供服务。
菲宇
2022/12/21
6110
nginx+keepalived搭建高可用负载均衡
MySQL集群架构[通俗易懂]
题记: 文章内容输出来源:拉勾教育Java高薪训练营。 本篇文章是 MySQL 学习课程中的一部分笔记。
全栈程序员站长
2022/09/18
1.6K0
MySQL集群架构[通俗易懂]
MySQL高可用架构
“高可用”是互联网一个永恒的话题,先避开MySQL不谈,为了保证各种服务的高可用有几种常用的解决方案。
一行舟
2022/08/25
1.4K0
MySQL高可用架构
Redis 高可用架构最佳实践
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
张琳兮
2020/10/27
1.6K0
一步一步打造MySQL高可用平台
一 、引子 笔者刚开始进入公司的时候,主要是忙于分布式MySQL系统----MyShard的构建,公司使用了大量的IDC机房,基于这种网络特点,MyShard设计当初完全是为了是一套支持Multi-Master操作的高可用性的分布式数据库,可以在多个机房中部署的业务上提供快速的写操作,实现了分布式高可用存储能力。 在业务增长期,MyShard解决了公司的很多大型的数据库存储业务,随着公司业务逐渐稳定下来,分布式存储需求越来越少。而公司却有大量的小业务以及不断尝试的各种新业务,需要越来越多的小数据量的数据库存
用户1263954
2018/01/30
1.8K0
一步一步打造MySQL高可用平台
MySQL 高可用性—keepalived+mysql双主(有详细步骤和全部配置项解释)
前言:生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即两台MySQL服务器如果其中有一台MySQL服务器挂掉后,另外一台能立马接替其进行工作。
庞小明
2018/09/19
9.5K0
MySQL 高可用性—keepalived+mysql双主(有详细步骤和全部配置项解释)
nginx+keepalived搭建高可用负载均衡(双主模式)(转)
前言 上一篇博客已经实现了nginx+keepalived主从配置,这篇博客来实现双主配置,如果Nginx只有单台的话就会出现单点问题,那么整个网站就会挂掉,所以要实现Nginx的高可用,一台挂掉还会有另一台顶上去,从而保证网站可以持续的提供服务。
wuweixiang
2019/03/12
3.8K0
Nginx系列教程(五)| 利用 Nginx+Keepalived 实现高可用技术
高可用(High Availability)是分布式系统架构设计中必须考虑的因素之一,通常是指:通过设计从而减少系统不能提供服务的时间。
杰哥的IT之旅
2020/06/18
1.5K0
Nginx系列教程(五)| 利用 Nginx+Keepalived 实现高可用技术
Linux之Nginx,keepalived
②:LNMP(基于python的web架构) Linux+nginx+mysql+python 静态资源:客户端从服务器获得的资源表现形式与原文件相同 动态资源:通常是程序文件,需要服务器执行后,将执行结果返回给客户端。
李玺
2021/11/22
7020
实战 | Nginx+keepalived 实现高可用集群
今天通过两个实战案例,带大家理解Nginx+keepalived 如何实现高可用集群,在学习新知识之前您可以选择性复习之前的知识点:
开源Linux
2020/05/11
1.5K0
空谈系统架构设计之高并发、高可用
对于一个应用系统,特别是互联网系统,高并发、高可用是两个非常重要的非功能性需求,这篇文章尝试从应用系统架构角度分析如何满足这两个特性。
Bruce Li
2020/11/10
6750
空谈系统架构设计之高并发、高可用
三高Mysql - 搭建“三高”架构之扩展与切换
内容为慕课网的《高并发 高性能 高可用 Mysql 实战》视频的学习笔记内容和个人整理扩展之后的笔记,这一节讲述三高架构的另外两个部分切换和扩展,扩展指的是分库分表减轻数据库的压力,同时因为分库分表需要针对节点宕机问题引入了一些优化手段,而切换部分就是讲述节点宕机的切换问题的,最后我们结合复制的主从切换讲述如何搭建一个三高的架构。
阿东
2022/05/17
4480
三高Mysql - 搭建“三高”架构之扩展与切换
你们系统是怎么保证高可用的
高可用(HA)是系统架构设计中必须要考虑的,是指系统所能提供无故障服务的一种能力。
架构师修炼
2020/07/20
1.5K0
你们系统是怎么保证高可用的
相关推荐
10款常见MySQL高可用方案选型解读
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档