中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺出高性能服務發現、配置框架Nacos系列 2: Nacos項目結構介紹

發布時間:2020-04-05 08:21:57 來源:網絡 閱讀:7007 作者:wyp57801314 欄目:軟件技術

今天,我們分析一下Nacos工程的包模塊結構,都是負責什么功能的,從全局看一下整個工程,從整體到細節,還沒下載源碼的同學,趕緊動起來!https://github.com/alibaba/nacos,這個是github代碼地址,開始之前先start關注一下,加上watch,后續Nacos的郵件列表也會通知到你,可以關注到Nacos的最新實時消息,及各大牛之間的精彩討論。

截止本文發出,代碼最新是master分支上0.2.0版本的,新開源版迭代會比較頻繁,很可能某個類,或者模塊依賴關系,下個版本就不一樣了,請不要疑惑。

通過分析Nacos源碼工程中的pom模塊依賴,畫出了如下每個模塊的依賴關系,每個component就對應者工程里面的一個maven module,我們重點關注一下工程代碼相關的模塊的依賴關系,依賴關系從上往下,下圖右邊部分:

深入淺出高性能服務發現、配置框架Nacos系列 2: Nacos項目結構介紹cdn.nlark.com/lark/0/2018/png/4232/1537615415981-071b6819-6643-49c3-94fa-68a7e54908fd.png">

接下來,將介紹一下每個模塊在Nacos工程中的職責及依賴關系。

console模塊:

目前里面是空的,根據Nacos的版本規劃,預計在0.3.0版本里面,會在這個模塊里面放入Nacos控制臺相關代碼,及前端資源,它依賴config和naming模塊,由此可以看出,consule前端依賴的api,將直接由這2個模塊進行提供

config模塊:

大家知道,Nacos目前有3大核心功能,其中一個是動態配置發現,這個包里面,放的就是配置中心的代碼,打開模塊,內部的包結構如下圖:

深入淺出高性能服務發現、配置框架Nacos系列 2: Nacos項目結構介紹

基本上從名字都能猜出個大概,這里就不詳細講解里面的具體實現了,后續有章節介紹。工程是基于spring boot構建的,所以會有一個入口類Config,里面打開就是Spring boot玩家熟悉的spring boot加載入口方法了,SpringApplication.run(Config.class, args)

naming:

這個是Nacos的另外一個核心功能的代碼模塊,動態服務發現,內部的包結構如下:

深入淺出高性能服務發現、配置框架Nacos系列 2: Nacos項目結構介紹

和config模塊類似,NamingApp是spring boot的入口類,其他的都通過包隔離了,各個包的名字,大家也可以猜出大概是承擔什么功能的

core模塊

從上圖可以看出,由config直接依賴,目前里面是空的,看來還是屬于規劃之中,從core上里面,這里可能會抽取出一些核心服務,供多個功能模塊使用,例如數據層,一致性協議等

common模塊

目前由config通過core間接依賴到,翻開了里面的代碼,是一些公用的工具類,如下圖所示:

深入淺出高性能服務發現、配置框架Nacos系列 2: Nacos項目結構介紹

目前只有這些工具類,naming目前沒有依賴到,但是后續和config模塊進行融合時,這里面后續會放入共同依賴的一些類,例如請求對象,異常,協議結構等

client模塊

這個里面放的是Nacos客戶端的代碼,服務發現和配置管理2個功能的客戶端,目前在工程模塊上已經做了統一,但是,在代碼包上面,還是分離到,可以從包結構里面看出,如下:

深入淺出高性能服務發現、配置框架Nacos系列 2: Nacos項目結構介紹

很明顯分了2個模塊,配置和naming,后續隨著整合到深度,這些都會陸續合并掉,真正做到統一

api模塊

這個里面,主要是把naming和config的api進行了抽取,從結構上看更清晰一些,api的具體實現,都還在client模塊里面,它包結構如下:

深入淺出高性能服務發現、配置框架Nacos系列 2: Nacos項目結構介紹

在Nacos的使用手冊中,使用到的工廠類,NacosFactory在構建對應實例時,調用的就是api里面的,根據不同的方法,再通過反射構造出對應的實例:

public static ConfigService createConfigService(String serverAddr) throws NacosException {
   Properties properties = new Properties();
   properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
   try {
      Class<?> driverImplClass = Class.forName("com.alibaba.nacos.client.config.NacosConfigService");
      Constructor constructor = driverImplClass.getConstructor(Properties.class);
      ConfigService vendorImpl = (ConfigService) constructor.newInstance(properties);
      return vendorImpl;
   } catch (Throwable e) {
      throw new NacosException(-400, e.getMessage());
   }}
  • 其他非工程源碼的模塊,是用來放測試用例,文檔,打包文件,啟動腳本的,這個就不詳細講了,大家有興趣可以翻開來看看。

總結

Nacos的工程,包含了Nacos Server和Nacos Client2個工程的代碼,后續會再console的代碼也放入總工程中,這些代碼都放在一起,對使用和學習者來說,是非常方便的,其中,Nacos Server,由配置和服務發現2個大功能,分別由config和naming承載,client和naming模塊的代碼,都沒有共同依賴的類,由此可以看出,client與server之間的協議,是和語言沒有關系,沒有涉及到自己的私有應用層協議,這樣的話,多語言客戶端的接入,會簡單很多,在客戶端的模塊里面,這2個功能就統一到了NacosClient模塊里面,server目前還是不同的模塊,后續這塊需要看Nacos的架構融合演進。

總的來說,目前Nacos的工程,將框架都搭好了,但是一些整合的實現和優化,都還未清晰,好幾個包都是空的,功能和系統架構,還在規劃之中,因此大家多參與進來,有很多的機會和空間給你們發揮,你的提議很可能會成為Nacos的標準,服務于世界級工程應用!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳高县| 沁源县| 江门市| 罗平县| 余庆县| 通河县| 东兴市| 图木舒克市| 桐乡市| 沁阳市| 城口县| 娱乐| 双鸭山市| 舒兰市| 瑞金市| 哈密市| 亚东县| 安龙县| 化州市| 芜湖县| 和林格尔县| 桐城市| 长子县| 洪雅县| 南雄市| 阳高县| 吴川市| 皮山县| 灌云县| 清水河县| 雅安市| 沙田区| 荣昌县| 准格尔旗| 广昌县| 萨嘎县| 台中县| 响水县| 滁州市| 柘荣县| 内乡县|