域名鏈接網(wǎng)站網(wǎng)絡(luò)推廣都是收費(fèi)
[1]. 介紹一下ZooKeeper
ZooKeeper是一個(gè)開源的分布式協(xié)調(diào)服務(wù),核心功能是通過(guò)樹形數(shù)據(jù)模型(ZNode)和Watch機(jī)制,解決分布式系統(tǒng)的一致性問(wèn)題。
它使用ZAB協(xié)議保障數(shù)據(jù)一致性,典型場(chǎng)景包括分布式鎖、配置管理和服務(wù)注冊(cè)發(fā)現(xiàn)、集群管理等。
ZooKeeper通常以集群的方式部署,由多個(gè)ZooKeeper服務(wù)器組成。集群中有一個(gè)領(lǐng)導(dǎo)者服務(wù)器,負(fù)責(zé)處理客戶端的寫請(qǐng)求,并將數(shù)據(jù)同步到其他服務(wù)器;其他服務(wù)器是追隨者,負(fù)責(zé)處理客戶端的讀請(qǐng)求。
[2]. ZAB協(xié)議
ZAB協(xié)議是一種基于Paxos算法的改進(jìn)協(xié)議,專門為ZooKeeper這種分布式協(xié)調(diào)服務(wù)而設(shè)計(jì),保證了在ZooKeeper集群中,數(shù)據(jù)變更能夠以原子性和順序性廣播到所有節(jié)點(diǎn),從而實(shí)現(xiàn)最終一致性。
ZAB協(xié)議主要有兩種模式:消息廣播模式和崩潰恢復(fù)模式。
在消息廣播模式下,Leader接收到客戶端的寫請(qǐng)求后,會(huì)將這個(gè)請(qǐng)求封裝成一個(gè)Proposal廣播給所有Follower。Follower收到Proposal后,寫入本地事務(wù)日志,并向Leader發(fā)送ACK確認(rèn)。當(dāng)Leader收到超過(guò)半數(shù)的Follower的ACK后,就認(rèn)為這個(gè)Proposal已經(jīng)提交,然后Leader會(huì)向所有Follower發(fā)送Commit命令。
在崩潰恢復(fù)模式下,集群會(huì)進(jìn)行Leader選舉,選出一個(gè)新的Leader,然后新的Leader會(huì)從事務(wù)日志中恢復(fù)數(shù)據(jù),并確保所有節(jié)點(diǎn)的數(shù)據(jù)保持一致。
[3]. ZooKeeper的選舉機(jī)制
ZooKeeper使用一種Leader選舉機(jī)制來(lái)保證集群的高可用性。
當(dāng)集群?jiǎn)?dòng)或Leader服務(wù)器發(fā)生故障時(shí),就會(huì)觸發(fā)選舉。選舉過(guò)程中,每個(gè)服務(wù)器都會(huì)將自己作為候選Leader進(jìn)行投票,投票信息包括服務(wù)器ID和事務(wù)ID(zxid)。
服務(wù)器會(huì)將自己的投票廣播給其他服務(wù)器,并接收其他服務(wù)器的投票。在接收到投票后,如果發(fā)現(xiàn)收到的投票信息中的zxid比自己的大,或者zxid相同但服務(wù)器ID比自己的大,則更新自己的投票信息。
最后,每個(gè)服務(wù)器統(tǒng)計(jì)收到的投票信息,如果某個(gè)服務(wù)器收到了超過(guò)半數(shù)服務(wù)器的投票,則該服務(wù)器成為新的Leader。選舉過(guò)程中,zxid最大的服務(wù)器會(huì)被優(yōu)先選為L(zhǎng)eader,如果多個(gè)服務(wù)器的zxid相同,則服務(wù)器ID較大的服務(wù)器會(huì)被選為L(zhǎng)eader。
[4]. Memcached的緩存機(jī)制
Memcached是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),用于加速動(dòng)態(tài)Web應(yīng)用程序。
Memcached使用哈希表來(lái)存儲(chǔ)鍵值對(duì),并使用slab分配機(jī)制來(lái)管理內(nèi)存。當(dāng)Memcached的內(nèi)存空間不足時(shí),會(huì)使用LRU算法來(lái)淘汰最近最少使用的數(shù)據(jù)。
在分布式緩存方面,Memcached通常使用一致性哈希算法來(lái)實(shí)現(xiàn)數(shù)據(jù)的分片。
Memcached具有高性能、簡(jiǎn)單易用、可擴(kuò)展性強(qiáng)等優(yōu)點(diǎn),但同時(shí)也存在無(wú)持久化機(jī)制和內(nèi)存限制等缺點(diǎn)。
[5]. 基本數(shù)據(jù)類型和包裝類的區(qū)別
基本數(shù)據(jù)類型存儲(chǔ)在棧中,效率高,占用內(nèi)存少;包裝類存儲(chǔ)在堆中,需要更多的內(nèi)存。
基本數(shù)據(jù)類型功能簡(jiǎn)單,只能進(jìn)行基本運(yùn)算;包裝類提供了豐富的方法,方便操作。
基本數(shù)據(jù)類型主要用于數(shù)值運(yùn)算等場(chǎng)景;包裝類通常用于需要對(duì)象的地方,比如集合框架,或者需要使用包裝類提供的方法,以及進(jìn)行類型轉(zhuǎn)換等。