目前團隊中先後端聯調是較之我的單獨開發相對耗時的一個環節,主要體如今:html
代碼更新 - 編譯&部署 - 驗證 - 代碼更新
的開發循環,而在beta編譯和部署時間則是這個循環的大頭,包括切換CI頁面的時間、操做push&update的時間、等待build的時間、等待部署的時間,每一步都須要肉眼確認,沒法自動化。雖然人腦上下文切換的時間若是熟練以後也挺快的,可是beta部署不像本地部署能夠應用熱部署技術,beta部署的時間代價沒法縮減。本文的目的是經過將聯調本地化,減小部分枯燥勞動、以及無效的等待時間,提升團隊的開發效率。前端
業務團隊目前開發的API基本是兩種形式:WebAPI和RpcAPI,WebAPI一般是指以超文本傳輸協議(HTTP/HTTPS)爲基礎的API,是現代流行的對外部第三方開發者提供服務的方式。例如Github API,它的編碼風格——特徵狀態轉移(Rest)被你們視爲經典;RpcAPI則是經過各種RPC協議爲基礎的API,各個公司的組件有所不一樣,團隊中用的是Pigeon。web
下文將分爲相應的兩個部分闡述。apache
爲了作到本地聯調,只須要確保前端能訪問到後端Tomcat上的應用便可。以macOS爲例,我收集了相關的資料,有些步驟是實驗證實沒必要要的,有些步驟則是必須的。segmentfault
【不須要】關閉後端系統偏好設置-安全性與隱私-防火牆
【須要】設置防火牆的端口轉發和訪問本機外網IP的權限。具體的設置方法再也不贅述。安全
# 對本地IP的Tomcat默認端口8080訪問重定向到80端口,這樣就能夠直接使用域名訪問了,避免有些應用會禁止非80端口的訪問。 rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080 rdr pass on en0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080 # 相似的,容許外部機器經過外網IP(172.22.54.89)訪問本機,順便把8080端口重定向也設置了 rdr pass on lo0 inet proto tcp from any to 172.22.54.89 port 80 -> 172.22.54.89 port 8080 rdr pass on en0 inet proto tcp from any to 172.22.54.89 port 80 -> 172.22.54.89 port 8080
配置文件位於/etc/hosts
。服務器
【不必定須要】將beta域名的DNS地址重定向到本地網絡
#127.0.0.1 web-application.dev.meituan.com
【不必定須要】雙方機器的IP切換到不一樣路由器下。app
這是由於無線熱點配置了AP隔離的安全特性:掛在同一Wifi AP下的機器禁止經過路由機(實際上是交換機)自己相互訪問。
ID | 機器 | SSID | IP |
---|---|---|---|
1 | mac | mtdp | 172.22.54.89 |
2 | mobile | mtdp_tech | 172.22.38.121 |
3 | mobile | mtdp | 172.22.50.98 |
1號機訪問2號機的traceroute回顯,能夠看到正常訪問。
1號機訪問3號機的traceroute回顯,能夠看到網絡包在網關這一層就被丟棄了。這也就解釋了mac和手機處於mtdp時,Charles抓包失敗的狀況。
配置文件位於%TOMCAT_HOME%/conf/context.xml
。
【不須要】設置以下的IP過濾器,保持默認便可。
<Context privileged="true" antiResourceLocking="false" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="xxx.xxx.xxx.xxx"/> </Context>
【不須要】更改Engine的defaultHost爲外部IP,保持localhost便可。
<Engine name="Catalina" defaultHost="xxx.xxx.xxx.xxx">
【不須要】更改Host的name爲外部IP,保持localhost便可。
<Host name="xxx.xxx.xxx.xxx" appBase="webapps" unpackWARs="true" autoDeploy="true">
【須要】配置相同的泳道。
Pigeon是公司內部的Rpc組件,支持泳道特性,大大簡化了配置過程。配置了泳道,全部的請求也會被隔離起來了,在A泳道里的請求只會發送給A,而不會發送給B。利用該特性,咱們能夠把Rpc上下游的服務都加入到同一個泳道中,使雙方的IP位於服務發現列表的第一位。
上下游雙方編輯本地文件/data/webapps/appenv
,在文件末尾新添加一行swimlane=XXX
,此處的值能夠是任意的,儘可能不要和其餘人配置相同就能夠了。而後雙方各自啓動服務,在test.pigeon.sankuai.com
中或者訪問ServiceIP:4080/services
確認已位於統一泳道。