dawdler-series-jdk1.8
项目介绍
dawdler-series 是一站式分布式应用、微服务架构的解决方案,其特点简单、小巧、高效、安全、易扩展.
简单: 技术栈全面,入门门槛低.
小巧: 项目java源代码2万行,占用空间4.5M,最小依赖三方组件(个数不超过20个,大小在10M以内).
高效: 启动运行速度快,一般一个服务大约在50ms到300ms之间,多个服务如果部署在一个dawdler容器中是并行加载,启动时长为最长的那个服务的加载时间.
安全: 采用aio方式构建调用端与服务提供者间的长链接,初次连接需要身份认证与模块权限认证.
易扩展: 提供各种扩展接口与扩展方式.如: 负载均衡,配置中心,事务执行器,拦截器,监听器,服务创建监听器,序列化扩展,视图插件等.
部分功能说明:
mvc框架: 与spring mvc几乎一致.
分布式session框架: 高性能分布式session的实现.
验证框架: 前后台通用表达式支持后台生成前端表达式,灵活扩展.
RPC框架及容器: 容器部署方式,高效急速稳定的rpc实现,支持服务动态注册,心跳探测,断网重连,优雅关机,自定义序列化协议,rpc请求负载均衡,容器级生命周期监听器、过滤器、服务创建监听器,服务权限管理(支持全局用户、特定模块用户,可控制调用者调用指定服务),高性能编译型aop实现,多服务部署(公用一个dawdler服务器).
事务框架: 与spring transaction一致并支持读写分离.
熔断器: 熔断器,支持熔断配置、降级,采用时间滑动窗口方式统计.
分布式事务框架: 高性能异步tcc实现.
数据库操作框架: 提供封装jdbc的一套操作框架同时支持集成mybatis来操作数据库.
统一配置中心: 支持扩展的统一配置中心.
链路追踪: 基于pinpoint实现的链路追踪.
常用组件的plug: redis,elastic-search,rabbitmq.
为什么开发dawdler
背景: dawdler早期应用在某linux开源社区上,2008年之前采用ejb3.0通过jboss4.x版本运行,之后切过jboss7.x、wildfly.
问题1: 运行在jboss中有很多问题是解决不了的,比如长链接心跳,断线重连,服务注册与发现,自定义序列化协议,调用性能,启动速度等等问题.
问题2: 很多应用使用了spring,启动速度和运行速度都不是很理想,特别是启动速度不方便调试开发.
由于以上问题2010年采用nio写了一个版本,但容器部分功能未做完整,直到2014年之后开始基于aio重新编写了容器dawdler.
dawdler的稳定性
基于dawdler早先版本开发的linux开源社区中稳定运行在服务器上4年已久.dawdler还运行在了某一元购商城,某移动社区,国内某大型2b电商平台(应用部分组件),某支 付平台上(tps高峰时期可以达到上千,订单量每天在800-1000万条数据左右,稳定性表现的非常出色,没出现过问题.可放心使用),通过本地测试单机下的dawdler每秒可以处理60000多次调用.
dawdler之美
- 支持模块化部署公用一个jvm,理解成多个服务可以部署在一个容器中,启动一个jvm即可.
- 无需在客户端(消费者)定义服务端(服务器提供者)提供相同的接口定义,比如操作用户的service,UserService 这个接口客户端与服务器端需要存放两份,一般rpc框架或ejb3都用打jar包的方式来解决,在dawdler中完美的解决了此问题,dawdler的客户端(web端,服务调用者)没有代码,调用时无需打包(如今有了maven,可以无须将bean和api通过这种方式加载).
- controller 调试模式,不需要重启tomcat,dawdler容器,随时调试api接口(只限于web端,这种实现方式与tomcat热加载完全不同,tomcat的相当于重新启动了,而dawdler是直接通过类加载器热更新类的方式实现).
- dawdler启动速度快,运行效率高,依赖三方jar包少,体积小.
- 高效的编译型aop实现.
- 功能齐全,学习成本低,几乎兼容spring mvc与事务管理方式,无须使用spring也能使用同样的spring mvc与事务的功能,同时提供各种常用组件的能力,请参考dawdler模块.
- 动态加载类Filter实现网关提升性能(减少一次网关到聚合服务的调用),非常适合对性能要求高的互联网应用.
dawdler模块介绍(具体文档可以点击标题连接进入子模块查看详细说明)
1. dawdler-server
容器的服务端.
2. dawdler-core
dawdler-server与dawdler-client公用的核心模块.包含网络,服务发现实现,线程池,注解,压缩算法等.
3. dawdler-load-plug
远程组件加载模块. 一般用于做动态网关.
4. dawdler-db-plug
事务管理器模块,提供与spring基本一致的事务应用,支持读写分离.服务端数据库事务,读写分离的插件.
5. dawdler-dao-plug
通过反射实现的一套简易操作数据库的一套组件.支持基本的增删改查,读写分离. 注入dao到service. (仅支持mysql,如果是其他数据库推荐使用mybatis.)
6. dawdler-mybatis-plug
通过mybatis实现的数据库操作插件,注入mapper到service,session变更为单例模式,支持读写分离.
7. dawdler-client
客户端核心代码,服务发现,连接池,动态代理,aop实现,负载均衡等.
8. dawdler-client-plug-web
客户端插件,webmvc,远程加载组件的客户端,远程加载组件的通知器,web监听器,web拦截器等.
9. dawdler-client-plug-session
客户端高性能分布式session实现.
10. dawdler-client-plug-validator
是一个强大的前后端通用校验器,支持js和java后端通用表达式校验,支持扩展,支持后端校验规则生成前端表达式,java后端支持分组,继承,排除等特性,js支持校验扩展,各种事件扩展.
11. dawdler-client-plug-velocity
客户端velocity模板插件,目前已升级到2.3,提供一行代码分页pages指令,动态表单指令.
12. dawdler-circuit-breaker
熔断器,支持熔断配置,降级,采用时间滑动窗口方式统计.
13. dawdler-config-center
统一配置中心,支持扩展、注入.
14. dawdler-distributed-transaction
分布式事务模块,client应用到web端,server应用到dawdler端,compensator补偿器模块.
15. dawdler-serialization
序列化模块.
16. dawdler-load-bean
dawdler中需要序列化的类,dawdler内部使用.
17. dawdler-util
常用工具模块.
18. dawdler-rabbitmq-plug
rabbitmq模块的支持,包含客户端,服务器端,rabbitmq核心模块.
19. dawdler-redis-plug
dawdler-redis-plug redis模块的支持,包含客户端,服务器端,redis核心模块.
20. dawdler-es-plug
dawdler-es-plug es模块的支持,包含客户端,服务器端,es核心模块.
21. dawdler-pinpoint-plug
dawdler实现pinpoint链路追踪插件.
22. dawdler-schedule-plug
基于quartz实现,schedule模块的支持,包含客户端,服务器端,schedule核心模块.
23. dawdler-discovery-center
注册中心的根模块,提供服务注册,服务下线,服务发现等功能.目前提供zookeeper与consul的实现.
24. dawdler-encrypt-generator
用于生成properties与统一配置中心使用加密的密钥工具类.
25. dawdler-dependencies
构建项目时需要用的maven依赖声明.
26. dawdler-client-api-generator
基于java源码doc生成兼容swagger-ui的OpenAPI 3.0的json工具,对源代码零侵入,上手简单,生成效率高,使用非常方便.
27. dawdler-cache-plug
可以用在web端和服务端的缓存模块.
28. dawdler-service-plug
service模块的支持,包含客户端,服务器端,service核心模块.
dawdler-runtime介绍
安装教程
-
启动注册中心,zookeeper执行
sh zkServer.sh start
启动zookeeper或启动consul. -
进入dawdler的bin目录,通过
sh dawdler.sh run
启动(win环境dawdler.bat
linux或mac环境sh dawdler.sh
).运行
sh dawdler.sh
会有以下输出:
commands:
run Start dawdler in the current window 在当前窗口启动dawdler
start Start dawdler in a separate window 在后台启动dawdler
stop Stop dawdler 停止dawdler(关闭dawdler之前会从注册中心下线本容器下所有服务,不再接受请求,同时等待处理完客户端的请求之后停止服务器)
stopnow Stop dawdler immediately 立刻停止dawdler,如果客户端有请求为处理完会收到一个强制停止的异常
快速入门
1. 软环境
dawdler需要三方组件的支持,如下:
软件 | 是否必须 | 备注 |
---|---|---|
jdk-1.8 | √ |