<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          前端配置化平臺——快速搞定活動頁面

          共 2783字,需瀏覽 6分鐘

           ·

          2021-03-18 18:55

          痛點及要求


          - 成本比較高:廣告活動平臺,一直以來都是變化最多耗用人力最多的一件事情,而且每次都要研發(fā)配合去開發(fā)新的頁面,每個頁面又只使用兩三天。

          - 業(yè)務(wù)對平臺的基本要求:C端的穩(wěn)定性,B端的靈活性。

          - 技術(shù)對平臺的要求:服務(wù)穩(wěn)定要在 99.999%


          項目介紹


          配置化平臺主要功能是可以靈活、方便、快捷生成活動等相關(guān)頁面,降低開發(fā)成本,新活動生成無需額外的開發(fā)工作,只需簡單配置即可快速上線。此次介紹內(nèi)容分別從后臺配置及用戶端闡述,在開始之前先簡單介紹一下 Openresty 和 Lua。


          Openresty


          OpenResty(又稱:ngx_openresty)是一個基于 Nginx 與 Lua 的高性能 Web 平臺,其內(nèi)部集成了大量精良的 Lua 庫、第三方模塊以及大多數(shù)的依賴項,用于方便地搭建能夠處理超高并發(fā)、擴展性極高的動態(tài) Web 應(yīng)用、Web 服務(wù)和動態(tài)網(wǎng)關(guān)。


          OpenResty 的目標(biāo)是讓你的 Web 服務(wù)直接跑在 Nginx 服務(wù)內(nèi)部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對 HTTP 客戶端請求,甚至于對遠(yuǎn)程后端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進(jìn)行一致的高性能響應(yīng)。所以對于一些高性能的服務(wù)來說,可以直接使用 OpenResty 訪問 Mysql 或 Redis等,而不需要通過第三方語言(PHP、Python、Ruby)等來訪問數(shù)據(jù)庫再返回,這大大提高了應(yīng)用的性能。


          Lua


          Lua 是一種輕量小巧的腳本語言,用標(biāo)準(zhǔn) C 語言編寫并以源代碼形式開放,其設(shè)計目的是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴展和定制功能。


          Lua特性


          - 輕量級:它用標(biāo)準(zhǔn) C 語言編寫并以源代碼形式開放,編譯后僅僅一百余 K,可以很方便地嵌入別的程序里。

          - 可擴展:Lua 提供了非常易于使用的擴展接口和機制,由宿主語言(通常是 C 或C++)提供這些功能。Lua 可以使用它們,就像是本來就內(nèi)置的功能一樣。

          - 其它特性:

          • 支持面向過程(procedure-oriented)編程和函數(shù)式編程(functional programming);

          • 自動內(nèi)存管理。只提供了一種通用類型的表(table),用它可以實現(xiàn)數(shù)組,哈希表,集合,對象;

          • 語言內(nèi)置模式匹配;閉包(closure);函數(shù)也可以看做一個值;提供多線程(協(xié)同進(jìn)程,并非操作系統(tǒng)所支持的線程)支持;

          • 通過閉包和 table 可以很方便地支持面向?qū)ο缶幊趟枰囊恍╆P(guān)鍵機制,比如數(shù)據(jù)抽象,虛函數(shù),繼承和重載等。


          應(yīng)用場景


          • 游戲開發(fā)

          • 獨立應(yīng)用腳本

          • Web 應(yīng)用腳本

          • 擴展和數(shù)據(jù)庫插件,如:MySQL Proxy 和 MySQL WorkBench

          • 安全系統(tǒng),如入侵檢測系統(tǒng)


          后臺配置



          后臺配置相關(guān)流程中涉及 Openresty、Nginx、Lua 腳本、ElasticSearch、Redis 等。



          Nginx配置


          部分 nginx.config 配置如下:



          1、Server 配置



          在 server 配置中還導(dǎo)入了 locations 下的部分配置,配置如下:



          當(dāng)請求 url 匹配到包含 /example/ 時,對于請求數(shù)據(jù)進(jìn)行處理,其中包含:

          1. 單條JSON限制為5M
          2. lua對于請求訪問階段處理
          3. 轉(zhuǎn)發(fā)到Es服務(wù)


          單條 JSON 限制以及請求方式的攔截都可以在配置當(dāng)中清晰地了解到,再看一下 Lua 到底做了些什么?


          2、Lua 相關(guān)


          在此配置化平臺中,Lua 的主要作用是為了同步數(shù)據(jù)到 Redis 中,這樣當(dāng)用戶端訪問數(shù)據(jù)的時候,如果是已經(jīng)存在 Redis 中且未過期的情況下,那么將會直接讀取 Redis 中的數(shù)據(jù),而不是通過 ES 服務(wù)來獲取數(shù)據(jù)。


          接下來看一下具體實現(xiàn)。首先,在 location 引入 lua 相關(guān)的配置,通過 access_by_lua_file 來嵌入 lua 相關(guān)處理。



          (1)鏈接 Redis



          (2)PUT、POST請求數(shù)據(jù)緩存


          鏈接 Redis 成功之后,開始針對請求訪問進(jìn)行處理,如果是 PUT、POST 請求對數(shù)據(jù)進(jìn)行緩存處理,并設(shè)置緩存過期時間,代碼如下:



          (3)DELETE 請求清除緩存


          當(dāng)請求方式為 DELETE 時,將數(shù)據(jù)從 Redis 數(shù)據(jù)中進(jìn)行清除,并將緩存過期時間設(shè)置為0,代碼如下:



          ElasticSearch


          ElasticSearch,簡稱 ES。ES 是一個開源的高擴展的分布式全文搜索引擎。它可以近乎實時地存儲、檢索數(shù)據(jù)。本身擴展性很好,可以擴展到上百臺服務(wù)器,處理 PB 級別的數(shù)據(jù)。ES 也是用 Java 開發(fā)并使用 Lucene 作為其核心來實現(xiàn)所有索引和搜索的功能,但是他的目的是通過簡單 RESTful API來隱藏 Lucene 的復(fù)雜性,從而讓全文搜索變得簡單。


          ElasticSearch 對比傳統(tǒng)關(guān)系型數(shù)據(jù)庫:




          - Elasticsearch-head 插件


          對于 ES 具體的數(shù)據(jù)我們可以通過 elasticsearch-head 插件來查看索引、類型、分片、文檔等信息,如下圖所示:



          - ES 后臺配置


          以欄目配置為例,其中包含 settings 中的分片設(shè)置,mappdings 中針對 menu 欄目配置的相關(guān)字段,elasticsearch-head 插件中的部分索引信息如下:



          用戶端



          此前,我們通過配置化平臺后臺配置一些相關(guān)活動相關(guān)的數(shù)據(jù),并存放在 ES 服務(wù)以及Redis 中。在用戶端時,當(dāng)有用戶訪問到我們生成好的活動頁面時,首先在 Nginx 中通過 content_by_lua_file 配置使用 Lua 對于活動配置相關(guān)的請求處理,對于非 GET 方式的請求將會直接返回 403,否則會在 Redis 中去查詢相關(guān)的數(shù)據(jù)并返回到用戶端。


          - 用戶端 Nginx 中 server 配置



          - Lua 在用戶端的請求訪問處理


          在后臺配置中已經(jīng)提到 Lua 鏈接 Redis 以及針對不同的請求方式的攔截處理,接下來看一下在用戶端相關(guān)處理,代碼如下:



          可以看到對于非 Get 方式的請求進(jìn)行攔截,并返回 403,否則將鏈接 Redis,代碼如下:



          推薦閱讀:

          基于 Vue CLI 搭建腳手架。

          破解項目臃腫之道:微前端落地實踐

          H5 活動頁面快速生成神器——Mocha

          從理解 React 框架開始,開啟金三銀四面試之旅。

          前端典型面試題:為什么 React 選擇使用 JSX ?

          尤雨溪 3 天 10 更的 Vite 究竟有什么魔力?


          點個“在看”和“”吧,

          畢竟我是要成為前端網(wǎng)紅的人。

          瀏覽 162
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  手机看黑人操逼片 | 狠狠狠狠狠插狠狠狠插狠狠狠插 | 亚洲中文字幕一二三无码欧美 | 精品日韩人妻 | 日韩无码2024 |