基于 RocketMQ+Knative 驱动云原生Serverless 应用

本文涉及的产品
简介: 想必大家都比较了解 RocketMQ 消息服务,那么RocketMQ 与 Serverless 结合会碰撞怎样的火花呢?那我们今天介绍一下如何基于 RocketMQ + Knative 驱动云原生 Serverless 应用 。

想必大家都比较了解 RocketMQ 消息服务,那么RocketMQ 与 Serverless 结合会碰撞怎样的火花呢?那我们今天介绍一下如何基于 RocketMQ + Knative 驱动云原生 Serverless 应用 。主要从以下几个方便展开介绍:

  • 云原生与 Serverless
  • Knative 简介
  • RocketMQSource
  • 餐饮配送场景示例

云原生

先看一下CNCF对云原生的定义:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
image

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
其实云原生旨在以标准化云服务的提供方式衔接云厂商和客户。这种方式对于客户而言降低了上云和跨云迁移的成本,让客户始终保有和云厂商议价的能力;对云厂商而言,因为客户跨云迁移的成本低,所以只要能提供性价比更高的云服务,就能很容易的聚集大量用户。

Serverless

image

Serverless(无服务器架构)是指服务端逻辑由开发者实现,运行在无状态的计算容器中,由事件触发,完全被第三方管理,其业务层面的状态则存储在数据库或其他介质中。
Serverless 可以理解为云原生技术发展的高级阶段,使开发者更聚焦在业务逻辑,而减少对基础设施的关注。
这里提到的是 Functions Serverless, 其实除了 Functions Serverless, 还有另外一种 Serverless 形态:容器化的Serverless。相较于 Function Serverless,容器化的 serverless, 可移植性更强, 开发者对复杂应用程序能进行更好的掌控。除此之外,对于那些经历过容器时代洗礼的用户,容器化的 serverless或许是一种更好的选择。
对于Serverless, 有如下几点需要关注一下:

  • 事件(event)驱动:Serverless 是由事件(event)驱动(例如 HTTP、pub/sub)的全托管计算服务。
  • 自动弹性:按需使用,削峰填谷。
  • 按使用量计费:相对于传统服务按照使用的资源(ECS实例、VM 的规格等)计费,Serverless 场景下更多的是按照服务的使用量(调用次数、时长等)计费
  • 绿色的计算: 所谓绿色的计算其实就是最大化的提升资源使用效率,减少资源浪费,做的“节能减排”

Knative

上面提到了容器化的 serverless,那么有没有这样的Serveless平台框架呢?答案就是:Knative
image

Knative 是在 2018 的 Google Cloud Next 大会上发布的一款基于Kubernetes 的 Serverless 编排引擎。Knative 一个很重要的目标就是制定云原生、跨平台的 Serverless 编排标准。Knative 是通过整合容器构建(或者函数)、工作负载管理(弹性)以及事件模型这三者来实现的这一 Serverless 标准。Knative 社区的当前主要贡献者有 Google、Pivotal、IBM、RedHat。另外像 CloudFoundry、OpenShift 这些 PAAS 提供商都在积极的参与 Knative 的建设。

Knative 核心模块

Knative 核心模块主要包括事件驱动框架 Eventing 和部署工作负载的Serving。
image

Serverless 服务引擎 - Serving

image

Knative Serving 核心能力就是其简洁、高效的应用托管服务,这也是其支撑 Serverless 能力的基础。Knative 提供的应用托管服务可以大大降低直接操作 Kubernetes 资源的复杂度和风险,提升应用的迭代和服务交付效率。当然作为 Severlesss Framework 就离不开按需分配资源的能力,阿里云容器服务 Knative 可以根据您应用的请求量在高峰时期自动扩容实例数,当请求量减少以后自动缩容实例数,可以非常自动化的帮助您节省成本。
Serving 通过与 Istio 结合还提供了强大的流量管理能力和灵活的灰度发布能力。流量管理能力可以根据百分比切分流量,灰度发布能力可以根据流量百分比进行灰度,同时灰度发布能力还能通过自定义 tag 的方式进行上线前的测试,非常便于和自己的 CICD 系统集成。

Serving 应用模型

image

  • Service: 对应用 Serverless 编排的抽象,通过 Service 管理应用的生命周期
  • Configuration: 当前期望状态的配置。每次更新 Service 就会更新 Configuration
  • Revision: configuration 的每次更新都会创建一个快照,用来做版本管理
  • Route: 将请求路由到 Revision,并可以向不同的 Revision 转发不同比例的流量

事件驱动框架 - Eventing

image

1.采用 CloudEvent 作为事件传输协议: CloudEvent以通用的格式描述事件数据,提供跨平台的服务交互能力。KnativeEventing使用 CloudEvent作为事件传输标准,极大的提升了应用的跨平台可移植性
2.外部事件源接入和注册: 提供 Github、RocketMQ以及 Kafka等事件源的支持,当然用户可以自定义事件源。
3.事件的订阅和触发:引入Broker和Trigger模型意义,不仅将事件复杂的处理实现给用户屏蔽起来,更提供丰富的事件订阅、过滤机制。
4.兼容现有消息系统:KnativeEventing充分解耦了消息系统的实现,目前除了系统自身支持的基于内存的消息通道 InMemoryChannel之外,还支持 Kafka、NATSStreaming 等消息服务,此外可以方便的对接现有的消息系统。

Eventing 中 Broker/Trigger模型

image

这里介绍一下Eventing 中 Broker/Trigger模型, 其实并不复杂。外部事件源将事件发送给Broker, Broker接收事件之后发送给对应的Channel(也就是消息缓存,转发的地方。如Kafka,InMemoryChannel等),通过创建Trigger订阅Broker实现事件的订阅,另外在Trigger中定义对应的服务,实现最终的事件驱动服务。

RocketMQSource

RocketMQSource 是 Knative 平台的 RocketMQ 事件源。其可以将 RocketMQ 集群的消息以Cloud Event的格式实时转发到 Knative 平台,是 Apahe RocketMQ 和 Knative 之间的连接器。
image

Knative + RocketMQ 场景示例-餐饮配送场景

image

我们接下来以餐饮配送为例进行演示,餐饮配送场景具有以下特征:

  • 餐饮配送一天之内存在明显的高峰、低谷。
  • 高峰时间下单量很大

针对这样的情况,我们采用消息驱动 Serverless, 在高峰的时候自动扩容资源,在低谷的时候缩减资源,按需使用能极大的提升资源使用率,从而降低成本。

典型架构如下:

image
当用餐时间来临,客户点餐生成下单消息发送到RocketMQ, 通过 RocketMQSource 获取下单消息转换成事件发送到Broker,通过Trigger订阅下单事件最终驱动订单服务生成订餐单。采用该方案具有以下优势:

  • 通过 Knative 技术以 RocketMQ 为核心将餐饮配送系统 Serverless 化可以极大程度降低服务器运维与成本。
  • Knative的弹性可以帮你轻松应对早、中、晚三餐资源高峰需求
  • 系统以 RocketMQ 做异步解耦,避免长链路调用等问题,提高系统可用性。

操作

部署 Knative。

参见阿里云容器服务部署Knative

部署 RocketMQSource

在Knative 组件管理中,选择 RocketMQSource 点击部署。
image

部署订单服务

参考示例代码仓库: https://github.com/knative-sample/knative-rocketmq
一键部署服务命令如下:

kubectl apply -f 200-serviceaccount.yaml -f 202-clusterrolebinding.yaml -f 203-secret.yaml -f alirocketmqsource.yaml -f broker.yaml -f ksvc-order-service.yaml -f trigger.yaml

模拟高峰订餐下单。

通过模拟下单,往 RocketMQ 中并发发送消息即可。消息格式参考:

{"orderId":"123214342","orderStatus":"completed","userPhoneNo":"152122131323","prodId":"2141412","prodName":"test","chargeMoney":"30.0","chargeTime":"1584932320","finishTime":"1584932320"}

演示效果如图:

image

其它应用场景

Knative + RocketMQ 典型场景- 构建 Serverless 电商系统

image

  • Knative 弹性可以帮你轻松应对团购、双十一等电商的大促活动
  • 系统以 RocketMQ 为中心做异步解耦,避免长链路调用等问题,提高系统可用性。

Knative + RocketMQ 典型场景- 构建监控告警平台

image

  • Metric、Log 等数据通过RocketMQ集群推送到Knative服务
  • Knative 服务通过数据分析将告警内容推送钉钉或slack等通讯工具
  • Knative 服务可以将Metric或logs数据进行处理,推送第三方系统

Knative + RocketMQ 典型场景- 多数据格式转换

image

  • 处理数据日志以生成多个结果派生词,这些结果派生词可用于运营,营销,销售等。
  • 将内容从一种格式转换为另一种格式,例如,将Microsoft Word转换为PDF。
  • 需要转换为多种格式的主媒体文件

总结

欢迎加入Knative交流群

image

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
1天前
|
Cloud Native Java 持续交付
使用Java实现云原生应用架构
使用Java实现云原生应用架构
|
1天前
|
运维 Cloud Native 持续交付
云原生技术在现代企业中的应用与挑战
云原生技术,作为一种新兴的云计算范式,正在引领着企业IT架构的变革。它的核心在于构建和运行可弹性扩展的应用程序,充分利用云平台的灵活性和可扩展性。然而,云原生技术的引入并非一帆风顺,企业在享受其带来的便利的同时,也面临着一系列挑战。本文将从云原生技术的定义、优势、应用场景以及面临的挑战等方面进行探讨,旨在为企业在云原生转型过程中提供参考和借鉴。
|
1天前
|
运维 监控 Cloud Native
“论云原生架构及其应用”写作框架,系统架构设计师
近年来,随着数字化转型不断深入,科技创新与业务发展不断融合,各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下,以容器和微服务架构为代表的云原生技术作为云计算服务的新模式,已经逐渐成为企业持续发展的主流选择。云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。云原生架构有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用
|
2天前
|
Cloud Native 安全 Devops
云原生技术在现代企业中的应用与挑战
随着数字化转型的深入,云原生技术成为推动企业IT革新的关键力量。本文将探讨云原生的核心概念、主要优势以及在实际部署中遇到的挑战,为企业提供云原生转型的实用指南。
11 0
|
2天前
|
Cloud Native 安全 持续交付
云原生技术在现代企业中的应用与挑战
本文深入探讨了云原生技术如何在现代企业中被采纳,并分析了其带来的优势及面临的挑战。文章首先定义了云原生的概念,随后详细讨论了容器化、微服务架构、持续集成/持续部署(CI/CD)和DevOps文化等核心元素。接着,通过案例研究展示了云原生技术如何促进企业的敏捷性、可扩展性和资源效率。最后,文章指出了企业在采用云原生技术时可能遇到的安全风险、技术复杂性、人才缺乏和文化适应性问题,并提出了相应的解决策略。
6 0
|
3天前
|
运维 Cloud Native 持续交付
云原生技术的崛起与应用前景
在当今快速发展的科技领域中,云原生技术作为一种革命性的开发和部署方式,正以其灵活性和效率优势改变着软件开发和运维的面貌。本文将探讨云原生技术的定义、关键特性以及在现代软件开发中的应用前景,旨在帮助读者深入理解这一新兴技术的重要性和实际价值。
13 3
|
5天前
|
运维 Cloud Native 持续交付
云原生技术在现代企业中的应用与挑战
随着数字化转型的不断加速,云原生技术已成为推动企业创新和竞争力的关键因素。本文深入探讨了云原生技术的核心概念、优势以及在现代企业中的实际应用案例。同时,文章也指出了企业在采用云原生技术过程中可能遇到的挑战,并提供了相应的解决策略。通过分析云原生技术的发展趋势,本文旨在为企业提供一条清晰的云原生技术应用路线图。
|
5天前
|
监控 Cloud Native 持续交付
构建未来:云原生技术驱动的云计算平台
【5月更文挑战第52天】 随着数字化转型的不断深化,企业对于敏捷性、可扩展性和成本效益的需求日益增长。本文探讨了如何通过采纳云原生技术来构建和优化云计算平台,以支持不断变化的业务需求。文章首先概述了云原生技术的核心概念及其优势,随后详细分析了在设计云平台时应考虑的关键要素,并通过案例研究展示了云原生实践在实际中的应用效果。最后,文章提出了面向未来的云平台发展趋势和挑战。
|
7天前
|
Cloud Native 持续交付 云计算
云原生技术在现代企业中的应用与挑战
【6月更文挑战第19天】随着云计算技术的飞速发展,云原生作为一种新兴的构建和运行应用程序的方法,正逐步成为推动企业数字化转型的重要力量。本文将深入探讨云原生技术的核心概念、优势以及在实际企业应用中遇到的挑战,同时结合案例分析,展示云原生如何在提升业务敏捷性、降低运营成本及增强系统可靠性方面发挥关键作用。
|
8天前
|
Cloud Native 安全 持续交付
云原生技术在现代企业的应用与挑战
【6月更文挑战第18天】本文深入探讨了云原生技术在现代企业中的应用及其所面临的挑战。文章首先界定了云原生技术的概念,随后分析了其在提高企业运营效率、降低成本以及增强业务连续性方面的应用价值。进一步,文中讨论了企业在采纳云原生技术过程中可能遇到的技术复杂性、安全问题和人才短缺等挑战,并提供了针对性的应对策略。最后,通过案例分析,展示了云原生技术成功实施的实例,为企业如何有效利用云原生技术提供了实践指导。

热门文章

最新文章

相关产品

  • 函数计算