(高併發探測)3、分佈式場景常見問題之速度優化、數據同步問題

場景需求

對於已有的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共享問題;讀寫分離的同步數據問題。
另外還各類諸如圖片數據庫、對象存儲等。

1.分佈式問題的一致處理

要同時在多臺服務器上處理好比:庫存超賣、訂單支付問題須要頻繁的過程校驗,因此對並行任務串行化、使用一臺機器、單一線程處理這種一致性問題最爲穩妥。應對大數據量的狀況採用消息隊列,平衡服務器壓力。css

a.RabbitMQ消息隊列的使用

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
相關文章
相關標籤/搜索