idea 一直在build_让web开发部署提速 8 倍的一款 IDEA 插件,你有在用?
原文:http://suo.im/4on4JE??來源于云棲社區>中間件小哥
作為一個 Java 程序員,我們大多數會在 Intellij IDEA 中基于 SpringBoot 來開發 WEB 應用,所以本文中的測評將會基于以下幾個架構來構建:
開發環境:IDEA
項目組織方式:Maven
開發框架:SpringBoot
在接觸 Cloud Toolkit 之前,用什么方法來部署一個 SpringBoot 應用呢?
作為一個偏正經的測評人員,我不會為了凸顯出 Cloud Toolkit 的強大而去翻出一些上古的部署工具來做對比,而是直接使用 Intellij IDEA 的內置功能與之對比。
第一步:配置服務器信息
在?Tools -> Deployment?中找到 IDEA 對項目部署支持的內置插件,我們可以在其中進行服務器信息的配置,包括服務器地址和權限認證,并且在 Mapping 選項卡中完成本地工程與服務器路徑的映射。
第二步:配置 Maven 打包插件
<build>? <plugins>? ? <plugin>? ? ? <groupId>org.springframework.bootgroupId>? ? ? <artifactId>spring-boot-maven-pluginartifactId>? ? plugin>? plugins>build>
由于是 SpringBoot 應用,配置專用的打包插件后,可以將整個工程打成一個 fatjar,示例工程非常簡單:
@SpringBootApplication@RestController
public?class?Application?{
? ?public?static?void?main(String[] args)?{
? ? ? SpringApplication.run(Application.class, args);
? ?}
? ?@RequestMapping("/hello")
? ?public?String?hello()?{
? ? ?return?"hello world~~~~~~~~~~~~~~~~";
? ? }
}
之后,只要執行 install,即可得到一個可運行的 jar 包:
第三步:部署 jar 包
由于我們在第一步已經配置過項目路徑與服務器路徑的映射,可以選擇直接對 fatjar 右鍵,upload 到遠程服務器上。
第四步:啟動應用
上圖中展示的是 IDEA 中兩個非常棒的內置功能,可以在?Tools -> Start SSH session?中開啟遠程服務器的終端,在 IDEA 下方可以執行遠程指令;
也可以在?Tools -> Deployment ->Browse Remote Host?中展開如圖右側的結構,可視化地瀏覽服務器上的文件列表,檢查應用是否部署成功。
在遠程終端中,找到對應的 fatjar,執行?java -jar spring-demo-1.0-SNAPSHOT.jar?便完成了整個部署流程。
IDEA 內置插件總結
IDEA 內置插件已經提供了相當強大的能力,整個部署過程我們完全沒有離開 IDEA!
避免了頻繁切換窗口,裝各種部署工具,可以說已經很方便了,Cloud Toolkit 必須要比這個部署過程做的更加強大才行,那下面就讓我們來體驗下 Cloud Toolkit 是怎么優化的吧。
Cloud Toolkit 初體驗
其他菜單項暫且拋到一邊,這 5 個核心能力應該就是 Cloud Toolkit 的核心了。
即使作為一個插件小白,應該也能夠望名知意,猜到這幾個菜單對應的功能:
Deploy to Host:部署到任意服務器。
這一個功能決定了 Cloud Toolkit 強大的之處就是可以使得每個開發者受益,它其實并不是和阿里云廠商強綁定的。我會在下文重點測評下這個功能。
Deploy to ECS:這里的 ECS 指的阿里云的 ECS,如果你的服務部署在阿里云 ECS 上,可以選擇使用這個功能,獲得比 Deploy to Host 更加豐富的功能。
在下文我也會簡單測評下這個功能。
Deploy to EDAS & EDAS Serverless:EDAS & EDAS Serverless 是阿里云提供的分布式服務治理服務,可以理解為商業版的 Dubbo,具有強大的服務治理、服務調度能力,Cloud Toolkit 對 EDAS 做了個性化的部署支持,讓使用者無需登錄控制臺,在 IDEA 中即可完成 EDAS 的部署。
Deploy to CS K8S:在云原生時代,很多應用使用容器化的方式進行部署,Cloud Toolkit 這一點做的還是不錯的,已經具備了容器化部署的能力,具有一定的前瞻性。
其實從簡單的功能介紹就可以看出,Cloud Toolkit 相比 IDEA 內置的部署能力的確是高出一大截了,甚至可以說,Deploy to Host 這一能力完全就可以覆蓋 IDEA 插件的所有能力,并且對流程還進行了一些簡化。
下面我重點測評下 Deploy to Host 這一能力,與之前的部署流程進行一個對比。
使用 Cloud Toolkit 把應用部署到任意服務器
上圖展示的 Deploy to Host 功能的配置項,實際上涵蓋了以下幾點:
遠程服務器配置
部署方式:Maven 構建,直接上傳文件(目前還不支持 Gradle 構建,可能在后續的版本會支持)
本地文件與服務器路徑的映射配置
啟動腳本的集成
賬號管理
SSH 登錄賬戶可以在?Preferences -> Alibaba Cloud Toolkit -> SSH Profile?中管理,找不到也沒關系,需要設置的時候一般都會有超鏈接跳轉,這點做得很人性化。
主機管理
服務信息可以在?Tools -> Alibaba Cloud ->Alibaba Cloud View?中展開,如下圖所示:
Deploy to Host
配置完賬號信息和主機信息,接下來只需要右鍵項目選擇?Alibaba Cloud -> Deploy to Host-> Run??,一切就搞定了。這個過程相比之前變得非常簡易:
不需要自己打包,Cloud Toolkit 集成了 Maven 插件。
不需要登錄遠程終端去執行腳本啟動服務,Cloud Toolkit 提供了應用部署生命周期必要的鉤子,只需要設置好啟動腳本即可。
修改完本地代碼,點擊下 Deploy to Host,即可完成改動代碼的部署。
經過如上的測評過程,相信即使沒有使用過 Cloud Toolkit 的用戶,也可以直觀體會到這是一款怎么樣的插件了,并且它的功能是多么的實用。
使用 Cloud Toolkit 把應用部署到 ECS
從產品設計的角度來分析,Cloud Toolkit 提供如此多的部署能力,可以想到是其直接預設了使用人群。
例如一個阿里云的 ECS 用戶,在選擇部署方式時,既可以使用 Deploy to Host 也可以使用 Deploy to ECS;
再者,例如一個 EDAS 用戶,在選擇部署方式時,既可以使用 Deploy to Host、Deploy to ECS,也可以使用 Deploy to EDAS(EDAS 可以理解為一個定制化的 ECS)。
從產品的角度,越定制化的功能,其服務的人群越少,同時功能更強大;
從用戶體驗的角度,其實也透露了云服務的一個特點,云廠商正在為其所提供的云服務創造更好的用戶體驗,借助于此類插件,來降低使用者的開發運維門檻。
可以預見的一件事是,對于非阿里云用戶來說,Deploy to Host 是他們使用 Cloud Toolkit 最大的誘惑了。作為一個測評文章,除了介紹 Deploy to Host 之外,我還選擇了 Deploy to ECS 這一功能來進行測評。為此我購買了一臺阿里云的 ECS 來部署與上文相同的應用。
在阿里云控制臺可以獲取到賬號的 Access Key/Access Key Secret,在 IDEA 中的?Preferences -> Alibaba Cloud Toolkit -> Accounts?中可以設置賬號。
在賬號設置完畢后,Cloud Toolkit 看起來是通過內置的 API 直接關聯到了我的 ECS 實例,在選擇部署時,可以直接根據 region 選擇實例列表中的機器進行部署。
其余的部署流程和 Deploy to Host 相差無幾。也就是說,其實 Deploy to ECS 更多的完成了權限管理和主機管理,ECS 用戶使用這個功能就顯得非常高效了。
Cloud Toolkit 的亮點功能
Cloud Toolkit 除了主打的部署能力,還提供了不少亮點功能,我選擇了其中的 3 個功能來分享:上傳文件、遠程 Terminal、內置應用診斷功能來進行評測。
上傳文件
有些腳本我們希望在本地編輯之后上傳到服務器上,Cloud Toolkit 對每一個主機都提供了一個 Upload 操作,可以將本地的文件上傳到遠程主機上,并且還可以觸發一個 commond,這個功能也是很人性化的,因為上傳腳本后,往往需要運行一次,避免了我們再登錄到遠程主機上執行一次運行操作。
遠程 Terminal
特別是在 Mac 系統中,我一直苦惱的一件事便是如何管理眾多的遠程機器,我偶爾需要去搭建了博客的主機上查看個人博客為什么掛了,偶爾又要去看看我的 VPN 主機排查下為什么無法轉發流量了,在開發測試階段,又要經常去測試主機上執行一些簡單的命令。
所有這一切通過 ssh 工具去完成都不麻煩,但所有的麻煩事集合到一起時往往會讓我變得焦頭爛額,針對這一點,Cloud Toolkit 簡直是一個 Life Saver。
事實上,在前面的測評中我們已經了解到 IDEA 內置了遠程 Terminal 這個功能,Cloud Toolkit 是進一步優化了它的體驗,用戶可以直接在可視化的頁面選擇想要遠程登錄的主機,在對主機加了 Tag 之后,這個過程會更加直觀。
內置應用診斷功能
在測評體驗過程中,意外地發現了 Cloud Toolkit 的一個功能支持,就是前面的截圖有顯示,但我未提到的 Diagnostic (診斷)功能。
Cloud Toolkit 集成了阿里巴巴開源的一款應用診斷框架 --Arthas。
對于本地主機,可以直接通過?Tools -> Alibaba Cloud -> Diagnostic Tools?開啟診斷。
對于遠程主機,可以通過主機管理中的 Diagnostic 選項卡,開啟遠程診斷。
在過去,我們想要進行診斷,必須要手動在服務器上安裝 Arthas,然而Cloud Toolkit 借助 Remote Terminal 和 Arthas 的集成,讓這一切都可以在 IDEA 中完成,似乎是想要貫徹這個原則:徹底杜絕第三方工具,一切都用插件完成。
當你遇到以下類似問題而束手無策時,Arthas?可以幫助你解決:
這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?
遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?
線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
是否有一個全局視角來查看系統的運行狀況?
有什么辦法可以監控到 JVM 的實時運行狀態?
作為一個偏正經的評測,我們試用一下遠程診斷的功能,選取比較直觀的 trace 命令來進行評測。
如上圖所示,我們構造了一個慢請求,其中 invokeServiceA_B() 相對于其他方法十分耗時,我們希望通過 Cloud Toolkit 定位到慢調用的源頭,找出 invokeServiceA_B 這個罪魁禍首。
點擊 IDEA 中對應部署服務器的 Diagnostic 菜單項,就會出現如上圖所示的一個 Arthas 診斷頁面,它會自動關聯到用戶的 Java 進程,用戶只需要選擇相應診斷的進程即可。
在關聯到相應的進程之后,我們執行 trace 指令?trace moe.cnkirito.demo.Application * -j。
這個指令的含義是當?moe.cnkirito.demo.Application?中的任意方法被觸發調用后,會打印出相應的調用棧,并計算耗時,-j?的含義是過濾掉 JDK 內置的類,簡化堆棧。
正如上圖所示,我們定位到是 invokeServiceA 的 invokeServiceA_B 最為耗時。
用戶可以自行監控對應的方法,把 * 替換為想要監控的方式即可。(更多的監控指令可以參考 Arthas 文檔鏈接:https://alibaba.github.io/arthas/)
?--完--
【源碼+視頻】SSM框架開發酒店管理系統,速度保存,手慢無!
【源碼+視頻】SSM框架實現的學生系統源碼分享,速度保存,手慢無!
喜歡文章,點個在看?總結
以上是生活随笔為你收集整理的idea 一直在build_让web开发部署提速 8 倍的一款 IDEA 插件,你有在用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 唱歌能减肥吗
- 下一篇: 吃完饭站多久可以减肥