本文长度为2042字,建议阅读6分钟。所有「」包裹的文字,只对第一次出现进行高亮显示。
阅读目录
咳咳,从这篇开始,正式拉开分布式系统关注点中,我认为第二重要的内容 —— 「高可用」。
本篇的要点主要是明确「高可用」的定义,以及了解在分布式系统下哪些环节要做「高可用」,为后续要讲的策略、方式方案打下基础。如有1年以上的分布式系统实战经验可酌情选择跳过本篇。
Tips:「高XX」中的“高”其实是相对的,越满足期望值,就越是“高”的。
一、「高可用」的作用?
首先,统一下对「高可用」的认知。
做个通俗一点的类比:独生子女时代的子女就是“单体应用”,如果出意外了,父母就「失独」了,整个家族的传承就断了,“不可用”了。然而,二胎政策就是通过分布式(冗余)来降低出现这个问题的概率,从而提高“可用性”。
对于「高可用」,专业的解释是:
「高可用」指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。
—— 百度百科
简而言之,不管发生了什么(哪怕是地震、洪水了),能够让用户尽可能的无感知,依旧能正常使用系统,也就是越「高可用」的。
为什么在「数据一致性」后面就聊「高可用」呢?我的理解是,分布式系统的关键是做冗余,但是冗余的最大敌人却是「数据一致性」。我们通过冗余打破了原先的瓶颈,打开了一些新的通道。如,可以去争取更高的可用性、更高的性能等等。但是这其中,属「高可用」最重要。从上面引用中的解释也可以看到,要想尽可能的降低停机时间,单体应用的天花板总会更快的到来。就好比让一台电脑永远保持运行是困难的,期间总得更新几次操作系统、突然出现几次硬件故障,甚至机房的光纤被挖断了!那么这个时候就处于“不可用”状态。
也因此,我认为「高可用」的价值或者说意义,必定是在我们做分布式系统获得的其它好处之上的,比如「高性能」之类。因为,在一定范围内,所谓的「高性能」其实通过优化单体应用也有可能达到某个期望值,但是「高可用」则必然需要依赖分布式系统才能达到。
二、如何来衡量「高可用」
一般我们讲到最多的是用Service Level Agrement来衡量高可用指标,简称SLA。不过,其原意表示的是关于网络服务供应商和客户间的一份合同,其中定义了服务类型、服务质量和客户付款等术语,其中还包含除了「有效工作时间」之外的其它概念,如带宽、服务就绪时间(RFSD)、平均故障间隔时间(MTBF)、服务平均恢复时间(MTRS)、平均修理时间(MTTR)等。最初,SLA多用于电信运营商之类的基础设施所提供的服务中,商定用户可以享受什么样的等级什么样的带宽服务等等。
SLA完整的定义会复杂的多,在软件系统中主要是取了其中的「有效工作时间」部分。只要系统一直能够提供服务,我们就可以说系统的可用性是100%,但这只停留在理想中。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。贴一张常见的表格图:
▲图片来源于网络,版权归原作者所有
如今,我们的生活越来越依赖于移动互联网的一些应用,假设支付宝挂了几个小时,这下好了,刷不了卡了、转不了帐了、信用卡也还不了了,慌不慌?
不过,相对的,还可以投机的理解为,只要我能保证系统在你使用它的时候是可用的,那么对外宣传也可以是「高可用」的。这也是在互联网普及之前,很多企业的内部C/S架构的信息系统得以正常使用的原因,比如银行会在非营业时间更新他们的系统,所以对于服务窗口的营业员来说,系统并没有不可用,因为那个时候我不需要用它。
三、做「高可用」的本质
做「高可用」用一句话来概括就是:
更快的发现故障,更快的隔离故障。
任何对这2点有帮助的工作就是我们要做的事情。
做任何事情都有主次之分,做高可用的“主”就是「负载均衡」。
之前的文章中提到过多次,分布式系统的关键是做冗余,那么让这些冗余能发挥「高可用」作用的就是「负载均衡」。所以,这是最基本的,也是迈向「高可用」的第一步,其它的措施都是建立在「负载均衡」之上的。
「负载均衡」的作用是一个“连接者”,让上下游之间以我期望的方式“连接”起来。所以,有必要先了解一下这些上下游的全貌,并且从中找到我们要做「负载均衡」的地方。
分布式系统有各式各样的架构方式,不过本质上都是上图这样的一个分层架构。图中红点标记出的地方就是我们需要做「负载均衡」的地方,可以看到,就是每两层之间的连接处。
这些连接处在实际做「负载均衡」的时候,需要结合所处的网络层次。因为在不同的网络层次有不同的做法。如下图。
一般主流的四层负载均衡和七层负载均衡,前者指的就是传输层,主要涉及的协议是TCP、UDP等,后者指的应用层,主要涉及的协议是Http、Https和FTP等。
用来实现「负载均衡」的解决方案有很多,分为基于硬件或者基于软件的,比较成熟的诸如:F5(支持四层、七层)、LVS(支持四层)、Nginx(支持七层)等等。
近些年,随着Service Mesh的兴起,随着涌现了一大批新一代的「负载均衡」解决方案,如Envoy、Istio、Linkerd、Ribbon等,有兴趣的小伙伴们可以自行研究下。
四、结语
这篇先起个步,下篇聊聊有哪些做「负载均衡」的策略,用图说话。
作者:Zachary(个人×××号:Zachary-ZF)
×××公众号(首发):跨界架构师。<-- 点击查阅近期热门文章
定期发表原创内容:架构设计丨分布式系统丨产品丨运营丨一些深度思考。
扫码加入小圈子 ↓
相关推荐
大模型扫盲系列——初识大模型.docx
物联网就在身边——初识物联网PPT课件.ppt
步入VB开发之门——初识Visual Basic 6.0.ppt
物联网就在身边——初识物联网 物联网(Internet of Things,简称 IoT)是指将各种信息传感设备,如射频识别(RFID)装置、红外感应器、全球定位系统、激光扫描器等种种装置与互联网结合起来而形成的一个巨大网络。...
.NET Remoting(下文简称Remoting)是一种可用于开发分布式应用程序的技术。其主要的结构,分为:远程对象、提供远程对象的远程服务器,以及可以访问何使用远程对象的客户端。这三个部分,可以分布于同一台计算机的同...
当我们谈论"动手学Android之二——初识Activity示例代码"时,这通常指的是一个简单的教程,旨在帮助初学者理解如何创建并运行第一个Android应用,从而开始他们的Android开发之旅。 在Android中,Activity是负责显示...
NULL 博文链接:https://twb.iteye.com/blog/265761
作者:夏明(涯海)创作日期:2019-09-19专栏地址:【稳定大于一切】狭义上的链路追踪(Tracing),是指跟踪请求在分布式系统中的流转路径与状态,协助开
【初识投资之路】——大树系列课程 在投资领域,初学者往往面临众多困惑和挑战。大树系列课程之一——“初识投资之路”旨在引导新手投资者理解投资的基本概念,掌握必要的投资策略,以及如何逐步成长成为一名成熟的...
在小学信息技术课程中,《舞动的小猫——初识Scratch软件》是一节生动有趣的入门课,适用于四年级的学生。四年级的学生正处于形象思维发展的关键期,他们富有好奇心,乐于探索。这节课的设计考虑到了学生已有的...
初学者在接触文件时,首先要理解文件的概念和在计算机系统中的作用。文件是用来存储数据的一种结构,可以是文本、图像、音频等各种类型。Java提供了丰富的API来处理文件,使得开发者能够进行读取、写入、移动、复制...
在第一章节“来自苹果的编程语言——初识Swift”中,我们将学习以下几个关键知识点: 1. **Swift的历史与背景**:了解Swift的诞生背景,它是如何取代Objective-C成为苹果生态系统的首选编程语言,以及Swift的发展...
【Cocos Creator 联机实战教程(1)】——初识Socket.io 是一个针对游戏开发者,特别是使用Cocos Creator的开发者的系列教程。本教程旨在帮助他们掌握如何利用Socket.io实现在Cocos Creator游戏中的实时通信功能,这...
每个人都能理解的ajax 1、ajax是什么? 2、ajax可以做什么? 3、ajax基础代码
这是我在接触Azure云计算平台后学习和工作所产生的一些文章。内容为原创,供大家参考。
### 千里之堤,溃于蚁穴——揭密SQL注入攻击 #### 一、SQL注入漏洞与攻击 SQL注入(SQL Injection)是一种常见的安全漏洞,它发生在应用程序没有正确处理用户输入的情况下,允许攻击者通过恶意构造的SQL语句来操控...
例如,智能家居系统,通过智能设备如智能灯泡、智能空调等,实现家庭环境的远程控制和自动化管理。在医疗领域,远程健康监测系统可以实时跟踪患者的生理指标,提高医疗服务效率。在交通领域,智能公交系统利用电子...
在Windows系统中,可以通过“网上邻居”功能来共享文件夹。具体步骤包括:在要共享的文件夹上右键点击,选择“共享和安全”,然后在“共享”标签上启用共享选项,并设置相应的权限。 在教学过程中,学生应了解这些...
续———初识HTML!!!.md