技多又不壓身,Java Python.go都是很好的語言,如果你有精力學(xué)一學(xué)沒壞處,而且編程語言一通百通,你是Java程序員,學(xué)go語言學(xué)起來又不困難。
成都創(chuàng)新互聯(lián)公司主營泉州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),泉州h5成都小程序開發(fā)搭建,泉州網(wǎng)站營銷推廣歡迎泉州等地區(qū)企業(yè)咨詢
TrackRay簡介
溯光,英文名“TrackRay”,意為逆光而行,追溯光源。同時致敬安全圈前輩開發(fā)的“溯雪”,“流光”。
溯光是一個開源的插件化滲透測試框架,框架自身實現(xiàn)了漏洞掃描功能,集成了知名安全工具:Metasploit、Nmap、Sqlmap、AWVS等。
溯光使用 Java 編寫,SpringBoot 作為基礎(chǔ)框架,JPA + HSQLDB嵌入式數(shù)據(jù)庫做持久化,Maven 管理依賴,Jython 實現(xiàn) Python 插件調(diào)用,quartz 做任務(wù)調(diào)度,freemarker + thymeleaf 做視圖層,Websocket 實現(xiàn)命令行式插件交互。
框架可擴展性高,支持 Java、Python、JSON 等方式編寫插件,有“漏洞掃描插件”、“爬蟲插件”、“MVC插件”、“內(nèi)部插件”、“無交互插件”和“可交互插件” 等插件類型。
功能展示
主頁
登錄
任務(wù)創(chuàng)建
任務(wù)列表
任務(wù)詳情
無交互接口插件調(diào)用
MVC插件示例
交互式插件控制臺
MSF 控制臺
依賴環(huán)境
JDK 1.8
Python 2.7
Maven
Git
Metasploit
Nmap(建議安裝)
SQLMAP(建議安裝)
AWVS
**加粗為必須環(huán)境,沒有安裝程序則無法正常編譯運行
不論是 Windows 還是 linux 一定需要先安裝 JDK1.8 和 Maven。安裝過程這里不做演示。保證 JDK 和 Maven 都在系統(tǒng)環(huán)境變量,能執(zhí)行java -version 和 mvn --version即可。
安裝過程
第一步
手動啟動 AWVS 服務(wù)
登錄后臺,生成一個API密匙。
復(fù)制密匙和 AWVS 的地址。
找到web/src/main/resources/application.properties配置文件。
修改如下部分
第二步
找到你 python 的第三方庫目錄。
Windows 的一般在 python 安裝目錄下的/Lib/site-packages
Linux 下可以通過輸出 sys.path 來找第三方包路徑
我的是 D:/Python2/Lib/site-packages
同樣找到web/src/main/resources/application.properties配置文件。
修改python.package.path參數(shù)
第三步
安裝 Maven 后找到倉庫位置。
如果沒有在 settings.xml 里配置指定倉庫目錄,默認會在當(dāng)前用戶目錄中生成一個 .m2的目錄
找到倉庫目錄后修改 application.properties 的 maven.repository.path參數(shù)
第四步
這個是 DNSLOG 回顯檢測漏洞時需要的。
去 ceye.io 注冊一個賬號,拿到給你分配的域名和 TOKEN。
修改配置文件
第五步
啟動 msf 和 sqlmapapi。
如果你是 kali 操作系統(tǒng),可以直接運行startdep.sh。
如果是其他系統(tǒng),則要找到 metasploit 和 sqlmap 的目錄分別執(zhí)行
啟動成功后修改配置文件
第六步
編譯打包程序
等待依賴下載完成和編譯完成,如果以上操作都沒有出現(xiàn)問題則會提示 BUILD SUCCESS
編譯成功后會在當(dāng)前目錄打包一個trackray.jar就是溯光的主程序。
然后直接執(zhí)行startup.bat或startup.sh溯光就會啟動服務(wù)。
沒有拋出異?;駿RROR日志,訪問 8080 端口正常。
服務(wù)啟動正常后,登錄 iZone 社區(qū)賬號。
**開發(fā)插件建議使用 Intellij IDEA IDE,需要安裝 lombok 插件。
目錄結(jié)構(gòu)
插件
AbstractPlugin
這是交互式插件和非交互式插件的父類。
BASE常量
其中的靜態(tài)常量 BASE 是 /resources/include/ 的所在目錄。
如果你的插件需要額外的靜態(tài)資源,那么你可以在 /resources/include 目錄里創(chuàng)建一個和插件 KEY 相同的文件夾,便于識別,如果沒有在 @Plugin 注解中設(shè)置 value 則默認的插件 KEY 就是當(dāng)前類名首字母小寫。
如 Typecho001 = typecho001
check(Map param)
這是用于檢驗是否合規(guī)的方法,需要被強制重寫,當(dāng)返回 true 時才會調(diào)用 start() 方法
param 參數(shù)是從前臺傳過來的參數(shù)鍵值對。
常被用于檢驗參數(shù)格式是否正確或漏洞是否存在。
after()
在 start() 方法之前調(diào)用
before()
在 start() 方法之后調(diào)用
start()
這是一個抽象方法,所有繼承了該類的子類都需要重寫這個方法。
在 check 方法 通過后會調(diào)用 start() 方法
start() 方法返回值最終會會當(dāng)做插件結(jié)果,響應(yīng)給前臺。
shell()
調(diào)用當(dāng)前系統(tǒng) shell 來輔助完成插件功能。
executor()
插件執(zhí)行的主方法
crawlerPage
http請求對象(不推薦使用)
fetcher
執(zhí)行 http 請求對象(不推薦使用)
errorMsg
當(dāng)校驗不通過時,返回給前臺的信息。
param
前臺傳過來的參數(shù)鍵值對
requests
HTTP 發(fā)包工具(推薦使用)
hackKit
hack 常用工具包
無交互插件
無交互插件需要你填寫好所有要填寫的參數(shù),直接請求接口來執(zhí)行插件。
默認需要去繼承 CommonPlugin類。
這是一個抽象類,繼承了 AbstractPlugin
主要多出來兩個屬性:request 和 response。
繼承了 CommonPlugin 的類可以通過調(diào)用這兩個屬性來控制請求和響應(yīng)內(nèi)容。
無交互插件同時也需要使用 @Rule 和 @Plugin 插件,這兩個注解后面會講到。
在 ,找到相應(yīng)的插件填寫好參數(shù)提交即可完成調(diào)用。
或直接調(diào)用接口。
交互式插件
交互式插件一般在命令行控制臺中調(diào)用,可以允許你通過命令行交互來完成插件的調(diào)用。
交互式插件由 Websocket 實現(xiàn),想要寫一個交互式插件,首先要繼承 WebSocketPlugin 類。
同時設(shè)置 @Rule 注解的 websocket 參數(shù)為 true ,如果需要異步交互需要將 sync 也設(shè)置為 true。
內(nèi)部插件
內(nèi)部插件是不可以通過外部去調(diào)用的,需要繼承 InnerPlugin 并使用 @Plugin 注解,通常在漏洞掃描時時會調(diào)用。
例如 “網(wǎng)頁爬蟲”,“指紋識別”,“端口掃描” 等,都是通過調(diào)用內(nèi)部插件實現(xiàn)的。
還有用于檢測 SSRF 等漏洞用的 FuckCeye 插件也屬于內(nèi)部插件。
通過 spring 的自動注入,來注入內(nèi)部插件到當(dāng)前對象。
例子可參考 WebLogicWLSRCE.java
爬蟲插件
爬蟲插件會在掃描任務(wù)被勾選“網(wǎng)頁爬蟲”時調(diào)用,每爬取一條請求就會調(diào)用一次爬蟲插件。
爬蟲插件需要繼承 CrawlerPlugin,繼承該類必須重寫 check 和 process 方法。
check 方法用于檢驗請求是否符合插件規(guī)則,以免產(chǎn)生多余請求。
當(dāng) check 方法 返回為 true 時會調(diào)用 process 方法。
process 方法里寫插件主要檢測代碼。
addVulnerable()
當(dāng)插件檢測出漏洞時,可以通過調(diào)用 addVulnerable() 方法來向數(shù)據(jù)庫插入一條漏洞。
requests
requests 屬性為請求工具包,處理 https 和 http 都很方便。
response
response 屬性為當(dāng)前爬蟲得到的 HTTP 響應(yīng)。
task
task 屬性為當(dāng)前任務(wù)對象,如果你的爬蟲插件不是檢測漏洞而希望是檢測一些敏感信息的話可以修改 task.getResult() 里的屬性。
參考 FingerProbe.java 或 InfoProbe.java。
target
爬蟲爬取到的 URL 對象。
fetcher crawlerPage
http 請求對象(不建議使用)。
漏洞掃描插件
漏洞掃描插件會在,掃描任務(wù)中勾選“漏洞攻擊模塊”時調(diào)用。
漏洞掃描插件分為三種
1.獨立插件
獨立的漏洞掃描插件需要繼承 AbstractExploit 并使用 @Plugin 或 @Exploit
AbstractExploit 中有以下需要了解的方法和屬性。
requests
http / https 發(fā)包工具
target 當(dāng)前掃描任務(wù)的地址。
task
當(dāng)前掃描任務(wù)對象。
check()
check 是一個抽象方法,需要被子類強制重寫。
該方法一般用于檢驗是否符合當(dāng)前漏洞掃描插件的規(guī)則,以免產(chǎn)生多與請求。
attack()
attack 也是一個抽象方法,需要被子類強制重寫。
該方法是檢測漏洞的主方法。
before()
在 attack 方法前執(zhí)行
after()
在 attack 方法后執(zhí)行
addVulnerable()
當(dāng)插件檢測出漏洞時,可以通過調(diào)用 addVulnerable() 方法來向數(shù)據(jù)庫插入一條漏洞。
fetcher crawlerPage
http 請求對象(不建議使用)。
2.漏洞規(guī)則
位于
實際上這是一個“內(nèi)部插件”,會在勾選漏洞模塊攻擊時調(diào)用。
有一些漏洞檢測方法很簡單,只通過簡單的判斷響應(yīng)體就能識別出來,也就沒有必要再去寫一個獨立的插件而占用空間了。
在 doSwitch() 方法中會先去根據(jù)當(dāng)前任務(wù)的指紋識別結(jié)果走一遍 switch 流程。
swtich 的每一個 case 都是 WEB 指紋的枚舉對象。
當(dāng) switch 找到當(dāng)前任務(wù) WEB 指紋對應(yīng)的 case 后,case 內(nèi)的代碼會通過構(gòu)建一個漏洞規(guī)則添加到 loaders 集合里。
如果規(guī)則是通用的,可以寫在 switch 的外面。
3.kunpeng JSON插件
kunpeng 是一個 go 語言編寫的 poc 測試框架,這里我對 kunpeng 的 JSON 插件做了一個支持。
只需要按照 kunpeng json 插件的格式規(guī)范創(chuàng)建一個 json 文件到 /resources/json 目錄。
在掃描任務(wù)勾選“漏洞攻擊模塊”時會被調(diào)用,或通過 MVC 插件調(diào)用 。
MVC 插件
位于
MVC 插件的特點在于,他可以像是在寫一個功能一樣,而非簡單的接口式調(diào)用。
MVC 插件需要繼承 MVCPlugin 類,并使用 @Rule,@Plugin 注解。
MVCPlugin 內(nèi)置了一個 ModelAndView 對象, 是 SpringMVC 提供的。
可以通過 setViewName() 來指定視圖層的網(wǎng)頁模板。
通過 addObject(key,value) 向視圖層網(wǎng)頁模板注入?yún)?shù)。
這里的視圖層是使用 thymeleaf 實現(xiàn)的,需要懂 thymeleaf 的語法。
例子可以參考:com.trackray.module.inner.JSONPlugin
繼承 MVCPlugin 必須要重寫一個 index 方法,這是插件的入口。
如果需要寫其他的功能,就得再創(chuàng)建一個 public 返回值為 void 的無參方法。
并且要在該方法上使用 @Function 注解,該注解的 value 參數(shù)如果不填寫的話則默認的 requestMapping 地址為方法名。
例如
最后還需要在 /module/src/main/resources/templates 創(chuàng)建一個目錄名為插件 KEY 的目錄。
里面存放擴展名為 .html 的模板文件。
Python 插件
python 插件有兩種實現(xiàn)方式。
1.通過命令行實現(xiàn)
這種方式最為簡單,通過在 include 里寫一個 python 腳本。
然后在插件里調(diào)用 shell() 方法來執(zhí)行系統(tǒng)命令。
案例可參考 com.trackray.module.plugin.windows.smb.MS17010
但這樣還需要再寫 java 的代碼,對于沒有學(xué)過 java 的人來說很不友好。
2.通過jython實現(xiàn)
jython 是一個 Python 語言在 Java 中的完全實現(xiàn)。
我將它的調(diào)用過程寫成了一個交互式插件。
你可以通過在 /resources/python/ 目錄下安裝如下規(guī)范去創(chuàng)建一個 python 文件。
在這個 python 文件中需要寫兩個方法。
關(guān)于注解
@Rule
一般用在“可交互插件”和“無交互插件”類上。
@Plugin
WEB指紋
這里順便再說一下如何添加指紋庫。
指紋庫位于 base 模塊,是一個枚舉類。
可以在首部或尾部添加一條新的枚舉,盡量使用 $ 開頭。
第一個參數(shù)是 指紋的名稱,如果第二個參數(shù)是 String 類型則是該指紋的說明。
FingerBean 類是指紋匹配對象。
編程語言是程序員(開發(fā)人員)用來與計算機進行通信的計算機語言。它是用任何特定語言(C、C++、Java、Python)編寫的一組指令,用于執(zhí)行特定任務(wù)。編程語言主要用于開發(fā)桌面應(yīng)用程序、網(wǎng)站和移動應(yīng)用程序。以下是 2022 年最流行的頂級語言。
Python
Python 是由 Guido van Rossum 于 1980 年代后期在荷蘭構(gòu)建的。Python 最初是作為 Java 在行業(yè)中的競爭對手而構(gòu)建的,后來逐漸流行起來。目前,Python 在研究人員和開發(fā)人員社區(qū)中都非常受歡迎。Python 在 IEEE Spectrum 的語言排名中名列前茅,得分為滿分 100。此外,Python 也很受尊重,支持率高達 44.1%。
Python 幾乎適用于任何事物。Django 和 Flask 可用于 Web 開發(fā),而 Jupyter 和 Spyder 等科學(xué)工具則用于分析和研究目的。如果您喜歡自動化,Selenium 可以幫助您!該語言的靈活性使 Python 幾乎可以在任何地方使用。到目前為止,這些是 Python 中比較流行的產(chǎn)品。Python 的巨大支持基礎(chǔ)(僅次于 JavaScript)產(chǎn)生了大量使用該語言的包、框架,甚至是成熟的開源軟件。
總的來說,Python 可能對數(shù)據(jù)科學(xué)和機器學(xué)習(xí)有最大的支持。雖然還有其他語言(如 R 和 MATLAB)提供競爭,但 Python 是數(shù)據(jù)科學(xué)領(lǐng)域的嚴(yán)格統(tǒng)治者。機器學(xué)習(xí)中使用的大多數(shù)框架和庫都僅用 Python 編寫,如果想要學(xué)習(xí)機器學(xué)習(xí)(或一般的數(shù)據(jù)科學(xué)),它可能是最好的語言。
JavaScript
JavaScript 在這一點上幾乎是行業(yè)領(lǐng)導(dǎo)者。JavaScript 最初于 1994 年作為 Netscape Navigator(當(dāng)時最好的瀏覽器之一)的腳本語言而構(gòu)建,它迅速崛起。直到 2008 年,Google 才在為 Google Chrome 構(gòu)建 V8 引擎時設(shè)計了現(xiàn)代 JavaScript。最初由 Netscape 構(gòu)建為 Java 的競爭對手,JavaScript 現(xiàn)在在開發(fā)領(lǐng)域擁有自己的空間。JavaScript 因其流行而被廣泛認為是“互聯(lián)網(wǎng)語言”。JavaScript 在開發(fā)者社區(qū)中的支持率最高——高達 67.7%。一般來說,JavaScript 適用于任何類型的開發(fā)活動,如移動應(yīng)用程序開發(fā)、Web 開發(fā)、桌面應(yīng)用程序開發(fā)等。
JavaScript 有各種各樣的庫和框架,可以在開發(fā)過程中使用。有用于前端開發(fā)的 Angular、Vue 和 React,而 Node.js 是一種用于后端開發(fā)的非常靈活的語言。Jest 和 Mocha 是兩個靈活的工具,可幫助設(shè)置單元測試以檢查功能是否按預(yù)期工作。當(dāng)然,如果您對其中任何一個都不太滿意,您可以在前端使用普通的 HTML、CSS 和 JavaScript——就這么簡單!由于來自世界各地開發(fā)人員的巨大支持,JavaScript 擁有任何語言都可以夸耀的最多數(shù)量的支持包。盡管如此,人們繼續(xù)構(gòu)建越來越多的包,以增加使用該語言的便利性。
Java
Java 由 James Gosling、Mike Sheridan 和 Patrick Naughton 于 1991 年構(gòu)建為“Oak”語言,是第一種在全球產(chǎn)生重大影響的語言。雖然新的編程語言使用與 C/C++ 相同的格式,但它融入了某些新思想,使其對更多人更具吸引力。Java 運行的原則是“一次編寫,隨處運行”——這意味著具有不同硬件和操作系統(tǒng)配置的系統(tǒng)可以輕松運行 Java 程序。
Java 也有各種各樣的庫和框架,它們在底層使用 Java。Java 用于通過 Spring 和 Hibernate 進行應(yīng)用程序開發(fā)。JUnit 幫助我們?yōu)?Java 項目設(shè)置單元測試。最重要的是,Java 被用于開發(fā)原生 Android 應(yīng)用程序(Android SDK 本身由 Java 開發(fā)工具包或 JDK 提供支持)。Java 可能是大多數(shù)人在大學(xué)或?qū)W校的計算機編程入門課程中被介紹的語言。Java 是用于向大眾教授面向?qū)ο缶幊痰恼Z言。
Java 在分析和研究領(lǐng)域也備受推崇。Java 唯一的問題是目前該語言的支持包和項目很少。很少有社區(qū)參與——這是大多數(shù)主流語言都有的。盡管如此,Java 是一種非常容易掌握和學(xué)習(xí)的語言——這在一定程度上解釋了該語言的吸引力。但是,要掌握某種形式的語言確實需要一些時間。
C++
也許人們在本文中可以期待的最令人震驚的答案之一是 C++。盡管是大多數(shù)人用來學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法概念的語言,但該語言本身在實際世界中卻很少使用。C++ 最初由 Bjarne Stroustrup 于 1982 年創(chuàng)建,作為 C 編程語言的擴展,在接下來的幾年中繼續(xù)聲名鵲起。
C++ 可用于分析、研究以及 游戲 內(nèi)開發(fā)。流行的 游戲 開發(fā)引擎——虛幻引擎——使用 C++ 作為腳本語言,用于構(gòu)建 游戲 時可以定義的所有功能。C++ 在軟件開發(fā)中也有廣泛的用途。介于面向?qū)ο蠓椒ê兔嫦蚍椒ǚ椒ㄖg,C++ 可以靈活地使用它生成的軟件的性質(zhì)。在 TIOBE 指數(shù)中排名第 4 意味著 C++ 至今仍具有吸引力。C++也廣泛用于系統(tǒng)軟件開發(fā),比其他語言更容易理解。在操作系統(tǒng)等敏感領(lǐng)域使用 C++ 的主要原因是 C++ 程序的編譯時間非常短。
C++ 可能擁有所有語言中最大的學(xué)習(xí)社區(qū)。大多數(shù)學(xué)生會開始他們的算法課程,用 C++ 構(gòu)建樹、鏈表、堆棧、隊列和許多其他數(shù)據(jù)結(jié)構(gòu)。當(dāng)然,只要注意細節(jié),它就很容易上手和學(xué)習(xí),也很容易掌握。
Typescript
TypeScript 是 JavaScript 的超集,具有與 JavaScript 幾乎相同的應(yīng)用程序。TypeScript 可用于 Web 開發(fā)、移動應(yīng)用程序開發(fā)、桌面應(yīng)用程序開發(fā)等。在 StackOverflow 的最受歡迎語言列表中,TypeScript 是第二受歡迎的語言,受到 67.1% 的開發(fā)人員的喜愛(僅次于 Rust)。
TypeScript 主要是一種用于開發(fā)的語言,因此它對科學(xué)界沒有太大吸引力。但是,由于 TypeScript 的新功能,可以預(yù)期它可能會激發(fā)更大程度的研究興趣。該語言的技能上限比 JavaScript 低得多——并且 JavaScript 的許多“難以理解”的行為已在 TypeScript 中得到簡化。換句話說,您將頭撞到墻上的機會略小。
Golang
新語言正在迅速崛起,新的競爭者即將挑戰(zhàn) JavaScript 和 Python 擁有的寶座。由谷歌(兩者的名字中都有“Go”?。┲饕菫榱送七M函數(shù)式編程的事業(yè),Golang 在短時間內(nèi)建立了大量的追隨者。Golang 已經(jīng)成為 StackOverflow 第五大最適合學(xué)習(xí)的語言,受到 62.3% 的開發(fā)人員的喜愛。
Golang 用于多個領(lǐng)域,用于開發(fā)強大的軟件以及用于 Web 和移動應(yīng)用程序的后端。目前,Golang 甚至支持一些基本的 Web 開發(fā)。雖然它仍處于取代 JavaScript 作為網(wǎng)絡(luò)語言的階段,但它正在迅速成為支持下一階段網(wǎng)絡(luò)的語言。
Golang 比此列表中的其他語言更難學(xué)習(xí)。此外,Golang 是一種開源語言,每次重大更新都會頻繁更改,因此保持更新是必要的。
Dart
Dart 是工業(yè)領(lǐng)域發(fā)展最快的語言之一。谷歌在語言領(lǐng)域的貢獻顯著增加,以與微軟的 TypeScript 日益流行的競爭相抗衡。Dart 因其簡單性而受到世界各地程序員的高度喜愛。
Dart 用于多平臺應(yīng)用程序開發(fā)。與 JavaScript 一樣,Dart 用于構(gòu)建任何人都可以使用電子設(shè)備運行的軟件。目前 Dart 最著名的用途是 Flutter 框架,F(xiàn)lutter 是一種用于移動應(yīng)用程序開發(fā)的語言。最近的谷歌趨勢表明,F(xiàn)lutter 盡管是一個較新的框架,但比 React Native 更受歡迎,后者是業(yè)界已經(jīng)建立的移動應(yīng)用程序開發(fā)框架。
Dart 比 JavaScript 更容易學(xué)習(xí),并且能夠很好地簡化甚至難以理解的案例。隨著市場上的 TypeScript 和 Dart 的出現(xiàn),程序員在選擇一種他們真正想要學(xué)習(xí)的語言時會面臨多種選擇。
編程語言有:Python語言、C語言、Java語言、PHP語言、GO語言等。編程語言有很多種,總的來說可以劃分成三類:機器語言、匯編語言、高級語言。目前使用的較多的是匯編語言和高級語言。編程語言也就是計算機語言,通過編程語言更好的控制計算機。計算機能識別的語言有機器語言、匯編語言和高級語言。其中高級語言使用的較多一些,常見高級語言也非常多,比如:Perl,pascal,lisp,C等等。而且每種語言都有自己的優(yōu)勢,比如Java語言,簡單易學(xué),有很強的交互性,跨平臺性也非常強,常用來開發(fā)與商業(yè)相關(guān)的網(wǎng)絡(luò)應(yīng)用。
Java是一門較為成熟的語言,相對于C++要簡單的多,C++里沒有內(nèi)存回收,所以比較麻煩,Java加入了內(nèi)存自動回收,簡單是簡單,卻變慢了,go語言是一門新興的語言,現(xiàn)在版本是1.9 ? go語言的性能比Java要好,但由于出現(xiàn)晚,資料較Java少,有些Java的功能go也沒有,并且有許多的軟件是支持Java但支持go的很少.所以在短期內(nèi)Java是比go通用的
C語言的最大的優(yōu)勢是時間性能好,只比匯編慢20%~30%,C++最大的優(yōu)勢是快且面向?qū)ο?Java最大的優(yōu)勢是垃圾回收機制,GO語言的目標(biāo)是具備以上三者的優(yōu)勢
近幾年誕生了很多微服務(wù)框架,比如JAVA的Spring Cloud、Dubbo;Golang的GoKit和GoMicro以及NodeJs的Seneca。幾乎每種主流語言都有其對應(yīng)的微服務(wù)框架。
Go在微服務(wù)框架中有其獨特的優(yōu)勢,至于優(yōu)勢在哪,自行g(shù)oogle。
1、GoKit框架
這是一個工具包的集合,可以幫助攻城獅構(gòu)建強大、可靠和可維護的微服務(wù)。提供了用于實現(xiàn)系統(tǒng)監(jiān)控和彈性模式組件的庫,例如日志、跟蹤、限流、熔斷等。
基于這個框架的應(yīng)用程序架構(gòu)由三個主要的部分組成:
傳輸層:用于網(wǎng)絡(luò)通信,服務(wù)通常使用HTTP或者gRPC等網(wǎng)絡(luò)傳輸協(xié)議,或者使用NATS等發(fā)布訂閱系統(tǒng)相互通信。
接口層:是服務(wù)器和客戶端的基本構(gòu)建塊。每個對外提供的接口方法都會定義為一個Endpoint,一遍在服務(wù)器和客戶端之間進行網(wǎng)絡(luò)通信,每個端點使用傳輸層通過HTTP或gRPC等具體通信模式對外提供服務(wù)
服務(wù)成:具體的業(yè)務(wù)邏輯實現(xiàn)
2、GoMicro框架
這是一個基于Go語言實現(xiàn)的插件化RPC微服務(wù)框架。提供了服務(wù)發(fā)現(xiàn)、負載均衡、同步傳輸、異步通信以及事件驅(qū)動等機制,嘗試簡化分布式系統(tǒng)之間的通信,讓開發(fā)者更專注于自身業(yè)務(wù)邏輯的開發(fā)。
GoMicro的設(shè)計哲學(xué)是可插拔的架構(gòu)理念,提供了可快速構(gòu)建系統(tǒng)的組件,并且可以根據(jù)自身的需求對GoMicro提供的默認實現(xiàn)進行定制。所有插件都可在倉庫github.com/micro/go-plugins 中找到。