GithubHelp home page GithubHelp logo

svnlab / easy-event Goto Github PK

View Code? Open in Web Editor NEW

This project forked from openquartz/easy-event

0.0 0.0 0.0 903 KB

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

Home Page: https://svnlab.github.io/

License: Apache License 2.0

Java 100.00%

easy-event's Introduction

EasyEvent

Make Distributed Event Driven Easier!

欢迎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-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-example: 样例工程

    • easyevent-example-disruptor: 使用disruptor 作为传输调度层
    • easyevent-example-rocketmq: 使用rocketmq 作为传输调度层
    • easyevent-example-kafka: 使用kafka 作为传输调度层

快速开始

快速开始

扩展性

扩展

同类型对比

事件驱动框架有很多。常见的有: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的高可靠、低耦合、高性能的事件驱动架构
分布式 支持单服务的多机器的分布式环境 只支持单机 支持单服务的多机器的分布式 支持微服务下的分布式环境 支持微服务下的分布式环境
可靠性 使用本地消息表完成分布式事件驱动,数据不会丢失.最终一致性实现 事件未持久,存在丢失可能 使用本地消息表完成分布式事件驱动 未作持久化,分布式下依赖 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,暂未提供其他可替换组件

easy-event's People

Contributors

svnlab avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.