Skip to content

Commit

Permalink
upload docs of Chinese version
Browse files Browse the repository at this point in the history
  • Loading branch information
KrispauI committed Oct 16, 2024
1 parent 2b8b3d5 commit bdec510
Show file tree
Hide file tree
Showing 9 changed files with 281 additions and 1 deletion.
2 changes: 1 addition & 1 deletion docs/application-scenario/03-serverless-eventbus.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

  The diagram above represents the overall architecture of Huawei Cloud `EventGrid`. `EventGrid` connects to various cloud services as event sources, including Distributed Message Service, Object Storage Service (OBS), and Distributed Cache Service. The various events generated by these event sources are pushed to the event channels of the `EventGrid` Event Bus (Bus Runtime). The Event Bus configures event channels for EventGrid users on a per-tenant basis, allowing multiple event channels under a single tenant to carry events from different sources.

  `EventGrid`, as the standard event hub for Huawei Cloud, enables interconnection between various cloud services. Cloud services, acting as event sources or event targets, are deployed on Huawei Cloud's Serverless application platform. Applications push real-time business events to the event grid, where the event grid filters, routes, and transforms the events to trigger cloud services subscribed to those events. EventGrid currently supports over 100+ built-in Huawei Cloud event sources and allows for custom and partner event extensions. Additionally, it is supported by a vast array of official data sources, covering databases, messaging, serverless computing, big data, DevOps platforms, IoT, and more, with custom event integration capabilities.
  `EventGrid`, as the standard event hub for Huawei Cloud, enables interconnection between various cloud services. Cloud services, acting as event sources or event targets, are deployed on Huawei Cloud's Serverless application platform. Applications push real-time business events to the event grid, where the event grid filters, routes, and transforms the events to trigger cloud services subscribed to those events. `EventGrid` currently supports over 100+ built-in Huawei Cloud event sources and allows for custom and partner event extensions. Additionally, it is supported by a vast array of official data sources, covering databases, messaging, serverless computing, big data, DevOps platforms, IoT, and more, with custom event integration capabilities.

* Reference

Expand Down
4 changes: 4 additions & 0 deletions i18n/zh/docusaurus-plugin-content-docs/current.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,9 @@
"sidebar.tutorialSidebar.category.Connect": {
"message": "连接器",
"description": "The label for category Connect in sidebar tutorialSidebar"
},
"sidebar.tutorialSidebar.category.Application Scenario": {
"message": "应用场景",
"description": "The label for category Application Scenario in sidebar tutorialSidebar"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# 数据流处理

* **应用场景名称**

  **数据流处理**


* **应用场景描述**

<div align="center">
<img src="/images/application-scenario/s0_img1.png" width="80%" />
</div>

<!-- ![data-steam-processing-detail](/images/application-scenario/s0_img1.png) -->

&emsp;&emsp;基于上图,EventMesh处于客户数据与目标数据源之间,可以支持流式数据处理。通过EventMesh功能的filter\transformer能力,可以处理成客户想要的数据格式和内容并吐出到目标数据源,实现数据清洗、规则过滤、字符替换、数据丰富、数据路由等能力。

* **应用场景实施方案**

&emsp;&emsp;未完待续...
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# 数据同步

* **应用场景名称**

&emsp;&emsp;**数据同步**


* **应用场景描述**

&emsp;&emsp;大型企业的中心数据管理平台通常连接着多个业务系统,上游业务系统需要将数据分发给多个下游业务系统,各业务系统也均有可能会进行异步的数据变更、增加与删除等操作,所以需要进行数据同步。传统的数据同步方式通常采用消息队列或请求/应答模式,但这两种方式都有局限性:消息队列方式难以切分不同业务单位的数据,数据管理上存在痛点;而请求/应答模式对中心数据管理平台的性能影响较大,耦合性高,影响系统的升级与维护。

&emsp;&emsp;因此需要引入EventMesh,通过基于事件驱动架构(EDA)进行用户数据同步,数据管理中心只需将数据变更信息分别发布到不同的事件源。各业务系统通过配置事件目标并订阅相关事件源来实现数据同步。在订阅过程中,各业务系统可以绑定相应的转换规则(用于数据的拆分和脱敏处理)和过滤规则,从而实现系统架构的解耦。

* **应用场景实施方案**

&emsp;&emsp;在数据同步场景下,吉利汽车基于EventMesh进行了落地实践,构建了事件集成平台。以吉利汽车的用户中心系统为例,企业内部大部分业务系统在集成用户中心后,会进行用户数据本地缓存;而各业务系统会对用户数据进行高频次的异步修改,产生了数据同步的需求。

<div align="center">
<img src="/images/application-scenario/s1_img1.png" width="80%" />
</div>

&emsp;&emsp;吉利汽车基于 EventMesh 构建的事件集成平台,让用户中心基于事件驱动架构,能够以“事件”的方式发布用户数据的新增和变更信息,而各个业务系统订阅事件源以获取所需的用户数据更新。例如,财务系统可能只对用户的支付信息变更感兴趣,而客服系统则关心用户联系方式的更新。

&emsp;&emsp;而为了处理不同业务系统对用户数据的个性化需求,平台基于EventMesh 的filter\transformer能力,配置事件源的转换与过滤规则,业务系统订阅事件源来进行用户数据拆分和脱敏处理。不仅解耦了业务系统与用户中心之间的直接交互,还减少了用户中心性能负载。

&emsp;&emsp; 为了保证高性能和高可用性,吉利汽车的事件集成平台面向各个业务区域的数据,采用了多地域、多集群的跨云架构进行部署。不同业务系统可以跨区域、跨集群、跨云消费事件,实现数据访问和同步,确保数据同步的延迟最小化,并且在高并发环境下仍能保持系统的稳定运行。

* **参考资料**

&emsp;&emsp;[CommunityOverCode Asia 2024 会议演讲《Apache EventMesh事件网格助力构建事件平台》 ](https://asia.communityovercode.org/)

&emsp;&emsp;[吉利汽车如何基于EventMesh落地事件集成平台,助力业务高效集成](https://mp.weixin.qq.com/s/BLHbIq5KyjnhoVlmw9_DBw)
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# SaaS组合式应用集成标准化

* **应用场景名称**

&emsp;&emsp;**SaaS组合式应用集成标准化**


* **应用场景描述**

&emsp;&emsp;Saas组合式应用由多个PBC(Package Business Capability)组成,PBC可以被定义为具有明确业务能力的SaaS应用程序模块,该模块以业务为驱动,能独立完成业务需求,不需要外部依赖。企业解决方案通常由多个SaaS应用程序模块进行组合,以呈现完整统一的用户体验。

&emsp;&emsp;下图为单一PBC、组合PBC和多个组合PBC的示意图:

<div align="center">
<img src="/images/application-scenario/s2_img1.png" width="80%" />
</div>

&emsp;&emsp;由以上架构可见,每个SaaS应用程序模块(PCB)之间的耦合程度较低,对某个业务进行修改调整时,均不会影响到其他现有业务的运行,这有助于敏捷开发与高效的迭代更新。但SaaS组合式应用存在各个应用间集成标准的问题,各应用之间缺乏统一的通讯协议标准就给业务落地该架构带来了困难。

&emsp;&emsp;该问题可以使用Eventmesh解决,EventMesh整合了TCP和HTTP协议,同时通过gRPC(谷歌开源的基于HTTP/2的高性能RPC框架)支持Java、Python、C、Go等多语言SDK,从而支持Client和Server双向异步通讯。用户在使用SDK时无需考虑不同场景所使用的具体通讯协议,基于EventMesh所整合的SDK API即可进行事件驱动的异步通讯,实现了不同SaaS应用程序模块之间的事件流转。

<div align="center">
<img src="/images/application-scenario/s2_img2.png" width="60%" />
</div>

* **应用场景实施方案**

&emsp;&emsp;关于场景的具体实现,EventMesh从v1.4.0版本开始正式引入 `gRPC` 框架,`gRPC` 通过 Protobuf 定义API接口数据模型,统一由CloudEvents定义事件模型。在gRPC的Protobuf事件模型中,每个事件是以 `SimpleMessage` 的数据模型呈现,事件的实体内容放在 `content` 字段里,CloudEvents是业界流行的事件模型。

<div align="center">
<img src="/images/application-scenario/s2_img3.png" width="60%" />
</div>

&emsp;&emsp;在EventMesh所支持的gRPC事件使用场景包括:事件发送和批量事件发送、事件广播、事件请求和响应、事件订阅和推送(详见代码:[eventmesh-client.proto](https://github.com/apache/eventmesh/blob/master/eventmesh-protocol-plugin/eventmesh-protocol-grpc/src/main/proto/eventmesh-client.proto)

&emsp;&emsp;1.事件发送服务提供了以下接口:

```java
service PublisherService {

rpc publish(SimpleMessage) returns (Response);

rpc requestReply(SimpleMessage) returns (SimpleMessage);

rpc batchPublish(BatchMessage) returns (Response);
}
```

&emsp;&emsp;事件是以SimpleMessage的数据模型呈现。事件发送支持同步发送、异步发送和批量发送三种模式:

&emsp;&emsp;同步发送是指事件生产者发送事件到EventMesh,并等待事件成功推送到事件消费者,并收到事件消费者的返回,才算完成整个端到端的事件发送过程;

&emsp;&emsp;异步发送是指事件生产者发送事件到EventMesh即可,无需等待事件被成功推送到事件消费者;

&emsp;&emsp;批量发送是指异步发送一批事件到EventMesh。

&emsp;&emsp;2.事件订阅服务提供以下接口:

```java
service ConsumerService {

rpc subscribe(Subscription) returns (Response);

rpc subscribeStream(stream Subscription) returns (stream SimpleMessage);

rpc unsubscribe(Subscription) returns (Response);
}
```

&emsp;&emsp;事件订阅支持两种方式:集群(cluster) 和广播(broadcast)。在集群模式中,事件消费者集群里只有一个实例能消费到事件;而广播模式让集群里每一个实例都消费到事件。

&emsp;&emsp;这些订阅模式是在订阅数据模型里定义的。另外订阅服务提供两种订阅接口:`subscribe API``subscribeStream API``subscribe API`是通过url方式推送事件到消费者,这里url又叫webhook,这种场景适合云原生微服务和自定义应用及函数;`subscribeStream API`是通过gRPC 双向流(Bidirectional Streaming) 推送事件到消费者,同时可以让事件消费者返回确认信息 (Ack) 给事件生产者。这就满足了生产者RequestReply同步事件发送的需求。

&emsp;&emsp;3.事件订阅服务提供以下接口:

&emsp;&emsp;为了提高事件生产和消费的性能,EventMesh服务端(EventMesh Runtime) 在gRPC的服务里定义了线程池(ThreadPool),而且针对事件生产和消费的对性能要求的不同,配置独立的参数。这些参数都可以在EventMesh配置文件(`eventmesh.properties`)里找到。

&emsp;&emsp;例如以下分别是事件生产,订阅和推送的线程数:

```java
eventMesh.server.sendmsg.threads.num=50
eventMesh.server.clientmanage.threads.num=30
eventMesh.server.pushmsg.threads.num=50
```

&emsp;&emsp;当gRPC服务启动后,它会监听客户端的请求,一旦有新请求进来,它会分发到对应服务的线程池,然后让对应的处理器(Processor)处理,这样就不会阻塞下一个请求的处理,从而提高了并发量。

```java
public void publish(SimpleMessage request, StreamObserver<Response> responseObserver){
cmdLogger.info("cmd={}|{}|client2eventMesh|from={}|to={}", "AsyncPublish",
EventMeshConstants.PROTOCOL_GRPC, request.getHeader().getIp(),
eventMeshGrpcServer.getEventMeshGrpcConfiguration().eventMeshIp);

EventEmitter<Response> emitter = new EventEmitter<>(responseObserver);

threadPoolExecutor.submit(() -> {
SendAsyncMessageProcessor sendAsyncMessageProcessor = new SendAsyncMessageProcessor(eventMeshGrpcServer);
try {
sendAsyncMessageProcessor.process(request, emitter);
} catch (Exception e) {
logger.error("Error code {}, error message {}", StatusCode.EVENTMESH_SEND_ASYNC_MSG_ERR.getRetCode(),
StatusCode.EVENTMESH_SEND_ASYNC_MSG_ERR.getErrMsg(), e);
ServiceUtils.sendRespAndDone(StatusCode.EVENTMESH_SEND_ASYNC_MSG_ERR, e.getMessage(), emitter);
}
});
}
```

&emsp;&emsp;比如以上代码是事件发送服务(publish service) 的实现。它使用了`threadPoolExecutor`把事件发送到线程池让下游`SendAsyncMessageProcessor`处。

* **参考资料**

&emsp;&emsp;[ApacheCon Asia 2022会议演讲《EventMesh如何解决SaaS组合式应用集成标准化问题》](https://www.youtube.com/watch?v=0v-tjIYkDIw)

&emsp;&emsp;[华为云中间件团队的技术博客](https://mp.weixin.qq.com/s/Z3DAw_YtKJWXftdFjAm2rA)

&emsp;&emsp;[EventMesh项目源代码](https://github.com/apache/eventmesh/tree/master/eventmesh-protocol-plugin/eventmesh-protocol-grpc/src/main/proto)
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 云服务的Serverless事件总线

* **应用场景名称**

&emsp;&emsp;**云服务的Serverless事件总线**


* **应用场景描述**

&emsp;&emsp;云服务提供商可以基于 `EventMesh` 构建 Serverless 事件总线,用于承载和管理来自传统应用、云原生服务以及SaaS合作伙伴应用等不同来源的各类事件。在此场景下,基于 `EventMesh` 的 Serverless 事件总线帮助开发者构建松耦合、分布式、事件驱动的Serverless微服务应用,而无需管理底层基础设施。

&emsp;&emsp;Serverless 事件总线支持跨不同云环境的异步事件通信。它通过在不同服务之间路由事件,简化协议管理的复杂性,尤其适用于多云、混合云架构以及第三方SaaS系统的事件处理;同时该总线可以部署在分布式环境下,借助 `EventMesh` 的跨区域故障转移和负载均衡功能,即使在高负载下也能确保事件的可靠传递。

* **应用场景实施方案**

&emsp;&emsp;云服务厂商华为云所提供的的Serverless事件总线服务 `EventGrid` 便是基于 `EventMesh` 的实际应用。`EventGrid``EventMesh` 作为运行时引擎,支持华为云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,以标准化的 `CloudEvents` 协议在应用之间灵活路由事件,从而构建松耦合、分布式的事件驱动架构,为华为云创造更多的应用场景,也进一步丰富了开发者生态。

&emsp;&emsp;作为Serverless架构下事件驱动架构的关键一环,它提供弹性、异步、去中心化的事件治理服务,对事件提供汇聚、模型校验、过滤、路由、转换和推送等核心功能,还包括容错重试、死信储存、事件查询跟踪、事件工作流等增强特性。

<div align="center">
<img src="/images/application-scenario/s3_img1_zh.png" width="70%"/>
</div>

&emsp;&emsp;以上是华为云 `EventGrid` 的总体架构图, 可见 `EventGrid` 对接了诸多云服务作为事件源,包括分布式消息服务、对象存储服务(OBS)和分布式缓存服务。事件源所产生的各种事件,推送至 `EventGrid` 事件总线(Bus Runtime)的事件通道中。事件总线为 `EventGrid` 用户以租户为单位配置事件通道,一个租户下允许有多个事件通道,承载来自不同事件源的事件。

&emsp;&emsp;`EventGrid` 作为华为云服务的标准事件中心,可以实现各个云服务之间的联动。云服务作为事件源或者事件目标部署在华为云的无服务器(Serverless)应用平台上,应用推送业务实时事件到事件网格,事件网格对事件进行过滤、路由和转化,从而触发订阅事件的云服务。`EventGrid` 现已内置100+华为云事件源,支持自定义和伙伴事件扩展;同时有海量官方数据源支持,覆盖数据库、消息、函数计算、大数据类、DevOps平台、IOT等,支持自定义事件集成。

&emsp;&emsp;`EventGrid` 用户通过订阅的方式消费事件,通过在订阅的配置项里定义事件源、事件目标、事件过滤和转换规则,`EventGrid` 就能从事件总线里提取相关事件,然后实时推送到所定义的事件目标中。推送方式可以是同步和异步:同步推送一般是以HTTP协议,适合应用和微服务;异步推送一般是推动到SaaS伙伴应用的消息队列中。

* **参考资料**

&emsp;&emsp;[ApacheCon Asia 2022会议演讲《EventMesh如何解决SaaS组合式应用集成标准化问题](https://www.youtube.com/watch?v=0v-tjIYkDIw)

&emsp;&emsp;[华为云中间件团队的技术博客](https://mp.weixin.qq.com/s/Z3DAw_YtKJWXftdFjAm2rA)

&emsp;&emsp;[华为云EventGrid使用教程文档](https://www.huaweicloud.com/product/eventgrid.html)
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Serverless化车联网解决方案

* **应用场景名称**

&emsp;&emsp;**Serverless化车联网解决方案**


* **应用场景描述**

&emsp;&emsp;车联网场景下,由于汽车数量庞大,且车企旗下存在多种不同型号的新老车型,车企数据处理的业务量巨大。一辆汽车有上百种传感器,不停在产生数据,且在早晚用车高峰的场景下,车联网数据将会激增;同时汽车行业缺少车联网开发套件来降低开发成本和缩短上线时间,对Serverless化车联网业务解决方案有着广泛需求。

&emsp;&emsp;Serverless化车联网业务解决方案可使用 `EventMesh` 作为事件总线与事件中心。来自汽车各传感器、GPS设备和云平台的海量数据可通过API网关或者利用IOTS设备接入,数据经由事件驱动的架构处理后,能够提供实时响应,在高峰流量期间(如早晚高峰)实现流畅的扩展。


* **应用场景实施方案**

&emsp;&emsp;基于 `EventMesh` 的Serverless化车联网业务解决方案,在事件驱动的架构上灵活扩展,自动伸缩,满足了高并发,快速弹性的需求,在数据高峰期动态扩展,以实现高并发数据处理;`EventMesh` 同时提供了灵活的路由能力,通过不同的配置规则,可将事件路由到不同的系统与服务。

<div align="center">
<img src="/images/application-scenario/s4_img1_zh.png" width="80%"/>
</div>

&emsp;&emsp;上图为Serverless化车联网业务解决方案的简要示意图,首先基于`EventMesh` 的filter\transformer能力,进行数据清洗过滤与函数计算处理,数据处理后将进行分布式对象存储并产生事件。`EventMesh` 根据不同的配置规则,将事件路由至相应的服务(包括削峰填谷的消费服务、AI智能推荐服务以及多个部门多个业务的相应服务)。这允许各种服务只需对特定事件做出响应,而无需与数据源直接耦合。

&emsp;&emsp;除此之外,该解决方案具备自动伸缩、容错重试机制以及跨区域支持等功能,即使在高负载条件下也能确保事件的可靠传递。基于 `EventMesh` 集成外部Webhooks,还可以将事件推送到其他系统或第三方服务,便于后续的服务扩展。

* **参考资料**

&emsp;&emsp;[ApacheCon Asia 2022 会议演讲《EventMesh如何解决SaaS组合式应用集成标准化问题》](https://www.youtube.com/watch?v=0v-tjIYkDIw)

&emsp;&emsp;[Community Over Code NA 2023 会议演讲《Apache EventMesh in Huawei Cloud Next Generation of Enterprise Cloud Native Event Centre: EventGrid》"](https://communityovercode.org/past-sessions/community-over-code-na-2023/)

&emsp;&emsp;[CoCAsia 2023 会议演讲《基于EventMesh构建超大规模云原生事件网格——EventGrid》](https://github.com/apache/eventmesh-site/blob/master/meetup/WangHaijun_HUAWEI_ApacheCon_Asia_0801.pdf)
Loading

0 comments on commit bdec510

Please sign in to comment.