如何在阿里云上构建高可用应用

简介:


业务高可用是我们每个项目的需求,一个经常故障的项目,会让我们觉得不靠谱而选择放弃,从而导致项目的失败。今天,我们来聊一聊,如何让你自己的业务能够更加稳固的运行!

本次我们从四个不同的角度,来分析,如何让我们的应用更加稳固,平稳运行。

一、        程序架构

优秀的代码

优秀的代码非常重要,即使我们拥有最好的硬件资源和架构,如果我们没有一套健壮的代码,其他资源再好都没有用,所以代码在设计和编写时,应当注意代码的健壮程度。优秀的代码不止开发起来方便,同时维护成本也较低,对于后续的优化来说,健壮的代码会让优化人员更加容易的找到问题的关键。

合理的架构

一个大型的、负载的单体应用可能会让你的整个开发进度缓慢、部署困难。所以,为了解决这种问题,不妨在开发初期便将应用程序设计为微服务架构的程序,虽然可能会提升程序之间的沟通难度,但却为你的应用提供了后续自由伸缩的可能,帮你解决后期发展起来的伸缩难题。

对于已经上线的应用,整体微服务化可能是非常困难的,毕竟你不可能让整个团队重新开发一套系统出来,这样的情况下,不妨把核心的、请求量较高的业务单独拆分出来,作为一个服务,让每一个服务都变成专注与单一的责任和功能的小的区块,更好的对外提供服务。

二、        资源架构

在云计算的时代,云计算大行其道,为各行各业提供计算能力的支持,合理的利用云计算所提供的能力,就能帮助我们更加轻松的去做好应用的高可用。

一般来说,我们的每一个应用大体上都可以分为四层:入口层、业务层、缓存层、数据库层。当我们做好每一层的优化,那么我们的应用本身对于可能出现的问题进行避免。

入口层

入口层通常的情况下指的是Nginx、Apache等层面的东西,来负责应用的入口。一般情况下,我们会将应用程序定位在某一个IP,那么如果我们这个IP宕机了,就会导致服务的不可用,所以,在入口层我们不妨使用负载均衡,通过对压力的评估和成本的预估以及技术实现的难度,我们可以选择自建负载均衡或者使用云服务商提供的负载均衡器,在这样的情况下,当我们入口层后面的业务出现了单点故障时,可以自动借助于负载均衡的健康检查和请求分发的机制,把请求转发分配到可用的节点,保证服务的正常运转。

业务层

业务层通常是由PHP、Java、Python、Go等写的逻辑代码构成的,需要依赖于后台数据库及一些缓存层面的东西。如何实现业务层的高可用呢?最核心的就是,业务层不要有状态,将状态分散到缓存层和数据库。目前大家通常喜欢将以下几种数据放入业务层。

第一个是session,即用户登录相关的数据,但好的做法是将session放在数据库里,或者一个比较稳定的缓存系统中。

第二个是缓存,在访问数据库时,如果一个查询很慢,就希望将这些结果暂时放到进程里,下次再做查询时就不用再访问数据库了。

一个简单的原则就是业务层不要有状态。在业务层没有状态时,一台业务层服务器当掉了之后,Nginx/Apache会自动将所有的请求打到另外一台业务层的服务器上。由于没有状态,两台服务器没有任何差异,所以用户完全感受不到。如果把session放在业务层里面的话,那么面临的问题是,这个用户以前是登录在一台机器上的,这个进程死掉后,用户就会被登出了。

缓存层

非常简单的架构里是没有缓存这个概念的。但在访问量上来之后,MySQL之类的数据库扛不住了,比如在SATA盘里跑MySQL,QPS到达200、300甚至500时,MySQL的性能会大幅下降,这时就可以考虑用缓存层来挡住绝大部分服务请求,提升系统整体的容量。

缓存层如果希望实现高可用的架构,最好的方案就是将缓存层分的细一些,采用分布式的缓存或者是云计算服务商提供的云缓存能力,来减轻数据库层的压力。

数据库层

在数据库层面实现高可用,通常是在软件层面来做。例如,MySQL有主从模式(Master-Slave),还有主主模式(Master-Master)都能满足需求。MongoDB也有ReplicaSet的概念,基本都能满足大家的需求。

三、        云计算资源利用

上述的内容,主要还是和开发层面有关的,接下来我们来聊聊和运维强相关的内容

业务不单点

无论我们怎么对服务器的能力进行优化,终归是有个上限的,而且,单点服务器也更容易出现安全的故障问题。即便是云计算,也无法保证业务的永久可运行,即便是国内TOP1的阿里云,也出现过机房光缆被挖断过。所以,不要指望云计算服务商为你提供绝对可用的服务,更何况,在他们自己的服务等级协议里也不是100%。

所以,对于我们自己来说,要让自己的应用尽可能的不要单机运行,即使你的应用是单体服务,也可以让他跑在同一个节点的不同可用区(节点故障很少见)、不同节点的多个可用区(异地多活)、甚至,为了保证业务的运行,不要相信一家服务商,你可以同时采购多家的云计算资源(如果预算足够),就算有百分之一的可能,这个服务商挂掉了,你还可以切换到别的服务商去提供服务。

合理利用云资源

除了云计算最基础的计算能力,我们往往会购买一些附加的业务,比如云数据库、云缓存、云存储等等。

通过云存储,我们可以将非结构化的附件数据,存储到云服务商所提供的对象存储服务中,减少本地的文件存储压力,同时为业务服务器减少IO读写压力,更加专注于运算。

通过云缓存,我们可以在使用同一个可用区的多台主机时,将状态进行同步。帮助我们的应用同步状态,以免用户登录状态的丢失。

通过云数据库,我们可以借助云服务厂商所提供的能力,来拓展我们数据库的多备份、主从分离等等。让我们的业务数据查询请求进行分流,避免单一数据库的读写压力过大而导致业务的崩溃。

利用云计算供应商的提供能力,能够为你自己维护减轻压力,把精力放在业务本身。

注意备份保安全

云服务商不是神,我们自己部署服务器会出现的问题,云服务商同样也会出现,只是他们可能比我们的优势在于能够更好的去帮我们保存数据,避免数据的丢失。同时借助数异地双活、异地多活、数据三备份等技术,保证我们数据的安全和可靠。我们在使用云服务商为我们提供的种种安全措施的同时,看清楚人家的能力,同时要保证自己的数据的定期备份,以免出现问题。

四、        关注服务商提供的公告信息

维护和故障是不可避免的,再大的云计算服务供应商,都有可能遇见这样或那样的故障文档,只要我们关注服务商所提供的公告信息,尽可能的去提前准备,那么就可以更换的提供服务。

这一方面做的比较好的是AWS和Azure,在每次出现故障后,他们都会提出故障公告,诚恳的说明故障的原因和解决方案,让用户明白故障的问题所在。这一方面,国内阿里云在完善故障通报机制,可以看到同一个故障出来阿里云都是通报最快,算是比较靠谱,其他云厂商,基本上官网不会公开,则大多是能瞒则瞒,能不报就不报,但是问题总归是问题,没有说明反而会让用户更加的疑惑,其他云厂商需要向AWS、Azure以及阿里云学习。

在维护方面,AWS、Azure就显得比较坑爹了,他们过往的维护周期比较长,如Xen底层的一个漏洞,无法采用热升级,一般就需要分批停机维护胡,用户如果没有准备,就需要关站一天,不过好在往往会提前一周发出维护公告,声明维护的节点,让用户提前做好准备。这一方面,国内遇到的还比较少,印象中如阿里云没有大规模停机维护的事件,一方面是AWS在前可作前车之鉴,另外也有技术上的因素。

不过,凡事也没有一定。毕竟,云计算也是由一个个机房组成的,不是真正飘在天空中,飘在云上的服务器,我们在使用传统独立服务器可能会遇见的掉电、故障等问题,也会出现在云计算的主机上,只是相对来说,要少了很多,更加的安全。

所以,不管是AWS、Azure、还是阿里云或国内其他厂商,都在鼓励用户使用多个节点和可用区来部署业务,单点情况下出现的故障是不可避免的,当你使用多个节点时,出现故障的可能就大大的减小了。比如你可以在同一个可用区使用两台主机来做主备,再另外一个可用区做备份,这种情况下,即使一个可用区出现了问题,整体的服务也不会受影响。

 

最后,我们来总结下如何构建高可用的应用:

1.       健壮的代码为高可用保驾护航

2.       合理的架构为高并发情况下的伸缩提供可能

3.       入口层的请求分发

4.       业务层尽可能不存在状态

5.       缓存层使用分布式缓存缓解压力

6.       数据库层使用主备模式进行备份

7.       业务不单点运行

8.       合理利用云计算资源

9.       注意数据的安全与备份

10.    关注云计算厂商的维护公告

最后,祝大家的业务都能正常的运行!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
5天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1288 6
|
4天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
|
9天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
29天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9853 33
|
15天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
6天前
|
Web App开发 人工智能 JavaScript
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
REA(Reverse Engineer Anything)是近期爆火的开源AI逆向工具,4月发布,1个月内斩获15万+ Star。它让AI Agent无需源码即可分析二进制、APK、JS/Electron、HAR包等17类目标,自动反编译、生成可运行代码,并强制返回带证据与局限的结论。全本地执行,MIT协议,支持Hopper/Ghidra/IDA等引擎,一行命令即可上手。
673 2
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
|
4天前
|
人工智能 开发者
Qoder CN 大使计划正式开启|无限创造,等你一起
全年免费积分、优先内测、活动支持与更多共创机会,邀请用 Qoder 把想法变成现实的你。
442 0
|
13天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
982 1