<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      應用系統架構演變初探

      背景

          近幾年的互聯網創業風潮持續在高漲中,所涉及的行業從涵蓋了社交、資訊、電商、生活服務等方方面面。其中也涌現不少優秀的APP,而這些產品或平臺的特點都包含了"快速",即更新快,迭代快的特性。
          然而作為一名軟件工程師的角度,按以前軟件工程的理論來說,系統在設計初期應考慮更多的復雜度、良好的擴展性,盡可能達到以不變應萬變的結果,而這些快速變更的新秀產品,在系統架構上如何做到靈活擴展、快速演進的呢? 這便是以下要開始探討的內容。
       
       

      一、初定系統架構

          在最開始的時候,產品經理(或項目經理)找到你,在嘮嘮叨叨敘述完整個系統的功能需求后,要求你一個月內就開發出來。
          
      經理:
          "領導那邊催得要命,一個月內必須上線!"
          "這些功能都很常規呢,需要開發這么久嗎!"
       
      你:
          ...

       

          當然,以上的場景稍顯夸張,但在互聯網思維方式的APP開發場景下,這樣的節奏其實很常見。
          研發經理都是任勞任怨的角兒,于是乎,大腦開始高速運轉:
      "這么短的的時間" .. "好吧,先不考慮性能問題了!"
      "單元測試也可以省了,做好自測就可以,能省下不少時間呢"

         

          經過一輪掙扎和思考,研發經理推斷出了產品的第一代系統架構

          
          
       
          架構特點
              單點,以滿足功能為主,簡單、輕量級架構。
       
          數據流
              來自多種場景的的http請求直接由單個server接入、完成業務邏輯處理、輸出計算結果。
       
          組件介紹 

               1    App Server,應用系統的服務端節點,可以有很多種選擇,以Java系列為例

                   tomcat

                   最流行不過的j2ee容器,官網 http://tomcat.apache.org/

                   jetty

                   一款更為輕量級的servlet容器,輕量小巧,提供可編程server的實現(容易嵌入),在continuation機制也有比較良好的表現。

                   詳細參見 http://www.eclipse.org/jetty/

                   playframework

                   此前最為喜愛的一款非主流應用服務器,應該是首個java版本的"ruby on rails"的實現。其摒棄了j2ee繁重的各種理念枷鎖,讓編程變得更加簡單、可依賴。
                   playframework框架目前已經主推2.x (同時支持java和scala)版本,然而學習曲線相較1.2.x版本更加陡峭,建議可從1.2.5版本開始入門使用。
                         
                   值得一提的是該框架內置了netty以支持http請求的接入及處理。
                   netty是一款基于NIO實現的輕量級http服務器,
                               關于netty的實現原理可參考: http://stonexmx.blog.163.com/blog/static/122158587201061331614536/
                   play框架的官網:https://www.playframework.com/
                   
                  2  mysql,流行的開源數據庫,應用基于JPA/JDBC進行訪問,以實現數據持久化
       
                  3  memcached,高速的內存服務器系統,支持KV數據流的快速讀寫,用作數據緩存及加速訪問
                      官網地址:http://memcached.org/
       
       

      二、演變的開始

             好的,經過一個月的努力,系統上線了。
             運營也開始干活,緊接著是對線上各種問題的緊急修復。
       
             系統漸漸有了一些活躍度,在幾個月內,產品經理和研發經理開始聽到了一些抱怨:
       
       "系統怎么老掛啊,動不動就訪問不了,這什么破玩意啊"
       "我這都已經換成wifi了,圖片怎么還是一直加載不了呢?"
      .....

           所謂積少成怨,團隊終于頂不住壓力,下決心開始優化系統。針對上述的問題,分析如下:

             1  可用性;
                 單點發生崩潰,整個系統直接不可用,所有用戶將受到影響;
                 JVM的內存溢出,系統進程意外終止都可能導致這樣的問題。
       
             2  帶寬;
                 應用系統在初期設計時更多的考慮了網絡調用、html動態頁面的輸出,而針對圖片的訪問并未做過多考慮,因此文件資源訪問很快出現了瓶頸。
       
               研發經理決定將架構優化如下
       
               
           
               負載均衡
               使用nginx提供應用服務器的負載均衡,提供兩個應用服務器節點,保證單點崩潰時而系統仍然可用。
       
               文件訪問分離
               使用單獨的web服務器(nginx)用作文件訪問服務器,所有的靜態圖片地址將指向獨立域名。
       
               

      三、加速進化

             繼上一次優化之后,用戶的抱怨已經明顯減少,產品經理和領導都對此次工作表示滿意。
             研發經理開始感受到了前所未有的成就感。
       
             然而好景不長,在幾個月后公司重點引入了營銷團隊。這是相當給力的團隊,在短短的時間內,在各大網絡平臺布置了多個入口。
            各種推廣活動、事件營銷接踵而來。最可觀的如在微信朋友圈的一次事件營銷直接引入了好幾倍的用戶量。
            這樣的情況在互聯網產品的發展軌跡上至少也可以稱得上一次小小的爆發式增長了。
       
             當然,領導、產品經理都開心和興奮起來了。但這次,研發經理內心開始發愁了:
       
            1  訪問壓力;
                一個server的并發處理能力很容易達到上限,一旦超過負載閾值,將直接導致訪問時長加大,甚至系統崩潰、無法訪問等情形;
       
            2  數據存取;
                數據量的擴充,單個數據庫表不斷增大,查詢速度將產生下降;
                此外數據庫的單點也成為隱患
            
            3  緩存空間;
                與數據庫同理,為加速更多數據的訪問,需要提供更大容量緩存空間;
       
            這次,研發經理將系統架構做了一次較為徹底的改進:
       
                  
       
             負載均衡
             增加負載均衡的服務器節點,提高整體處理能力;
             
             數據庫擴展
             采取水平切分的方式,實現基于Shard的分布式數據庫集群;
            
             memcached集群
             開啟多個memcached節點,組成高可用的緩存集群,同時可支持更大的緩存空間
       
             其中對于服務端程序改造最大的在于分布式Shard數據的實現,一般可從數據量較大的局部表開始切分,在數據存取上加入水平分庫的機制;
             當然此時的數據遷移工作也是一個重點。
       
       

      四、未來的展望

             至此,系統優化已經告一段落。當前的后臺架構已經處在一個表現穩定,容易擴展的一個狀態。
             性能指標方面大致已經可以達到百萬級用戶量,日PV過百萬,甚至還可能更好。
             然而這還僅僅是一個雛形,應用系統的場景是多種多樣的,在未來需要解決的問題往往不僅僅這些,比如:
       
          
            1  系統存在全文搜索、或是標簽式搜索的場景,為了提高搜索性能,你可能會引入sphinx中間件;
                sphinx的中文版本為coreseek(可支持中文全文搜索),。
                詳見官網:http://www.coreseek.cn/
       
            2  為了提高事務處理的效率,你需要隊列服務器來解決,這個可以是ttserver + worker的模式;
       
            3  頻繁的處理緩存數據的解析在開發上會比較麻煩,你還可以更換redis來直接支持數據結構式的緩存...
                redis為一款支持數據結構緩存及數據持久化的優秀的nosql中間件,
                官網地址:http://redis.io/
       

       備注

              架構設計需秉承的"適用"原則,不同業務場景所采取的架構都會有些差異,此處僅僅討論最常見的擴展思路,關于讀寫分離、數據主備等做法在此不做討論。
              本文所提及的故事情節均屬杜撰,如有雷同,實屬巧合。

       

      posted @ 2015-03-28 19:35  美碼師  閱讀(4156)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 国产精品久久无码不卡黑寡妇| 日韩人妻系列无码专区| 色国产视频| 免费无码黄十八禁网站| 国产综合一区二区三区麻豆| 日本一区二区三区在线 |观看| 国产精品www夜色视频| 成人午夜在线播放| 免费国产精品视频在线| 看黄a大片日本真人视频直播| 日韩无人区码卡1卡2卡| 国产精品午夜福利91| 国产美女被遭强高潮免费一视频| 青青草国产精品日韩欧美| 国产一区二区视频啪啪视频| 欧美大胆老熟妇乱子伦视频| 高清国产精品人妻一区二区| 61精品人妻一区二区三区| 国产成人人综合亚洲欧美丁香花| 2021国产精品视频网站| 久久www免费人成看片中文| 黄页网址大全免费观看| 色哟哟www网站入口成人学校| 亚洲熟妇色自偷自拍另类| 国产成人精品亚洲精品密奴| 无码国内精品久久人妻蜜桃| 99国精品午夜福利视频不卡99| 97精品国产91久久久久久久| 欧美三级a做爰在线观看| 色综合天天综合天天更新| 377P欧洲日本亚洲大胆| 人成午夜免费大片| 久久天堂无码av网站| 亚洲精品久久久久久下一站| 欧美日韩国产图片区一区| 国产69久久精品成人看| 日本一区二区三区小视频| 国产在线精品欧美日韩电影| 爱啪啪精品一区二区三区| 亚洲国产制服丝袜高清在线| 国产第一页屁屁影院|