PaaS 調研:GAE與 AWS(上)


歡迎大家前往騰訊雲社區,獲取更多騰訊海量技術實踐干貨哦~
作者:韓偉 

起因

PaaS作為“雲”的概念,已經流行了很久。從使用的角度上看,似乎就是:寫一個PHP,然后可以直接傳到服務器上,用戶就能通過某個URL訪問你寫的PHP了。——這確實極大的節省了開發和運維的工作量,因為這幾乎完全不用去部署安裝任何服務器端的軟件,甚至數據庫也給你裝好了。但是因為各種各樣的原因,在國內PaaS的使用並不非常廣泛,有可能是因為沒有好的服務提供商(由於偉大牆的原因導致某些服務無法訪問)。另外,作為一個游戲服務器端的開發者,也在試圖從PaaS的概念中,學習如何提高游戲開發、運營效率的方法。所以就有了以下的研究。

本文主要的研究對象是Google出品的App Engine,以及Amazone的AWS兩個產品。實際上微軟、IBM也有類似的PaaS(Azure),由於時間精力原因只是粗粗瀏覽,並未深入。另外國內如阿里雲也有一些近似PaaS的服務,但由於名氣不大,也不在這里描述了。

作為一個PaaS,我們可以注意到,主要會分成幾個層面來看,能比較准確的把握其特性。否則紛繁的技術名詞,各種支持方案,會讓人眼花繚亂。這幾個層面就是:

  • 應用場景:一款PaaS希望解決的重點問題
  • 開發支持:PaaS是一種允許用戶的代碼運行的服務,那么可以運行怎樣的代碼,怎樣方便用戶上傳自己的代碼(或程序),如何管理這些代碼,是一個重要的問題。
  • 運維管理:PaaS最讓人感到方便的,就是幾乎都號稱“無需用戶干預”的自動化運維,不需要用戶自己去部署服務器、配置軟件等等,但這種能力到底是怎樣,也是一個非常重要的部分。
  • 關聯配套:一個在PaaS上運行的程序,是完成不了太多的任務的,起碼需要有一個數據庫之類的存儲軟件。實際上的商業應用中,除了數據庫以外,還可能需要大量其他的配套程序,才能讓你的業務邏輯程序運行完整,比如Memcache,甚至Crontab這樣的程序。由於PaaS號稱“幫你運維”一切,所以很多都直接把這些服務也安裝部署好給你用,你只要用服務商提供的接入參數,直接使用即可。那么服務商提供怎樣的配套服務,有什么能力,是PaaS服務里面一個至關重要的特性,也是各種服務商“爭奇斗艷”的主戰場。

GAE(Google App Engine)

應用場景

Google自己的Web服務,是具備一整套“基礎設施”的,包括Web應用(如PHP)的運行框架、BigTable、GFS等等廣為人知的服務器端軟件。所以Google App Engine的設計目標,就是讓用戶可以很方便的使用這一整套“基礎設施”。從某種意義上來說,為了使用Google的配套服務,可能會比托管運行自己的Web應用程序,更吸引人。Google的基礎設施,一般都是以“分布式”為賣點,提供超大承載量,和高度可用性。如果要自己去重建這一整套體系,對於一般的公司來說都幾乎是不可能的。但實際上真正需要用到這么大的承載量,也很可能不是“一般的公司”。不過慕名而來的使用者,在Google的保證下獲得信心上的安慰,也是一種重要的價值。

開發支持

Google不愧是以技術著稱的公司,其運行容器,支持Python\Java\PHP\Go等等幾乎所有主流的編程語言,及這些編程語言在Web應用程序方面的標准框架,如Servlet for Java。看到這里,不禁嘆息於,游戲領域並沒有什么“應用框架標准”——所以游戲服務器程序的模型真是五花八門無奇不有,這也讓游戲服務的提供變得異常繁復困難。

GAE提供的開發工具,可以幫助開發者很方便的測試和部署代碼到PaaS上。這些開發工具包括一套結合Eclipse的IDE插件,以及一組命令上傳部署工具。用戶可以使用這些工具,好像開發測試本地程序一樣來使用。當然使用之前還是需要配置自己在GAE上的帳號之類的參數。

GAE另外一個很有特色(也許是缺點)的地方,就是開發者只能在“沙箱”里運行自己的程序,因此你不能用到代碼去操作socket、本地文件、線程等等“原生資源”。因為有這樣的約束,所以開發者上傳的APP可以被認為是“無損”的自動部署到不同的硬件、網絡環境上。同時,GAE也提供了大量的配套服務,用來補償沙箱環境帶來的功能缺失。

運維管理

GAE的運維管理從代碼部署開始就是全套的。首先是支持從Maven這類代碼管理庫拉取程序部署,其次是可以部署到Google提供的全球機房,期間提供自動擴容和負載均衡。其中比較值得注意的是,它的運維環境還支持負載灰度和資源配額,也就是可以設置各種參數,來限制緩存空間、實例數、最大線程數、存儲空間、使用帶寬等等。這些配額並不是簡單的基於IaaS的功能繼承而來,而是可以針對應用容器,或者各種配套服務為目標來設置。

GAE另外一個很棒的功能是所謂GoogleAnalytics功能。幾乎所有雲服務商都會帶統計功能,但是Google Anlytics因為是針對GAE這種全托管沙箱服務做統計分析的,所以可以獲得很多具體的服務統計的細節指標,而不僅僅是操作系統層次的CPU、內存、帶寬這種大路貨。我們自己部署任何一個服務,對於特定的服務進程,也會想要詳盡的統計分析數據,用以監控問題,如果是用GAE,這些服務都是Google提供的,當然統計也是它的應盡職責。

作為一個Web App的容器,GAE在運維配置工具上,提供了全套Web界面的操作軟件——Google Cloud Platform Console,可以配置諸如URL、靜態資源、MIME類型、根目錄、SSL等幾乎所有WebServer的配置內容。用了多年的Web Server配置文件終於可以束之高閣了。當然其他的管理服務,也都提供了WEB的配置管理工具。如果你不想手工的去配置這些,也可以使用GAE提供的Restful接口,去用代碼操作這些服務配置,這樣你可以自己寫一個喜歡的管理軟件,或者是寫個自動化的工具去做這類的配置工作。

關聯配套

GAE提供的配套服務,都是那些大名鼎鼎的Google系基礎服務,分為兩大類型,數十種細類:

存儲服務

  • App Engine Datastore:NoSQL對象存儲服務
  • Google Cloud SQL:在GAE上的MySQL,由於是關系數據庫,所以不能自動擴容
  • Google Cloud Storage:以Restful接口使用的分布式文件系統

輔助服務

  • 定時任務:類似crontab這種
  • Memcache:最常見的Web后端緩存服務
  • Blobstore:一種“數據塊”存儲服務
  • Oauth API:身份鑒權認證服務
  • 各種Messaging服務,包括電子郵件、短信、語音等等……
  • 全文搜索服務
  • 圖形處理的API庫
  • 各種常用的服務器端編程庫

從上面來看,最值得關注就是存儲類服務,畢竟Google是處理大數據的互聯網鼻祖。由於一般的商業互聯網服務,都很依賴一個容量大、方便擴容的數據存儲層,所以Google這套東西是非常有價值的。可惜作為游戲領域,數據大倒是大,就是其數據關系一般比較簡單,就是玩家的存檔數據而已,所以游戲開發商如果用這些BigTable、GFS為基礎的服務,從延遲性和成本上看,好像都不是特別有必要。

另外從輔助服務來看,細節到連crontab都提供,更不用說各種服務器開發庫,只有你想不到,沒有他沒准備到的。這對於開發者來說是一個很方便的地方,因為一來不需要到處找各種開源庫,二來也無需費口舌去和同事統一各種開發庫,只需要用GAE的就好了。

PaaS調研:GAE與AWS(下)

本文來源於 韓大微信公眾號

相關閱讀

 
 
此文已由作者授權騰訊雲技術社區發布,轉載請注明文章出處
原文鏈接:https://cloud.tencent.com/community/article/543618
海量技術實踐經驗,盡在騰訊雲社區
海量技術實踐經驗,盡在騰訊雲社區! https://cloud.tencent.com/community


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM