1. 程式人生 > >Prototype框架:同時支援dubbo/spring cloud等各類SOA/RPC的新框架方案

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