<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                > 原文出處:http://weibo.com/p/1001643875679132642345 > 作者:蘇星宇,[@zhuidawugui](http://weibo.com/n/zhuidawugui) ![document/2015-09-14/55f668043ad17](https://box.kancloud.cn/document_2015-09-14_55f668043ad17.png) **大綱** 微博平臺主要負責微博基礎功能。接下來將會介紹 * 平臺的作用,以及服務提供的形式 * 平臺Web服務的部署 * 平臺Web框架簡介 ## 背景 目前整體架構大體上分為三層 * 展現層:手機端,主站和第三方應用,承擔相關業務的前端展示 * 適配層:負責服務端和多個展示端的接口適配 * 服務層:提供基礎功能服務,包括Feed服務,用戶關系,開放平臺和消息箱等 ![](https://box.kancloud.cn/2015-09-14_55f66614c8d5b.jpg) 平臺作為整個微博架構的基礎功能服務層,對外以Http接口的方式提供服務。接口遵守RESTful規范。接口示例如下: ![](https://box.kancloud.cn/2015-09-14_55f66614e833d.jpg) 關于RESTful,與其說是規范,其實更像是一種架構設計風格。它主要是提供了一組設計原則和約束條件,廣泛應用于C/S或者B/S架構中。要想理解什么是RESTful,可以從它的全稱入手--Representational State Transfer,翻譯成中文是表現層狀態轉化。這段晦澀的文字省略了主語,"表現層"其實指的是"資源"(Resources)的"表現層"。核心概念包括 * 資源是由URI來指定。 * 對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。 * 通過操作資源的表現形式來操作資源。 概括起來,平臺對外提供服務的形式就是通過HTTP接口對基礎資源進行存取。 ## 平臺服務部署 對平臺的定位和服務形式有所了解后,我們看下平臺的Web服務部署結構。 ![](https://box.kancloud.cn/2015-09-14_55f666150e7e6.jpg) 平臺的服務部署在多個機房中。以北京為例,就有AX、BX和CX三個機房。自建的DNS服務會將用戶的流量根據不同的運營商切換到不同的機房。 用戶請求到達服務端后,首先會經過反向代理服務器。反向代理(Reverse Proxy)方式是指以代理服務器來接受公網上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給公網上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。平臺目前使用的反向代理有LVS和Nginx。 * LVS:Linux Virtual Server,基于IP的負載均衡和反向代理技術 * Nginx:基于HTTP的負載均衡和反向代理服務器 關于Nginx,除了以上提到的之外,還負責集群的健康檢查。這個主要是通過Nginx自帶的健康檢查模塊實現的。Nginx server會輪詢后端集群的index.jsp頁面,如果返回200則認為服務器正常,請求會正常被轉發到該服務器;返回503則進行服務器摘除,請求將不會再到達該服務器。 經過反向代理轉發后,請求會到達部署Web應用的應用服務器。平臺目前主要使用Tomcat作為應用容器。之后,請求會被統一的Web框架解析并處理。稍后會詳細講述Web框架的內容。 對于上行和下行不同的請求,請求處理的鏈路也不同。 以微博核心業務Feed流為例。應用服務器在收到下行請求(如查詢一條微博的內容)時,會直接訪問緩存資源,如果命中則直接返回結果給客戶端,否則繼續查詢DB,將結果返回客戶端。 而收到上行請求(如發微博)時,應用會將上行請求寫入一個消息隊列中。由另一個單獨的處理應用讀取消息隊列,執行上行請求的資源操作,比如寫入緩存、更新DB等等。 ![](https://box.kancloud.cn/2015-09-14_55f666153c8ba.jpg) 這種隊列加處理機的上行請求模式被平臺廣泛使用,主要有以下優點: * 解除前端應用和后端資源的耦合 * 削峰填谷:在請求量很大時,隊列可以作為緩沖,緩解后端資源的壓力 由于請求被分配到不同機房,因此多機房之間的數據也需要同步。目前我們使用虛擬消息管道WMB來同步機房之間的數據:所有的上行請求在到達某個機房后都會通過WMB重放到其他機房,從而保證機房后端資源一致。除此之外,為了容災,后端資源如緩存,DB的主從集群會分布在不同機房。彼此之間通過應用自身(Redis、MySql)或者客戶端(Memcached)來同步主從數據。 ## 平臺Web框架 下面給大家簡單介紹下我們使用的Web框架。前面我們提到,在請求到達應用容器后,首先會被統一Web框架進行處理。用戶請求在應用容器中的整個處理鏈路如下。 ![](https://box.kancloud.cn/2015-09-14_55f666155bcf2.jpg) Web框架的處理主要是將Http形式的請求轉換成應用運行環境(如JVM)理解的請求,包括接口路由、參數處理和參數校驗等等。平臺目前使用Credus作為統一的Web框架,它是一個基于Jersey改造的自研框架。 Jersey是JAX-RS(JSR311)開源參考實現用于構建RESTful Web service。特性比較豐富,包括 * 接口路由 * 功能豐富的Filter * Http參數校驗 * 文檔生成 此外Jersey還提供一些額外的API和擴展機制,所以開發人員能夠按照自己的需要對Jersey進行擴展。 在Jersey提供的擴展機制上,我們開發了Credus,主要功能有 * 封裝Jersey框架 * 定制內容 * Wiki模板 在Jersey提供的Filter機制上,Credus框架定制了一系列接口通用策略和功能。包括用戶認證、接口頻次限制、接口信息統計和返回接口JsonP封裝。另外,還進一步擴展了Jersey原有的參數校驗,增加了更多了參數校驗方式。Web請求在Credus框架中的處理過程如下 ![](https://box.kancloud.cn/2015-09-14_55f666157b84c.jpg) ## 總結 這次和大家分享了微博平臺的相關知識,包括平臺功能、平臺服務部署以及平臺Web框架介紹。希望通過本次分享,大家能夠對微博平臺有所了解,同時對服務結構有一個整體的認識,對以后的工作有所幫助。 由于篇幅和主題的限制,還有很多內容沒有具體展開,有興趣可以關注[@平臺技術沙龍](http://weibo.com/n/%E5%B9%B3%E5%8F%B0%E6%8A%80%E6%9C%AF%E6%B2%99%E9%BE%99)。 ------------------**新兵訓練營簡介**------------------ 微博平臺新兵訓練營活動是微博平臺內部組織的針對新入職同學的團隊融入培訓課程,目標是團隊融入,包括人的融入,氛圍融入,技術融入。當前已經進行4期活動,很多學員迅速成長為平臺技術骨干。 微博平臺是非常注重團隊成員融入與成長的團隊,在這里有人幫你融入,有人和你一起成長,也歡迎小伙伴們加入微博平臺,歡迎私信咨詢。 ------------------**講師簡介**------------------ 蘇星宇,[@zhuidawugui](http://weibo.com/n/zhuidawugui),微博平臺及大數據部——通訊系統研發工程師,2014年1月畢業于中國科學技術大學,校招進入微博。先后負責粉服平臺、群聊、微博相機消息箱等業務后端設計和研發工作。關注分布式系統設計和服務保障,Storm流式處理。新兵訓練營第三期學員
                  <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>

                              哎呀哎呀视频在线观看