Prototype框架:介於技術和業務之間的框架
更多內容請參考:http://blog.csdn.net/flyxxxxx/article/category/7055640
對此框架有興趣或想參與開發的請加QQ羣:255195191
業務目標:
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月中發佈預覽版本(部分功能)
QQ:406748509