今年又參加了一次系統(tǒng)架構(gòu)師考試培漏,幾乎可以肯定的說(shuō),過(guò)不了胡本,盡管還看了那么幾天書(shū)牌柄,回想起來(lái),主要還是自己的功底不扎實(shí)侧甫,題目雖然有那么點(diǎn)點(diǎn)難珊佣。
選擇題是沒(méi)有什么問(wèn)題,但論文與分析應(yīng)用題沒(méi)做好披粟,以至于現(xiàn)在還是耿耿于懷咒锻。
題目: 1. nosql 數(shù)據(jù)庫(kù)的應(yīng)用經(jīng)歷及優(yōu)點(diǎn)(我寫(xiě)的論文)
? ? ? ? ? ? 2. SOA?架構(gòu)的層次說(shuō)明及應(yīng)用(有點(diǎn)微服務(wù)的味道)
? ? ? ? ? ? 3.?數(shù)據(jù)流程圖填空(房東、租客守屉、中介平臺(tái)等)UML(其實(shí)很基礎(chǔ)惑艇,但記不清楚,慘呀)
? ? ? ? ? ? 4.?系統(tǒng)嵌入式設(shè)計(jì)中的消息通信(基本上不懂)
? ? ? ? ? ? 5. redis?與 memcache?的區(qū)別及redis幾種分布式存儲(chǔ)拇泛,redis集群的幾種方式(簡(jiǎn)述應(yīng)用題)
好了滨巴,題目講完了,我挑了(1)碰镜,(5)題
論文題目兢卵,NoSQL的應(yīng)用,我把工作中用大數(shù)據(jù)庫(kù)計(jì)算銷(xiāo)量預(yù)測(cè)的事情說(shuō)一下绪颖,先放個(gè)圖
出了考場(chǎng)我就后悔秽荤,怎么能寫(xiě)hive呢,改成hbase也會(huì)好點(diǎn)呀柠横,不說(shuō)了窃款。
第(5)題,redis與memcache 的區(qū)別我還知道點(diǎn)牍氛,
redis有持久化晨继,memcache不支持。搬俊。紊扬。。唉擂。但說(shuō)到redis的幾種分布式存儲(chǔ)餐屎,我就不清楚了,只知道m(xù)aster-slave玩祟,說(shuō)不出幾種來(lái)腹缩。而集群方式,就寫(xiě)分片,哨兵藏鹊。事后我越想越不對(duì)润讥,就認(rèn)真查了一下,正確的答案應(yīng)該是這樣的盘寡。
集群方式
1. 客戶(hù)端分片
優(yōu)點(diǎn)
不使用第三方中間件楚殿,實(shí)現(xiàn)方法和代碼可以自己掌控并且可隨時(shí)調(diào)整。這種分片性能比代理式更好(因?yàn)樯倭朔职l(fā)環(huán)節(jié))宴抚,分發(fā)壓力在客戶(hù)端勒魔,無(wú)服務(wù)端壓力增加
缺點(diǎn)
不能平滑地水平擴(kuò)容,擴(kuò)容/縮容時(shí)菇曲,必須手動(dòng)調(diào)整分片程序冠绢,出現(xiàn)故障不能自動(dòng)轉(zhuǎn)移,難以運(yùn)維
2.?Twemproxy常潮,Codis
twitter開(kāi)源的Twemproxy
Codis是一個(gè)豌豆莢團(tuán)隊(duì)開(kāi)源的使用Go語(yǔ)言編寫(xiě)的Redis Proxy
優(yōu)點(diǎn)
運(yùn)維成本低弟胀。業(yè)務(wù)方不用關(guān)心后端 Redis 實(shí)例,跟操作 Redis 一樣喊式。Proxy 的邏輯和存儲(chǔ)的邏輯是隔離的
缺點(diǎn)
a. 代理層多了一次轉(zhuǎn)發(fā)孵户,性能有所損耗
b. 進(jìn)行擴(kuò)容/縮容時(shí)候,部分?jǐn)?shù)據(jù)可能會(huì)失效岔留,需要手動(dòng)進(jìn)行遷移夏哭,對(duì)運(yùn)維要求較高,而且難以做到平滑的擴(kuò)縮容
c. 出現(xiàn)故障献联,不能自動(dòng)轉(zhuǎn)移竖配,運(yùn)維性很差
redis version >= 3.0 ,?redis-trib(ruby)?
優(yōu)點(diǎn)
a. 無(wú)中心節(jié)點(diǎn)
b. 數(shù)據(jù)按照 Slot 存儲(chǔ)分布在多個(gè) Redis 實(shí)例上
c. 平滑的進(jìn)行擴(kuò)容/縮容節(jié)點(diǎn)
d. 自動(dòng)故障轉(zhuǎn)移(節(jié)點(diǎn)之間通過(guò) Gossip 協(xié)議交換狀態(tài)信息,進(jìn)行投票機(jī)制完成 Slave 到 Master 角
色的提升)
e. 降低運(yùn)維成本,提高了系統(tǒng)的可擴(kuò)展性和高可用性
缺點(diǎn)
a. 嚴(yán)重依賴(lài)外部 Redis-Trib
b. 缺乏監(jiān)控管理
c. 需要依賴(lài) Smart Client(連接維護(hù), 緩存路由表, MultiOp 和 Pipeline 支持)
d. Failover 節(jié)點(diǎn)的檢測(cè)過(guò)慢里逆,不如“中心節(jié)點(diǎn) ZooKeeper”及時(shí)
e. Gossip 消息的開(kāi)銷(xiāo)
f. 無(wú)法根據(jù)統(tǒng)計(jì)區(qū)分冷熱數(shù)據(jù)
g. Slave“冷備”进胯,不能緩解讀壓力
優(yōu)點(diǎn)
Smart Client:
a. 相比于使用代理,減少了一層網(wǎng)絡(luò)傳輸?shù)南脑海瘦^高胁镐。
b. 不依賴(lài)于第三方中間件,實(shí)現(xiàn)方法和代碼自己掌控诸衔,可隨時(shí)調(diào)整盯漂。
Proxy:
a. 提供一套 HTTP Restful 接口,隔離底層存儲(chǔ)笨农。對(duì)客戶(hù)端完全透明就缆,跨語(yǔ)言調(diào)用。
b. 升級(jí)維護(hù)較為容易磁餐,維護(hù) Redis Cluster,只需要平滑升級(jí) Proxy。
c. 層次化存儲(chǔ)诊霹,底層存儲(chǔ)做冷熱異構(gòu)存儲(chǔ)羞延。
d. 權(quán)限控制,Proxy 可以通過(guò)秘鑰控制白名單脾还,把一些不合法的請(qǐng)求都過(guò)濾掉伴箩。并
且也可以控制用戶(hù)請(qǐng)求的超大 Value 進(jìn)行控制,和過(guò)濾鄙漏。
e. 安全性嗤谚,可以屏蔽掉一些危險(xiǎn)命令,比如 Keys怔蚌、Save巩步、Flush All 等。
f. 容量控制桦踊,根據(jù)不同用戶(hù)容量申請(qǐng)進(jìn)行容量限制椅野。
g. 資源邏輯隔離,根據(jù)不同用戶(hù)的 Key 加上前綴籍胯,來(lái)進(jìn)行資源隔離竟闪。
h. 監(jiān)控埋點(diǎn),對(duì)于不同的接口進(jìn)行埋點(diǎn)監(jiān)控等信息杖狼。
缺點(diǎn)
Smart Client:
a. 客戶(hù)端的不成熟炼蛤,影響應(yīng)用的穩(wěn)定性,提高開(kāi)發(fā)難度蝶涩。
b. MultiOp 和 Pipeline 支持有限理朋。
c. 連接維護(hù),Smart 客戶(hù)端對(duì)連接到集群中每個(gè)結(jié)點(diǎn) Socket 的維護(hù)子寓。
Proxy:
a. 代理層多了一次轉(zhuǎn)發(fā)暗挑,性能有所損耗。
b.進(jìn)行擴(kuò)容/縮容時(shí)候?qū)\(yùn)維要求較高斜友,而且難以做到平滑的擴(kuò)縮容
redis分布式存儲(chǔ)的幾種方式 炸裆??至今不清楚,感覺(jué)和集群的概念有點(diǎn)混
哨兵的作用就是對(duì)Redis的系統(tǒng)的運(yùn)行情況的監(jiān)控鲜屏,它是一個(gè)獨(dú)立進(jìn)程烹看。它的功能有2個(gè):
1、?監(jiān)控主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)是否運(yùn)行正常洛史;
2惯殊、主數(shù)據(jù)出現(xiàn)故障后自動(dòng)將從數(shù)據(jù)庫(kù)轉(zhuǎn)化為主數(shù)據(jù)庫(kù);
但是哨兵不能動(dòng)態(tài)地?cái)U(kuò)容也殖。