瀏覽目錄
規劃階段需要熟悉的概念
1.APP(應用名)
應用名就相當於我們開發的一組服務的一個統一名字,在我們項目規劃中比如我們計劃一個名稱爲Mall的應用,裏邊包含了OrderServer和ExpressServer。而且應用名必須是唯一的,通常情況下應用名對應了名字空間,比如PHP的命名空間。
2.Server(服務名)
上邊提到的OrderServer和ExpressServer就是服務所在的進程名。這個可能從概念上可能有點兒不好理解。Server代表的是一個獨立的程序,我們發佈時至少要給綁定一個ip和定義端口。在Server中實現了相關的功能接口。這個就體現了微服務的獨立性。
3.Servant(服務提供者)
Servant是服務提供者。也就是他實現了具體的接口,真正實現我們所需要的業務代碼。那他實現了哪兒給他規定的接口呢?這個我們後續會說到的很重要的文件 *.tars 通常情況下他在PHP中對應一個類名或者在golang中對應一個struct名稱。這個名稱是我們在tars文件中規定的interface名稱。
以上設計的好處就是從3個方面來儘量避免服務的衝突。因爲tars使用名字路由的方式所以不難理解其中爲什麼不能發佈APP.Server.Servant串完全相同的應用。
開發階段必讀
1. 服務端開發
這部分官方文檔寫的比較完整,對於所有服務端的開發套路都是一樣的。
- 確定 APP, Server, Servant 名稱;
- 編寫 tars 文件, 定義服務對外提供的 interface 以及 interface 下面的函數, 主要 interface 必須有一個, interface 下面的函數可以有多個, tars 的文件的語法我們會在下一章節說明;
- 使用 tars2xxx 工具(不同語言的工具不同), 將 tars 文件生成不同的語言的代碼,比如PHP的是tars2php,go語言的有tars2go。這是tars框架附帶的工具拿來直接用就可以。
- 實現 Tars 服務(這個不通語言是不同的),繼承生成的文件中的 Servant 類, 實現 Servant 的 interface,我們在微服務開發中大部分工作在這兒。
- 編譯服務, 發佈在管理平臺上(在管理平臺需要配置 App, Server, Servant Obj 名稱等), 後續會說到
- 當然你的服務也可以本地運行, 可以在平臺上啓動服務後,找到服務配置文件複製到本地, 在本地執行服務即可(注意可能有配置文件, 需要修改端口等信息)
2. 服務本地調試
任何代碼的本地調試都是非常有必要的。一般,像對於go語言和c++的服務本地調試就非常方便。查看服務項目目錄中有沒有conf文件有的話直接
./服務名稱 --config=xxx.conf
#如果沒有可執行權限先 sudo chmod a+x 服務名稱#
其他語言的啓動也大同小異。
對於PHP語言沒有生成微服務項目的腳手架我們得自己來創建項目目錄和文件,有一個入口文件。一般是index.php他的內容頁比較固定,是爲了啓動swoole 中的Server。啓動的命令一般是
php index.php --config=config.conf start
這裏的config參數是配置文件的路徑。在PHP文件中配置文件需要自己創建,文件的內容有以下幾種方式可以找到,當然你可以複製我在本教程中的內容進行修改。
3. 把服務部署到任意節點獲取配置文件進行本地調試
服務的部署我們會在後續說明,先來說下加入部署後如何獲取配置文件:
如果你的tars框架安裝在/usr/local/app中那麼服務可以在目錄
/usr/local/app/tars/tarsnode/data/
中找到。在這個目錄裏能夠看到 應用名.服務名的目錄。進入後可以看到一個conf目錄,在conf目錄中有
應用名.服務名.config.conf
文件下載到本地即可。如果名稱不同一般在conf文件中只有一個文件。
4. 客戶端開發
tars的客戶端開發比較簡單。拿到服務開發者創建的tars文件生成使用tars2xxx就可以生成相應語言的客戶端。注意需要配置是否是客戶端的字段。比如PHP需要修改文件中的withServant爲false
...
'withServant' => false,
...
5. 客戶端調用
既然是微服務那客戶端調用的時候就需要知道服務的ip和端口。之前我們說過tars可以更具服務的名稱進行自動尋址並且可以負載均衡。那麼這兒其實有兩種方式:
第一種方式使用通信器(Communicator)來自動尋址,這樣我們就不用關心具體的ip和port信息。通信器在相應代碼客戶端生成時就包含了我們直接調用就可以了,非常方便;
第二種方式就是指定ip和port,當然你可以指定服務部署的多個節點的ip和port,框架會自動容災切換。
當然兩種方式使用起來都非常方便,使用第二種方式如果你的服務節點非常多你可能需要在客戶端調用方維護一個路由表,稍微麻煩。但是從實踐來看覺得直接指定ip和port的方式調用上稍微要快一點,應該是少了通信器尋址的過程。