目錄
1.前言
2. 主從架構(gòu)
? ? ? ? 2.1 主從架構(gòu)的優(yōu)點(diǎn)
? ? ? ?2.2?主從架構(gòu)的應(yīng)用場(chǎng)景
? ? ? ? 2.3?主從架構(gòu)的實(shí)現(xiàn)
? ? ? ? 2.4 主從架構(gòu)的示例
3. 主從架構(gòu)設(shè)計(jì)的延伸
????????3.1?主備模式
????????3.2? 主從復(fù)制
????????3.3 集群分片
????????3.4 異地多活
4. 總結(jié)
1.前言
????????作為一個(gè)架構(gòu)設(shè)計(jì)小白,我們通常用了很多種工具,比如 Mysql 、Redis、Kafka、?Hdfs、Hbase、MongoDB、RocketMQ等等,但是這些優(yōu)秀工具,是如何設(shè)計(jì)的這么優(yōu)秀?我們有的一知半解,有的甚至干脆不講,只要能用就行。下面我主要做個(gè)簡(jiǎn)短的介紹,算是普及了以下知識(shí),讓小伙伴們知道是什么,最起碼有這方面的印象就好,好了,下面我們開始介紹:
2. 主從架構(gòu)
????????主從架構(gòu)設(shè)計(jì)模式是一種常見(jiàn)的軟件設(shè)計(jì)模式,它將系統(tǒng)劃分為兩個(gè)或多個(gè)組件:一個(gè)主組件和一個(gè)或多個(gè)從組件。主組件負(fù)責(zé)管理和控制整個(gè)系統(tǒng),而從組件負(fù)責(zé)執(zhí)行主組件分配的任務(wù)。
? ? ? ? 2.1 主從架構(gòu)的優(yōu)點(diǎn)
? ? ? ? (1)可擴(kuò)展性:主從架構(gòu)設(shè)計(jì)模式可以很容易地?cái)U(kuò)展,以適應(yīng)不斷增長(zhǎng)的系統(tǒng)需求。只需添加更多的從組件即可提高系統(tǒng)的性能。
????????(2)可靠性:主從架構(gòu)設(shè)計(jì)模式具有很高的可靠性,因?yàn)槿绻鹘M件發(fā)生故障,從組件可以繼續(xù)運(yùn)行。
????????(3)可用性:主從架構(gòu)設(shè)計(jì)模式具有很高的可用性,因?yàn)槿绻鹘M件發(fā)生故障,從組件可以立即接管主組件的任務(wù)。 主從架構(gòu)設(shè)計(jì)模式也有一些缺點(diǎn):
????????(4)單點(diǎn)故障:主組件是整個(gè)系統(tǒng)的單點(diǎn)故障,如果主組件發(fā)生故障,整個(gè)系統(tǒng)將無(wú)法運(yùn)行。
? ? ? ? (5)性能瓶頸:主組件可能會(huì)成為系統(tǒng)的性能瓶頸,因?yàn)樗姓?qǐng)求都必須經(jīng)過(guò)主組件。
? ? ? ?2.2?主從架構(gòu)的應(yīng)用場(chǎng)景
????????主從架構(gòu)設(shè)計(jì)模式可以應(yīng)用于各種各樣的場(chǎng)景,包括:
? ? ? ? (1)數(shù)據(jù)庫(kù)系統(tǒng):主從架構(gòu)設(shè)計(jì)模式可以用于數(shù)據(jù)庫(kù)系統(tǒng),其中主組件負(fù)責(zé)管理數(shù)據(jù)庫(kù),而從組件負(fù)責(zé)執(zhí)行數(shù)據(jù)庫(kù)查詢。
? ? ? ? (2)Web 服務(wù)器:主從架構(gòu)設(shè)計(jì)模式可以用于 Web 服務(wù)器,其中主組件負(fù)責(zé)處理用戶請(qǐng)求,而從組件負(fù)責(zé)生成網(wǎng)頁(yè)。
? ? ? ? (3)分布式系統(tǒng):主從架構(gòu)設(shè)計(jì)模式可以用于分布式系統(tǒng),其中主組件負(fù)責(zé)管理整個(gè)系統(tǒng),而從組件負(fù)責(zé)執(zhí)行主組件分配的任務(wù)。
? ? ? ? 2.3?主從架構(gòu)的實(shí)現(xiàn)
?????????主從架構(gòu)設(shè)計(jì)模式可以通過(guò)多種方式實(shí)現(xiàn),包括:
?????????(1)進(jìn)程:主組件和從組件可以作為獨(dú)立的進(jìn)程運(yùn)行。
???????? (2)線程:主組件和從組件可以作為同一個(gè)進(jìn)程中的不同線程運(yùn)行。
? ? ? ? ?(3)網(wǎng)絡(luò):主組件和從組件可以通過(guò)網(wǎng)絡(luò)通信。
? ? ? ? 2.4 主從架構(gòu)的示例
?????????以下是一個(gè)主從架構(gòu)設(shè)計(jì)模式的示例:
class Master {
public void start() {
// 創(chuàng)建從組件
Slave slave1 = new Slave();
Slave slave2 = new Slave();
// 啟動(dòng)從組件
slave1.start();
slave2.start();
// 等待從組件完成任務(wù)
slave1.join();
slave2.join();
}
}
class Slave {
public void run() {
// 執(zhí)行主組件分配的任務(wù)
// ...
}
}
在這個(gè)示例中,主組件負(fù)責(zé)創(chuàng)建和啟動(dòng)從組件,然后等待從組件完成任務(wù)。從組件負(fù)責(zé)執(zhí)行主組件分配的任務(wù)。
3. 主從架構(gòu)設(shè)計(jì)的延伸
? ? ? ? 從上文我們了解了,主從架構(gòu)的優(yōu)點(diǎn),應(yīng)用場(chǎng)景以及應(yīng)用中的實(shí)現(xiàn)方式,下面我們?cè)僬f(shuō)下,平常我們所聽到的一些架構(gòu)模式是怎么樣的,例如:主備模式、主從復(fù)制、集群分片、異地多活,這些名詞又是什么?又該怎么理解呢?我們下面一一介紹:
????????3.1?主備模式
? ? ? ? 主備模式實(shí)際就是一主多備,master 負(fù)責(zé)提供讀寫服務(wù),slave 作為數(shù)據(jù)備份,一旦主機(jī)宕機(jī),將其中一個(gè)備節(jié)點(diǎn)作為主節(jié)點(diǎn)。通常是在單體應(yīng)用中,我們采用nginx 做負(fù)載時(shí)候,會(huì)用到的多,一旦一個(gè)主庫(kù)宕機(jī),我們發(fā)現(xiàn)后,可以修改配置切換主庫(kù)。這種模式,主要還是依靠主庫(kù),備份的只是為了防備而已,不知道什么時(shí)候才會(huì)用上。
????????3.2? 主從復(fù)制
????????主從復(fù)制實(shí)際是一主多從,master 對(duì)外提供讀寫服務(wù),slave 作為數(shù)據(jù)備份提供只讀服務(wù)。主機(jī)定期復(fù)制數(shù)據(jù)給從機(jī)。多副本的關(guān)鍵問(wèn)題是保證數(shù)據(jù)一致性,通常需要考慮數(shù)據(jù)同步延時(shí)的問(wèn)題。通常用在數(shù)據(jù)庫(kù)中的居多,另外主從再結(jié)合注冊(cè)中心,自動(dòng)選舉,就可以實(shí)現(xiàn)自主切換主庫(kù),數(shù)據(jù)備份這塊一般會(huì)在晚上進(jìn)行,白天會(huì)影響主數(shù)據(jù)庫(kù)的讀寫性能。
? ? ? ? 另外這個(gè)主從復(fù)制的思維模式,也大多數(shù)是用在我們平常使用的中間件上面,RocketMQ、Mysql、MongoDB、Redis中,我們?cè)谟玫竭@些,或者部署的時(shí)候可以好好理解下,這種設(shè)計(jì)模式思維。
????????3.3 集群分片
????????集群分片是為了解決每臺(tái)機(jī)器上存儲(chǔ)全量數(shù)據(jù)的問(wèn)題,面對(duì)大數(shù)據(jù)單機(jī)的存儲(chǔ)量總是有上限的,當(dāng)面對(duì) PB 級(jí)數(shù)據(jù)時(shí),單機(jī)是無(wú)法支撐的,因此就需要對(duì)數(shù)據(jù)進(jìn)行分片。這個(gè)設(shè)計(jì)模式,我們?cè)诖髷?shù)據(jù)的設(shè)計(jì)中,會(huì)經(jīng)常的遇到,例如,HDFS 的強(qiáng)大存儲(chǔ)能力,還有容錯(cuò)能力,都是依靠這個(gè)集群的分片設(shè)計(jì),簡(jiǎn)單的理解,就是說(shuō),我把一個(gè)大文件,分散成多個(gè)小文件,這樣我無(wú)論是存儲(chǔ),還是計(jì)算的時(shí)候,都會(huì)很快,如果下載這個(gè)大文件,我再合并下就可以了,計(jì)算的時(shí)候,也是多個(gè)小文件并行計(jì)算,最后把結(jié)果合并,這樣提高了性能和效率;還有個(gè)就是Flink? 這個(gè)是用到這個(gè)思想最多的系統(tǒng),他把任務(wù)計(jì)算這塊用到了極致,大家有興趣的可以研究下。
????????3.4 異地多活
????????異地就是指在地理位置上不同的地方,可分為同城異地、跨城異地、跨國(guó)異地,多活就是指不同地理位置上的系統(tǒng)都能夠提供服務(wù)。這種架構(gòu)的復(fù)雜度較高,且部署成本也會(huì)提高。
????????這個(gè)設(shè)計(jì)設(shè)計(jì)模式,主要用在特別大的系統(tǒng)上,為了加深理解,我舉個(gè)例子方便大家的理解。就是我們現(xiàn)在出門所使用的地圖,大家都不陌生吧,作為基礎(chǔ)性質(zhì)的工具,保障他的安全穩(wěn)定是非常必要的,拿淘寶來(lái)說(shuō),阿里收購(gòu)開發(fā)高德地圖,是很有必要的,因?yàn)樗挠唵?,支付,配送物流這些,都是需要依賴地圖信息的,首先他必須要把這塊掌握在自己手中,其次保證他的穩(wěn)定性。也就是他不可能把數(shù)據(jù)只存放到一個(gè)地方,會(huì)在多個(gè)地方都會(huì)存一份這樣的數(shù)據(jù),這樣在某個(gè)地方的服務(wù)器被地震或者其他不可預(yù)期的破壞了,不會(huì)影響服務(wù)的正常運(yùn)行。這是異地多活的目的。
? ? ? ? 異地多活的技術(shù)這塊更加復(fù)雜,簡(jiǎn)單的說(shuō)下一個(gè)兩地多活的吧,就是可以把一個(gè)服務(wù)的數(shù)據(jù),同時(shí)保存到兩個(gè)地方的服務(wù)器就可以了,我們可以先這樣的理解。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-823769.html
4. 總結(jié)
? ? ? ? 本文介紹了,主從架構(gòu)的優(yōu)缺點(diǎn),應(yīng)用場(chǎng)景,以及實(shí)現(xiàn)手段,讓大家了解了主從架構(gòu)是個(gè)什么東西。又分別介紹了平常我們?cè)诠ぷ髦泻褪褂玫闹虚g件中所涉及到的幾種設(shè)計(jì)模式,加深了對(duì)主從的設(shè)計(jì)思維的理解,希望我們能夠在平常的工作中多多的體會(huì)這些設(shè)計(jì)模式思維,讓我們變得更加的優(yōu)秀。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-823769.html
到了這里,關(guān)于小白初探架構(gòu)模式—常用的設(shè)計(jì)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!