iT邦幫忙

1

如何將網站分開至不同主機和拓展擴張性?(有經驗請入)Linode|Cloudflare|Apache

使用 Linode 主機,ubuntu16.04 apache + php + mariadb 架設網站,外加 cloudflare 管 DNS
目前需要有分流機制,但是沒有做過不清楚怎麼做~
(目前是使用 Linode 4G方案)
想問問有經驗的大大們如何著手?

裡面有兩種不同性質網站,一個是電商一個是部落格(而因為流量持續增加中,光是部落格CPU使用率已超過 33%,電商還沒開始營運)
而電商網域是:shop.XXX.com ,部落格是 XXX.com,(使用 htaccess 實現)
雖然這兩個資料本身就是相通的,同台主機和數據庫,甚至有不少「共用」的程式腳本(應該是說很難將兩個不同性質網站「拆開」)
所以有點蛋疼⋯⋯
想問怎麼將這兩個網站移到兩台不同的主機上?
或是有類似的做法可以實現「分流」機制,至少瀏覽人數突然「爆多」的時候不會有太大問題?

是有聽到一個說法是臉書可能連一個按鈕都是一台主機(?)
不過確實不無可能,畢竟每一秒可能要處理一億次請求,想想也合理
想問說大家會怎麼做?或是有經驗的大大分享如何做?

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2019-01-13 10:05:09 檢舉
先把資料庫拆到另一台吧..
echochio iT邦新手 1 級 ‧ 2019-01-14 07:54:22 檢舉
https://www.echochio.nctu.me/2017/07/nginx/

參考我以前做的.......
wwx iT邦好手 1 級 ‧ 2019-01-14 08:22:43 檢舉
先分析哪些php使用率較高又容易有高負載,
然後看php本身是否還有改善的空間,
最後考慮把部分php抽出, 加開台主機來處理
如果負載是來自DB那麼也要考慮加DB主機,
看是平衡方式使用還是拆table分不同主機處理或快取...
stevekwok iT邦新手 5 級 ‧ 2019-01-14 08:35:34 檢舉
database -> seperate machine
images / static content -> cdn
kuosheng iT邦新手 4 級 ‧ 2019-01-14 09:28:23 檢舉
用AWS 的EB來做,你可以專注在程式邏輯的改進及業務面的推廣,不需要花太多人力的Infra維運成本..底下這本書不錯,供你參考!! 雖然是用在wordpress的deployment,但我看你的架構也是用LAMP嘛!! 可以嘗試看看~~這個架構我run過
https://www.books.com.tw/products/0010744809
kuosheng iT邦新手 4 級 ‧ 2019-01-14 13:53:04 檢舉
其實主要重點都在RDBMS的負荷, 如果你的量真的大到一般的rdbms不能承受,那就建議你拆開邏輯,把資料嚴謹性不高的,拆到類似Dynamodb裡頭, integrity 高的,才放到RDBMS, 單純的web server 的load balace 好做啦!! 跟你們的AP人員好好溝通吧.....程式不做調整,你就算跑了100台 web server, 也會卡在資料庫端....
1
archangelwu
iT邦新手 5 級 ‧ 2019-01-14 11:46:53

您好:

從您的敘述來看,您可能使用的是 LAMP 的架構,這個架構不是不好,而是沒有橫向擴充的機制!

比較簡單的解決方式,就是撒錢!

將兩個網域:shop.XXX.com、與 XXX.com 分別放置不同主機,每個主機各自管理,資源不會互搶,而主機部分最好要有可以動態長大的機制,例如 Azure 的雲端主機與 AWS 都可以,也就是說當 CPU 資源維持在 XX% 時、多少時間(可自訂),就會自動生出第二台幫你分流,或是主機自動升級(Lv1 to Lv2)之類的。

如果要複雜,或是預估人數破百萬!以上的架構是撐不下來的!

必須要全部分開架設,前端可以使用 Apache、nginx(我個大力推薦使用 nginx,因為效能讚且速度極快),有 ELB 可以幫忙分流!

而後端的資料庫就要重新設計囉,如果又有登入的設計,大量人流湧進來,後端資料庫每筆交易處理時間都會大於 3~10 秒以上,最嚴重的就是導致客源流失!所以資料結構設計就必須拆開。

使用 Redis、MongoDB 都是很好的解決方案!最後 CDN 也是要考慮進來的唷!

PS:可以觀察演唱會訂票、電信商搶購手機等等的系統,當 session 都佔滿時,其他人就會發生無法連線或是連線過久的錯誤訊息對吧,小技巧就是使用 CDN!當 session 佔滿時,全部立即導入到 CDN 去!哈哈哈!這是偷雞啦!

以上心得與您分享!

4
raytracy
iT邦大神 1 級 ‧ 2019-01-14 13:15:52

這題的提問方法不對, 問錯問題, 導致沒有辦法精準的回答..

樓主可能會覺得:
上面的回答, 好像講了答案, 卻又對你沒用, 搔不到癢處....這不是他們答得不好, 而是您的問法, 制約了回答的方向, 導致所有的回答, 都沒有解決你的問題....

在樓主這個階段, 其實不應該直接來問解決方案, 而是要先問: 如何增加你的系統可視度 (Visibility)? 沒有可視度, 看不見 inside, 任何解決方案都只是瞎猜, 亂槍打鳥....

如果一位中醫沒把過脈也沒見過你(沒有望聞問切的 inside 資訊), 光憑別人轉述:發燒+頭痛(只有病人陳述的表徵現象), 然後就要開處方給你, 你覺得這樣能對症下藥的機率有多高?....

我在樓主的描述中, 沒看到任何具體的效能數據與測試方法, 在這種狀況下, 解決方案會變得非常多樣多變, 因為我們不知道: 哪一種才適合用在你的環境中?請試著提供一些具體的數據, 大家才能有具體的建議方向.....

有興趣可以看看這篇(不過也是 inside 資訊不足):每日千人之主機與程式處理?

watain666 iT邦新手 5 級 ‧ 2019-01-14 15:41:14 檢舉

看這個 ID 的發問紀錄就知道問題在哪了XD

數據控???
有時候效能的瓶頸點是一關卡一關的,解決CPU的問題,IO問題就出現,然後解決IO問題又出現network connection,然後搞CDN...
一下和老闆說這個不夠,花了錢又說那個要加,理由是當初數據沒有顯示出來問題,老闆聽到這樣的說法不氣死才怪!

raytracy iT邦大神 1 級 ‧ 2019-01-14 23:09:42 檢舉

當然不是用樓上那種頭痛醫頭的方法...

建立 Visibility 只是第一步, 接下來, 你要先設計好未來的 Scale-out 架構, 然後用這個架構建立一個 Lab, 在 Lab 內先做壓力測試, 目的是取得整個架構的 Baseline (基準線)...

取得 Baseline 之後, 開始對你的架構進行 分階段的 Scale-out 然後壓測, 同樣根據壓測結果進行調整, 這時可以一起把 CPU/RAM/Disk/Traffic 全部都調好, 不是來一個調一個....調到可以通過壓測之後, 計錄下當時的數據....

同法繼續 Scale-out 5~10次, 你就會得到 5~10 組數據, 裡面分別有: CPU/RAM/Disk/Traffic...等等參數, 而且你會發現各參數 Scale-out 時的趨勢, 例如: Disk 可能爬很快/CPU沒上升多少/RAM可能用很兇....等等之類的, 這些趨勢可以讓你對以上各種資源, 建立一個方程式, 讓你能夠預測:

1000人時, CPU/RAM/Disk/Traffic該用多少?
5000人時, CPU/RAM/Disk/Traffic該用多少?
1萬人時, CPU/RAM/Disk/Traffic該用多少?
...
你甚至可以透過線性迴歸, 找出某幾個變因的相依性....

當然, 以上不會是線性或長期不變的, 當系統擴展到某個程度之後, 數據就會失真, 你的預測會失敗. 但是, 那應該已經是距離現在很久一段時間了....也就是說, 從上述方法建立起來的一套預測模型, 應該足夠你維持某段長時間的業務成長, 而在這個成長過程中, 你又可以爭取更多時間來做更大的預測模型....

所以, 不是看一個數據到頂了, 才跟老闆要一次錢, 而是:

  1. 先要一筆錢, 建立壓測用 Lab 環境
  2. Lab 做完告訴老闆: 業務成長到 1000 客戶時, 你該花多少錢? 5000 客戶時, 你該花多少錢? 1萬人時, 你該花多少錢?...

至少做完3年的預測, 讓老闆知道未來三年他要花的錢是多少 (當然, 你這個模型也要隨時間和業務的變化, 隨時修正上述金額); 絕對不是: 當每一個瓶頸出現了, 才臨時來要一次錢, 這樣老闆當然會把你丟出去...

建立預測模型是企業永續營運很重要的一環, 大部分 IT 人員沒有受過這樣的訓練, 自以為預測不可行, 或是結果不可靠. 可是一家上市規模的公司, 財務預測的準確度必須在 90% 以上, 否則就要發布重大訊息通知資本市場; 如果 IT 部門無法做出準確度 90% 以上的預測, 其實很難在上市公司內生存...

如果你的預測能力可以達到 90% 以上的話, 其實只要在年度預算中, 準備 10~20% 的備用資源, 萬一預測失準的時候, 讓備用資源上場, 就可以解決你的問題, 不需要一直去要錢....

0
pupuliao
iT邦新手 5 級 ‧ 2019-01-15 10:18:39

很常見的做法 是把 web server 跟 DB server分開 因為 這是兩個完全不同性質的 server
只需要修改網頁中 DB 連線設定即可

之後網站優化,或是server 效能提升 都可以 輕鬆很多
畢竟 web server 和 DB server 對硬體的需求不太一樣

另外 和 apache 和nginx 相比,nginx 在效能、附載上 有更好的表現

我要發表回答

立即登入回答