1. 程式人生 > >Spring Boot 輕量替代框架 Solon 的架構筆記 - new

Spring Boot 輕量替代框架 Solon 的架構筆記 - new

Solon 是一個微型的Java開發框架。專案從2018年啟動以來,參考過大量前人作品;歷時兩年,4000多次的commit;核心保持0.1m的身材,超高的跑分,良好的使用體驗。支援:RPC、REST API、MVC、WebSocket、Socket 等多種開發模式。 Solon 強調:剋制 + 簡潔 + 開放的原則;力求:更小、更快、更自由的體驗。 #### 所謂更小: 核心0.1m,最小開發單位0.2m(相比Dubbo、Springboot專案包,小到可以乎略不計) #### 所謂更快: 本機helloworld測試,Qps可達12萬之多。可參考:《[helloworld_wrk_test](https://gitee.com/noear/helloworld_wrk_test)》 #### 所謂更自由:(程式碼操控自由) ```java // 除了註解模式之外,還可以按需手動 // //手動獲取配置(Props 為 Properties 增強版) Props db = Solon.cfg().getProp("db"); //手動獲取容器裡的Bean UserService userService = Aop.get(UserService.class); //手動監聽http post請求 Solon.global().post("/user/update", x-> userService.updateById(x.paramMap())); //手動添加個RPC服務 Solon.global().add("/rpc/", HelloService.class, true); //手動獲取一個RPC服務消費端 HelloService helloService = Nami.builder().create(HelloService.class); ``` #### 架構筆記: ## 1、緣起統一的處理架構想法 RPC、Rest api、MVC、SocketD;Http、Socket、WebSocket。不同的架構模式、不同的通訊訊號,統一處理......並且小巧 ![](https://oscimg.oschina.net/oscnet/up-ea01902b56f4ba7d5af3d95f2fe8e029474.png) > 關於HTTP訊號提供者,Servlet 或 NoServlet 都可以。如 JlHttp(NoServlet)、Jetty(Servlet)、reactor-netty...... ## 2、關於應用啟動的內在過程 序列的處理過程(含三個事件擴充套件點 + 兩個函式擴充套件點),程式碼直接、沒有什麼模式。易明 ![](https://oscimg.oschina.net/oscnet/up-68884728593ab0f4453486d721c0aaa1563.png) ## 3、請求的處理過程透視(由簡至敏演化) #### (a)簡版,經典的模型 ![](https://oscimg.oschina.net/oscnet/up-346201c64f3cec4410248e486a459c276f7.png) #### (b)延展版,也沒什麼特別 ![](https://oscimg.oschina.net/oscnet/up-f349e64ea94e586bacae5a4721c1586301a.png) #### (c)詳情版,應該還是熟悉的味道。(Solon的統一處理模型,讓Http、Socket、WebSocket 最終迴歸為熟悉的味道) ![](https://oscimg.oschina.net/oscnet/up-925ee25dcb46a07ec549f2d50baa559bfda.png) #### (d)整體鏈路版 ![](https://oscimg.oschina.net/oscnet/up-fd8193e4f6e6f6539324a6fffa935f82f66.png) > * Solon 的事務、快取控制是基於 Action interceptor 實現 > * Solon 的驗證器是基於 Action before trigger 實現 ## 4、Ioc & Aop 內部結構透視 ![](https://oscimg.oschina.net/oscnet/up-302114bb484417e6b3630913f9b8f4e4edd.png) #### 附: * 專案地址:[https://gitee.com/noear/solon](https://gitee.com/noear/solon)