1.數(shù)據(jù)庫優(yōu)化方案
硬件層面:升級機(jī)器配置,初期性能提升效果較明顯,但是成本高,不作為優(yōu)先方案
軟件層面:(按優(yōu)先級)sql調(diào)優(yōu)、表結(jié)構(gòu)優(yōu)化、讀寫分離、數(shù)據(jù)庫集群、分庫分表
sql調(diào)優(yōu)
簡化代碼的嵌套或者關(guān)聯(lián)join等操作,根據(jù)需要的情況盡可能的命中索引,讓數(shù)據(jù)變化少的字段、有優(yōu)化添加索引的字段、主鍵等優(yōu)先被判斷
表結(jié)構(gòu)優(yōu)化
添加冗余字段
架構(gòu)優(yōu)化
增加集群、訪問數(shù)據(jù)庫前加入redis減少訪問壓力,讀多于寫時,可使主實例負(fù)責(zé)寫,反之亦可
分庫分表
業(yè)界流傳標(biāo)準(zhǔn),數(shù)據(jù)量達(dá)到500萬可考慮分表,而系統(tǒng)發(fā)展到一定規(guī)模,必然需要分庫操作,單數(shù)據(jù)庫是有性能瓶頸的。
拆分表有垂直切分和水平切分,垂直切分切分字段,細(xì)分類別。水分切分可根據(jù)數(shù)據(jù)類型,數(shù)據(jù)入庫時間等進(jìn)行劃分
最后分庫分表帶來了復(fù)雜性,比如跨庫關(guān)聯(lián)查詢、分布式事務(wù)
、排序分頁函數(shù)計算問題、分布式id、多數(shù)據(jù)源等
解決方案有如下可參考

2.緩存一致性問題解決方案
對于緩存和數(shù)據(jù)庫的一致性來說
1.先刪緩存在更新數(shù)據(jù)庫
保證一致性,可采用延遲雙刪,更新完數(shù)據(jù)庫后,在slepp一段時間,再次刪除緩存,sleep的時間要大于讀寫緩存的時間
2.先更新數(shù)據(jù)庫在刪除緩存
可采用消息隊列,更新完成后往隊列發(fā)消息,消費到消息在刪除緩存,借住了消息隊列的重試機(jī)制,但實際上這樣依舊不能保證緩存一致性,引入了消息隊列后怎么保證消息不丟失不說,消息隊列響應(yīng)的這段時間依舊會有短暫的不一致
還可采用進(jìn)階版消息隊列,借助監(jiān)聽binlog消息隊列來做刪除緩存操作
如果對一致性要求不是很高,也可以采用設(shè)置緩存的過期時間來保證數(shù)據(jù)的一致性
對于分布式系統(tǒng)中緩存的一致性
用的是hash算法計算出放在哪一臺服務(wù)器,但擴(kuò)容時數(shù)據(jù)重新分布,需要變動的數(shù)據(jù)多,影響性能,進(jìn)而采取了hash環(huán),依靠虛擬節(jié)點對應(yīng)真實節(jié)點來實現(xiàn)負(fù)載均衡的情況下盡可能的減少服務(wù)器擴(kuò)容帶來的數(shù)據(jù)遷移問題
3.分布式算法
四大理論基礎(chǔ):
1.拜占庭將軍問題
2.CAP理論
3.ACID理論
4.BASE理論
八大分布式協(xié)議和算法:
1.Paxos算法
2.Raft算法
3.一致性Hash算法
4.Gossip協(xié)議算法
5.Quorum NWR算法
6.FBFT算法 7.POW算法 8.ZAB協(xié)議
拜占庭問題的解法

4.設(shè)計模式
工廠模式
工廠封裝好了客戶想要的產(chǎn)品,客戶對象只需要根據(jù)需求去申請即可
單例模式
在全局中保證某一類只有一個實例,比如在spring中的類就使用注入的方式注入全局的單例
適配器模式
把一個類的接口變換為客戶端所期待的另一種接口,中間多一層處理,我的理解像dto實體就可以用來處理一些數(shù)據(jù)合并、數(shù)據(jù)轉(zhuǎn)換,最后返回客戶端想要的數(shù)據(jù)集合對象
門面模式
提供了一個高層次的接口作為一個系統(tǒng)的入口,使得系統(tǒng)易于使用,一個系統(tǒng)應(yīng)只有一個門面類,此類是一個單例模式
代理模式
給某一個對象提供一個代理對象,并由其對源對象進(jìn)行引用,客戶端分辨不出代理對象和真實對象
策略模式
在不影響客戶端的情況下,根據(jù)不同的環(huán)境和行為進(jìn)行算法的變換,提供所謂不同的策略
模板方法模式
相當(dāng)于寫一個抽象類,實現(xiàn)或構(gòu)造了部分邏輯,也聲明了一些抽象方法
訪問者模式
訪問者模式:訪問者模式的目的是封裝一些施加于某種數(shù)據(jù)結(jié)構(gòu)元素之上的操作。一旦這些操作需要修改的話,接受這個操作的數(shù)據(jù)結(jié)構(gòu)可以保持不變。訪問者模式適用于數(shù)據(jù)結(jié)構(gòu)相對未定的系統(tǒng),它把數(shù)據(jù)結(jié)構(gòu)和作用于結(jié)構(gòu)上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。訪問者模式使得增加新的操作變的很容易,就是增加一個新的訪問者類。