基于CSE的微服務架構實踐-輕量級架構技術選型
輕量級架構模式下,可以選擇CSE作為RPC開發框架的基礎,并選擇其他開源技術實現微服務業務功能。
Spring BootBoot的maven插件提供了良好的打包功能,將一個應用打包為jar包,可以方便的分發應用程序,同時使用ServiceStage可以輕松的部署jar包,實現容器運行。
輕量級架構下,技術選型會傾向于選擇輕量級組件,而不選擇封裝好的框架,以實現對于應用程序最靈活的控制,比如不選擇任何spring-boot-start封裝的組件,也不選擇必須構建于J2EE(或者JavaEE)協議之上的組件。這種架構通常適合于技術開發能力比較強的團隊,對于技術原理有比較深入的了解,然后期望更加高效靈活的實現業務訴求。
業務場景
技術選型
選型考慮
網關
CSE Edge Service
非常高效的異步通信支持的網關實現,同時最大限度開放了底層vert.x ? API,轉發邏輯可以由業務靈活定制。
實例隔離、重試、隔離倉等
CSE RPC內置功能
Hystrix在早期應用廣泛,但是由于其性能問題、錯誤定位以及在業務場景上適應性問題,不建議用戶采用,最新版本目前已經停止維護。
數據庫訪問
dbcp + mybatis
不依賴于J2EE的實現,能夠非常靈活的在不同運行環境使用。
Redis訪問
jedis
消息中間件
kafka,activemq等
消息中間件類型很多,都提供了自己的客戶端類,不依賴于spring。
分布式事務
ServiceComb pack (TCC)
認證鑒權
Role Based + JWT
或者Role ? Based + Session或者JWT + ? Session的組合實現
不采用任何框架,自行實現鑒權服務,更加靈活的管理業務認證需求。
脫離Spring Boot體系和J2EE(JavaEE)技術體系構建微服務,具備很大的靈活性,能夠掌握系統的細節。但是對技術人員要求相對高一些。好在很多開發場景,比如數據庫、消息中間件、認證鑒權等都有大量非常成熟、穩定并使用廣泛的庫可以選擇,因此這個難度并不是很大。
作為一個案例,我們使用JWT庫,提供一個可參考的鑒權實現方案。在開始之前,建議開發者查詢JWT的資料,了解JWT的原理。
上述流程圖,是進行JWT認證的一個基本流程。JWT提供了大量的庫供開發者使用,包括JAVA、C、C#、javascript等等。要進行JWT認證,需要在各個節點部署共享秘鑰或者采用非對稱秘鑰完成認證。在上面的例子中,認證管理服務部署了公私鑰對,其他服務部署了公鑰。
采用JWT認證的流程如下:
1.?????? 用戶調用認證管理服務的login接口獲取Token。通常用戶需要提供用戶名密碼等信息。返回的Token是按照JWT標準進行編碼的BASE64格式,包含了有效期、唯一標識等規定的字段,還包含少量的角色信息,比如roles=USER,ADMIN等。這些信息采用了認證管理服務的私鑰進行加密,只有采用它分發的公鑰才能夠解密。請求完成后,用戶將Token設置到瀏覽器Cookie里面或者LocalStorage里面。
2.?????? 用戶調用產品管理接口。需要將Token信息從瀏覽器讀取出來,通過Authorization頭或者其他的HTTP頭將信息傳遞下來。其他服務可以采用公鑰對Token進行解密,確認用戶身份,以及獲取角色信息。對于身份認證的部分,可以在網關統一進行,也可以直接由業務執行。網關進行的好處是可以防止疏漏,但是會存在重復檢查的成本。業務可以從Token里面解析出來角色信息,以判斷訪問者是否具備相關操作,比如listProduct或者deleteProduct的權限。
JWT的好處是非常適合微服務架構,認證過程完全是無狀態的,可以由使用者在本地完成認證,非常高效。同時非常適合需要進行大量第三方認證的場景(比如OAuth),在獲取第三方授權的Token后,就直接可以在業務中進行認證,不需要對第三方認證提供額外的會話管理機制。
將JWT機制作為業務系統的認證機制也存在一些問題。比如Token大小的問題。如果業務系統比較復雜,權限認證需要大量的信息才能夠確定,那么Token信息可能隨著權限規則的增加而增加,由于HTTP消息頭過大,可能導致拒絕服務,還會影響整個系統的網絡傳輸效率,造成大量浪費。因此在設計Token的的時候,一定需要對影響Token大小的因素做好評估,控制Token的大小。針對特殊場景,需要采用額外的認證機制彌補這個缺陷。比如認證管理服務提供接口/queryAllowedOperations,允許用戶通過Token ID查詢授權的操作列表,同時結合緩存等方案,減少對于認證管理服務的訪問。JWT還有增加重放攻擊的可能性,這個可以結合有效時間,在認證服務里面提供Token續期接口等方式,彌補可能存在的風險。
總之,JWT給微服務進行會話管理提供了良好的解決方案,依賴于靈活的認證鑒權系統設計,可以適配各種復雜的業務場景。通過JWT庫完成相關的認證邏輯開發,而不依賴于一些會話管理框架,給業務提供了極大的靈活性和選擇空間。
作為一個專門的的第三方認證服務,可以參考OAuth 2, 它使用JWT作為認證的技術基礎:
https://tools.ietf.org/html/rfc6749#section-1.2
微服務引擎 CSE 微服務 Spring
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。