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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:


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

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

一、        程序架构

优秀的代码

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

合理的架构

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

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

二、        资源架构

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

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

入口层

入口层通常的情况下指的是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.    关注云计算厂商的维护公告

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
招募!阿里云x魔搭社区发起Create@AI创客松邀你探索下一代多维智能体应用
招募!阿里云x魔搭社区发起Create@AI创客松邀你探索下一代多维智能体应用
267 0
|
2月前
|
弹性计算 人工智能 安全
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(3)
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(3)
431 0
|
2月前
|
弹性计算 安全 网络安全
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(2)
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(2)
478 0
|
8天前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
18天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
29天前
|
弹性计算 网络协议 关系型数据库
网络技术基础阿里云实验——企业级云上网络构建实践
实验地址:<https://developer.aliyun.com/adc/scenario/65e54c7876324bbe9e1fb18665719179> 本文档指导在阿里云上构建跨地域的网络环境,涉及杭州和北京两个地域。任务包括创建VPC、交换机、ECS实例,配置VPC对等连接,以及设置安全组和网络ACL规则以实现特定服务间的互访。例如,允许北京的研发服务器ECS-DEV访问杭州的文件服务器ECS-FS的SSH服务,ECS-FS访问ECS-WEB01的SSH服务,ECS-WEB01访问ECS-DB01的MySQL服务,并确保ECS-WEB03对外提供HTTP服务。
|
1月前
|
弹性计算 人工智能 物联网
挖掘阿里云ECS的潜力:创意应用和未来可能性
在云厂商中,我觉得开发者更信赖阿里云的云产品,而且随着阿里云最近宣布云产品降价的消息,会有更多的开发者和企业选择阿里云的云产品。这里拿阿里云的云服务器来做说明,阿里云的云服务器ECS为用户提供了强大的计算资源和灵活的扩展性,使其成为搭建各种有趣和创意应用的理想平台。除了已知的小游戏、小程序和个人网盘等应用案例之外,本文还会进一步探讨ECS在特定场景下的实践经验,并挖掘其在其他领域的潜力,为大家带来更多创意和启发。
556 3
挖掘阿里云ECS的潜力:创意应用和未来可能性
|
1月前
|
缓存 运维 监控
应用研发平台EMAS 常见问题之用华为的推送界面阿里云收不到如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
382 2
|
1月前
|
消息中间件 编解码 运维
阿里云 Serverless 异步任务处理系统在数据分析领域的应用
本文主要介绍异步任务处理系统中的数据分析,函数计算异步任务最佳实践-Kafka ETL,函数计算异步任务最佳实践-音视频处理等。
175296 348
|
1月前
|
人工智能 DataWorks 数据可视化
心动基于阿里云DataWorks构建游戏行业通用大数据模型
心动游戏在阿里云上构建云原生大数据平台,基于DataWorks构建行业通用大数据模型,如玩家、产品、SDK、事件、发行等,满足各种不同的分析型应用的要求,如AI场景、风控场景、数据分析场景等。
334 1

热门文章

最新文章