什麼是數據庫分片
簡單來講,就是指經過某種特定的條件,將咱們存放在同一個數據庫中的數據分散存放到多個數據庫上面,以達到分散單臺設備負載的效果。
數據的切分(Sharding)根據其切分規則的類型,能夠分爲兩種切分模式。
1.一種是按照不一樣的表來切分到不一樣的數據庫(主機)之上,這種切能夠稱之爲數據的垂直切分
2.另一種則是根據表中的數據的邏輯關係,將同一個表中的數據按照某種條件拆分到多臺數據庫上面,這種切分稱之爲數據的水平切分。
如何實現數據庫分片
當數據庫分片後,數據由一個數據庫分散到多個數據庫中。此時系統要查詢時須要切換不一樣的數據庫進行查詢,那麼系統如何知道要查詢的數據在哪一個數據庫中?當添加一條記錄時要向哪一個數據庫中插入呢?這些問題處理起來都是很是的麻煩。
這種狀況下能夠使用一個數據庫中間件mycat來解決相關的問題。
什麼是Mycat?
簡單的說,MyCAT就是:一個新穎的數據庫中間件產品,支持mysql集羣,提供高可用性數據分片集羣。你能夠像使用mysql同樣使用mycat。對於開發人員來講根本感受不到mycat的存在。
Mycat讀寫分離
數據庫讀寫分離對於大型系統或者訪問量很高的互聯網應用來講,是必不可少的一個重要功能。對於MySQL來講,標準的讀寫分離是主從模式,一個寫節點Master後面跟着多個讀節點,讀節點的數量取決於系統的壓力,一般是1-3個讀節點的配置
單點登陸系統
主要解決的是Session共享的問題。
一、使用redis管理Session。
1)key:token
2)value:用戶信息
3)能夠須要設置有效期。
4)須要把token保存到cookie中。
購物車
一、未登陸:使用cookie保存購物車數據
二、登陸後:把購物車數據保存到redis。
二、購物車合併,應該以服務端的購物車爲準。
電商活動倒計時方案:
一、肯定一個基準時間。能夠使用一個sql語句從數據庫中取出一個當前時間。SELECT NOW();
二、活動開始的時間是固定的。
三、使用活動開始時間-基準時間能夠計算出一個秒爲單位的數值。
四、在redis中設置一個key(活動開始標識)。設置key的過時時間爲第三步計算出來的時間。
五、展現頁面的時候取出key的有效時間。Ttl命令。使用js倒計時。
六、一旦活動開始的key失效,說明活動開始。
七、須要在活動的邏輯中,先判斷活動是否開始。
秒殺方案:
八、把商品的數量放到redis中。
九、秒殺時使用decr命令對商品數量減一。若是不是負數說明搶到。
十、一旦返回數值變爲0說明商品已售完。
因爲宜立方商城是基於SOA的架構,表現層和服務層是不一樣的工程。因此要實現商品列表查詢須要兩個系統之間進行通訊。
如何實現遠程通訊?
一、Webservice:效率不高基於soap協議。項目中不推薦使用。
二、使用restful形式的服務:http+json。不少項目中應用。若是服務太多,服務之間調用關係混亂,須要治療服務。
三、使用dubbo。使用rpc協議進行遠程調用,直接使用socket通訊。傳輸效率高,而且能夠統計出系統之間的調用關係、調用次數。
什麼是dubbo
DUBBO是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案
Dubbo就是資源調度和治理中心的管理工具。mysql