對於已有的mysql主從項目,應對數據量大時每每採起分庫分表的作法,爲了縮短頁面響應採用一主多從的 主寫+從讀 的讀寫分離架構。
redis:Redis中文網:內存存儲的數據結構服務器,可用做數據庫,高速緩存和消息隊列代理...。使用redis一:使用redis做爲php的緩存層,存儲經常使用、相對固定的公共數據;二:添加redis緩存,組成 mysql寫+ redis讀 的架構;三:甚至直接採用 redis讀+寫 的架構。
mysql遷移redis須要後臺程序的緊密配合。「讀寫分離」容易出現數據不一致的問題。php
傳統先後端優化途徑: 1. 前端 減小請求次數:css精靈(小圖合併到大圖),data-image(data-icon:src=data:image/jpg;base64;xx,小圖合併到js文件); 2. 網關 web資源防盜鏈refer監測,nginx限流,nginx負載均衡、nginx緩存靜態資源、gzip等,http2.0; 3. 後端 使用redis、memcache緩存,mysql優化; 進階: 1. 網關 mysql遷移redis,分佈式集羣部署; 2. 後端 添加針對高併發的消息隊列,多線程、協程化,使用鏈接池; 分佈式部署常見問題: 登陸session共享問題;讀寫分離的同步數據問題。 另外還各類諸如圖片數據庫、對象存儲等。
要同時在多臺服務器上處理好比:庫存超賣、訂單支付問題須要頻繁的過程校驗,因此對並行任務串行化、使用一臺機器、單一線程處理這種一致性問題最爲穩妥。應對大數據量的狀況採用消息隊列,平衡服務器壓力。css
rabbitmq官方docker說明,參考《Rabbitmq集羣高可用部署詳細》這裏部署普通模式。html
[]:~/tmp/dk/rabbitmq# docker pull rabbitmq #docker run --name rabbit --network mybridge -e RABBITMQ_ERLANG_COOKIE='123456' -d rabbitmq #docker cp rabbit:/etc/rabbitmq/rabbitmq.conf ./複製出配置文件 []:~/tmp/dk/rabbitmq# docker run --name rbt1 \ --network mybridge --ip=172.1.12.13 \ -v /root/tmp/dk/rabbitmq/rabbitmq.conf \ -v /root/tmp/dk/rabbitmq/data13:/var/lib/rabbitmq/mnesia \ -e RABBITMQ_ERLANG_COOKIE='123456' \ -d rabbitmq []:~/tmp/dk/rabbitmq# docker run --name rbt2 \ --network mybridge --ip=172.1.12.14 \ -v /root/tmp/dk/rabbitmq/rabbitmq.conf \ -v /root/tmp/dk/rabbitmq/data14:/var/lib/rabbitmq/mnesia \ -e RABBITMQ_ERLANG_COOKIE='123456' \ -d rabbitmq