日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汽车之家移动主App服务端架构变迁

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汽车之家移动主App服务端架构变迁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聲明:本文為《程序員》原創文章,未經允許不得轉載,更多精彩文章請訂閱2016年程序員:http://dingyue.programmer.com.cn/
導語:汽車之家移動主App服務端架構經歷了從外包的無架構概念,到流量激增后的架構調整、重構等。本文主要介紹了其主App服務端架構演進歷程中面臨的主要挑戰、解決思路和實施過程。

隨著移動互聯網時代的到來,移動技術也隨之飛速發展。如今,App已然成為絕大多數互聯網企業用來獲取用戶的核心渠道。以往以PC為主要承載平臺的各業務線,源源不斷集成加入到移動項目中來,原本以產品為中心快速迭代的單一開發模式,已經無法應對這洶涌爆炸式的業務接入和高速增長。同時伴隨著用戶量的增長,流量的持續暴增,系統架構面臨的一系列挑戰和轉型。怎么構建出高可靠、高擴展、低成本、多快好省系統體系架構已成為業界樂而不厭的長談話題。

發展

2010年-2012年

2010年移動端剛剛興起,公司組建了移動團隊(剛開始就幾個人)帶領著一家外包公司做了第一版。當時業務十分簡單,即把PC端的論壇文章等直接搬App端進行展示,服務端也是ALL IN ONE的結構,也沒有架構的概念(如圖1),雖然系統耦合嚴重、但流量低也不見明顯的問題。


圖1 服務體系結構

2013年-2014年

2013年公司上市,業務擴展,移動端流量開始增長,特別是2014年。

2014年末流量較年初增長了2.5倍。而原來的這種ALL-IN-ONE體系結構的弊端日益凸顯,服務端經常由于高峰期的訪問壓力宕機。這種高耦合的結構常常由于某一個接口的超限流量導致其他接口也不能正常訪問。

而隨著業務的不斷擴張,應用的不斷迭代導致應用的體積不斷增大,項目越來越臃腫,冗余增加,維護成本水漲船高……老架構力不從心。

面對日益嚴重的服務壓力,公司開始組建自己的移動研發團隊(C#+SQL Sever),服務端程序進行了第一次重構。


圖2 服務體系結構

服務端程序進行對應用分層(接口層API、業務邏輯層Service、數據訪問層DAO)、分割(根據App端的各個模塊把原來的ALL-IN-ONE的結構分割成不同服務)、做動靜分離CDN加速、讀寫分離、集群負載。同時公司運維部根據我們的業務特點研發自己的CDN服務、二級緩存SCS服務對應用做進一步加速,經過這次改造,暫時緩解了服務端的壓力。

2014年-至今

我2015年初加入汽車之家,當時移動端面臨的問題如下:

  • 請求量更大,應該說是流量暴增的時代:2015年9月,汽車之家移動端日均獨立用戶總訪問量較2014年9月同比增加約73.0%。2016年初移動端PV實現億級。

  • 依賴資源多: 依賴Redis、DB、RPC、HTTP、MongDB、MQ、數十個業務。

  • 垂直業務耦合嚴重:如帖子、文章最終頁和評論系統這種垂直耦合業務常常出現評論系統掛掉導致帖子或文章最終不能訪問的情況。

  • 運營推廣活動多:為了增加用戶粘度,提高用戶活躍度,各個業務方和我們自己的運營推廣活動大量增加。

  • 發版快:每月固定兩次發版,多版本并存。

  • 微軟技術體系:微軟收費服務都需要大把白花花的銀子,且高質量的.NET工程師越來越難招,生態圈不太景氣。

為了應對流量的暴漲,服務的高可用性和團隊變大,所有開發人員集中針對同一個系統的嚴重沖突,App端進行插件化改造。服務端2015年初也開始了二次重構計劃,進行了一次脫胎換骨的轉型,全面擁抱Java,主要的技術改變有:

Windows→Linux、SQL Server→MySQL、IIS→Tomcat、C#→Java。

重構

需求方面主要有這幾點:文章、帖子的評論這種垂直業務不能掛掉;業務爆發能夠快速實現;依賴(多業務方、多資源)解耦,故障時絕對不允許相互影響。

解決方案分為以下幾步:

  • 分解。首先是團隊:根據App插件化的劃分,對服務端團隊研發人員進行分組,各小組只負責自己的模塊,每月固定的兩次迭代,各小組服務獨立上線互不影響。其次是服務結構,包括水平擴展:多集群、多機房部署提高并發能力和容災能力;垂直拆分:垂直業務進一步拆分,依賴解耦;業務分片:按功能特點分開部署,如活動、秒殺、推送等物理隔離;水平拆分:服務分層,功能和非功能分開,基礎核心服務非核心服務分開。

  • 業務服務化,相互獨立,如咨詢、論壇、廣告等。

  • 無狀態設計。調用鏈路無單點、無狀態服務,可線性擴容(盡可能不要把狀態數據保存到本機、接口調用做到冪等性)。

  • 可復用。復用的粒度是業務邏輯的抽象服務,不是服務實現的細節、服務引用只依賴服務抽象。

  • 資源分層。Redis、DB、MQ 主從設計,多機房部署、保障高可用。

  • 松耦合、自保護、防雪崩。跨業務調用盡可能異步解耦,必須同步調用時設置超時、隊列大小、線程池大小、相對穩定的基礎服務與易變流程的服務分層;線程池保護,超出服務器最大線程時DROP請求(Nginx、Tomcat)。Redis、DB、MQ、Turbo(RPC)、HttpClient等在后端資源出問題時可以自動降級請求調用、發送異常報警。

  • 服務隔離可自理。服務可降級、可限流、可開關、可監控、白名單機制。

  • 各個服務獨立部署互不影響,服務異常自動熔斷,根據各個服務特點走相應的降級策略。基礎服務下沉可復用基礎服務自治、相互獨立、基礎服務要求盡量精簡可水平擴展、物理隔離保證穩定(如用戶中心、產品庫)。

  • 分清核心業務。核心業務服務盡量精簡,利于穩定(運行時優先保證主流程順利完成、輔助流程采用異步:如日志上報)。


圖3 單服務結構

實現

  • 單服務的體系結構

App端請求經過接入層(CDN、LVS、NG/SCS),通過接口控制層的設置校驗(CDN配置、反劫持配置、日志服務配置、安全校驗……)調用API層發布的REST接口,通過參數校驗后調用業務邏輯層的業務實現。同時業務邏輯層通過數據接口層(SourceInterface源接口服務、DbUtils數據庫分開分表組件、AIS4J異步請求組件、Trubo RPC服務)調用資源層的資源服務來完成本次業務的數據組裝,完成本次業務的調用。

配置方面,一個基于zookeeper的配置服務(配置服務用于系統的各種開關的實時配置如:源接口的限流熔斷閾值等);Monitor:監控服務實時查看系統異常、流量;Trace:系統跟蹤服務;Log:(日志服務)。

  • RPC-Trubo體系結構


圖 4 Turbo(RPC框架)結構

為了應對服務化作服務自理,2015年底我們全面啟用公司的RPC服務Trubo
框架特點主要有:多語言服務端發布,支持C#和Java;高效透明的RPC調用,多協議支持;基于ZooKeeper的注冊中心,用于服務發現;客戶端軟負載和容錯機制;使用Spark進行服務監控與跟蹤Trace分析;整合Locker(Docker調度平臺),實現服務部署自動化。

服務發現與RPC穩定性和容錯方面,主要是雙機房部署ZooKeeper集群,主力機房5個節點(Leader/Follower集群),其他機房2個節點(Observer節點),保證性能和穩定性;Trubo客戶端服務端添加守護線程,定時校驗本地緩存和ZooKeeper的數據一致性;Trubo客戶端會將緩存的服務信息持久化到本地,即使ZooKeeper掛掉或者重啟也不影響正常調用;嵌入Trace客戶端上報收集分布式跟蹤日志。

  • 異步請求組件AIS4J


圖5 異步請求組件AIS4JJ

為了解決接口和資源依賴問題(源站或Redis、DB等資源層掛掉導致我們服務不可用的高風險),同時也為了請求響應時間受到源站依賴問題,我們封裝了異步請求組件AIS4J。同時嵌入我們的熔斷限流組件來對源站進行解耦。

引入AIS4J后大大緩解了對外部資源的依賴,提高了服務的可用性,但同時也帶來了一些問題。公司要求對緩存內容時間限定在10分鐘以內,原來的時間被平均分配到了CDN和我們的二級緩存SCS上,現在加入這個組件為了滿足10分鐘的要求必須把原來的10分鐘拆分到AIS4J上,這就需要增大系統接口的回源率(10%左右)。這個時間就要對請求時間和系統壓力上做一個權衡。

服務監測

就目前階段來說,服務分解封裝應對一段時間的流量增長已沒太大問題。但為了保證服務的高可用、系統的擴容預估、故障的實時定位……就必須有一套完善的監測報警系統。


圖6 Trace架構

圖7是系統調用追蹤服務,通過對程序Java的Instrumentation和配置系統對系統程序進行埋點跟蹤,再通過Spark對跟蹤日志進行實時分析展現。


圖7 監控報表


圖8 Trace實現

Trace實現

Trace ID標識唯一調用樹,Transaction ID標識唯一次調用,一次Trace調用會產生四條日志,Trace調用樹可以由Turbo、本地調用、HTTP或其他調用方式組成,Trace客戶端是獨立的,Turbo單向依賴Trace。


圖9 服務調用鏈圖

同時我們在APP端的請求頭中埋入Req ID,通過Req ID和Trace ID的對接記錄一次請求過程(CDN、SCS、后端服務、RPC/HttpClient調用)每一步的時間消耗。


圖10 debug模式信息展示

為了更快的定位穩定,我們在程序中預設了Debug模式,在內網環境中只要拿到請求的URL開啟Debug模式就可以快速的調出系統調用資源鏈和每一步的程序調用消耗時間。

報警實現

通過Spark對日志記錄的分析結果,會實時對接到我們的報警系統上,實現對程序異常的實時報警。報警系統通過短信、郵件方式發生,內容中包含請求的Trace ID超鏈到報表系統實現對異常問題的實時查看定位。

作者簡介:湯泉,2015年加入汽車之家,參與到移動主軟件服務端的架構設計與開發。
責編:錢曙光(qianshg@csdn.net)
本文為《程序員》原創文章,未經允許不得轉載,更多精彩文章請訂閱2016年程序員:http://dingyue.programmer.com.cn/


2016年4月22日-23日,由CSDN重磅打造的SDCC 2016數據庫&架構技術峰會將在深圳舉行,目前18位講師和議題已全部確認。兩場峰會大牛講師來自百度、騰訊、阿里、京東、小米、唯品會、滴滴出行、攜程等知名互聯網公司,共同探討高可用/高并發/高穩定/高流量的系統架構設計、秒殺系統架構、搜索架構、中小企業架構之道、數據平臺系統演進歷程和技術剖析、傳統數據庫與分布式數據庫選型/備份/恢復原理及優化實踐、大數據應用實戰等領域的熱點話題與技術。【目前限時6折,點擊這里搶票】

總結

以上是生活随笔為你收集整理的汽车之家移动主App服务端架构变迁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九九热久久免费视频 | 毛片基地在线播放 | 久久久久久久一 | 国产伊人久久 | 伊人逼逼 | gogo亚洲国模私拍人体 | 国产精品边吃奶边做爽 | 免费观看亚洲 | 亚洲一区二区在线电影 | 日韩无套无码精品 | xxxxhd欧美| 午夜a视频 | 草草在线免费视频 | 白嫩初高中害羞小美女 | 91精彩视频 | 性做久久久久久久久 | 在线色资源 | 久草福利资源站 | 亚洲精品国产精品国自产观看 | 亚洲aⅴ乱码精品成人区 | 东北少妇不戴套对白第一次 | 波多野结衣视频播放 | 美女又大又黄 | 欧洲精品视频在线观看 | 欧美精品日韩少妇 | 成人激情视频网站 | 韩国日本中文字幕 | 亚洲国产精品成人午夜在线观看 | 国产免费又爽又色又粗视频 | 亚洲第一淫片 | 国产精品无码白浆高潮 | 国产娇小hdxxxx乱 | 97久久国产 | 国产做受高潮漫动 | a毛片在线 | 国产毛片毛片毛片毛片毛片 | 加勒比在线免费视频 | 国产麻豆乱码精品一区二区三区 | 欧美操操操 | 一区二区三区在线免费 | 一区二区三区蜜桃 | 国产情侣av在线 | 国语播放老妇呻吟对白 | 久久成人国产 | 亚洲天堂久久 | 精品国产一区二区三区av性色 | 狠狠做深爱婷婷久久综合一区 | 中文字幕不卡在线播放 | 人人干人人草 | 国产资源精品 | 亚洲网站一区 | 精品在线免费观看视频 | 又污又黄又爽的网站 | 亚洲麻豆精品 | 97av在线| 娇小6一8小毛片 | av天天草| 69xxxx日本 | 久久久久国产精品 | 永久免费黄色片 | 国产视频欧美 | 中文在线观看免费视频 | 国产成人a v | fexx性欧美| 一本色道无码道dvd在线观看 | 香蕉久久夜色精品国产使用方法 | 91中文字幕在线播放 | 亚洲一级免费视频 | 波多野结衣在线观看一区二区三区 | 日本高清中文字幕 | 清纯唯美亚洲色图 | 91精品国产色综合久久不8 | 久久国产一区 | 亚洲成年 | 一区二区在线播放视频 | 日韩一区二区三区精品 | 91成人精品 | 变态视屏 | 123毛片 | 性感美女视频一二三 | 国产美女精品视频国产 | 精品99久久久久成人网站免费 | 国产精品毛片久久久久久 | 一区二区三区四区高清视频 | 欧美日韩在线视频免费 | 欧美123区| 精品久久久久久久久久久久久久久久久 | 日本a大片| 大尺度av在线 | 日本男女啪啪 | missav|免费高清av在线看 | 五月天国产视频 | 久久99国产精品久久99 | 免费欧美一级 | 中国黄色大片 | 日本中文字幕在线 | 国产91视频播放 | 五月婷在线 | 欧美激情精品久久久久久免费 |