Microsoft Azure Web App 自動調整規模[Auto Scaling]

暨上一篇完成Web App的基本架設後,緊接著要考慮的就是,架設網站通常都需要面臨的問題,就是如果流量超過網站負荷,有沒有好的解決方式?大家應該還記得 Azure VM 可以透過可用性群組的設定來實現負載平衡,想當然爾Web App也有類似的機制去達成這個目的!接下來就與大家分享Auto Scaling的一些簡單設定~~~

step 1  在建立WebApp 選擇方案時記得有選擇有支援自動調整規模的方案

scaling

step 2 在應用程式左邊選單找到相應放大(Scale out)並點選進入,一開始Web App 的AutoScale是Disabled的,所以我們先把AutoScale打開

scaling-1

step 3  點選Add a rule新增一個自動調整的規,然後依照自己的需求選擇計量方式及其增加的規則

scaling-2

需要注意的一點:當我們設定了一個增加規模的規則,相對應的也應該要有一個減少規模的規則,因為一旦增加了規模後,系統並不會自動減少規模,所以我們應該要設定一個減少規模的規則,如此當網站壓力變小後才會把資源釋放出來

scaling-3

除了Default的Auto created scale condition之外我們還可以新增Auto Scale的排程,我們可以點選下方的[ Add a scale condition],設定要執行Auto Scale的時間區段

scaling-5

最後我們可以從上方的[執行歷程記錄]觀察到scale的增加或減少

scaling-6
Auto Scale 讓我們可以簡單的透過網頁上的設定,達到分流的效果,因此也不需要因為分流而需要管理多台伺服器,所以我們在架設伺服器及管理上也有了更多的彈性及選擇~~

Microsoft Azure 建立 Web App Service 分享~~~

針對雲端的學習與研究也好一陣子了,自從上次使用雲端虛擬器建立了一個Web Service ,最近就在想透過 Azure VM 還是需要自己去管理VM 的設定 ,備份,負載平衡等……是不是有更快的方式可以讓我們在Azure上面架設一個網站,答案是有的!其實Microsoft Azure還提供另一個服務[Azure App Service for Web],因此也動手玩了一下這個功能,順便也記錄下來與大家分享~

step 1 首先我們一樣先找到Web App Service這個服務

webApp

step 2 點選Web App,輸入名稱及資源群組後,App Service 的方案系統會自動幫我們帶出預設的(S1),當然如果我們有不一樣的需求也可以選擇新建一個自己的方案,確定好方案後建可以點選建立Web App Service

webApp1

step 3  到這裡我們就可以在儀表板上面看到剛剛建立的Web App Service,接著我們就準備把程式部屬到App Service上面,在這邊有很多種部屬的方式(Visual Studio,Github,DropBox…..),我們先用FTP來上傳程式(可以下載FileZilla),所以我們先下載發行設定檔來取得FTP的帳號密碼

webApp-2

step 4 打開發行設定檔就可以看到FTP的連線相關資訊

  • publishUrl : 主機名稱
  • userName : 帳號
  • userPWD : 密碼

webApp-3

我們把相關資訊輸入至FileZilla並建立連線,然後把程式上傳到wwwroot下面

step 5  程式上傳完成後,我們到應用程式設定 >> 虛擬應用程式和目錄(這裡是設定我們應用程式與網址對應的路徑)

  • 虛擬目錄 : url 路徑
  • 網站根目錄的相對實體路徑 : 應用程式對應url的絕對路徑

webApp-4

設定好之後記得要儲存喔~~~

step 6 接著我們就可以把App Service 的 Url + (剛剛設定的虛擬目錄),貼到瀏覽器上就可以連上我們的應用程式了

webApp-6

webApp-5

到這裡我們Web App Service 大致上已經完成了

 

使用 Azure Web App Service 來部屬應用程式與Azure VM 相較之下,確實方便快速許多,如果沒有比較特殊的需求,使用 Azure Web App Service 其實已經很足夠了,但是如果必須對Server有比較進階的一些設定或是需要安裝其他的Framework來驅動應用程式的話,Azure VM 還是比較好的選擇

[Microsoft Azure VM] Web App 如何達成 負載平衡(Load Balance)

自從用Microsoft Azure VM建立完Web App之後緊接著就面臨了另一個問題,就是當使用者多到Server負擔的上限時,如何去做到分流達成負載平衡(LoadBalance),查了一下資料發現,微軟於201603時有更新了虛擬機器的負載平衡功能,也讓負載平衡更容易上手,以下就是簡單的建立負載平衡器的步驟供大家參考~

step 1  在建立負載平衡器之前,我們必需先建立[可用性設定組(Availability set)],可用性設定組可以將多台VM組成一個群組,負載平衡器則會在這多部虛擬機器之間分配流量

  • 容錯域(Fault Domain) 在可用性集中,容錯域的數量就代表這個可用性集會把虛擬機器分佈在幾個不同的機櫃之中,主要就是避免虛擬機器建立在相同的機櫃中,增加了因為硬體故障就同時發生問題的風險。
  • 更新域(Update Domain) 更新域讓你可以將虛擬機器分成不同的群組,每次新增虛擬機器進可用性集時就會放在另一個更新域。當 Azure 機房在進行系統升級或預定維護作業時,會一次處理一個群組,對使用者而言就是一次只會重啟同一群內的虛擬機器,但順序是不固定的。

azure_lb_0919

step 2 接著我們就可以開始建立Vm ,記得將剛剛建立的Availability set加入新建的Vm中(*Vm建立完成後就不能修改Availability set了喔~)

azure_lb_0919-1

接下來我們可以到儀表板點選剛剛建立的Availability set確認是否有加入剛才建立的VMazure_lb_0919-2

step 3 接著就可以開始建立我們的負載平衡器了(Load Balancer)

  • 這邊我們先選擇public Ip(*待會要透過負載平衡器連入Web的IP)

azure_lb_0919-3

step 4  建立好負載平衡器後,我們到負載平衡器的設定點選[後端集區(backend pools)] 將剛剛建好的Availability set加入,之後我們會透過負載平衡器的公用IP去連結backend pools裡面的VM

azure_lb_0919-4

azure_lb_0919-5

step 5 接著我們點選[探查(Health probes)] ,Health probes主要目的是要用來檢查Vm的健康狀態(伺服器是否正常運作中),因為是Web網站,所以就先選擇通訊協定Http

  • path : 探查的路徑( “/” 表示IIS的根目錄 ,也可在後面加上應用程式的路徑 )
  • Interval : 負載平衡器會定期探查端點,此為檢查時間的區隔

azure_lb_0919-6

step 6 最後一個步驟,我們須要建立[負載平衡規則(Load balancing rules)]

  • Session Persistence : 選擇[Client IP] 會根據用戶端的 IP 位址固定在同一台虛擬機器(有利於Session的運作,但可能會降低負載平衡的彈性),選擇[Client IP and protocol]則會加上通訊協定來做判斷

    azure_lb_0919-8

到這個步驟基本上我們已經完成了[負載平衡器]的設定

step 7 最後一個步驟,我們就要來驗證,[負載平衡器]的效果,在這裡提供一個簡單的方法,我們可以遠端至VM,將兩台VM的 iisstart.htm 修改為不一樣的內容(*方便區分連到哪一台)azure_lb_0919-10

接著我們先啟動其中一台VM,開啟瀏覽器貼上 http://[負載平衡器] IP 位置,重瀏覽器上可以發現我們連到的是appxWeb01這台VM

azure_lb_0919-9

接著我們啟動令另一台VM,再將第一台VM關閉,一樣在瀏覽器貼上 http://[負載平衡器] IP 位置,我們會發現[負載平衡器]就導向另一台健康的VM,這樣也表示我們已經成功設定好[負載平衡器]了

azure_lb_0919-11

以上就是簡單的建立負載平衡器的步驟供大家參考~更詳細的內容可以去參考官方的文件喔~

參考資料 https://www.azure-vm.recipes/  ,  https://docs.microsoft.com/zh-tw/azure

 

Microsoft Azure VM 建立 Windows Web App 分享~~~

    最近因為工作的關係,需要再Azure上建立一個Web App 因此我需要一個Web Server VM 和Sql Server  Vm,所以就開始上網查了一些關資料,經過努力終於建立好一個Web  App,以下就是建立Azure Vm的簡單分享~

    開始前我們需要先有一個帳號登入Azure (https://portal.azure.com) 第一次使用可以有一個月的試用期,並且會贈送6000點的點數,大家可以善用這些點數去熟悉Azure的一些功能 ,登入後就可以開始建立第一個Azure VM了

ps.申請帳號時需輸入信用卡資訊~~這是必填的~所以就勇敢的給他填下去吧~~

setp 1     建立Web App VM

1.點選[新增]在右邊的視窗直選擇[Windows Server 2016 Datacenter]

azure-1

2.填入*的必填欄位後點選[確定]前往下一個步驟

  • User name and Password :就是之後遠端登入VM時的帳號密碼
  • Resource group:如果沒有群組就新建一個
  • 位置 :VM建立的位置,通常選擇離自己近的區域

azure-2

3.  選擇符合自己需求的 VM 機器(~如果將來有需要用到Load balancer需要選有這一 個選項的VM)

azure-3

4.  此步驟基本上可以直接按[確定]前往下一步,需要注意的如果有需要用到Load balancer需建立一個Availability set( 要達成負載平衡的vm群組設定 ),如果不需要就可以直接前往下一步

azure-4

5.按下[購買]就會開始建立VM ,建立好之後就可以在儀表板看到剛剛建立的VM

azure-5

6.點選建立好的VM進入VM的詳細資訊頁面,複製Public Ip address使用遠端桌面就可以進入剛剛建好的VM

azure-6

7. VM基本上已經裝好Internet Inforemation Service 所以瀏覽器入 http://localhost 看到以下畫面代表Web Service已經基本的部屬成功,剩下的就是把應用程式加入就可以了

azure-7

8. 接下來測試一下是否可以從外部去連結到VM,因此我們回到自己的本機開啟瀏灠器輸入http://[Vm ip] 正常的話應該要出現跟上圖一樣的畫面,如果是出現以下畫面,大部分的原因是被VM的防火牆擋住了

azure-8

9.為了要可以從外部連接到VM Web Service我們需要加入Http的[輸入規則]讓防火牆 可以順利通過,所以我們回到Azure VM 的設定畫面點選該VM下的 Networking加入Http 使用的 80 port ,加入後我們restart  VM 再次輸入 http://[Vm ip]  就可以正常顯示IIS的起始畫面了

azure-9

10.如果您的應用程式需要用到 Asp.Net Framework 的話,需要自己在VM上手動安裝喔 ~可以從Service Management  去安裝需要的角色~~

azure-10

step 2   建立Web SQL VM

1.點選[新增]在右邊的視窗直選擇[Windows Server 2016 Datacenter]

azure-11

2.其他的步驟跟建立Web Vm 大同小異,選擇這個方案的原因是VM建起來後就會先幫我們安裝好SQL Server了

3.VM 建立好之後一樣要記得在Azure 該VM的設定頁面中加入MSSQL預設的1433port如此一來才可以從外部連結到

azure-12

4.當我們VM建好後除了可以遠端進去管理DataBase外,也可以經由SQL的角色從本機的 SQL Server Management Studio 遠端連接管理DataBase

           以上就是很基本的Azure Web VM and Sql VM 的基本安裝方式,Azure 上還有許多其他很實用的功能,例如load balancer ,Web app(不需建立VM) ,Sql DataBase(不需建立VM) 等,有時間的時候再將有使用過的其他功能Post上來與大家分享~~

這是不是太棒了 ~ 胖達 (Panda)!!!
3B5766BC-0023-465A-ACA5-47631A62A2C7

更多功能的介紹與使用可以參考https://docs.microsoft.com/zh-tw/azure/index官方文件有很詳細的說明喔~~~

Spring 註解 之 @Autowired

Spring 中的核心思為Ioc 與 DI 而DI 則是去實現 Ioc 的一個方式,而@Autowired就是Spring  2.5 後提供的一種方式,它可以對class成員變量、方法及構造函數進行標註,完成自動裝配的工作

一  .  @Autowired可使用的地方

1.class 的 setter 方法上面

2.class 的 建構函式上

3.成員變量上

二.  @Autowired的實作範例

首先我們先建立一個 Family.java 及 People.java

接著在Spring 的 xml 中加入 People<bean>配置People的value

接著我們在 Family.java 加上@Autowired

如此一來輸出的結果就會是我們在 xml 中配置 People >> name 的值 (  James )

我們只要將想賦予的值定義於xml中,透過@Autowired即可以直接將直注入,而不

須透過程式碼呼叫setter的方法

三. 當被配置的 bean 數量不為1 時,出現BeanCreationException,以下為解決方式

1.當被配置的 bean 數量不為0 時

我們將xml 中的 Family 註解掉,在執行程式時就會出現BeanCreationException

所以我們可以在@Autowired加上 (required=false),意思就是說在注入時Family不是找不到匹配Bean時也不出Exception

2.當被配置的 bean 數量大於1時,在執行程式時也會出現BeanCreationException

我們在xml 中再加入一個Family的bean,在執行程式時也會出現BeanCreationException

我們配置了兩個Family類型的bean,所以當我們對Family類型注入時,spring無法判斷要用哪一個,我們需要透過@Qualifier指定我們要注入的bean名稱,就可以解決此問題,而@Qualifier亦只能配合@Autowired使用

 

 

如何啟動Jboss

因為工作的關係需要使用到JBoss來啟動網站,過程中也遇到了需多困難

所以就把過程整理一下,做一下筆記

(一)   在Localhost啟動 Jboss

1. 至官網下載 jboss-as-7.1.1.Final http://www.jboss.org/jbossas/downloads

2. 將檔案解壓縮後,執行 *\\ jboss-as-7.1.1.Final\bin\add-user.bat  >> 增加user

未命名3

3. 執行 *\\ jboss-as-7.1.1.Final\bin\standalone.bat >> 執行 jboss

4. 打開瀏覽器 http://localhost:8080 出現以下畫面表示已成功啟動

未命名

5. http://localhost:9990  >> jboss 管理者介面,輸入設定的帳號密碼後的畫面

未命名1

6. “再啟動 standalone.bat” 的情況下將想要deployed的war檔放置 D:\jboss-as-                   7.1.1.Final\standalone\deployments 目錄下,即可完成deployed,當資料夾中                出現  xxx.wa.deployed 檔案時 表示已經成功 deployed

7 . Jboss as 7.1.1 不支援 jdk 1.8.x , 如果環境是 jdk1.8.x的 必須安裝 jdk1.7.x

           且須設定環境變數 or 使用 Jboss WildFly or Jboss eap

(二)  在Eclipse上加入Jboss

1. Eclipse Help > Eclipse Marketplace… > 搜尋jboss tools 並安裝

2. 安裝完成後 新增一個server

未命名4

     3.在 Home Directory 設定 Jboss 的資料夾路徑

未命名5-1

4.點選完成後,在下方的server 就會出現Jboss

未命名6-1

6.接著把網站加入至此Serve下即可啟動網站

7.當使用Eclipse 出現了一個錯誤訊息

未命名7

經上網查詢料後發現只要在

D:\jboss-as-7.1.1.Final\standalone\configuration\standalone.xml 中加入

即可解決可參考http://www.cnblogs.com/wangjiajun/p/4203373.html 的解說

以上就是啟動JBoss的基本流程~

Spring 註解

Spring 提供了方法來更有效的管理創建物件,使得我們不一定要從程式中去建立物件,配置物件,只需藉由Spring Xml 中 bean 的設定即可達到對物件的管理與配置,如此也使我們的物件可以更有效的被管理

以上就是透過在xml中加入bean的方式將 class 註冊於Spring中,如此我們就可於xml去管理這個物件,這也就是Spring的核心思想( Ioc ) ,而從Spring 2.0 開始更提供了另一個方法[ 註解 ]去簡化Spring xml 的設定,註解基於Spring 就等同於bean,而 @Service ,@Controller ,@Repository, @Component 就是可以註解在 class 上的四大類 ,目前來說此四類在Spring 中都是可被註冊為Bean的,

@Component  :  是一個泛型的註解 ,可以被轉換為其他3個類型

@Service : 對應於服務層的註解

@Repository : 對應於數據訪問層(Dao)

@Controller : 對應於控制層 ( mvc 中 action 的應用 )

接著只要我們在 Spring 的 xml 中加入

去啟動自動掃描 ,所以有加入註釋的 class 就會自動被註冊為 Spring <bean>

如此一來我們的 xml 也就簡化了許多,而註解於bean中的默認名稱為 class名稱(第一個字母小寫)

這個例子來說 bean 的名稱就是 myService 如果想自已定義 bean 的名稱可用@service(“name”)

如此一來bean的名稱就為 helloWorld,這總方式產生的bean預設 是singleton(單一的),意思就是說容器只會產生這個bean一次,以下列例子來說

以上述例子來說結果就會是

wang

wang

因為 user 只會被創建一次,所以 userB 一樣是使用之前被創建的 user,所以取出來的值會是一樣的,但如果我們加入@Scope(“prototype”)

結果就會是

wang

yang

因為 prototype就是每次取得Bean時,容器會建立一個新的Bean,而不是傳回同一個Bean,所以userB會在創建一個 user 此時 userB 取出來的值就會是 user 的預設值 yang。

總結 : 註解是Spring提供的另一個方式去配置class於容器中,而不需設定在xml中,妥善的使用註解也可使我們的應用程式更為簡潔,當然Spring還提供其他的註解,此篇介紹的是屬於使用於class上面的四類註解,接下來我也將繼續探討其他的註解

何謂 Spring IOC ?

要了解Spring – Ioc前,我想先來說說 Pojo( Plain Ordinary Java Object / Pure Old Java Object)

Pojo可以被歸類為Java的一個對象(Class),但是一個Java Class卻不能說就是Pojo

因為Java Class可以Implement Interface , Extend Parent Class 但是 Pojo 就是一個

乾淨的 Class 可以包含 參數及方法 卻不能 Implement 及 Extend

Ex :

 

而在Spring – Ioc中可以管理任何的對象,但一般來說通常都會是Pojo Spring – Ioc 可以說是 Spring 的核心思想 可翻譯成控制反轉,但何謂控制反轉,控制甚麼?反轉甚麼?

其實簡單來說就是對Java 對象的控制跟我們一般的認知是相反的,一般來說當我們要建立一個物件的時候都會在應用程式中去 new Object() 並且由應用程式去賦予這個 Object 定義這就是一般的由應用程式去管理,配置所需的物件

Ex:

而在Ioc中則是相反的,Ioc會提供一個容器去產生這些物件,並且配置及管理這些物件,當應用程式需要甚麼物件時再跟Ioc 容器在提供給((DI))應用程式使用,如此一來物件的依賴關係就變成是應用程式依賴Ioc 容器,應用程式也由主動變成被動的等待Ioc來注入(DI)它所需的資源

xml

 

至於 DI ( Dependecy Injection ) 則是 Ioc 的核心 當 Ioc 幫我們創建完對象後 在應用程式運行時動態的去注入所依賴的對象

總結:

  1. Spring-Ioc 負責創建管理對象( Pojo ) >> 創建的對象會放在一個容器中
  1. 當應用程式需要使用某些對象時 由容器提供使用
  1. 應用程式的使用對象所需的資源由Ioc注入
  1. 應用程式依賴著 Ioc , 並且需要Ioc 提供對象所需的資源

5.Ioc 是一種思想,所以他可以被應用至其他地方並不是局限於Spring

以上是 Spring-Ioc 的基本概觀 , 接下來要探討的就是 Spring 在程式碼中是用甚麼方式去實現Ioc 對物件的創建,配置與管理