顯示具有 Azure、Web Apps、App Service for Web 標籤的文章。 顯示所有文章
顯示具有 Azure、Web Apps、App Service for Web 標籤的文章。 顯示所有文章

2017年2月25日 星期六

建置Azure App Service for Web的建議實務 - 進階篇

上一篇我們已介紹完基礎建置的部份,接下來我們來介紹進階管理與應用的部份,功能的部份我也逐一介紹,如有不清楚或較深入整合的應用,我會考慮再加開文章進一步的介紹,也歡迎大家討論。

相關介紹:
建置Azure App Service for Web的建議實務 - 基礎篇
http://caryhsu.blogspot.tw/2017/02/azure-app-service-for-web.html

1、部署位置(Deployment Slot)

一般我們在開發上如果要進行部署時,通常建議先將程式放置在測試機上進行確認,以後我們都需要找二台相同的機器進行正式機與測試機的運作,在App Service for Web上,你可以透過部署位置(Deployment Slot)來完成。

Standard TierPremium Tier等級上可以透過建立部署位置(Deployment Slot)來完成測試的動作,在建立後,你可以將程式先部署至此,然後再進行測試,到時候再透過切換的方式,即可達到快速的換版動作,一來可以先行測試程式,二來也可以減少前端離線的影響,最重要的是此功能在Standard TierPremium Tier等級上是免費的,所以強烈推薦進行使用。

從網站 -> 部署位置中即可看到目前已建立的項目,如下圖我們已先建立好一個部署位置。

從Visual Studio上來看,你也可以看到部署時我們可以選擇將專案部署到特定的位置上。

在應用程式設定的部份,也可以進行位置區分,當進行切換時,也可以保留特定部署位置上的設定值。


2、快取(Cache)

在快取的部份,除了在網站的部份啟用Local Cache外,在App Service for Web中大家常用的有Redis CacheCDN,二個是不同層級的應用,Redis Cache屬於應用程式中的資料快取,在某些資料上沒有即時性的需求時,即可考慮透過此服務來加快讀取,藉以提升速度。

另外由於我們的Web Apps部署時會選定一個資料中心(Data Center)進行存放,但是當使用者的區域與資料中心(Data Center)的位置不同時,可能會造成使用者在讀取上因為網路的傳遞過遠而造成頁面回應過慢的情況,此時你就可以考慮啟用CDN,藉以減少因地理環境不同而造成的讀取回應上過慢的問題。

快取等級:
Local Cache -> 網站內容快取
Redis Cache -> 網站內容中特定資料的快取
CDN -> 網站內容快取,並提供給其他地理位置的使用者進行讀取

3、Application Insights 

在網站架設後,我們要隨時觀察網站的使用量與健康程度,以往我們可以要透過IIS Log進行或是加入Google Analytics等進行網站的分析,其實可以不用這樣麻煩,你可以直接透過Application Insights進行即可,啟用後即可快速的透過此服務進行網站的監控。

3-1 預設上網站並沒有特別啟用Application Insights,請先進行建立。

建立時由於存放Application Insights的Data Center並沒有太多的選擇,所以可以先指定一個先行存放,基本上不會有太大的影響。

3-2 在程式中也需要同時啟用Application Insights,在Visual Studio非常簡單,只需啟用此服務並設定後即可。

3-3 啟用後即可透過即時計量資料流看到即時的資料。


3-4 Dashboard即可顯示監控的資訊,在監控的項目上也非常的多,可以將一些常見的都加入進行觀察。

3-4 在啟用Application Insights後,可以設定警示功能當監控的數值超過一定的數量主動透過E-Mail進行提示。

4、自動調整(Auto-Scaling)

在基礎篇有特別的提過,基本上網站可以應該忙碌的情況進行調整站台的執行個體,在預設的情況下是透過手動的方式進行,但在Standard Tier(含)以上的架構,可以透過CPU百分比排程及效能規則的方式進行自動調整的動作,此部份強烈建議你在啟用Application Insights後對網站的使用率有深入的了解後,即可進行彈性的調整,假設今天你知道晚上有有促銷的活動時,你就可以透過自動調整的規則進行,藉以穩定網頁的回應與整體速度。


5、Traffic Manager

在雲端上的服務基本上在一定的等級上都有服務層級協議(SLA),如App Service的部份只要是Basic Tier(含)以上的等級,就有保證每月最多只會有21分鐘左右的斷線(SLA 99,95),所以基本上也不會是100%保持服務,所以Traffic Manager會是你一個很好的選擇。

下圖是從官網截取而來的圖,從此圖上來看,概念類似負載平衡器,將使用者依據Traffic Manager的設定,如效能、優先權、權重等方式,一般來說常見的就是效能模式,效能模式上可以將使用者導向 "網路延遲" 最少的Data Center,問題當其中的一個Data Center發生問題無法提供服務時,Traffic Manager也可以將使用者導向其他的Data Center。

一般來說使用者最常考量的就是要同時租用多個Data Center,只為了那每個月的可能21分鐘斷線,但換個方向想每次的斷線可能造成當下的交易損失與多一個Data Center的成本相比,我想對大部份的企業來說決對是值得的,而且另一個節點還是有同時提供服務,並不是一般Cluster上的Standby模式,所以相信此服務絕對值得投資。

Traffic Manager架構圖

高效能模式
其實建立的方式也很簡單只要在Azure Portal上選擇Azure Traffic Manager Profile並選擇作業模式,此處的名稱即是後續連線時主要的DNS名再,而且後續無法變更,所以再請注意名稱的定義。


建立完成Traffic Manager Profile之後,再將Web Apps加入。

最後即可透過Traffic Manager對外的DNS名稱連線到Web Apps中。



參考連結:
App Service plans
https://azure.microsoft.com/en-us/pricing/details/app-service/plans/
Set up staging environments in Azure App Service
https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-staged-publishing
Redis 快取
https://azure.microsoft.com/zh-tw/services/cache/
開始使用 Azure CDN
https://docs.microsoft.com/zh-tw/azure/cdn/cdn-create-new-endpoint
設定 ASP.NET 的 Application Insights
https://docs.microsoft.com/zh-tw/azure/application-insights/app-insights-asp-net
Scaling apps in an App Service Environment
https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-scale-a-web-app-in-an-app-service-environment
Manage an Azure Traffic Manager profile
https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-manage-profiles



關鍵字:App Service for WebAuto ScalingBest Practices、Cahce

2017年2月21日 星期二

建置Azure App Service for Web的建議實務 - 基礎篇

網站架設的部份,以往都是透過代管的方式或是自申請固定IP自行架設,在雲端的推出後,許多人紛紛打量雲端架構的合適性,在雲端上常見的方式就是透過IaaS的方式,在Azure Portal上啟用一個VM,然後再進行服務的提供,但其實這的情況下,你仍需處理如HA、Load Balance、Backup與OS等層面的問題,除非是真的有其考量性,其實現在有一個方案可以考慮,透過Azure App Service for Web,即可完成快速的完成網站的部署與架設。

關於Azure App Service for Web我們就先逐步來說明建立上的程式,相信在官網上也有相常的資料可以參考,所以文章上我將著重在建立上一些常見的細節,如果有任何問題,也歡迎大家提出。

1、評估初使架構大小
一開始最常遇到的就是該如何設定初使的大小,由於在雲端上屬於使用多少就付多少錢,在你的網站上,一開始我們要先評估一個合適的大小,雖然都有強調會自動延展,但前提是你要使用Standard Tier才可以設定規則自動進行,要不然的話,基本上都是手動進行調整,所以我們就介紹幾個常見且大略的評估方式進行。

1-1 在地端的機器設備為何,經效能監視器進行監控後大約使用到的比例為多少,再換算為何適的大小。
1-2 另外也可以先選擇Basic的類型,然後再透過Application Insight持續進行監控並確認目前的網站回應速度為何。

參考價格(實際的價格請參考官網連結的資訊為主)
Type Instance Cores Ram Storage Prices
Free and Shared F1 Share
(60 CPU min/day)
1GB 1GB NT$0 
D1 Share
(240 CPU min/day)
0.5GB 1GB  ~NT$0.403 per site per hour (~NT$300.10/mo)
Basic Service Plan B1 1 1.75GB 10GB NT$2.3271/hr
(~NT$1,731/mo)
B2 2 3.50GB 10GB NT$4.6541/hr
(~NT$3,463/mo)
B3 4 7GB 10GB NT$9.3083/hr
(~NT$6,925/mo)
Standard Service Plan S1 1 1.75GB 50GB NT$3.1028/hr
(~NT$2,308/mo)
S2 2 3.50GB 50GB NT$6.2055/hr
(~NT$4,617/mo)
S3 4 7GB 50GB NT$12.41/hr
(~NT$9,234/mo)
Premium Service Plan P1 1 1.75GB 250GB NT$9.3083/hr
(~NT$6,925/mo)
P2 2 3.50GB 250GB NT$18.62/hr
(~NT$13,851/mo)
P3 4 7GB 250GB NT$37.23/hr
(~NT$27,701/mo)
P4 8 14GB 250GB NT$74.47/hr
(~NT$55,403/mo)

2、資料中心選擇

基本上我們通常都是建議選擇放置在主要的客戶群在那,就將Data Center放在最接近的地方,基本上我們通常建議放在日本的Data Center(個人建議),另外你也可以透過下列的連結測試那一個Data Center離你最近。


Microsoft Azure Speed Test
http://azurespeedtest.azurewebsites.net/

3、部署方式

在部署的方式上有多種方式可以選擇,如TFS、Git、FTP、Visual Studio等方式進行,但一般來說我們較簡單的方式就是透過Visual Studio來進行部署,但強烈建議在第一次開發完成後,請先至Azure Portal先將你的網站進行建立後,再透過Visual Studio進行部署,會是一個比較好的方式。

另外我們也可以透過FTP手動的進行網站的部署動作,相關FTP的資訊,可以透過站台上的概觀資訊查到,如下圖顯示。


4、基本參數建議設定

在基本參數設定上這是個人的經驗建議,在啟用上請特別注意我講到的部份,真的有合適才建議進行啟用的動作,不一定適合每一個站台。

4-1 一律開啟(Always On)

此設定為當網站閒置時,系統會將資源嘗試釋放(回收),藉以降低使用率,但當有使用者再發出請求時,會因為進行初使化的動作,而造成頁面回應過慢,所以建議如果系統為持續有使用者進行訪問的話,請將此設定設定為 "開啟",藉以避免因系統初使化造成頁面回應過慢的問題,此值預設為 "關閉"。

4-2 Local Cache

實際就是將你的網站中的/site與/siteextensions的目錄進行快取設定,這樣將有助於你的網站在啟動與快取上,如果你的網站的總大小小於2GB的情況下,建議可以考慮啟用此選項。

WEBSITE_LOCAL_CACHE_OPTION = Always

設定方式:
站台 -> 設定 -> 應用程式設定


PS:更改應該程式設定時,會造成網站的重新載入,所以再請注意。

4-3 偵錯 - 遠端偵錯

遠端偵錯可以有效的幫助開發者透過遠端連線的方式與開發工具(Visual Studio)進行直接除錯的動作,但此選項建議非必要千萬不要在正式環境中啟用,因為可能造成網站被鎖定等待遠端開發工具進行逐步除錯,所以請千萬要注意。

請關閉此選項

4-4 ARR 同質性(ARRAffinity)

此值預設的情況下是開啟的,主要是識別每一個連線的使用者,並且將其導向相同的主機上,但如果你有啟用多個Instance時,有可能會發現許多的使用者都在同一個Instance上,
啟用這個值之後,可以有效的將使用者的訪問平均的分佈在多個Instance上,但要特別注意由於導向不同台,所以可能會有Session Loss的問題,這個問題在啟用前建議先行處理。


4-5 平台(Platform)

平台的部份可以設定成32位元或64位元,基本上在一般Visual Studio上編譯都會以AnyCPU的方式進行,也就是可以在不同的平台(x86、x64、ARM)上執行,但基本上二者間有一些不同的差異,個人看法上,簡單的來說,你可以看你目前網站是否有使用超過4GB的記憶體,要不然的話,其實你可以考慮使用x86即可,而且在同一個網站透過x86與x64的平台進行執行時,載入使用的記憶體也會稍為大一點,所以不一定要選擇x64的架構進行執行,看實際上的需求而定。


此篇我們就先介紹到此,下一篇我們會再介紹一些進階的功能設定,也希望可以有效的幫到大家快速的了解此服務。

相關介紹:
建置Azure App Service for Web的建議實務 - 進階篇
http://caryhsu.blogspot.tw/2017/02/azure-app-service-for-web_25.html


參考連結:
App Service plans
https://azure.microsoft.com/en-us/pricing/details/app-service/plans//
Monitor Azure web app performance
https://docs.microsoft.com/en-us/azure/application-insights/app-insights-azure-web-apps
Microsoft Azure Speed Test
http://azurespeedtest.azurewebsites.net/
Azure App Service Local Cache overview
https://docs.microsoft.com/en-us/azure/app-service/app-service-local-cache
Disabling ARR’s Instance Affinity in Windows Azure Web Sites
https://azure.microsoft.com/zh-tw/blog/disabling-arrs-instance-affinity-in-windows-azure-web-sites/
Configure web apps in Azure App Service
https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-configure
Does your Web App really need 64-bits?
https://blog.cdemi.io/does-your-web-app-really-need-64-bits/

關鍵字:App Service for WebWeb AppsLocal CacheARRAffinityBest Practices