剛剛結束了拉斯維加斯的2017re:Invent大會,AWS就于12月16日(上周六)帶著其新的發布、新的理念攜手InfoQ來到了西湖畔,布道基于人工智能、大數據、微服務、無服務器的架構實踐與實現,與更多的杭州開發者探秘20+項新服務、功能、硬件背后的架構基石。
回顧2017年,AWS在各技術領域的創新可謂達到了「熱火朝天」的境界。無論是身處于AI時代大潮的普通開發者群體,亦或是受制于架構飛速演進而無力取得突圍的架構師們,都對奮力冒出頭的架構新星們(如微服務、Serverless)如何演進、如何設計等充滿了疑惑。同時伴隨著AI的到來,架構和運維都受到了不同程度的挑戰。帶著對這些問題的解答,AWS解決方案架構師陳琳濤、吳鵬程及杭州登虹科技運維負責人高峰開始了這場布道。
AI:虛幻的泡沫 or 真實的未來 ?(查看并下載講師ppt,提取碼:x6v2)現在這個時代大家都做人工智能,很多用戶稍微把大數據梳理一下,緊接著就說推薦推模型怎么做、圖像識別怎么做。所以在這個過程中,很多人會問有什么方法快速實現智能?增加用戶體驗的更加自動化的方式是什么?
那么,要構建一個智能應用,我們需要做什么事情?首先需在云上做訓練,訓練完之后把相應的數據部署,部署完之后做預測和預測,之后有相應的結果拉回來,這些數據反饋回去做相應的重新計算,重新用參數的調整,形成循序不斷的過程。
眾所周知,數據準備完成后還需做數據分析和數據訓練、參數調優。然后模型的訓練也同時需要評估與優化,這是機器學習的重要過程和階段。
AWS從底層推出計算、存儲在內的基礎服務,上層是托管的人工智能或機器學習的服務,中間層包括了一些框架平臺,整個架構構成了用戶可快速在AWS構建智能服務的基石。
今年, AWS還推出了幾項比較好的語言服務:
一是Amazon Transcribe,全托管和不斷訓練的自動語音識別 (ASR) 服務,可接收音頻并自動生成準確的文字記錄。可讓你把當前的輸出語音實時翻譯成文本記錄下來。比如一個電話過來,可以用Transcribe做成文本,也可以用Amazon Lex分析。Transcribe可以把語言記錄下來,而LEX,比如你有一個提示詞之后可以用,這個可以以場景存下來。
二是Amazon Translate,它屬于全托管翻譯服務,使用深度學習提供高質量、快速且價格合理的語言翻譯服務。三是Amazon Comprehend,它主要是全托管的自然語言處理 (NLP) 服務,使用深度學習智能發掘文本內容。
在今年的re:Invent大會上,AWS還帶來了一系列與人工智能相關的新平臺、工具和服務。其中令人最為振奮的包括Amazon Sagemaker和AWS DeepLens。Sagemaker依然屬于全托管服務,主要方便數據科學家和研發人員在智能應用的生產環境中快速輕松地構建基于機器學習的模型。
DeepLens是適合開發人員的深度學習攝像頭:
完全可編程的視頻攝像頭 設備端優化的深度學習框架 Apache MXNet, Caffe, TensorFlow 教程,樣例代碼,示例,預制模型和Amazon Sagemaker集成陳琳濤總結說,AWS有很多基礎架構,例如MXNet提供了很方便的接入接口,同時對GPU水平擴展有增加。AWS從GPU到現在的P3支持了Volta技術,再往上支持了FPG模式。FPG特定場景下的速度比GPU快了近10倍。另外,AWS也提供很多方便的深度學習框架,這個框架下面支持了Linux等方式。總的來說,AWS是方便、易開發的平臺,可以讓用戶方便地搜集數據、做數據存儲、數據搜集和預先判斷,也包括數據清洗。有了這些干凈數據之后用戶就可以很方便地構建AI應用。
查看陳琳濤演講視頻
如何走向微服務和無服務器架構 ?(查看并下載講師ppt,提取碼:x6v2)架構的關鍵是分而治之的哲學,切分是為了軟件研發、運維方便,軟件的目標是整體交付。之前在其他一些線下沙龍關于架構層的分享中,以如何切分居多、如何集成內容為話題的討論較少。而吳鵬程就以單體、SOA架構的最佳實踐、微服務、無服務器架構部署的最佳實踐等幾個方向揭示計算架構的演進策略。
云上第一件關鍵的事情就是安全。安全之外,很多開發者還希望整個架構可以橫向擴展,因為這樣即可以實現自動擴展。更多的時候我們希望用AWS托管服務,托管服務就是AWS幫助維護架構的擴展性和可靠性。
技術繼續往前發展,越來越多的開發者愿意只關心怎么部署合適的代碼、業務邏輯怎么實現,不用再擔心基礎設施的具體情況,甚至服務發現、后期注冊、擴展性、容量、性能監測等也可以盡可能的省去部署時間,所以在這個過程中就出現了Serverless。同時,最早的單體架構是把業務邏輯組合,但演變到之后更多的是希望把業務和邏輯拆開從而實現業務的解耦,而這項技術走到極致就是微服務。實際上,微服務本質上可以理解為Serverless的衍生,Serverless本質上是為微服務服務的。
無服務器架構有很多的服務實現,核心包括Lambda和S3,以及SQS和SNS。比如部分大數據的服務在后端已有服務器運行,而當你運行時,GPU、內存多少或者是怎樣的操作環境都不是服務器所要關心的。這,就是無服務器架構的核心理念。
AWS Lambda是事件驅動的函數。在Serverless中,AWS Lambda能以大規模并行方式執行代碼,以響應事件。
觸發Lambda的事件大概有三種類型——一是數據狀態變化,二是請求端點變化,此外還有資源狀態變化。關于Lamdba的注意事項和最佳實踐,首先Lamdba不會交互,也不會自己存任何的數據。這個時候如果需要獲取數據、狀態和信息即需要訪問數據庫或者訪問S3。同時,Lamdba跟Lamdba之間的交互也需要像數據庫或一些目錄去訪問。所以這時Lamdba是無狀態的才可以做橫向擴展。
同時,吳鵬程還介紹了Lambda使用上的注意事項和最佳實踐。首先,在快速啟動上,1、要注意初始化AWS客戶端連接或者數據庫連接的時候的變量scope,盡可能的復用連接;2、利用CloudWatch Events來做預熱;3、ENIs for VPC將會在Code Start時候被加載。此外,Lambda使用的一大利處是可以自定義CloudWatch指標,每一個Post不超過40KB,數據可以自由調整,如果數據量非常大,還可以使用Kinesis來聚合日志。
此外,Lambda還有一個絕配的東西,就是API Gateway。它是一個全托管、可拓展的RESTful API 網關服務。自帶抗DDoS攻擊,包括偽造請求(7層)和SYN攻擊 (3層)。能為所有API調用提供緩存層 (caching layer),并自動使用Swagger模式做API接口管理。
吳鵬程總結說,微服務催生的無服務器架構能夠使開發者只關注代碼和業務,推動快速業務創新和迭代。而AWS利用眾多Serverless的托管服務以及Lambda、API Gateway等實現整體無服務器架構,避免花費大量精力維護系統的安全、可靠、彈性,并能降低成本。
查看吳鵬程演講視頻
云端的智能化運維探索與實踐 (查看并下載講師ppt,提取碼:x6v2)登虹科技在實際應用落地中面臨的第一個需求即Auto Scaling。家用攝像頭的計算工作量會在不同的時間段出現較大的差異,所以在運維人的期望中,是實現無人值守、增量部署、安全更新、減少包袱四點。
做人臉識別圖形和圖象算法需要自己訓練出來模型特征并實現實時更新,另外就是本地的應用服務也有較多更新。但代碼時間跑久以后會導致代碼對環境有較大依賴,很多編碼設置不能一直更新和增量。
所以登虹科技采用的解決方案是Chef-Solo And Knife。Chef-Solo 模式,即 Chef 的 standalone 模式,沒有專門的 Chef-server,Chef-Solo 作為一個后臺服務一樣運行在所管理的服務器上,通過 cookbook 來控制本機的配置管理。高峰解釋說,當拿到基礎操作系統進項,后續所有的操作放在Chef-Solo cookbook里面,再放到S3上,這樣進項起來的時候會自動下載cookbook,把服務相關的拉進來,同時把服務器掛載在ELB后。
同時,高峰團隊還用到了Prometheus來解決微服務發現的問題。平臺打包以后就可以動態遷移到其他平臺上,但在其他平臺上不可能有相應的一套云體系平臺做監控,所以要對自己的服務發現做一些評估,同時要能搜集到相應監控業務數據。
AWS提供了一個功能可以讓用戶自己做服務注冊發現,通過SDK獲得某個模塊相應的Lest和相應數據。Prometheus自身的一部分功能就是調用AWS接口顯示在列表里,這樣cookbook就屬于日志性東西,尤其是在容器使用較多和用高進項較多的場景下。
高峰說,雖然登虹現在大多都是做微服務,但總會有浪涌現象,而浪涌現象又導致連鎖現象。這時候要做第一個事情就是報警匯聚。登虹使用的工具之一是Pagerduty。Pagerduty面臨的第一個問題是對同類報警,第二個是對平臺打包。同時,在使用多個微服務模塊時,很多服務調度會遇到不同問題,包括每個模塊對應權限在AWS遇到的問題也不盡相同。
在完成了包括打包、運維相關長期摸索之后,登虹平臺發展到較為穩定的程度。在擴容跟建設方面,自動化工具被其內部大量推廣使用。發布與部署可實現類似「金絲雀模式」,一小部分服務器被升級到一個新版本或者新配置,隨后保持一定的孵化期。如果沒有任何未預料的問題發生,發布流程就會繼續,其他的軟件服務器也會被逐漸升級到新版本。如果發生了問題,這個單獨修改過的軟件服務器可以很快被還原到已知的正常狀態下。