億級流量緩存架構學習(一)

前言

文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/bin392328206/six-finger
種一棵樹最好的時間是十年前,其次是現在
我知道很多人不玩qq了,但是懷舊一下,歡迎加入六脈神劍Java菜鳥學習羣,羣聊號碼:549684836 鼓勵大家在技術的路上寫博客

絮叨

這個方案呢?基本上一線公司都在用的一個方案,我們公司當然達不到這個級別,但是也有用到這套解決方案的一部分東西,然後我看到這個系統,就學習一下,然後我自己打算就做一個記錄吧,不一定說自己一步步跟着幹出來,但是思想我肯定得學會,有道無術,術尚可求,有術無道,止於術。所以我們要學一樣東西,再沒有真正實踐他之前我覺得只要做到觀其大道就行。我這邊也是大致的學習一下整體的一個思路,記錄一下,各種細節的話得大家分解一個個技術點去實現的。就是一個簡單的學習記錄吧,這個方案有幾個比較重要的點

  • Redis 高可用 高性能緩存架構

  • openrestry 高性能Web服務器

商品詳情頁多級緩存實戰

商品詳情頁架構的要求->高可用 ,-> 高性能,-> 高併發 ;一般來說 業界分爲 種主流的方案

  • 中小公司的詳情頁方案

  • 頭部大公司的方案

中小公司的詳情頁方案

很多中小型 電商的商品詳情頁 可能一分鐘都沒有一個訪問,這種的話,就談不上併發設計,一個tomcat 就能搞定。

還有一種中小型公司呢?雖然說公司不大,但是也是有幾十萬日活。然後幾百萬用戶,這種公司,就是稍微大點的公司,他們的商品詳情用,採取的方案可能是全局的一個靜態頁面這樣子

  • 什麼意思呢?就是我們有把商品詳情頁直接做成一個靜態頁面,然後這樣子每次全全量的更新,把數據全部靜態放到nginx,裏面,每次數據變化的時候,我們就通過一個Java服務去渲染這個數據,然後把這個靜態頁面推送到nginx服務器。(這個推送我也沒做過,我想了下看是否能把生成的靜態頁面放到oss,然後配置一定的規則url,直接通過nginx訪問這個靜態頁面)

    • 這種方案的缺點,如果商品很多,那麼渲染的時間會很長,達不到實時的效果

    • 只能處理一些靜態的東西,如果動態數據很多,比如有庫存的,你不可能說每次去渲染,然後推送到nginx服務器,那不是更加慢?

大型公司的商品詳情頁的核心思想

其實怎麼說呢?上面這張圖就能解釋他的核心思路了,這邊小六六分幾步給大家講解一下

  • 第一步是用戶通過一個首頁嘛,我進入到了首頁,然後我看到了一個商品,這個時候我只能看到這個商品的部分信息對吧,那要看詳細信息,那麼我得點進去,此時我就是請求了一個url ,這邊小六六就隨便舉個列子,就比如說:www.hqjy.com/goods/10086;

  • 第二步,這個url呢?首先會經過我們的lb lvs,然後到我們的nginx集羣,然後nginx 找到這個商品詳情頁的靜態模板,然後裏面有一個lua腳本,這個腳本可以去nginx本地去查看 id爲 10086這個商品的動態數據,如果說這個10086商品沒有nginx 緩存那麼此時lua 就可以請求redis,如果說redis中也沒有,就直接調用商品的緩存服務(tomcat),然後商品服務查mysql es 等db 查到數據之後再緩存到redis,然後再緩存到nginx中,這樣形成一個鏈路閉環,

  • 優點不要全量更新,並且做到n級緩存,可以做多高可用,高性能,高併發

Redis的架構

其實上面的商品詳情頁方案成功的關鍵在哪裏呢?沒錯就是我們Redis的架構,你redis的qps 每秒能到幾十萬,然後能到做數據的實時備份,並且保證服務的百分之99.99可用。

redis這塊,我們公司用的雲服務,一般要自己做的話,搭建一個企業級的怎麼去考慮他的持久化方案,持久化的真實意義

其實這塊就是redis相關的知識,但是在高併發的場景redis是必須的,對於redis的用法 高可用 讀寫分離的架構,這邊就不說了,反正就是redis是高併發的基石

分佈式數據存儲的幾種算法

  • 最簡單的Hash算法

  • 一致性hash

  • hash slot

什麼是Openresty?

什麼是openresty?

OpenResty® 是一款基於 NGINX 和 LuaJIT 的 Web 平臺。

OpenResty(也稱爲 ngx_openresty)是一個全功能的 Web 應用服務器。它打包了標準的 Nginx 核心,很多的常用的第三方模塊,以及它們的大多數依賴項。

通過揉和衆多設計良好的 Nginx 模塊,OpenResty 有效地把 Nginx 服務器轉變爲一個強大的 Web 應用服務器,基於它開發人員可以使用 Lua 編程語言對 Nginx 核心以及現有的各種 Nginx C 模塊進行腳本編程,構建出可以處理一萬以上併發請求的極端高性能的 Web 應用。

藉助於Nginx的事件驅動模型和非阻塞IO,可以實現高性能的Web應用程序。而且OpenResty提供了大量組件如Mysql、Redis、Memcached等等,使在Nginx上開發Web應用更方便更簡單。目前京東,淘寶、去哪兒網等都在使用Nginx+Lua架構。

Openresty的下載安裝

小六六自己也是通過官網去安裝的,所以給大家一個官網地址 -Openresty ,其實我覺得中國人寫的 所以文檔對中文還是有很好的支持的,哈哈。

下載源碼包

我這邊是基於centos 安裝的

  • 第一步,創建一個目錄 比如我就是

mkdir /data/openresty
  • 第二步 下載包 解壓

  wget https://openresty.org/download/openresty-1.15.8.2.tar.gz
  tar -zxvf openresty-1.15.8.2.tar.gz
  • 第三步 就是要安裝一些庫 您必須將這些庫 perl 5.6.1+, libpcre, libssl安裝在您的電腦之中。對於 Linux來說, 您需要確認使用 ldconfig 命令,讓其在您的系統環境路徑中能找到它們。

yum install pcre-devel openssl-devel gcc curl
  • 第四步

 ./configure

  • 第五步 make

make
  • 第六步

sudo make install

當你完成上述步驟的時候,你目前就可以把openrestry安裝完成,

完成之後,你就去到/usr/local/openresty 裏面 這就是整個項目了

來個Hello Word

創建幾個目錄

mkdir ~/work
cd ~/work
mkdir logs/ conf/

conf/nginx.conf

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}
http {
    server {
        listen 8080;
        location / {
            default_type text/html;
            content_by_lua_block {
                ngx.say("<p>hello, world</p>")
            }
        }
    }
}

假設您已將OpenResty安裝到/usr/local/openresty(這是默認設置),我們將在環境中提供OpenResty安裝的nginx可執行文件:PATH

PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH

然後,我們使用以下配置文件啓動nginx服務器:

nginx -p `pwd`/ -c conf/nginx.conf

結尾

今天把介紹了一下Redis的緩存架構,和一個最最最簡單Openresty的入門,後面Openresty=nginx+lua  所以後面跟小六六一起來學習學習吧。

日常求贊

好了各位,以上就是這篇文章的全部內容了,能看到這裏的人呀,都是真粉

創作不易,各位的支持和認可,就是我創作的最大動力,我們下篇文章見

六脈神劍 | 文 【原創】如果本篇博客有任何錯誤,請批評指教,不勝感激 !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章