分享一个高弹性的架构

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 利用阿里云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集群增加节点时无需进行大量的数据拷贝,因此可以在分钟级完成集群的横向扩容。

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

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6月前
|
弹性计算 容器
ACK集群高弹性架构
ACK集群高弹性架构
95 0
|
6月前
|
运维 Cloud Native Serverless
MSE Serverless 正式商用,构建低成本高弹性的微服务架构
MSE Serverless 正式商用,构建低成本高弹性的微服务架构
70555 84
|
6月前
|
存储 弹性计算 运维
ACK集群高弹性架构有哪些优缺点
ACK集群高弹性架构有哪些优缺点
133 0
|
弹性计算 测试技术 Serverless
容器应用的高弹性架构实践
本实验是基于阿里云容器服务ACK Serverless,通过配置集群的容器水平伸缩(HPA)和容器定时伸缩(CronHPA)来应对业务流量高峰以及定时、批量计算业务
|
6月前
|
弹性计算 Kubernetes 容器
ACK集群高弹性架构
ACK集群高弹性架构
|
弹性计算 Kubernetes 关系型数据库
基于ECI的ACK集群高弹性架构最佳实践
用户原有的业务部署在阿里云ACK集群上,随着业务波动如何达到成本
672 0
基于ECI的ACK集群高弹性架构最佳实践
|
机器学习/深度学习 Kubernetes 负载均衡
ACK集群低成本高弹性架构
用户业务应用容器化改造以后关注应用的高弹性,例如在线业务有比较明显的波峰波谷效应,计算类的离线任务例如机器学习、基因测序等对实时性要求不高且对成本敏感的业务应用等,利用云上资源的灵活性和规模化优势,构建云上高弹性、稳定、成本优化的服务。
ACK集群低成本高弹性架构
|
弹性计算 关系型数据库 测试技术
基于 ECI 的 ACK 集群高弹性架构
用户原有的业务部署在阿里云ACK集群上,在ACK集群上运行常规业务,当业务突发波动(如秒杀活动)时,让突增的业务运行在ECI实例上,随着业务波动动态创建/释放ECI实例,达到成本的最优控制。同时业务方无需管理节点和容量规划,全自动实现容器“无限” 弹性扩容。
863 0
基于 ECI 的 ACK 集群高弹性架构
|
弹性计算 关系型数据库 测试技术
基于 ECI 的 ACK 集群高弹性架构
用户原有的业务部署在阿里云ACK集群上,在ACK集群上运行常规业务,当业务突发波动(如秒杀活动)时,让突增的业务运行在ECI实例上,随着业务波动动态创建/释放ECI实例,达到成本的最优控制。同时业务方无需管理节点和容量规划,全自动实现容器“无限” 弹性扩容。
20340 0
基于 ECI 的 ACK 集群高弹性架构