通过google app engine 在google cloud 部署支持quic的Java web 应用(多种方式)
quic最先是由google提出并完善的,18年google cloud支持了quic協議,我嘗試在google上部署一套自己的應用,并使其支持quic協議
google的文檔還是非常完善的,只是類似的文檔有點多反而不好選擇了。在部署過程中遇到不少問題,都會在博客里記錄下來,最后會把自己成功部署的操作分享出來
google app engine
在以提供物理資源為目的的 IaaS ( Infrastructure as a Service )領域里, Amazon EC2是當之無愧的領先者。而在以提供平臺為目標的 PaaS( Platform as a Service)領域里, Google App Engine 的美譽度是非常高的。
Google App Engine(GAE) 是 Google 的平臺即服務(PaaS)產品,允許開發人員和企業使用 Google 的高級基礎架構構建和運行應用程序,并自動根據應用所承受的負載來對應用進行擴展,免去用戶對應用和服務器等的維護工作。
Google App Engine: Java版應用服務器和Python版基本一致,也是基于標準的Java Web容器,而且選用了輕量級的Jetty技術,并跑在Java 6上。
簡單來說, Amazon EC2只是提供了最基礎的虛擬機器,需要什么我們都要自己在上面安裝部署。
而Google App Engine 提供的是平臺服務,它幫我們封裝了很多操作命令以便開發者快速進行部署,比方說實例的維護和擴容,自動將web應用部署在web服務器里等 。
部署spring-boot應用到google cloud (app engine)
一開始按照google的文檔嘗試了多次,但是最后都沒有部署成功,有的部署成功了但是無法正常訪問,最后按照文檔提供的官方示例成功部署了
代碼示例
java-docs-samples/appengine-java8/springboot-helloworld
1. 下載Google Cloud SDK
https://cloud.google.com/sdk/docs/install
安裝成功后雙擊Google Cloud Shell啟動,按照上面的提示操作
- gcloud init: 初始化cloud sdk
- 初始化后會咨詢你是否需要選擇部署區域,根據自己的需要選擇即可
2.在當前的google cloud項目里創建一個app engine 應用
gcloud app create3.創建自己的app engine 項目
項目的創建方式和普通的spring-boot項目一樣(我部署的是war包),創建完成后需要修改如下配置:
1) 在pom.xml添加 App Engine Maven插件
<plugin><groupId>com.google.cloud.tools</groupId><artifactId>appengine-maven-plugin</artifactId><version>2.2.0</version><configuration><!--你在google cloud創建的項目id--><projectId>myProjectId</projectId><!--GCLOUD_CONFIG表示自增長的App Engine版本,也可以用具體的版本號來代替--><version>GCLOUD_CONFIG</version></configuration> </plugin>2) 添加app engine配置文件
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"><threadsafe>true</threadsafe><runtime>java8</runtime> </appengine-web-app>本地運行: mvn package appengine:run
部署到google cloud: mvn package appengine:deploy
部署成功后可以看到如下日志信息:
app engine其他部署方式
除了前面成功的部署,我還嘗試過使用其他辦法部署,有的一開始沒有成功,不過多次嘗試后最終也都成功了,記錄一下, 在部署期間還是有一些小問題,如果有人能幫忙解答下就更好了
通過Google Cloud SDK 部署
參照的文檔如下:
使用入門:設置開發環境
否則會報如下錯誤:
通過IDEA Cloud Code插件部署(標準環境)
參考文檔:創建適用于 App Engine 標準環境的應用
3.點擊項目右鍵 添加框架支持(Add Framework Support) 這里我已經在創建項目的時候使用了Google App Engine Standard,所以就不需要再添加了,我只是添加了一個maven的框架支持
項目的pom.xml如下 ,就是正常maven項目的配置:
<properties><spring.boot.version>1.4.3.RELEASE</spring.boot.version><jdk.version>1.8</jdk.version></properties><packaging>war</packaging><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>19.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><encoding>${file.encoding}</encoding><source>${jdk.version}</source><target>${jdk.version}</target><showWarnings>true</showWarnings></configuration></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins><finalName>quic</finalName></build>于是我修改了項目生成時的appengine-web.xml的文件位置,改為src\main\webapp\WEB-INF\appengine-web.xml 目錄下,再次運行就可以成功部署了
怎么使應用支持quic協議
部署完應用之后,可以在App Engine的管理頁面里看到對應的版本和實例信息
接下來就需要部署對應的外部Https負載均衡器,配置頁面
https://console.cloud.google.com/net-services/loadbalancing/
配置對應的后端: 類型選擇 無服務器網絡端點組,協議選擇HTTPS (這里配置的就是我之前部署的springboot項目)
配置前端: 開啟quic, 協議選擇https, 添加證書,這里的ip是自動生成的
證書的申請在另一篇博客里都有說明:不花一分錢申請免費域名和ssl證書
配置完成后就可以通過域名進行訪問了
除了通過app engine部署應用(app engine會幫助我們自動擴縮容,所以就不需要搭建應用集群了),還可以使用原始的實例來部署,感興趣的可以參考以下文章: 如何在Google Cloud上創建負載均衡器?
部署一個實例組,然后創建指向該實例組的負載均衡器。
最后的問題
部署成功后,訪問域名發現目前google cloud只能支持h3-Q050等協議,不能支持h3-29
部署踩坑
在使用Idea的Cloud Code插件部署項目時,一開始安裝插件后其新建Google App Engine項目的頁面和文檔的不太一樣,創建后的項目部署起來也總是有問題
使用Flexible 柔性環境部署后會訪問項目會出現如下提示:
500 Server Error\br Error: Server Error The server encountered an error and could not complete your request. If the problem persists, please report your problem and mention this error message and the query that caused it.在google cloud的控制臺觀察其實例也發現其及其不穩定,經常處理健康檢查失敗的狀態
后面就嘗試使用了標準環境來部署,部署后的實例狀態看上去到是正常,但是在通過google 部署后提供的域名訪問應用的時候一直提示404
最后我是通過卸載插件并重新安裝插件重啟IDEA 解決了這個問題
參考資料:
外部 HTTP(S) 負載平衡概覽
總結
以上是生活随笔為你收集整理的通过google app engine 在google cloud 部署支持quic的Java web 应用(多种方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea打断点启动项目后debug红点内
- 下一篇: java美元兑换,(Java实现) 美元