您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“多臺(tái)服務(wù)器代碼怎么同步”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“多臺(tái)服務(wù)器代碼怎么同步”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
我們的項(xiàng)目如果跑在一臺(tái)機(jī)器上,如果這臺(tái)機(jī)器出現(xiàn)故障的話,或者用戶請(qǐng)求量比較高,一臺(tái)機(jī)器支撐不住的話。我們的網(wǎng)站可能就訪問不了。那怎么解決呢?就需要使用多臺(tái)機(jī)器,部署一樣的程序,讓幾個(gè)機(jī)器同時(shí)的運(yùn)行我們的網(wǎng)站。那怎么怎么分發(fā)請(qǐng)求的我們的所有機(jī)器上。所以負(fù)載均衡的概念就出現(xiàn)了。
負(fù)載均衡是指基于反向代理能將現(xiàn)在所有的請(qǐng)求根據(jù)指定的策略算法,分發(fā)到不同的服務(wù)器上。常用實(shí)現(xiàn)負(fù)載均衡的可以用nginx,lvs。但是現(xiàn)在也有個(gè)問題,如果負(fù)載均衡服務(wù)器出現(xiàn)問題了怎么辦?所有冗余的概念就出現(xiàn)了。
冗余其實(shí)就是兩個(gè)或者多臺(tái)服務(wù)器 一個(gè)主服務(wù)器,一個(gè)從服務(wù)器。 假設(shè)一個(gè)主服務(wù)器的負(fù)載均衡服務(wù)器出現(xiàn)了問題,從服務(wù)器能夠替代主服務(wù)器來繼續(xù)負(fù)載均衡。實(shí)現(xiàn)的方式就是使用keepalive來搶占虛擬主機(jī)。
分布式其實(shí)就是將一個(gè)大項(xiàng)目的拆分出來,單獨(dú)運(yùn)行。
舉個(gè)上面的例子。假設(shè)我們的訪問量特別大。我們就可以做成分布式,跟cdn一樣的機(jī)制。在北京,杭州,深圳三個(gè)地方都搭建一個(gè)一模一樣的集群。離北京近的用戶就訪問北京的集群,離深圳近的就訪問深圳這邊的集群。這樣就將我們網(wǎng)戰(zhàn)給拆分3個(gè)區(qū)域了,各自獨(dú)立。
再舉個(gè)例子比如我們redis分布式。redis分布式是將redis中的數(shù)據(jù)分布到不同的服務(wù)器上面,每臺(tái)服務(wù)器存儲(chǔ)不同的內(nèi)容,而mysql集群是每臺(tái)服務(wù)器都放著一樣的數(shù)據(jù)。這也就理解了分布式和集群的概念。
mysql master服務(wù)器會(huì)把sql操作日志寫入到bin.log 日志里 slave服務(wù)器會(huì)去讀master的bin.log 日志,然后執(zhí)行sql語句。
主從有以下幾個(gè)問題。
1.master服務(wù)器能寫又能讀,slave卻只能寫。
slave讀取的數(shù)據(jù)還沒有寫入,這樣該怎么解決呢?
假如緩存,從緩存中讀取。
強(qiáng)制從master讀取。
使用pxc集群,任何一個(gè)節(jié)點(diǎn)都是可讀可寫的,讀寫強(qiáng)一致性。
如何解決數(shù)據(jù)不一致
在config/database.php
mysql配置塊中將sticky設(shè)置為true
sticky 是一個(gè) 可選值,它可用于立即讀取在當(dāng)前請(qǐng)求周期內(nèi)已寫入數(shù)據(jù)庫的記錄。若 sticky 選項(xiàng)被啟用,并且當(dāng)前請(qǐng)求周期內(nèi)執(zhí)行過 「寫」 操作,那么任何 「讀」 操作都將使用 「寫」 連接。這樣可確保同一個(gè)請(qǐng)求周期內(nèi)寫入的數(shù)據(jù)可以被立即讀取到,從而避免主從延遲導(dǎo)致數(shù)據(jù)不一致的問題。不過是否啟用它,取決于應(yīng)用程序的需求。
同步代碼到多臺(tái)服務(wù)器
Laravel為我們提供了擴(kuò)展包laravel/envoy,它為定義遠(yuǎn)程服務(wù)器的日常任務(wù),提供了一套簡潔、輕量的語法。Blade 風(fēng)格語法即可實(shí)現(xiàn)部署任務(wù)的配置、Artisan 命令的執(zhí)行等。
composer global require laravel/envoy
Envoy 任務(wù)都應(yīng)在項(xiàng)目根目錄下的 Envoy.blade.php 中定義。寫入一下內(nèi)容
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2']]) cd site git pull origin {{ $branch }} composer update php artisan migrate @endtask
以上代碼意思就是在命令行envoy run deploy時(shí)候,我們會(huì)ssh到會(huì)web-1,web-2 執(zhí)行
cd site git pull origin {{ $branch }} php artisan migrate
讀到這里,這篇“多臺(tái)服務(wù)器代碼怎么同步”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。