利用阿里云容器服务实现高可用抢红包应用

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 红包是春节习俗,原本是讨个吉利的意图。在互联网技术高度发展的今天,用手机抢红包已经成为一种文化、一种生活方式;据支付宝统计的数据显示,2016年2月7日除夕夜,支付宝共四轮“咻一咻”互动平台的总参与次数达到了3245亿次;在21点09分,用户的参与热情达到了顶峰,“咻一咻”峰值一度达到210亿次/.

红包是春节习俗,原本是讨个吉利的意图。在互联网技术高度发展的今天,用手机抢红包已经成为一种文化、一种生活方式;据支付宝统计的数据显示,2016年2月7日除夕夜,支付宝共四轮“咻一咻”互动平台的总参与次数达到了3245亿次;在21点09分,用户的参与热情达到了顶峰,“咻一咻”峰值一度达到210亿次/分钟。

业务需求催生技术升级,随着红包业务的大众化、普遍化,我们对高可用、可扩展、按需提供服务的技术架构要求越来越高。下面介绍一种基于阿里云容器服务及相关云产品组成的高可用抢红包系统框架;

系统架构:

下图给出了基于阿里云相关产品实现的抢红包系统架构,所涉及的产品包括阿里云容器服务,MNS,RDS,SLB,SLS等。

框架图

用户端:模拟用户抢红包软件(如支付宝),能发送用户的的抢红包请求,并携带身份ID等信息;根据服务端的响应,把中奖信息反馈给用户;

请求处理逻辑:用户发送抢红包信息到“请求处理逻辑集群”,这部分有SLB、ECS集群,ECS集群通过阿里云容器服务实现容器化。可以接收用户请红包请求,并调用接口进行身份验证、MNS获取消息(抢红包)等;通过MNS反馈消息判断是否中奖,并反馈给用户;

身份验证模块:用户验证抢红包用户的身份,可以根据业务实现不同的限制;例如约定同一个用户ID在一定时间内只能抢一次、或者随机放弃1/2的用户请求;

红包管理监控:显示当前MNS中有效红包数;进行红包发放操作,可以设定总红包数,多批次发放,以及发放时间间隔等;可以基于SLS日志服务进行红包数据统计;

MNS服务:模拟红包队列,请求处理模块通过从MNS抢消息来模拟抢红包,抢到消息的请求即为抢到红包;同时通过往MNS中发送消息模拟赛红包;

SLS服务:日志存储服务,会把抢红包过程中产生的状态日志(中奖、未中奖、验证错误等)进行统计、并持久化;

RDS服务:存储用户相关信息,验证抢红包用户的身份;持久化红包发放信息,包含抽中红包用户的ID,时间,红包ID等;

SLB服务:对用户请求进行负载均衡;

其中MNS、SLS、RDS、SLB都通过阿里云提供的云服务实现,其余组件均通过简单的代码实现,并通过容器服务进行微服务化;

下图以容器服务为中心描述了系统之间的调用:

框架图

实现细节:

系统通过4个微服务相互配合,并引用RDS、MNS、SLS等提供的服务能力;下面是通过容器服务部署的编排文件内容:

webpage:
  image: registry.cn-hangzhou.aliyuncs.com/junbao/redpacket_webpage:v5
  restart: always
  labels:
    aliyun.routing.port_80: http://test/webpage
    aliyun.logs: /var/log
    aliyun.probe.url: http://container/index.jsp
    aliyun.scale: '3'
    aliyun.auto_scaling.max_cpu: '70'
    aliyun.auto_scaling.min_cpu: '40'
    aliyun.auto_scaling.step: '1'
redpacket:
  image: registry.cn-hangzhou.aliyuncs.com/junbao/redpacket_redpacket:v12
  restart: always
  environment:
    DB_HOST: "rm-bp1y1o7ga6hsm257o.mysql.rds.aliyuncs.com"
    DB_PORT: "3306"
    DB_NAME: "redpacket_account_check"
    DB_USER: "docker"
    DB_PASSWD: "***"
    ACCOUNT_CHECK_IP: "account.local"
    MNS_URL: "http://1171330362041663.mns.cn-hangzhou.aliyuncs.com"
    ACCESS_KEY_ID: "xxxxx"
    ACCESS_KEY_SECRET: "*******"
  external_links:
    - "account.local"
  labels:
    aliyun.routing.port_80: http://test/redpacket
    aliyun.logs: /var/log
    aliyun.probe.url: http://container/redpacket/test
    aliyun.scale: '2'
    aliyun.log_store_redpacket: /var/log/redpacket_access.log
    aliyun.log.timestamp: "false"
    aliyun.auto_scaling.max_cpu: '70'
    aliyun.auto_scaling.min_cpu: '40'
    aliyun.auto_scaling.step: '1'
account:
  image: registry.cn-hangzhou.aliyuncs.com/junbao/redpacket_account:v12
  restart: always
  environment:
    DB_HOST: "rm-bp1y1o7ga6hsm257o.mysql.rds.aliyuncs.com"
    DB_PORT: "3306"
    DB_NAME: "redpacket_account_check"
    DB_USER: "docker"
    DB_PASSWD: "***"
  labels:
    aliyun.routing.port_80: account.local
    aliyun.logs: /var/log
    aliyun.probe.url: http://container/test
    aliyun.scale: '2'
    aliyun.auto_scaling.max_cpu: '70'
    aliyun.auto_scaling.min_cpu: '40'
    aliyun.auto_scaling.step: '1'
monitor:
  image: registry.cn-hangzhou.aliyuncs.com/junbao/redpacket_monitor:v18
  restart: always
  environment:
    DB_HOST: "rm-bp1y1o7ga6hsm257o.mysql.rds.aliyuncs.com"
    DB_PORT: "3306"
    DB_NAME: "redpacket_account_check"
    DB_USER: "docker"
    DB_PASSWD: "***"
    MNS_URL: "http://1171330362041663.mns.cn-hangzhou.aliyuncs.com"
    ACCESS_KEY_ID: "xxxxx"
    ACCESS_KEY_SECRET: "****"
  labels:
    aliyun.routing.port_80: http://test/monitor
    aliyun.logs: /var/log
    aliyun.scale: '1'

根据上面编排模板内容介绍阿里云容器服务特点:

可伸缩性:

可通过对CPU、内存的使用限制定义容器服务的伸缩功能;

aliyun.auto_scaling.max_cpu: '70'
aliyun.auto_scaling.min_cpu: '40'
aliyun.auto_scaling.step: '1'

上面配置表示容器内CPU使用率超过70%时会自动扩展一个容器,且容器内CPU使用率低于40%时会自动缩减一个容器;详见:

https://help.aliyun.com/document_detail/26017.html?spm=5176.doc26018.6.601.fo3Esr

简单路由服务:

在编排模板中添加 routing 标签,定义相应的域名或者域名前缀。可以实现简单的 7 层协议负载均衡;

aliyun.routing.port_80: http://test/monitor

上面配置表示可以通过以下域名访问服务,其中test为域名的前缀,monitor为URL的path部分;

http://test.c61d9ad24beea4d93a4f574202f443a44.cn-beijing.alicontainer.com/monitor

集群内服务发现与负载均衡:

具体的系统中,有一些服务是不愿对外开放的,例如本系统的账号验证服务;阿里云容器服务引入了集群内负载均衡功能,您只需要使用以 .local 结尾的域名,并在依赖的服务的 external_links 中增加这个域名,依赖的服务便可以通过 .local 的域名访问到依赖的服务,并且能够配合健康检查做到自动的服务发现。

aliyun.routing.port_80: account.local
external_links:
  - "account.local"

详见:

https://help.aliyun.com/document_detail/35358.html?spm=5176.doc25984.6.654.cqipVM

日志服务:

阿里云日志服务(Log Service,简称SLS)是针对日志场景的平台化服务。适用于日志中转、监控、性能诊断、日志分析、审计等场景。容器服务提供了集成日志服务的能力,可以方便地将应用日志发送到日志服务里。

aliyun.log_store_redpacket: /var/log/redpacket_access.log

上述定义会将容器内/var/log/redpacket_access.log文件内的内容输入到相应的日志服务中;详见:

https://help.aliyun.com/document_detail/26036.html?spm=5176.doc35358.6.633.Gy4q50

系统示例

1 抢红包系统第一步首先要把红包塞进“口袋”,可以通过管理模块进行相关操作;

访问管理监控服务页面提示的访问端点,然后点击发放红包页面;

链接1

链接2

可以在页面中输入红包相关信息,红包总数、发放次数、时间间隔等;

上图中表示:分3次发放10个红包,每次的发放间隔是2秒;点击“发放红包”效果如下:

链接3

2 第二步:塞完红包后,即可进行抢红包活动;

通过Webpage页面提示的访问端点,可以登录抢红包主页面;

链接4

链接5

抢红包页面可以配置一些用户相关的信息用于红包发放时的证据;本示例中仅使用一个识别码,凭识别码信息领奖;点击抢红包即可完成操作;

链接6

3 作为抢红包的组织者除了把红包分发给用户,仍然期望对当前红包状态,以及所有红包的分布有所了解;

可以访问监控模块的数据分析页面查看相关数据,监控模块通过SLS提供的数据接口获取日志信息,并进行数据统计;这里的监控模块只是简单的demo,实际应用中日质量会非常大,可以通过实时日志分析工具进行统计;

链接7

本示例只是一个抢红包应用的简单demo,离真正线上应用尚有距离;但其中所用到的相关技术:如容器服务的弹性伸缩、负载均衡,日志服务的数据分析,消息服务高并发处理等都是抢红包应用所需的;

参考:
阿里云容器服务:
https://help.aliyun.com/product/25972.html?spm=5176.product26090.6.4.AzxFaW
SLS:
https://help.aliyun.com/product/28958.html?spm=5176.doc25974.6.15.VMW9if
SLB:
https://help.aliyun.com/product/27537.html?spm=5176.product28958.6.56.bN5R4b
MNS:
https://help.aliyun.com/product/27412.html?spm=5176.product27537.6.42.iWBZCZ
RDS:
https://help.aliyun.com/product/26090.html?spm=5176.product27412.6.47.sRItSf

相关实践学习
使用容器计算服务ACS算力快速搭建生成式AI会话应用
本实验将指导您如何通过阿里云容器计算服务 ACS 快速部署并公开一个容器化生成式 AI 会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
11天前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
2月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
198 58
|
2月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
177 1
|
3月前
|
设计模式 开发者 UED
123. [HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 基础篇
在现代移动应用和平板应用中,侧边栏导航已经成为一种常见且实用的UI设计模式。HarmonyOS NEXT提供了专门的`SideBarContainer`组件来实现这一功能,它能够轻松创建可显示和隐藏的侧边栏布局,非常适合新闻阅读、电子商务、文件管理等应用场景。
90 3
123. [HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 基础篇
|
3月前
|
数据可视化 API UED
126. [HarmonyOS NEXT 实战案例二:SideBarContainer] 侧边栏容器实战:电商应用商品筛选侧边栏 进阶篇
在基础篇中,我们已经实现了电商应用商品筛选侧边栏的基本布局和功能。在本篇教程中,我们将深入探讨如何通过状态管理和数据绑定,实现更加复杂的交互功能,提升用户体验。
67 2
126. [HarmonyOS NEXT 实战案例二:SideBarContainer] 侧边栏容器实战:电商应用商品筛选侧边栏 进阶篇
|
3月前
|
UED 容器
125.[HarmonyOS NEXT 实战案例二:SideBarContainer] 侧边栏容器实战:电商应用商品筛选侧边栏 基础篇
在现代电商应用中,商品筛选功能是提升用户购物体验的关键元素。HarmonyOS NEXT提供的`SideBarContainer`组件非常适合实现这类功能,它可以创建一个可显示和隐藏的侧边栏,用于放置各种筛选条件,帮助用户快速找到心仪的商品。
72 1
125.[HarmonyOS NEXT 实战案例二:SideBarContainer] 侧边栏容器实战:电商应用商品筛选侧边栏 基础篇
|
3月前
|
UED 容器
124.[HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 进阶篇
在基础篇中,我们学习了如何使用HarmonyOS NEXT的`SideBarContainer`组件创建新闻阅读应用的基本侧边栏布局。本篇教程将深入探讨如何为新闻阅读应用添加更多交互功能和状态管理,提升用户体验。
77 1
124.[HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 进阶篇
|
6月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
212 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
6月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
126 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
9月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版