互联网高可用架构探讨

互联网,可用,架构,探讨 · 浏览次数 : 126

小编点评

**高可用指标与问题高可用** **高可用**是一种衡量系统可靠性的一种度量,它表示系统可以持续提供服务的能力。 **指标** 业界通常使用多个9来衡量系统的可用性,例如: - 平均可用时间(MTBF) - 平均故障间隔时间(MTTR) - 可用性(Uptime) **问题高可用** 问题高可用是指系统可以解决的问题的能力。它通常与指标相关联,例如: - 设备故障:机房断电、硬盘损坏、交换机故障。 - 网络故障:网络带宽拥堵、网络连接中断。 - 安全问题:利用系统漏洞进行网络攻击。 - 性能问题:CPU利用率太高、内存不足、磁盘IO过载、数据库慢SQL。 - 更新维护:由于业务变更或技术改进而引起的系统升级。 - 系统问题:分布式系统中存在服务的依赖而导致数据的不一致性,或是核心服务出现异常。 **负载均衡** 负载均衡是一种技术,它可以将请求分配到多个工作单元上进行运行,以提高网络设备的带宽。它可以防止机房断电、网络设备故障等问题。 **异步调用** 异步调用是一种技术,它可以将请求一个一个地被处理,避免并发太高而引起的应用无法及时处理。

正文

高可用指标与问题

高可用,英文单词High Availability,缩写HA,它是分布式系统架构设计中一个重要的度量。业界通常用多个9来衡量系统的可用性,如下表:

既然有可用率,有一定会存在不可用的情况。系统宕机一般分为有计划的和无计划的,有计划的如日常维护、系统升级等,无计划的如设备故障、突发断电等。我们对此作如下分类:

1.设备故障:机房断电、硬盘损坏、交换机故障。

2.网络故障:网络带宽拥堵、网络连接中断。

3.安全问题:利用系统漏洞进行网络攻击。

4.性能问题:CPU利用率太高、内存不足、磁盘IO过载、数据库慢SQL。

5.升级维护:由于业务变更或技术改进而引起的系统升级。

6.系统问题:分布式系统中存在服务的依赖而导致数据的不一致性,或是核心服务出现异常。

高可用主要手段

负载均衡

负载均衡(Load Balance),它将工作任务分发到多个工作单元上进行运行,它可以提高网络设备的带宽,提升网络数据处理能力,增强网络的稳定性。可防止机房断电、网络设备故障等问题。

负载均衡的实现可分为硬件负载与软件负载。硬件负载由专门的设备完成专门的任务,这种方式性能较高同时成本也高;软件负载通过软件代码实现,此种方式耗费操作系统资源,性能较低,容易出现BUG,也容易引起安全问题。

负载策略一般有轮询策略、随机策略、最小连接策略以及最短响应时间策略。

轮询策略:讲用户请求轮流分配给服务器,这种算法比较简单。

随机策略:随机选择一台服务器来执行任务。

最小连接策略:把请求分配给活动连接数最小的后端服务器。

最短响应时间策略:将请求分配给平均响应时间最短的服务器。

限流

限流就是避免服务过载,随着流量的提高,无论负载策略如何高效,系统的某个环节总会过载。就如木桶能装多少水取决于最短的那块木板,我们是无法保证系统的每个部分都保持同样的高吞吐量,因此要考虑如何优雅地提供有损服务。

常用的三种限流算法:计数器算法、滑动窗口算法、漏桶算法、令牌桶算法。

计数器算法:使用计数器在一定周期内累加某个接口的访问次数,当达到限流阈值时,触发限流策略,进入下一个周期后,重新开始计数。此算法较为简单,但会降低服务器的负载能力。

滑动窗口算法:将时间周期划分成更小的周期,按小周期来进行计数,根据时间滑动删除过期的小周期。这种算法使得周期划分得越小服务器的负载能力越高。

漏桶算法:将请求直接放入漏桶中,如果当前访问量超出漏桶的限流值,则把后来的请求予以丢弃,这样可以最大限度地提高服务器的负载能力。

令牌桶算法:以(时间周期/限流值)的速度向令牌桶里增加令牌,直到装满桶的容量,当请求到达时,分配一个令牌让其通过,如果没有获取到令牌则触发限流机制。

### 异步调用

异步调用一般有两种方式:一种是异步回调,一种是消息队列。消息队列方式也算是限流的一种手段,可以让请求一个一个地被处理,避免并发太高而引起的应用无法及时处理。这种方式相对与限流来讲,是一种无损的解决方案。但这种方案仅适用于非实时响应的业务。

### 超时重试与幂等设计

很多文章把超时重试与幂等设计分开来讨论,但我却认为它们是相辅相成,密切相关的。在设计超时重试时,一定要考虑幂等设计

超时重试机制:由于服务器宕机、网络延时、服务器线程死锁等原因,导致应用程序无法先限定时间内对服务调用方进行响应。因此当发生调用超时后,应用程序可根据调度策略进行重试。被调用的服务没有及时响应,可能会存在两种情况,一是服务内部发生异常,导致执行失败,没有返回任何消息;一是执行的服务耗时太长,没有及时响应,但实际已经执行成功。所以针对第二种情况要做幂等设计。

幂等设计:多次相同参数的请求对系统造成的作业都是相同的。常见的幂等方案有:MCVV多版本并发、唯一索引、token机制、悲观锁、状态机幂等、只读操作等。

降级与熔断

服务降级与服务熔断都是为了解决服务雪崩的问题,但不要把他们混为一谈,它们是有本质区别的。

降级是对系统的某个功能进行降级,可以只提供部分功能也可以完全停止该功能。降级一般由开关来进行控制,在不重启服务的情况下,对功能进行降级。它常常发生在高并发时段、机器卡顿、下游不太重要的服务异常等情况下。

熔断没有开关,它是一个框架级的设计,常常被称作断路器。它的主要作用是,当下游的服务因为某种原因变得不可用或服务不及时,为了保证整体服务的可用性,不再调用目标服务,直接返回默认处理或容错处理,从而使得整体服务可以快速响应。例如SpringCloud中的Hystrix。

降级与熔断的主要区别是手动与自动。降级主要是通过配置中心的热刷新功能,人为地对开关进行打开与关闭操作。而熔断则是根据事先设计好的策略,系统自动地根据策略来进行开关操作。但它们都是对功能进行关闭。

架构模式

主备模式

实际是一主多备,master负责提供读写服务,slave作为数据备份,一旦主机宕机,将其中一个备节点作为主节点。

主从复制

实际是一主多从,master对外提供读写服务,slave作为数据备份提供只读服务。主机定期复制数据给从机。多副本的关键问题是保证数据一致性,通常需要考虑数据同步延时的问题。

集群分片

集群分片是为了解决每台机器上存储全量数据的问题,面对大数据单机的存储量总是有上限的,当面对PB级数据时,单机是无法支撑的,因此就需要对数据进行分片。

异地多活

异地就是指在地理位置上不同的地方,可分为同城异地、跨城异地、跨国异地,多活就是指不同地理位置上的系统都能够提供服务。这种架构的复杂度较高,且部署成本也会提高。

设计原则:

1、 只把核心业务设计为异地多活,比如流量大、盈利高的业务

2、 保证核心数据的一致性与实时性,且可丢失、可恢复

3、 可采用多种数据同步的方案,比如存储系统同步、消息队列同步

4、 异地多活仅适用于大部分用户,以地区来论,覆盖主要城区

总结

在互联网架构设计中,高可用是必不可少的环节,要从网络架构、服务架构、数据架构以及软硬件架构等多方面来分析设计,是架构师必备的技能之一。

作者:京东零售 谷伟

来源:京东云开发者社区

与互联网高可用架构探讨相似的内容:

互联网高可用架构探讨

在互联网架构设计中,高可用是必不可少的环节,要从网络架构、服务架构、数据架构以及软硬件架构等多方面来分析设计,是架构师必备的技能之一。

vivo 云原生容器探索和落地实践

本文会详细介绍vivo在容器集群高可用建设中的具体实践,包括在容器集群高可用建设、容器集群自动化运维、容器平台架构升级、容器平台能力增强、容器生态打通等层面的打磨和建设。

Go指针探秘:深入理解内存与安全性

Go指针为程序员提供了对内存的深入管理能力,同时确保了代码的安全性。本文深入探讨了Go指针的基础概念、操作、深层理解及其特性与限制。通过深入了解其设计哲学和应用,我们可以更好地利用Go的强大功能。 关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联

网站停服、秒杀大促…解析高可用网站架构云化

摘要:高可用架构的主要手段,是数据和服务的冗余备份及失效转移。 本文分享自华为云社区《高可用网站架构云化解决方案解析》,作者:琴棋书画-Linda。 一、背景 早期互联网产品用户量少,并发量低,数据量小,多数只需要单个应用服务器可以满足需要,而数据库和文件服务部署在外部单个服务器上。随着业务在线化、

数据库系列:数据库高可用及无损扩容

# 1 背景 在大型互联网场景中,数据库的高可用性显得尤为重要,为了保证稳定性,一般需要采用强化的架构模式,以保证数据层能够提供持续有效的稳定支撑。 # 2 高可用架构的基本演进过程 ## 2.1 基本的数据库架构 每个服务对应一个存储服务实例(基本是数据库单实例模式),使用 IP+Port 进行连

[转帖]浅谈系统稳定性与高可用保障的几种思路

https://segmentfault.com/u/dewujishu 一、前言 高并发、高可用、高性能被称为互联网三高架构,这三者都是工程师和架构师在系统架构设计中必须考虑的因素之一。今天我们就来聊一聊三H中的高可用,也是我们常说的系统稳定性。 本篇文章只聊思路,没有太多的深入细节。阅读全文大概

轻量级的架构决策记录机制

作者:倪新明 ADR是一种性价比非常高的架构决策文档化实践,团队引入和实践成本很低,却能为团队带来极大收益! 1 团队研发面临的问题 不论是在传统的IT行业,还是互联网行业,研发团队在架构决策层面或多或少的都会面临以下问题或挑战: •新成员加入团队,对系统现有的架构决策可能会盲目遵守,只知其然,不知

Thanos解码:打造企业级云原生监控解决方案

本文深入探讨了Thanos技术在云原生监控领域的应用,详细介绍了Thanos的基本概念、核心组件、安装配置步骤以及一个实战案例,帮助读者理解如何利用Thanos解决大规模监控数据的存储、查询和高可用性问题。 关注作者,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研

大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介

📚️Reference: IoT 边缘计算系列文章 什么是边缘容器? 边缘容器的概念 边缘容器是分散的计算资源,尽可能靠近最终用户或设备,以减少延迟、节省带宽并增强整体数字体验。 可以访问互联网的设备数量每天都在增加。有包括但不限于: 智能电视 智能家居 智能手机 智能汽车 物联网 IoT 创造的

架构与思维:秒杀和竞拍的业务架构,永不过时的话题

1 互联网架构越来越复杂? 为啥感觉互联网架构越来越复杂了,早期我们的系统,可能也就那么少部分人使用,大都是一些后台管理系统。 所以不用考虑很多东西,比如: 流量少,无需考虑并发问题 数据少,不用考虑什么索引优化、分库分表 访问不集中,不用考虑缓存、过载保护 如果数据不重要,不用考虑安全策略,甚至不