/easy-event

Distributed, reliable, real-time, scalable, easy-to-use, lightweight, EventBus event bus implemented based on local messages(分布式的,可靠的,实时的,可扩展的, 易用的,轻量级的 基于本地消息实现的EventBus事件总线)

Primary LanguageJavaApache License 2.0Apache-2.0

Make Distributed Event Driven Easier !!!

EasyEvent

注意:本项目未发布到maven**仓库,需要手动添加到本地仓库 或者 到私有仓库中使用。

欢迎Star (Welcome Star)!!!

主页
Github

介绍

什么是EasyEvent

EasyEvent是一款基于Google GuavaEventBus为蓝本的分布式的,可扩展的,最终一致性的实时的EventBus解决方案。
主要是解决Google EventBus的不支持持久化和分布式机器调度等的问题。

功能特性

支持同步事件、异步事件、串行事件/并行事件触发执行。
支持事件异常补偿、预警等功能

解决问题

1、解决使用事件驱动中的数据一致性问题

2、解决事件集中触发出现时,服务不稳定性问题

3、解决分布式事件追踪性问题

4、解决针对事件执行异常监控预警问题

5、解决DDD中的事件驱动问题

6、解决分布式事件中的问题:例如:事件过多的存储问题。事件集中出现导致尖刺明显。存在处理慢的实现阻塞其他事件正常订阅等等

软件架构

EasyEvent 为了实现上述问题。抽象出几个核心的角色。通过EventStorage 进行存储,可以通过SPI的形式进行扩展实现。
通过EventTransfer进行事件的分布式调度处理。也可通过自定义SPI实现。
异步事件处理调度如下图所示:

单机EasyEvent处理示意图: EasyEvent异步事件处理流程示意图

SOAEvent处理示意图: SOAEvent异步事件处理流程示意图

代码结构

  • easyevent-common: 公共模块服务

  • easyevent-core: 核心eventbus逻辑

  • easyevent-storage: 存储服务

    • easyevent-storage-api: 存储服务API
    • easyevent-storage-jdbc: 基于jdbc的存储实现
  • easyevent-transfer: 事件传输服务

    • easyevent-transfer-api: 事件传输协议
    • easyevent-transfer-disruptor: disruptor 作为事件传输的实现
    • easyevent-transfer-rocketmq: rocketmq 作为事件传输的实现
    • easyevent-transfer-kafka: kafka 作为事件传输的实现
  • easyevent-spring-boot-starter: easyevent starter 包

    • easyevent-spring-boot-starter-parent: easyevent starter parent工程
    • easyevent-spring-boot-starter-disruptor: disruptor 作为事件传输的实现的 springboot starter
    • easyevent-spring-boot-starter-kafka: kafka 作为事件传输的实现的 springboot starter
    • easyevent-spring-boot-starter-rocketmq: rocketmq 作为事件传输的实现的 springboot starter
  • easyevent-spring-boot-starter-soa: easyevent soa 支持starter 包

    • easyevent-spring-boot-starter-soa-api: easyevent soa event api工程
    • easyevent-spring-boot-starter-soa-parent: easyevent soa starter parent工程
    • easyevent-spring-boot-starter-soa-rocketmq: rocketmq 作为事件传输的实现的 soa 的事件传输中心
  • easyevent-example: 样例工程

    • easyevent-example-disruptor: 使用disruptor 作为传输调度层
    • easyevent-example-rocketmq: 使用rocketmq 作为传输调度层
    • easyevent-example-kafka: 使用kafka 作为传输调度层
    • easyevent-example-soa: 样例工程
      • easyevent-example-soa-event: soa 公共事件
      • easyevent-example-soa-publisher: soa 事件发布服务
      • easyevent-example-soa-subscriber: soa 事件订阅服务

快速开始

快速开始

扩展性

扩展

同类型对比

事件驱动框架有很多。常见的有:Google EventBusSpringCloud-Buskillbill-queueRocketMQ EventBridge. 针对每个框架的所专注的点做一些对比。

easy-event Google EventBus killbill-queue SpringCloud-Bus RocketMQ EventBridge
介绍 基于Google Guava开发的分布式的最终一致性的,用法基本相同 基于单机内存的 EventBus 基于DB+Google EventBus开发的扩展 springcloud 提供的可单机可分布式的EventBus 基于RocketMQ5.0的高可靠、低耦合、高性能的事件驱动架构
分布式 支持单服务的多机器的分布式环境、soa 微服务下的分布式环境 只支持单机 支持单服务的多机器的分布式 支持微服务下的分布式环境 支持微服务下的分布式环境
可靠性 使用本地消息表完成分布式事件驱动,数据不会丢失.最终一致性实现 事件未持久,存在丢失可能 使用本地消息表完成分布式事件驱动 未作持久化,分布式下依赖 MQ的可靠性 依赖RocketMQ的稳定性
易用性 提供SpringBootStarer包,引入相关依赖即可快熟使用。使用方法几乎和Google EventBus 相同 用法简单 Google EventBus 相同 Spring Application Event使用用法相同 引入EventBridge相关依赖
运维 常用组件生态,无需额外部署(DB+MQ) 无需额外部署 依赖Oracle(无MySql对应版本) 常用组件生态,无需额外部署(依赖MQ组件) 部署服务RocketMQ EventBridgeRocketMQ
隔离性 支持不同事件自定义隔离(存储、传递)可扩展
稳定性 异步事件触发支持消费和发送自定义限流。支持tag级别的隔离 定时调度.很难控制频率。实时性较差 分布式下事件强依赖MQ稳定性。突发事件过多易出现尖刺 依赖服务 RocketMQ EventBridge 稳定性和RocketMQ稳定性
扩展性 存储支持使用JDBC等关系型数据库,也可以根据api自定义扩展。传输支持RocketMQKafka.也可以自定义扩展 依赖Oracle.其他存储组件需要改写代码重新实现 传输提供了多个组件的实现。易扩展。 强依赖RocketMQ,暂未提供其他可替换组件