开源项目:Jdon Framework

  Github    JiveJdon

项目新闻:
2017-06 增加了类似erLang/akka的Actor并发模型的账户转账测试代码多核并发测试代码,验证Jdon框架支持无锁并发和内存事务,参考:Adaptive如何基于LMAX架构实现服务级别的高性能分布式事务?
2015-05-06  Jdon框架研发思考
2013-09-29 6.6.8 CQRS Command/Event异步并发输入输出

  Jdon Framework是一个DDD+CQRS+EventSourcing实施框架,其特点是无需任何消息中间件如Apache Kafka,直接支持基于领域模型的发布/订阅(pub-sub)的异步编程模型,可以直接将“命令”以非堵塞方式传递给领域模型,也可以监听领域模型中发生的领域事件。能够快速地将领域驱动设计(DDD)落地为异步、高并发、高吞吐量的Java应用系统 。

  JdonFramework将DDD和领域事件灵活结合在一起,帮助你实现一个清晰且流畅的六边形软件架构:架构整洁之道

 

  由领域模型聚合根实体(Aggregates)在用例场景下接受一个命令(Command)指示,完成任务后触发了一个领域事件(Domain Event)。

  JF这种以聚合根实体发送或接收消息的模型(pub-sub)符合原始的面向对象编程模型:消息中封装的是命令或事件。

  如下图Cargo货运案例中,领域事件是货物在货运路线各个装卸点的装卸事件,这种装卸事件是货物跟踪系统中需要跟踪的重要行为,客户关心自己的货物到了哪里等信息都是从装卸事件中推导出来的:

ddd

  消息作为信封,信封内容是事件,这种pub-sub异步机制是聚合根与外界交互的最好方式,借助Apache Kafka可以实现EventSourcing事件溯源等复杂架构。

  通过记录领域事件而不是真正改变数据库状态,可以实现柔性的分布式最终一致性事务,JF关键是保证了记录领域事件时实现单写原则,避免并发争夺问题,同时比Kafka等队列方式更轻量,是借助Disruptor实现的高并发线程模型,当然,两者结合起来可以实现JVM内外之间的单写模型,保证了ACID事务中的隔离性。

  DDD、JF领域事件和BPMN流程和Saga可以有机结合在一起:

  JF提供的这种命令和事件模型可以实现一个六边形的清晰、干净、整洁的架构,真正将领域模型成为业务核心,而传统系统基本都是以关系数据库Orcalce等为业务核心,让数据库技术污染了自己的业务模型,不具有可持续性,见架构整洁之道

  

历史

  JF诞生于2004年底,作为中国第一个开源Java框架,创新地运用了当时刚刚出现的新的技术思想Ioc/DI(依赖注入Dependency Injection),JF比当时Spring 1.x率先支持了注入的自动匹配;同时遵循约定优于配置以达到快速开发。

  Jdon Framework(简称JF)是国内第一个IOC/AOP开源框架,首个DDD领域驱动设计Java实施框架。

  2009年JF 6.1版本引入了事件驱动(Event Sourcing)和In-memory内存缓存概念,2011年7月Martin Fowler推荐的LMAX架构也采取类似架构,其性能达到每秒处理600万订单,每微秒延迟获得100T的吞吐量。传统编程是在一个线程内进行顺序同步编程,而JF的事件编程是一种无锁的并行异步编程模型,大大发挥了现代多核CPU潜力。

  JF 6.5版本为推广适合多核CPU的无堵塞并发编程范式进行了探索,使用了Domain Events和DCI等不同抽象层次对并发编程进行了封装,从而降低开发者使用并发编程的难度,见 无堵塞的并发编程DDD DCI和领域事件

  JF与其他开发工具相比:JF是一个领域驱动设计DDD框架。JF是快速性 灵活性和可伸缩性综合平衡的产物,它带来了多快好省的简单的解决之道(simplify the best):对于小项目,使用JF可以开发出高质量可扩展的好的系统;对于大项目,使用JF可以更快地开发出系统。

 

JF关键技术特点

  1. DDD(Domain-Driven Development),开发基于领域驱动设计(Domain-Driven Design)应用, 提供基于内存的领域模型(in memory model), 运行时刻领域对象作为“总司令部”通过Domain Events驱动命令技术构架为之服务,探索了一条真正以业务对象为核心的崭新的DDD落地编程模型。

  2. Reactive Actors模型,类似ERLang或Scala中的信箱, 事件驱动架构Event-driven Architecture(EDA) ,异步领域事件,并发策略, 懒加载赋值(Lazy initialization or evaluation),结合Kafka/RabbitMQ/ZeroMQ/JMS可实现大型分布式可伸缩的架构。

  3. 易于实现事件溯源EventSourcingCQRS架构

  4. 依赖注入DIAOP框架, 类自动配对注射autowiring/Autowired,无需指定,提高重构效率,所有类最大限度松耦合,包括框架本身的类或构件都是可替换的,提供强大可定制能力;灵活简单的AOP,没有复杂AOP脚本代码,可以将任何POJO引入introduce作为拦截器。

  5. 命令查询分类架构Command Query Responsibility Segregation(CQRS/CQS), 提供模型的增删改查命令流程整合,不必编写MVC模式中Controller控制器,防止新手将业务写入控制器。服务命令模式:可根据url参数直接激活对应的Service方法;提供大量数据批量查询自动分页和缓存性能优化功能。

  6. JF可以保证应用系统的良好性能和可扩展性,容易接入各种持久层框架如Hibernate或Key-value存储或NoSQL数据库。可使用分布式缓存如Ehcache + terracotta/memcached扩展到大型分布式云系统。

 

#CQRS架构 #领域事件 #工作流 #Saga事务

下载      文档       演示      jdon英文    企业培训咨询