分享一个高弹性的架构

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 利用阿里云ACK、ECI、MQ、PolarDB实现高弹性IT基础架构。

在互联网相关的业务中,高弹性是经常被提及的一个架构设计目标,前两个我就遇到一个客户要求我们帮忙设计一个高弹性的架构以承载他们周期性暴增的业务压力,客户90%以上的业务压力都集中在业务高峰期,因此在设计这个架构之初,我和客户就在纠结,到底是采用更熟悉的“堆”服务器的思路呢,还是采取更具弹性的容器化的方案呢?其实作为一个技术人员,在问这个问题的时候就已经有确定的答案了,最终我们设计出了这样的一个架构:

kubernetes弹性架构.png

容器平台选择阿里云的ACK(阿里云容器服务Kubernetes版)。其中ACK 分成专有版和托管版,区别是专有版的管控节点需要用户自行准备,而托管版使用阿里云的资源进行资源管控,在托管版中又分成标准版和Pro版,其中Pro版有确定的SLA保障,生产系统建议选择Pro版。同时为了保障worker节点的信息安全,建议为充当worker节点的ECS配置云安全中心服务进行主机安全防护。

除了ACK,阿里云还提供无服务器架构的ASK,区别是ACK有ECS服务器充当worker节点,创建POD所需的资源通过ECS进行分配,而ASK没有worker节点,ASK直接在阿里云的共享资源池中通过ECI(弹性容器节点)来分配资源创建POD。

在这个项目中为了保证始终有一定量的稳定资源供给,我们决定使用ACK再结合阿里云的ECI来实现资源的弹性供给。ECI资源的申请和释放可通过ACK的ack-virtual-node插件来自动完成,动态增加的POD将自动运行在ECI之上。

这里的POD是Kubernetes的基本资源调度单元,由一组紧密联系的容器所组成,POD的功能类似于虚拟化平台的VM。
ECI 是阿里云的弹性容器实例,通过安全容器沙箱技术在共享资源池按照用户要求分配所需的资源进行容器创建,Kubernetes集群在使用ECI时可通过在yaml文件中指定资源需求直接创建所需规格的POD。

考虑到业务高峰期和平时存在巨大的使用量落差,选择使用按流量的方式购买网络带宽资源,并通过购买共享流量包将所有的网络流量进行集中抵扣。这个项目所用到的网络流量主要有如下三个:

  • 进入的业务流量、Kubernetes集群正常情况下通过Ingress接受来自外界的服务器请求,阿里云默认情况下将所有的Ingress绑定到一个SLB上实现负载平衡和高可用,因为要承载业务服务器请求,因此建议这个SLB选择尽可能高的规格。通过Kubernetes的服务发现和负载均衡机制,业务流量进入负载均衡后会被自动分配到由ECS和ECI节点所创建的POD之上。
  • POD对外部接口的访问和容器镜像的拉取、POD中的业务系统当需要对外部接口和服务进行调用时,需要通过NAT网关进行地址转换以访问外部服务,另外在ECI节点创建POD时,需要从镜像仓库拉取容器镜像,镜像的拉取也需要NAT网关进行地址转换,NAT网关在进行地址转换时需要绑定一个EIP,从外部服务看,所有的请求皆来自该EIP。为了加快容器镜像的拉取速度和安全性,还可以考虑购买阿里云的容器镜像服务。
  • 集群的管控流量、默认情况下阿里云ACK在创建集群时会创建一个内网SLB来接受管控流量,假如需要在公网对集群进行管控可以通过将EIP弹性公网IP绑定到这个内外SLB上来实现远程管理,集群的管控流量相对不大,因此该SLB选择最低规格即可。

鉴于ECI节点上服务的启动需要一定的时间,而业务流量可能瞬间到达峰值,因此通过MQ来缓冲瞬时的业务压力,为运行在ECI弹性资源上的服务争取启动时间。

阿里云MQ服务根据访问协议的不同分成RocketMQ、AMQP、Kafka三个系列,对于海量的业务交易场景建议选择经过双十一检验的RocketMQ系列,在RocketMQ系列中又分成普通版和企业铂金版两个版本,企业铂金版采用独享硬件资源,能够更充分的保障峰值吞吐能力,对于瞬时业务峰值高的业务,建议尽可能选择铂金版。

数据库采用云原生数据库PolarDB,PolarDB可以从2个节点扩容到16个节点,单节点可升级至88核710G规格,集群采用分布式共享存储架构,单个集群可存储100TB的数据,有赖于其采用分布式共享存储的架构,PolarDB集群增加节点时无需进行大量的数据拷贝,因此可以在分钟级完成集群的横向扩容。

我觉得这个架构对于大多数“腰部”级别的互联网行业客户都是适用的,因此分享出来,希望对大家有所帮助。

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
弹性计算 容器
ACK集群高弹性架构
ACK集群高弹性架构
35 0
|
3月前
|
存储 弹性计算 运维
ACK集群高弹性架构有哪些优缺点
ACK集群高弹性架构有哪些优缺点
39 0
|
4月前
|
弹性计算 Kubernetes 容器
ACK集群高弹性架构
ACK集群高弹性架构
|
4月前
|
运维 Cloud Native Serverless
MSE Serverless 正式商用,构建低成本高弹性的微服务架构
MSE Serverless 正式商用,构建低成本高弹性的微服务架构
70477 77
|
5月前
|
弹性计算 测试技术 Serverless
容器应用的高弹性架构实践
本实验是基于阿里云容器服务ACK Serverless,通过配置集群的容器水平伸缩(HPA)和容器定时伸缩(CronHPA)来应对业务流量高峰以及定时、批量计算业务
|
弹性计算 Kubernetes 关系型数据库
基于ECI的ACK集群高弹性架构最佳实践
用户原有的业务部署在阿里云ACK集群上,随着业务波动如何达到成本
531 0
基于ECI的ACK集群高弹性架构最佳实践
|
机器学习/深度学习 Kubernetes 负载均衡
ACK集群低成本高弹性架构
用户业务应用容器化改造以后关注应用的高弹性,例如在线业务有比较明显的波峰波谷效应,计算类的离线任务例如机器学习、基因测序等对实时性要求不高且对成本敏感的业务应用等,利用云上资源的灵活性和规模化优势,构建云上高弹性、稳定、成本优化的服务。
ACK集群低成本高弹性架构
|
弹性计算 关系型数据库 测试技术
基于 ECI 的 ACK 集群高弹性架构
用户原有的业务部署在阿里云ACK集群上,在ACK集群上运行常规业务,当业务突发波动(如秒杀活动)时,让突增的业务运行在ECI实例上,随着业务波动动态创建/释放ECI实例,达到成本的最优控制。同时业务方无需管理节点和容量规划,全自动实现容器“无限” 弹性扩容。
817 0
基于 ECI 的 ACK 集群高弹性架构
|
弹性计算 关系型数据库 测试技术
基于 ECI 的 ACK 集群高弹性架构
用户原有的业务部署在阿里云ACK集群上,在ACK集群上运行常规业务,当业务突发波动(如秒杀活动)时,让突增的业务运行在ECI实例上,随着业务波动动态创建/释放ECI实例,达到成本的最优控制。同时业务方无需管理节点和容量规划,全自动实现容器“无限” 弹性扩容。
20268 0
基于 ECI 的 ACK 集群高弹性架构