1. 程式人生 > >網站架構設計

網站架構設計

1.大訪問量解決方案?

負載均衡技術:乙太網通道 ; windos NBL   ;  linux lvs ,   ;   F5

冗餘技術(叢集):linux HA叢集技術

解決單點故障

 

0                                                                                                                                       0 (主)     1(從)   叢集圈(叢集圈裡都是通過一根心跳

線來連線,當一個伺服器宕機了,則選舉另一臺)

0                   (交換機)    nginx(負載均衡)      LVS(地址裝換到伺服器)                          0                 1

0                                                                                                                                        0               

 

lvs負載均衡技術:

OSI七層模型:

1.物理層 :連線線纜的標準

2.資料鏈路層 :加mac地址的標記(網絡卡的實體地址)  802.3,802.2

3.網路層:源ip地址,目的ip地址    ip

4.傳輸層 : 源埠,目的埠     tcop/udp

5.會話層 :通訊狀態           作業系統

6.表示層 : 編碼方式          ASCII

7.應用層 : 


 

大資料儲存

MySQL 主從複製:

主資料庫用來寫,從資料庫用來讀,通過主資料庫的binary_log日誌進行同步到從資料庫來保證資料的一致性

 水平分表:

 

垂直分表:

 

分割槽技術:將一張表分成若干張表儲存,業務層無需修改表名,名稱不變 

解決水平分表修改業務邏輯sql的維護修改難問題

 

分割槽(partition by range(year(date))) (by range(一般用這個,給定個連續的區間) ; by list(適合列舉型別確認的固定下拉), by hash(一般用於測試), by key(沒用))

partioton by hash(id)
partioton 5 --以id分五個區域


為什麼用分割槽?:
ans:因為用水平分表的模式,會造成php程式碼層維護更難(需要改查詢的表名,還要寫一個php路由層來判斷選擇哪張表)
邏輯上,物理上減壓,分表技術雖然物理層減壓,但是邏輯上增壓,不符合程式設計,所以產生了分割槽.


分割槽寫法?:
ans:
partition by range(id)(
partition p0 values less than(5)
partition p1 values less than(10)
partioton p2 values less than(15)
);


partition by range(year(peirod))(
partition p1 values less than(2016)
partition p2 values less than(2017)
partition p3 values less than(2018)
partition p4 values less than maxvalue
)

 

myisam的表,增刪改查的速度快 插入速度 200萬/s

索引大小可能大於資料大小(兩三倍),1000萬行資料佔用250m大小,花了兩分鐘左右時間(id 及索引)

分割槽檔案儲存格式(myisam)?:
ans:
.frm表描述檔案
.par 分割槽標誌
p0.myd 資料存放
p0.myi 索引存放
p1.myd 資料存放
p1.myi 索引存放
p2.myd 資料存放
p2.myi 索引存放

 

mysql 儲存過程?


寫一個插入八百萬資料,按年來分割槽的儲存過程?:
create procedure load_part()
begin
declare v int default 0;
while v < 8000000 do
insert into part_tab values(v,testing_partitions,adddate('1995-01-01',(rand(v)*36520) mod 3650));
set v = v+1;
end while
end //