在介紹完整個大架構後,我們不要忘了當初要討論的最重要問題『我們寫的程式需不需要修改』,我們來總結一下,當我們大架構做成像上一張圖時,我們的程式需要注意或更動那些地方:
-
注意Application層級的資料,每一台機器是獨立的,所以如果需要用到Application層級來儲存資料時,需要確保每一台機器的資料是相同的。
在介紹完整個大架構後,我們不要忘了當初要討論的最重要問題『我們寫的程式需不需要修改』,我們來總結一下,當我們大架構做成像上一張圖時,我們的程式需要注意或更動那些地方:
注意Application層級的資料,每一台機器是獨立的,所以如果需要用到Application層級來儲存資料時,需要確保每一台機器的資料是相同的。
這樣整個看下來,我們的大架構已經很完整了,不但可以分流,而且當其中的服務器有任何問題的話,可以做到Failover(容錯移轉);並且如果伺服器不足的話,我們可以在短時間內,透過加入新的伺服器來擴大服務,聽起來似乎都很棒了,不過還是有一些可以改善的空間,狀況是這樣的:
當公司活動結束後,雖然因為活動很成功,所以每天連線的人數有慢慢成長,但是因為還不到當初活動的人數,所以有二~三台機器是閒置的。
很明顯的,這是一個問題,但是這個問題要如何改善呢?即然伺服器可以分流,那資料庫能不能也做分流呢?如果可以的話,對程式面來說,又需要做什麼變更呢?
我們先以分流的方式來檢討一下,我們預計資料庫的分流應該達到什麼樣的目的:
買家:
登入
什麼是大架構,簡單的說,例如我今天一台機器,可以服務200人同時連線,但因為公司要辦活動,所以預計這一段時間會有1000人同時連線進來,為了可以同時服務這100人,所以我們啟動了五台機器同時運作,來解決這個問題。
聽起來似乎很簡單、也很合理,不過我們仔細來研究,就會發現,問題不是想像中的那麼簡單,讓我們一個一個來討論問題與解決方法。
資料儲存的意思並不是指資料儲存在資料庫,而是指儲存在記憶體中的資料;因為資料儲存在記憶體中,所以資料不會永久保存,而是經過一段特定的時間後不見,所以下方我們要來討論Request、Session、Application這三種層級的不同。除這這個部份外,大架構因為有一個運作方式中,是:
處理第一次發送的Request,與處理第二次發送的Request,二台是不同的Server,這個機制在下方會談到。
關於上述的問題,要找到答案之前,必須先定義好一些前提,畢竟軟體是建立在硬體上的,所以硬體配備的好壞,直接影響了軟體的運作速度。我們必須先定義好我們的程式運行環璄的硬體,關於這一點,如果公司沒有明確的定義的話,建議大家可以直接上網搜尋關鍵字「AWS EC2 Price」來參考一下,在AWS上的各種硬體配備,有其對應的價格,可以當作參考。
當硬體決定下來後,才能開始使用像JMeter之類的軟體來進行壓力測試;不過做完JMeter後,只是開頭問題的第一步「可以承受多少人同時連進來?」的答案而己,至於第二個問題:「超過這個人數的話,要怎麼處理?」的答案,以筆者個人的經驗,只有二個解法: