Prototype框架:同時支持dubbo/spring cloud等各類SOA/RPC的新框架方案

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章