下面一次解釋下這些名詞的概念
#我們的專案如果跑在一台機器上,如果這台機器出現故障的話,或者用戶請求量比較高,一台機器支撐不住的話。我們的網站可能就訪問不了。那要怎麼解決呢?就需要使用多台機器,部署一樣的程序,讓幾個機器同時的運行我們的網站。那怎麼怎麼分發請求的我們所有的機器上。所以負載平衡的概念就出現了。
負載平衡是指基於反向代理能將現在所有的請求根據指定的策略演算法,分發到不同的伺服器上。常用實作負載平衡的可以用nginx,lvs。但是現在也有個問題,如果負載平衡伺服器出現問題了怎麼辦?所有冗餘的概念就出現了。
冗餘其實就是兩個或多台伺服器 一個主伺服器,一個從伺服器。假設一個主伺服器的負載平衡伺服器出現了問題,從伺服器能夠取代主伺服器來繼續負載平衡。實現的方式就是使用keepalive來搶佔虛擬主機。
分散式其實就是將一個大專案的拆分出來,單獨運行。
舉個上面的例子。假設我們的訪問量特別大。我們就可以做成分佈式,跟cdn一樣的機制。在北京,杭州,深圳三個地方都搭建一個一模一樣的集群。離北京近的用戶就訪問北京的集群,離深圳近的就訪問深圳這邊的集群。這樣就將我們網戰給拆分3個區域了,各自獨立。
再舉個例子比如我們redis分散式。 redis分散式是將redis中的資料分散到不同的伺服器上面,每台伺服器儲存不同的內容,而mysql叢集是每台伺服器都放著一樣的資料。這也就理解了分散式和集群的概念。
mysql master伺服器會把sql操作日誌寫入到bin.log 日誌裡 slave伺服器會去讀master的bin.log 日誌,然後執行sql語句。
主從有以下幾個問題。
1.master伺服器能寫又能讀,slave卻只能寫。
slave讀取的資料還沒寫入,這樣該怎麼解決呢?
1.假如緩存,從快取讀取。
2.強制從master讀取。
3.使用pxc集群,任何一個節點都是可讀可寫的,讀寫強一致性。
在config/database.php mysql設定區塊中將sticky設為true
sticky 是一個可選值,它可用於立即讀取取在目前請求週期內已寫入資料庫的記錄。若 sticky 選項啟用,且目前請求週期內執行過 “寫入” 操作,那麼任何 “讀取” 操作都會使用 “寫入” 連線。這樣可確保同一個請求週期內寫入的資料可以立即讀取到,從而避免主從延遲導致資料不一致的問題。不過是否啟用它,取決於應用程式的需求。
laravel為我們提供了擴充包laravel/envoy,它為定義遠端伺服器的日常任務,提供了一套簡潔、輕量的語法。 Blade 風格語法即可實現部署任務的設定、Artisan 指令的執行等。
composer global require laravel/envoy
Envoy 任務都應在專案根目錄下的 Envoy.blade.php 中定義。寫入一下內容
@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時候,我們會ssh到會web-1,web-2 執行
cd site git pull origin {{ $branch }} php artisan migrate
當然這個前提是我們已經加入了ssh到遠端的伺服器上。
更多Laravel相關技術文章,請造訪Laravel教學專欄進行學習!
以上是負載平衡,分散式,叢集的理解,多台伺服器程式碼如何同步的詳細內容。更多資訊請關注PHP中文網其他相關文章!