成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

當當彈性化中間件及云化之路(據(jù)說讀完可以少踩坑)

王陸寬 / 947人閱讀

摘要:第二部分介紹當當?shù)膹椥曰虚g件。第三部分當當?shù)脑苹?。下面部分是為當當運營人員與合作伙伴提供的系統(tǒng),如商品價格庫存等。下圖是當當?shù)谋O(jiān)控系統(tǒng)以及限流系統(tǒng)的。當當采用的作業(yè)中間件是自研的,它可以將一個完整的作業(yè)拆分為多個相互獨立的任務。

6月24日,雙態(tài)運維·烏鎮(zhèn)峰會-數(shù)人云專題研討會上,張亮老師從業(yè)務、中間件、云化的方向出發(fā),分享了當當網實踐落地容器的經驗。數(shù)人云掐指一算,稀缺好文,宜收藏和分享!

今天主分享的內容分為三部分——

第一部分:當當業(yè)務體系簡介。受限于時間,只做簡單概述。

第二部分:介紹當當?shù)膹椥曰虚g件?,F(xiàn)階段,無狀態(tài)容器已趨于成熟,需要進一步開發(fā)和優(yōu)化的是運行在容器里面的部分,即中間件。

第三部分:當當?shù)脑苹贰?/strong>

業(yè)務特征

首先,介紹下當當?shù)臉I(yè)務特征,這也是互聯(lián)網行業(yè)的共有特征:

海量用戶 當當面向的是完全開放的、整個互聯(lián)網的億級用戶量。

品類繁多 當當是賣書起家的,書的品類是很多的。除了書,當當還有百貨、服裝等。與垂直電商不同,水平電商由于品類繁多,因此數(shù)據(jù)架構也會有很大區(qū)別。

7X24 互聯(lián)網公司基本都是如此要求,盡量縮短宕機時間。

流量突增 如“雙11”或“書香節(jié)”,其流量是平時的幾倍到幾十倍不等。

業(yè)務復雜 下圖是業(yè)務框架圖,分為三部分,中間部分是當當主業(yè)務流程,從用戶查看選擇商品的賣場模塊,到購物車、結算的交易模塊,最后發(fā)至訂單工作流系統(tǒng);然后通過倉儲系統(tǒng)生產訂單,并交由物流系統(tǒng)配送貨品。上面部分是用戶相關的系統(tǒng),如搜索、推薦、促銷、會員等。下面部分是為當當運營人員與合作伙伴提供的系統(tǒng),如商品、價格、庫存等。

這僅是縮略版的系統(tǒng)架構圖,當當實際系統(tǒng)要復雜的多、用到的語言也各異,大部分如:前端PHP、后端Java、搜索系統(tǒng)用C++,推薦系統(tǒng)用Go和Python。因此它是一個由異構語言組成的復雜系統(tǒng)集合。

業(yè)務特征·互聯(lián)網架構核心問題

互聯(lián)網核心問題和企業(yè)級開發(fā)不一樣的地方在于規(guī)模。互聯(lián)網公司的規(guī)模由以下幾點組成的——

海量數(shù)據(jù):包括但不限于用戶數(shù)據(jù)、商品數(shù)據(jù)、交易數(shù)據(jù)、訂單數(shù)據(jù)、用戶行為數(shù)據(jù)等。由于數(shù)據(jù)量巨大,因此不能僅使用單一的數(shù)據(jù)存儲結構,也不能以單數(shù)據(jù)節(jié)點的方式存儲所有數(shù)據(jù)。

響應遲緩:大量的用戶訪問,使得系統(tǒng)承載了更多流量,處理過多的請求會導致系統(tǒng)響應變的遲緩。

系統(tǒng)繁多:通過上一張圖可以得知,系統(tǒng)是由非常多的子系統(tǒng)組成的,每個子系統(tǒng)各司其職。合理的系統(tǒng)拆分可以靈活的分離冷熱數(shù)據(jù)、擴容重點系統(tǒng)等。

開發(fā)困難:各個系統(tǒng)都是由異構語言的不同技術棧構成,開發(fā)成本較高。

穩(wěn)定性差:由于系統(tǒng)間交互增多,系統(tǒng)之間會形成一個復雜的交互網。任一系統(tǒng)出現(xiàn)問題,都可能導致部分不可用,進而增加整體不可控的風險。系統(tǒng)拆分的越多,出問題的可能性就越大,系統(tǒng)穩(wěn)定性就會越差。

伸縮性差:電商公司不可能常備“雙11”的機器體量。因此遇到大促等需要承載突發(fā)流量的場景,系統(tǒng)需要可以彈性伸縮。在流量增加的時候擴張容量,用于承接更多的購買需求;在流量下降的時候收縮容量,節(jié)省成本。

中間件·解決方案=中間件+云平臺

解決方案是中間件+云平臺。

中間件解決的主要問題是服務化、彈性化和異步化。

服務化:眾多系統(tǒng)間應該提供一致的交互和治理方式。

彈性化:讓系統(tǒng)具備根據(jù)實際需要靈活的擴縮容的能力。

異步化:將同步調用鏈梳理為同步落盤 + 異步處理的方式以提升吞吐量。

云平臺解決的主要問題是部署自動化和監(jiān)控一體化。

中間件缺乏對運行環(huán)境搭建,App部署分發(fā)等能力,也難以提供統(tǒng)一的監(jiān)控一體化系統(tǒng),因此云平臺在這方面是對中間件的有益補充。

中間件·基礎3件套

這里介紹最主要的三個中間件:服務中間件、作業(yè)中間件數(shù)據(jù)中間件。中間件遠遠不止這三種,限于時間,無法涵蓋全部的中間件:如消息中間件、緩存中間件、NoSQL以及離線大數(shù)據(jù)等因時間關系不在分享范圍之內。

中間件·服務中間件


服務中間件有很多優(yōu)秀的開源產品,從早期的Finagle, Dubbo,到近期出現(xiàn)的Motan,Spring Cloud都是個中翹楚。服務中間件的核心功能主要包括:

遠程調用:分為長連接調用和短連接調用兩種方式。長鏈接采用Socket + 二進制序列化的方式居多,短連接以HTTP RESTFul + JSON的方式為主。無論采用何種調用方式,都應在服務中間件中封裝為統(tǒng)一接口。

服務發(fā)現(xiàn):自動感知上線和下線的應用,并分配和截斷相應的請求。標準實現(xiàn)方案是通過一個注冊中心管理和協(xié)調分布式應用,常見的注冊中心有Zookeeper,etcd和Eureka。

負載均衡:合理的將流量分配給權重不盡相同的分布式節(jié)點。

服務治理:包括服務調動鏈梳理、服務降級、服務版本控制等功能。

限流:將過載的流量擋在后端系統(tǒng)之外,讓部分不過載的請求可以繼續(xù)提供服務。保證系統(tǒng)不會因為突增的流量而被完全沖垮,而是任何情況下都能提供對核心用戶的平穩(wěn)服務能力。

監(jiān)控報警:提供將內部指標通過API對接到外部系統(tǒng)的能力,內部指標一般有SLA、服務狀態(tài)、節(jié)點承載量等。

上圖是當當采用的服務框架——DubboX。

該項目Fork了阿里開源的Dubbo,并內置了Web服務器且增加REST協(xié)議,用于支持異構語言間的調用。每個基于DubboX的應用均可通過內置的Web服務器提供服務,每個Web服務器通過Nginx實現(xiàn)負載均衡。并且在Nginx通過OpenResty實現(xiàn)了基于漏桶和令牌桶兩種算法的限流插件。請求調用信息通過Agent的本地匯總之后,定期發(fā)送至一個Kafka的消息隊列,并通過Storm的二次匯總計算出SLA,存儲至數(shù)據(jù)庫中。最終由監(jiān)控系統(tǒng)定期抓取報警數(shù)據(jù)。

使用DubboX部署的程序,在邏輯上分為兩部分。上面部分是服務的提供者;下面部分是服務的消費者。服務消費者在REST協(xié)議的場景,是直接通過Nginx代理訪問服務提供者的。如果采用Java同構應用,可以使用Dubbo原生的長鏈接+Dubbo協(xié)議,并通過注冊中心服務發(fā)現(xiàn),以及客戶端負載均衡。

下圖是當當?shù)腟LA監(jiān)控系統(tǒng)以及限流系統(tǒng)的Dashboard。


中間件·作業(yè)中間件

當當系統(tǒng)中很多業(yè)務是由作業(yè)實現(xiàn)的,如拉單作業(yè)、價格同步作業(yè)等。因為公司系統(tǒng)較多,很難通過唯一的方案實現(xiàn),因此也有部分系統(tǒng)通過消息中間件完成。作業(yè)中間件的核心功能主要包括:

定時調度:根據(jù)cron表達式的時間調度應用。

任務分片:將一個大任務拆分成為多個任務片段,分布運行。此功能后文會重點介紹。

彈性擴容:與任務分片息息相關,一并在后文中介紹。

作業(yè)治理:管控作業(yè)生命周期,如:執(zhí)行、禁用、啟用以及更復雜的行為,如:失效轉移、錯過任務重觸發(fā)等。

監(jiān)控報警:提供將作業(yè)運行狀態(tài)、歷史統(tǒng)計和查詢對接至外部系統(tǒng)的能力。

當當采用的作業(yè)中間件是自研的Elastic-Job,它可以將一個完整的作業(yè)拆分為多個相互獨立的任務。一個完整的作業(yè)運行時間可能較長,但很難通過增加機器實例提升運行效率。通過Elastic-Job將作業(yè)拆分為多個任務,可以并行的在分布式的環(huán)境中運行,提升其處理速度。用戶可以實現(xiàn)自己的分片策略,將任務分配至合適的節(jié)點運行。

通過上圖舉例,作業(yè)分為4片,由兩臺服務器執(zhí)行,每臺執(zhí)行兩片。當增加一臺服務器時,如下圖所示,分片項被稀釋為服務器1和3各執(zhí)行一片,服務器2執(zhí)行兩片,那么服務器1和3由于執(zhí)行的分片項減少,從而提升性能。


而一旦有服務器宕機,如下圖所示,僅剩余一臺服務器可以提供服務,那么所有的分片都將指向該服務器。集群的整體處理能力會下降,但作業(yè)的完整性不會受到影響,從而提供高可用的能力。

因此,隨著運行實例的增加和減少,Elastic-Job可以動態(tài)的調整分片來提升性能和保證可用性。

這是Elastic-Job的部署架構圖。

中間件·數(shù)據(jù)庫中間件

接下來介紹的是數(shù)據(jù)庫中間件。關系型數(shù)據(jù)庫在大數(shù)據(jù)量的情況下,單庫單表難以支撐。解決方案是將單一的數(shù)據(jù)庫拆分為分布式數(shù)據(jù)庫,而讓開發(fā)和運維人員像訪問一個數(shù)據(jù)庫一樣訪問分布式數(shù)據(jù)庫,屏蔽其復雜度,是數(shù)據(jù)庫中間件的基本功能。數(shù)據(jù)庫中間件的核心功能主要包括:

分庫分表:通過打散數(shù)據(jù)的方式有效的減少每個表的數(shù)據(jù)量,減少索引的深度以提升查詢性能。并且拆分數(shù)據(jù)庫來有效的疏導請求流量。

讀寫分離:進一步提升數(shù)據(jù)庫的性能可以采用讀寫分離。讀庫僅負責響應查詢,寫庫相應更新,通過異步數(shù)據(jù)同步的方式保持讀寫庫的數(shù)據(jù)一致性。這種方式可以有效的減低行鎖,進一步提升效率。

內聯(lián)事務:數(shù)據(jù)庫一旦打散,就必須使用分布式事務而導致性能急劇下降。因此如何合理的分庫分表,盡量將操作保證落在同一個庫,而使用內聯(lián)事務,是更好的選擇。

柔性事務:在內聯(lián)事務不適用的跨庫場景,犧牲強一致性來換取性能的提升,然后采用異步補償?shù)臋C制來達到最終一致性,是柔性事務的核心理念。

SQL審核:先期過濾出不符合OLTP的非法SQL。如:DELETE語句沒有WHERE等。

當當采用自研的Sharding-JDBC作為數(shù)據(jù)庫中間層。它直接修改JDBC協(xié)議,因此可以兼容各種數(shù)據(jù)庫以及ORM框架,應用工程師幾乎沒有學習成本,和使用原生JDBC沒有區(qū)別。應用工程師僅需要配置分片規(guī)則,用于告訴Sharding-JDBC哪一個分片鍵的數(shù)據(jù)應該路由至哪個庫的哪個表,即可。

Sharding-JDBC的內部結構包括:JDBC規(guī)范重寫、SQL解析、 SQL改寫、SQL路由、SQL執(zhí)行以及結果集歸并。


上面兩個圖是Sharding-JDBC的性能測試報告,在單庫時,由于SQL解析帶來的損耗,Sharding-JDBC比原生JDBC慢了0.02%。而將數(shù)據(jù)拆分至雙庫,Sharding-JDBC比原生JDBC的性能提升了94%,因此,拆分的數(shù)據(jù)庫實例越多,其對性能的提升也越顯著。

Sharding-JDBC定位是面向在線業(yè)務的框架。因此OLTP涉及到的SQL基本都兼容。

分布式的事務處理方案有三種:XA,弱XA和柔性事務。

XA即分布式事務,他對業(yè)務代碼完全沒有侵入性,而且也可以保證分布式場景下事務的強一致性,但其性能低下,在互聯(lián)網的場景下非常不適用。

弱XA是分庫分表數(shù)據(jù)庫的中間層所提出來的概念,簡單說就是單片事務。它僅能控制單節(jié)點事務的一致性,對于分布式的事務完全沒有控制能力。他不會對性能帶來任何影響,但沒有一致性的能力,在分布式的場景下極易造成數(shù)據(jù)不一致。

柔性事務是對弱XA的補充。它使用異步補償?shù)姆绞剑瑢⒍唐趦炔灰恢碌臄?shù)據(jù)修復,達到最終一致性。它用犧牲強一致性的方式提升了性能,因此內聯(lián)事務 + 柔性事務成為了最受青睞的互聯(lián)網事務處理方案。

柔性事務有兩種比較成熟實現(xiàn)方案,最大努力送達型和TCC(Try Confirm Cancel)。

最大努力送達型可以保證事務最終成功,業(yè)務入侵較小,僅需要業(yè)務方實現(xiàn)冪等性即可。它要求事務最終一定會成功,無法回滾,因此會反復嘗試,直至最終成功。

TCC類似原生事務,事務可以提交,也可以回滾。但事務的提交和回滾操作均需要業(yè)務工程師去實現(xiàn),因此對業(yè)務入侵極大,TCC同樣需要業(yè)務代碼實現(xiàn)冪等性。


上圖是最大努力送達型的流程圖。它在SQL執(zhí)行前記錄事務日志,在SQL執(zhí)行成功后清理相應事務日志。一旦SQL執(zhí)行失敗,事務管理器就會通過同步和異步執(zhí)行的方式從日志庫中獲取當前的SQL反復嘗試,直至到達最大重試次數(shù)為止。超過最大重試次數(shù)的數(shù)據(jù)需要人工介入處理。

云化

首先,應用運行時環(huán)境是通過容器來實現(xiàn)的,不同編程語言編寫的應用需要不同的運行時環(huán)境,將環(huán)境、應用及相關依賴一起打包發(fā)布是容器的主要作用,在當當采用的容器解決方案是Docker。另外,容器還可以用于隔離運行環(huán)境,讓運行在同一宿主機的不同鏡像可以安全和獨立的使用既有資源。

其次,僅通過容器無法做到應用治理。中間件是應用彈性化的關鍵,它分別針對服務、作業(yè)以及數(shù)據(jù)庫訪問進行有效的增強。服務和作業(yè)中間件是兩種截然不同的應用類型,而數(shù)據(jù)中間件則是它們的有力支撐。無狀態(tài)的服務更易彈性擴展;而有狀態(tài)的作業(yè)則通過分片項隔離與數(shù)據(jù)的依賴;數(shù)據(jù)庫中間件則用于簡化分布式數(shù)據(jù)庫的訪問以及事務處理。

最后,一個可快速運行且高度彈性化方案的最后一塊拼圖,即是需要一個平臺去合理分配資源以及自動分發(fā)應用。目前比較流行的是Kubernetes和Mesos兩種方案。在使用的復雜度上Kubernetes要更加簡潔和一站式,但Mesos所采用兩級調度概念,通過其Framework定制化非常簡單,因此當當選擇Mesos作為資源調度系統(tǒng)。

分布式調度系統(tǒng)當前有三種架構:單體式,兩階段以及狀態(tài)共享。

單體式調度較為簡單,調度邏輯可以在沒有任何并發(fā)的情況下使用全部資源。但由于互聯(lián)網業(yè)務需求多、變化快,因此這種架構雖然性能高,但不利于業(yè)務的快速變化。Hadoop V1即采用此種架構。

兩階段調度將資源通過Offer的形式分發(fā)給注冊在調度系統(tǒng)中的各個Framework,由Framework負責處理接收到的Offer,調度底層系統(tǒng)僅用于資源的收集和治理。因此此種架構更易于通過Framework定制化擴展業(yè)務需求。Mesos即是兩階段調度的典型代表。

狀態(tài)共享調度功能看似最為強大,但實現(xiàn)起來卻更加復雜。它的每一個Framework都可以看到資源邏輯視圖的全集,采用樂觀鎖的方式使用資源,每次資源使用時,需要根據(jù)資源的占用狀態(tài)進行類似于事務方式的提交和回滾。它的優(yōu)點是可以更加有效的利用資源,缺點是實現(xiàn)難度高。除了Google閉源的Omega系統(tǒng)論文,開源產品中目前很少見成熟的實現(xiàn)方案。

上圖是當當云平臺的架構圖。中間件API與業(yè)務應用一起打包至Docker鏡像或tar文件,并放入應用倉庫。服務型應用當當采用Marathon管理,由DubboX治理服務,并與應用一同放入Docker鏡像;作業(yè)型應用當當使用自研的Mesos Framework Elastic-Job-Cloud代替Marathon進行瞬時和常駐作業(yè)的治理。

在Elastic-Job-Cloud中采用了自定義Executor和Mesos原生容器,它能夠追加資源。利用此功能,可以有效的聚合作業(yè),進一步簡化開發(fā)并節(jié)省資源。Elastic-Job-Cloud調度的應用使用tar包存入應用倉庫。雖然Marathon與Elastic-Job-Cloud所管理的容器不同,但Mesos都會采用同樣的接口將其分發(fā)至相應Mesos Agent執(zhí)行。

上圖是更加全面的整體云化架構圖。可以從運維、構建、日志和監(jiān)控4個方面說明。

運維通過自研的控制臺,向Mesos Framework發(fā)送信令和讀取數(shù)據(jù)來達到控制業(yè)務應用上下線、暫停執(zhí)行等功能,并可查看運行時狀態(tài)。

構建是通過當當自研的盤古系統(tǒng),控制灰度發(fā)布,一鍵回滾等功能,并由盤古系統(tǒng)將待部署上線的應用鏡像推送至Nexus或Docker倉庫。由Mesos Agent自動從Nexus獲取tar文件、或由Docker倉庫獲取應用鏡像并執(zhí)行。

日志采用的標準的ELK的方式,不過獲取日志并未使用Logstash,而是采用性能更佳的Filebeat代替。

監(jiān)控是由多個維度組成。首先使用Mesos Exporter暴露Mesos的狀態(tài)數(shù)據(jù),然后由時序數(shù)據(jù)庫Prometheus定期抓取,并由Grafana展現(xiàn)結果。Prometheus也通過Alertmanager向當當自研的雷達系統(tǒng)發(fā)送報警數(shù)據(jù),由雷達系統(tǒng)負責最終的報警。其次,雷達系統(tǒng)還負責抓取elasticsearch的報警日志以及運行歷史記錄、SLA等信息一并報警。

剛才介紹的DubboX、Elastic-Job以及Sharding-JDBC都已開源。

Elastic-Job經不完全統(tǒng)計,有30家以上的公司在使用。Elastic-Job目前是Mesosphere官方認可的Framework,在Apache Mesos的官方文檔中可以查到,目前已經進行到對接DC/OS的最終階段。

Sharding-JDBC僅僅開源1年多,即獲取了2016年最受歡迎的國產開源第17名。

三個開源項目均采用Apache協(xié)議,有興趣的同學請自由使用,歡迎提供寶貴意見。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/26959.html

相關文章

  • 云網融合,擴展運營商B2B商業(yè)邊界

    摘要:華為云網融合解決方案使能運營商增長運營商基礎網絡設施優(yōu)勢明顯,網絡覆蓋廣接入媒介全機房光纜豐富。目前,在中國歐洲及東南亞等全球多個國家與地區(qū),華為已與多家運營商在云網融合領域開展商業(yè)合作,支撐運營商產品升級,提升運營商競爭力。企業(yè)ICT需求4大變化Gartner調研顯示,企業(yè)上云不是一蹴而就,而是根據(jù)應用復雜性和上云后的業(yè)務風險,由低至高逐步將企業(yè)應用遷移至云上。隨著企業(yè)上云的不斷深入,業(yè)務...

    Lemon_95 評論0 收藏0
  • 企業(yè)上云加速,企業(yè)云服務市場邁入關鍵之年

    摘要:在日前中國電子信息產業(yè)發(fā)展研究院主辦的中國市場年會上,憑借過去一年在管理軟件和云服務市場的卓越表現(xiàn),浪潮云一舉囊括中國管理軟件市場年度成功企業(yè)等六項大獎,企業(yè)級應用軟件市場競爭力穩(wěn)居國內前二?!簯?zhàn)略、產品、生態(tài)的全方位較量?!慌c全球發(fā)展同步,數(shù)字經濟已成為中國經濟發(fā)展的重要組成部分,占GDP比重也接近40%。充滿活力的數(shù)字經濟正在改變關系國計民生的各個領域,企業(yè)的數(shù)字化轉型成為發(fā)展的新常態(tài)。...

    Kaede 評論0 收藏0
  • 中國制造業(yè)加速擁抱云計算

    摘要:在日前召開的云棲大會上海峰會上,多位專家認為,制造業(yè)正在加速擁抱云計算,數(shù)字制造和智能制造正成為新的關鍵詞,云計算幫助企業(yè)加速從要素驅動向創(chuàng)新驅動轉變。隨著云計算、移動互聯(lián)網等新一代信息技術的發(fā)展,以及傳統(tǒng)工業(yè)制造業(yè)面臨轉型升級,二者之間的關系變得更加緊密。在日前召開的云棲大會·上海峰會上,多位專家認為,制造業(yè)正在加速擁抱云計算,數(shù)字制造和智能制造正成為新的關鍵詞,云計算幫助企業(yè)加速從要素驅...

    jsliang 評論0 收藏0
  • 誰是云計算市場的新變量?

    摘要:云計算深入,驅動市場過去十年,云計算服務取得了長足的發(fā)展。之于云計算的重要性,相當于操作系統(tǒng)之于電腦。細分市場投融資活躍全球云計算服務模式中,雖然市場份額最小,但是增速卻是最快的。向進軍已是云計算產業(yè)投資者和創(chuàng)業(yè)者的新戰(zhàn)略方向。1. 互聯(lián)網應用風口快速迭代,為企業(yè)提供風口型解決方案的PaaS服務商重要性凸顯。2. PaaS領域資本熱度增高,Docker技術平臺和通訊云平臺是今年最熱的細分領域...

    justjavac 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<