前言:說到應對大流量、高並發的解決方案的時候,總會有這樣的回答,如:讀寫分離,主從復制...等,數據庫層今天先不討論,那么今天我們就來看看怎么在應用層實現讀寫分離。
框架:laravel5.7(所有配置本人親測)
說明:
Laravel默認將 select 的語句讓 read 指定的數據庫執行,insert/update/delete 則交給 write 指定的數據庫,達到讀寫分離的作用。
這些設置對原始查詢 raw queries,查詢生成器 query builder,以及對象映射 Eloquent 都生效。
一、單讀庫配置(一主一從)
打開database.php文件,找到mysql配置處,完成效果如下圖


二、多讀庫配置(一主多從)

.env文件

三、多寫多讀配置(多主多從)

.env文件

四、sticky 項
說明:sticky 項是一個可選的配置值,可用於在當前請求生命周期內允許立即讀取寫入數據庫的記錄。
如果 sticky 選項被啟用並且一個"寫"操作在當前生命周期內發生,則后續所有"讀"操作都會使用這個"寫"連接(前提是同一個請求生命周期內),
這樣就可以確保同一個請求生命周期內寫入的數據都可以立即被讀取到,從而避免主從延遲導致的數據不一致,是否啟用這一功能取決於你。
解釋:當然,這只是一個針對分布式數據庫系統中主從數據同步延遲的一個非常初級的解決方案,訪問量不高的中小網站可以這么做,大流量高並發網站肯定不能這么干,
主從讀寫分離本來就是為了解決單點性能問題,這樣其實是把問題又引回去了,造成所有讀寫都集中到寫數據庫,對於高並發頻繁寫的場景下,后果可能是不堪設想的,
但是話說回來,對於並發量不那么高,寫操作不那么頻繁的中小型站點來說,sticky 這種方式不失為一個初級的解決方案。
示意圖(紅框中)

以上就是本篇文章的全部內容了,下篇則會介紹laravel實現底層讀寫分離的代碼
