Easegress 技術選型及源碼介紹

應用社區要求,我們於 2021 年 12 月 16 日對外分享一下我們的開源軟件 Easegress 的源碼,以便大家可以更好的進行代碼開發。對於分享視頻鏈接,參看本文結尾

自從 2021 年 6 月份開源以來,Easegress 目前有 262 個文件,近 6 萬行代碼,一共 1500 個提交,以及 300 + 個 PR,以及有 10 來個用戶在使用,開源以來的開發進展是非常喜人的。但是我們還是一個比較年輕的項目,還需要大家多多的支持。

另個,還想再次說明一下,我們之所以開發 Easegress 是因爲我們覺得需要一個控制能力更強的雲原生網關,而不僅僅只是一個反向代理。另外,我們之所以選取 Go 語言主要是爲了兼容性能和功能擴展性方面。如下圖所示

Easegress 不僅僅只是一個反向代理,其更多的還是一個 Cloud Native 的服務網關,所以,其必然需要跟像 Kubernetes 和 Microservice 架構進行協同,而可能還需要有一些業務邏輯侵入。所以,我們需要在功能擴展性上給足空間。對於功能擴展來說,一般會有幾個方式:

下圖是整個 Easegress 的源碼文件結構和一些概念模型

其中的幾大模塊說明如下:

  1. Cluster。這個模塊主是跟 Easegress 高可用集羣相關的代碼。其主要就是對 etcd 的包裝。

  2. Supervisor。這個模塊主要是一個管理和創建整個 Easegress 運行時的代碼,代碼很簡單不復雜。

  3. Objects。這個是 Easegress 裏的重要的一些對象,這個名字借鑑於 Kubernetes 那邊,太過於抽象。但基本上來說是如下的東西。

  4. System Controller。這是系統級的控制器,系統級的控制器只能有一個實例。如 Service Discovery 的控制器。

  5. Business Controller。這是業務級的控制器,是可以擴展的。比如:Eureka, Consul, Zookeeper, Nacos 這些服務發現的控制器就是業務級別的控制器。

  6. Traffic Gate。這個是網絡協議,如:HTTP,MQTT、TCP 等。

  7. Pipeline。這個是數據處理管線,其中是一組 filter 的編排。

  8. Context。這個是上下文,其中保存本次請求的協議頭和協議數據,供所有的 Filter 處理。

  9. Filters。這個是數據處理的各種過濾器。其以插件的方式存在,可以自由擴展。目前,我們提供有 10 多個非常實用的 Ftiler,也歡迎大家貢獻更多更好的 Filter。

關於這些模塊的細節,大家可以點擊如下的視頻來獲得相關的細節。在這個視頻的最後,我們還討論了一下如何 Debug Go 語言的程序。其中也包括,我們最近發現的一個非常 tricky 的不容易重現的在高併發下才會有的問題(和 Go 官方庫有關),如果感興趣的話可以看一下 issue#407

 Bilibili 視頻

 Youtube 視頻

最後,歡迎大家關注我們的開源項目 Easegress 

https://github.com/megaease/easegress

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/a5-5ymYRUewyy9erNICwIg