Prototype框架:同时支持dubbo/spring cloud各类SOA/RPC框架方案

业务目标:

1、分离具体业务代码和技术实现代码,当技术实现发生变更时不需要修改具体业务代码(或者很少需要修改)。

2、使用注解来代替工具类和方法的使用,简化学习和开发过程。

3、自动生成业务接口的API文档,并为API的测试提供一些支持。

技术目标:

1、一个业务实现,无需额外代码仅需少量配置,同时!!!支持各类远程调用技术,包括HTTP REST/dubbo/httpinvoker/hession,并为其它任何SOA/RPC等提供扩展支持。

2、解决各类接口在序列化对象时存在的多余数据,以减少API在开发过程中频繁更新及对dubbo等远程调用提供更好的版本管理(不需要人工配置版本路由)。

3、解决如spring中如事务处理不恰当(如在控制器中使用多次写事务或写用户操作日志时未使用异步事务)等一系列问题,以减少代码review的工作量。

4、为高并发(异步、并行、缓存、线程池)、高可用(隔离、限流、降级)、分布式系统提供一些基本的支持。

5、框架的每个已有部件尽可能的是可替换的,并对框架的扩展提供友好的技术支持。

6、具体业务的开发,除了使用本框架的一些注解和少量功能外,尽可能与框架无关,也就意味着包括此框架本身也是可替换的(除了框架的扩展代码)。

设计思想:

1、基于原型(prototype)开发,而非spring推荐的单一实例(singleton)

2、接口最小化原则,避免序列化对象时多余的字段

3、如果能不让程序员偷懒,就不让他们偷懒,也就是尽量减少后续的技术债务。

设计思路:

在类被使用之前,通过javassist字节码技术对类的方法一定的修改,实现方法注解对应的处理逻辑(事务、异步、责任链、并行等).

通过方法参数注入bean而不是spring中的成员变量注解,以解决调用另外的方法时的注入问题.

根据每个接口的输入输出(注解定义的),创建不同的输入类和输出类,以解决序列化对象带来的多余字段问题、接口多版本问题、API文档问题。

主要功能:

1、工具注解:

a、事务管理:以Spring事务管理中基础提供处理管理支持

b、异步:不再需要丑陋的内部类

c、并行:在多个线程中处理不同的业务(比如微服务下的调用其它服务),并且与异步注解配合,可在异步下并行调用多段业务代码。

d、异常处理:使用一个或多个方法处理方法抛出的不同类型的异常

e、决策:根据方法返回值决定调用另外的某个方法(可反射调用子类的方法)

f、方法断路:使用Hystrix实现

g、消息发送与订阅:通过Rxjava实现消息发送与处理逻辑的分离,让业务开发人员无需了解具体实现技术(可能是基于事件、数据库或MQ等不同形式),比如异常日志、用户操作日志、短信邮件发送、APP通知、事件等均可通过此功能来实现解耦。

h、SQL:简化SQL的查询、批处理、调用存储过程等

i、IO处理:提供对byte[]、char[]、String、File、InputStream、Output、Reader、Writer、URL等不同形式数据的转换,只需要一个注解就能完成.

j、模板:提供类似发短信、邮件时的内容模板

k、提供Spring注解Value、Cache等缓存注解的支持

2、业务管理

a、业务实现类可按用户自定义的规则(如依次调用validate、business、after、async等方法以责任链形式分别用于处理不同的业务逻辑

b、不同的业务类方法,允许不同的事务(只读、可写、无事务),允许独立事务,允许多业务方法统一事务(除异步方法外),支持读写分离

c、支持异步处理业务

d、支持限流与业务降级

e、业务接口输出(用于分析不同版本间的接口变化,为APP不同版本兼容及兼容测试做支持.

3、HTTP REST

a、提供对Spring MVC的支持,业务接口自动注册为控制器的方法

b、GET方式(或未指定具体方式)只提供读事务(除异步方法外)

c、多接口版本自动路由支持(不同版本使用同一URL地址)

d、集成Swagger文档展示,方便测试

e、Servlet3异步请求支持

f、feign客户端代码在线生成

g、js表单验证数据代码在线生成

4、dubbo/HttpInvoker/Hession

a、提供打包生成客户端代码(不同版本的)

b、其它业务管理提供的特性

c、测试程序运行时生成客户端代码,以供持续集成工具打包

5、分布式事务支持

a、分布式事务处理服务中心(事务处理中间件)

b、在dubbo/http rest下支持跨虚拟机的分布式事务

6、开发、运维与自动化测试

a、集成不同技术的支持(类似Spring Boot starter)

b、API信息保存服务(在微服务/SOA环境下收集多个应用的API信息),以供API版本变更时测试.

c、统一的异常处理方式

d、性能统计数据输出

e、收集访问请求及出错请求(包括请求与结果)(待定)

f、分析请求,生成自动化测试脚本(待定)

性能:

采用javassist直接生成字节码,对大多数调用(空方法体),连续10W次责任链调用(调用两个空方法)响应时间小于300毫秒(原生java直接调用小于10毫秒)。以10毫秒的业务响应时间计算,则构架对业务响应时间的影响小于0.003%。以一个非常复杂的应用100次javassist的方法调用计算(通常小于10次),则构架对业务响应时间的影响小于0.3%.

应用场景:

1、新开发应用:以此框架开发的产品是面向未来技术的,扩展此框架或替换此框架代价很低。

2、ESB/适有SOA技术开发的项目向Spring Cloud/dubbo等迁移.

目前开发阶段,预计8月中发布预览版本(部分功能)

Prototype框架:同时支持dubbo/spring cloud各类SOA/RPC框架方案

相关推荐