集羣(cluster)是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集羣相互作用時,集羣像是一個獨立的服務器。負載均衡(Load Balance),其意思就是分攤到多個操作單元上進行執行
阿里雲負載均衡
負載均衡好處
- 節省成本,一個服務器性能再好也是有瓶頸的,而且性能越高的服務器成本也越大。
- 極大的提高了併發量和響應速度。
實踐例子
學無止境網
該web應用,由兩個服務器一起提供的服務
實現負載均衡遇到的問題
- nginx負載均衡策略
- 多臺服務器代碼同步
- 多臺服務器數據庫同步
- node服務,代碼更新後,服務重啓
- 源的代碼更新問題和數據升級
- 用戶上傳的圖片等靜態資源同步
Nginx反向代理及負載均衡
- 輪詢
- 權重
- ip_hash
- url_hash
- 等等...
這裏使用最簡單的輪詢機制,session存放在數據庫,解決了session服務器之間不同步的問題。
upstream tianshengjie{
server ip地址;
server ip地址 max_fails=2 fail_timeout=10s;
}
server {
listen 80 default_server;
server_name 47.99.90.167 www.tianshengjie.cn tianshengjie.cn;
location / {
proxy_pass http://tianshengjie;
proxy_cache_key $http_range$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
服務部署
forever start -c nodemon app.js --exitcrash
forever
A simple CLI tool for ensuring that a given script runs continuously
守護node進程程序
nodemon
- 自動監聽文件變化,重啓node服務
- exitcrash,當node服務奔潰後,重啓
代碼同步
使用shell腳本,自動更新代碼,一鍵同步更新
#!/bin/bash
cd git倉庫
git pull;
yarn install --production;
rsync -av --exclude-from=/opt/ssh/blog_exclude.list git倉庫 代碼發佈地址
rsync -avz -e ssh /var/www/blog/ root@負載均衡服務器ip:負載均衡服務器發佈代碼目錄
cd 代碼發佈地址 ;
forever stop app.js;
npm run start;
echo "發佈成功"
- 將git倉庫和正式應用的代碼地址分離
- 更新git倉庫地址
- 下載程序依賴
- 將git倉庫更新後的代碼複製到正式發佈目錄
- 將代碼同步更新到負載均衡服務器
- 重啓服務
數據庫同步
阿里 雲數據庫
文檔地址
性能最高,有備份有容災,功能強大,但是收費
mysql
mysql遠程連接配置
配置相對簡單,數據庫會有性能瓶頸,免費
分佈式數據庫
研究中
靜態資源同步
當用戶通過負載均衡,被定位到了不同的服務器。這時候,上傳文件時,將會把文件上傳到不同的服務器中。當用戶被分配到了其他服務器時,就會找不到這個文件了。所以我們需要同步負載均衡的服務器的文件。
方案一:自己實現統一文件上傳管理系統,所有用戶文件統一上傳到一個地方。
方案二:使用阿里雲的NAS文件系統管理
方案三:使用NFS系統
阿里雲 NAS文件系統管理
阿里雲文件存儲(Network Attached Storage,簡稱 NAS)是面向阿里雲 ECS 實例、HPC 和 Docker 等計算節點的文件存儲服務,提供標準的文件訪問協議,您無需對現有應用做任何修改,即可使用具備無限容量及性能擴展、單一命名空間、多共享、高可靠和高可用等特性的分佈式文件系統。
缺點
缺點:收費
優點
- 配置相對簡單
- 彈性伸縮,按量收費
- 阿里出品
NFS (Network FileSystem)
缺點
- 配置相對複雜
- server宕機了所有客戶端都不能訪問
- 在高併發下NFS效率/性能有限
- 數據是通過明文傳送,安全性一般
- 對數據完整性不做驗證
- 多臺機器掛載NFS服務器時,連接管理維護麻煩
優點
- 免費,免費的就是好
- 節省存儲空間
- 實現了多臺服務器共享文件