<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 服務器開啟gzip壓縮 ~~~ gzip on; gzip_types text/plain application/javascriptapplication/x-javascripttext/css application/xml text/javascriptapplication/x-httpd-php application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml; ~~~ 如果你在網站請求的響應頭里看到這樣的字段,那么就說明Gzip壓縮配置成功 ![](https://box.kancloud.cn/15c39b8285a52364bdee09095b5ad22d_527x241.png) > 對圖片進行壓縮不但會占用后臺大量資源,壓縮效果其實并不可觀,可以說是“弊大于利”,所以請在gzip_types 把圖片的相關項去掉。 > <br> ## 負載均衡 ### Node.js處理IO密集型請求 現在的開發流程都注重前后端分離,也就是軟件工程中常提到的“高內聚低耦合”的思想,你也可以用模塊化的思想去理解,前后解耦就相當與把一個項目分成了前端和后端兩個大模塊,中間通過接口聯系起來,分別進行開發。這樣做有什么好處?我就舉最有實際效果的一點:“異步編程”。這是我自己想的名字,因為我覺得前后解耦的形式很像我們JS中的異步隊列,傳統的開發模式是“同步”的,前端需要等后端封裝好接口,知道了能拿什么數據,再去開發,時間短,工程大。而解耦之后,我們只需要提前約定好接口,前后兩端就可以同時開發,不僅高效而且省時。 我們都知道node的核心是事件驅動,通過Event Loop去異步處理用戶請求,相比于傳統的后端服務,它們都是將用戶的每個請求分配一個進程進行處理,推薦大家去看這樣一篇[博文](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513044&idx=1&sn=9b8526e9d641b970ee5ddac02dae3c57&scene=21#wechat_redirect )。特別生動地講解了事件驅動的運行機制,通俗易懂。事件驅動的最大優勢是什么?就是在高并發IO時,不會造成堵塞,對于直播類網站,這點是至關重要的,我們有成功的先例——快手,快手強大的IO高并發究其本質一定能追溯到node。 其實現在的企業級網站,都會搭建一層node作為中間層。大概的網站框架如圖所示: ![](https://box.kancloud.cn/200fbef34b5a810ee94cccfedd50c207_720x633.png) <br> ### pm2實現Node.js“多進程” 我們都知道node的優劣,這里分享一份鏈接,找了挺久寫的還算詳細:https://www.zhihu.com/question/19653241/answer/15993549 。其實很多都是老套路,那些說node不行的都是指著node是單進程這一個軟肋開撕,告訴你,我們有解決方案了——pm2。這是它的官網:http://pm2.keymetrics.io/ 。它是一款node.js進程管理器,具體的功能,就是能在你的計算機里的每一個內核都啟動一個node.js服務,也就是說如果你的電腦或者服務器是多核處理器(現在也少見單核了吧),它就能啟動多個node.js服務,并且它能夠自動控制負載均衡,會自動將用戶的請求分發至壓力小的服務進程上處理。聽起來這東西簡直就是神器啊!而且它的功能遠遠不止這些,這里我就不作過多介紹了,大家知道我們在上線的時候需要用到它就行了,安裝的方法也很簡單,直接用npm下到全局就可以了$ npm i pm2 -g具體的使用方法還有相關特性可以參照官網。 下面是pm2啟動后的效果圖: ![](https://box.kancloud.cn/25b8f25bd6d5f6ccf4e7d1ad78c0bbb6_720x461.png) <br> ### nginx搭建反向代理 在開始搭建工作之前,首先得知道什么是反向代理。可能大家對這個名詞比較陌生,先上一張圖: ![](https://box.kancloud.cn/a7754ec22930bf047f184214ec5dc5a5_375x316.png) 所謂代理就是我們通常所說的中介,網站的反向代理就是指那臺介于用戶和我們真實服務器之間的服務器 ,它的作用便是能夠將用戶的請求分配到壓力較小的服務器上,其機制是輪詢。聽完這句話是不是感覺很耳熟,沒錯,在我介紹pm2的時候也說過同樣的話,反向代理起到的作用同pm2一樣也是實現負載均衡,你現在應該也明白了兩者之間的差異,反向代理是對服務器實現負載均衡,而pm2是對進程實現負載均衡。 大家如果想深入了解反向代理的相關知識,我推薦知乎的一個貼子:https://www.zhihu.com/question/24723688 。 ~~~ http { upstream video { ip_hash; server localhost:3000; } server { listen: 8080; location / { proxy_pass: http://video } } } ~~~ 在nginx中,模塊被分為三大類:handler、filter和upstream。而其中的upstream模塊,負責完成完成網絡數據的接收、處理和轉發,也是我們需要在反向代理中用到的模塊。接下來我們將介紹配置代碼里的內容所表示的含義: #### upstream配置信息 upstream關鍵字后緊跟的標識符是我們自定義的項目名稱,通過一對花括號在其中增添我們的配置信息。 * ip_hash 關鍵字:控制用戶再次訪問時是否連接到前一次連接的服務器 * server關鍵字:我們真實服務器的地址,這里的內容肯定是需要我們去填寫的,不然運維怎么知道你把項目放在那個服務器上了,也不知道你封裝了一層node而得去監聽3000端口。 #### server配置信息 server是nginx的基本配置,我們需要通過server將我們定義的upstream應用到服務器上。 * listen關鍵字:服務器監聽的端口 * location關鍵字:和我們之前在node層說到的路由是起同樣的功能,這里是把用戶的請求分配到對應的upstream上 <br> 參考資料 [網站性能優化實戰——從12.67s到1.06s的故事](https://zhuanlan.zhihu.com/p/35224473)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看