基于CSE的微服務架構實踐-輕量級架構技術選型

      網友投稿 986 2022-05-30

      輕量級架構模式下,可以選擇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后,就直接可以在業務中進行認證,不需要對第三方認證提供額外的會話管理機制。

      基于CSE的微服務架構實踐-輕量級架構技術選型

      將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小時內刪除侵權內容。

      上一篇:Java中容易混淆的基礎知識
      下一篇:深源恒際與太平洋保險達成合作 醫療票據智能識別助力保險理賠駛入快車道
      相關文章
      亚洲精品高清在线| 国产成人人综合亚洲欧美丁香花| 亚洲?V无码乱码国产精品| 亚洲综合色区中文字幕| 亚洲春黄在线观看| 亚洲高清视频免费| 亚洲精品乱码久久久久久下载| 亚洲免费视频网站| 色播亚洲视频在线观看| 亚洲综合一区二区精品导航| 亚洲视频在线一区| 亚洲黄色网站视频| 亚洲成人福利在线观看| 亚洲国产av美女网站| 久久精品国产亚洲AV久| 亚洲黄色激情视频| 中文字幕精品三区无码亚洲| 亚洲日韩中文字幕一区| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲av成人片在线观看| 国产精品亚洲精品久久精品| 妇女自拍偷自拍亚洲精品| 久久精品国产亚洲AV电影网| 亚洲国产综合精品一区在线播放| 亚洲高清成人一区二区三区| 亚洲一级特黄大片无码毛片 | 中文字幕亚洲乱码熟女一区二区| 国产L精品国产亚洲区久久| 超清首页国产亚洲丝袜| 亚洲成A人片在线观看无码不卡| 亚洲avav天堂av在线不卡| 337p欧洲亚洲大胆艺术| 亚洲午夜精品一区二区公牛电影院| 亚洲专区中文字幕| 亚洲国产精品日韩av不卡在线| 午夜亚洲国产精品福利| 亚洲日韩中文无码久久| 亚洲综合一区二区精品导航| 亚洲男人天堂2018av| 国产亚洲福利精品一区二区| 中文字幕亚洲激情|