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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

淘宝的架构

發(fā)布時(shí)間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 淘宝的架构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

淘寶用的是JBoss,框架是iBATIS,緩存服務(wù)器是自己開(kāi)發(fā)的,基本遵循SNA架構(gòu),水平擴(kuò)展,數(shù)據(jù)庫(kù)是Oracle,阿里集團(tuán)的DBA幾乎是國(guó)內(nèi)最強(qiáng)悍的。目前淘寶的系統(tǒng)架構(gòu)正在重構(gòu),計(jì)劃用兩到三年時(shí)間重寫(xiě),目標(biāo)有兩個(gè):

1、水平擴(kuò)展已經(jīng)不滿足需求了,還需要水平加垂直擴(kuò)展?
2、開(kāi)放API,讓店家可以把外部網(wǎng)站資源集成到淘寶,不必直接在淘寶開(kāi)店

淘寶首席架構(gòu)師是原來(lái)JBoss的Ben?Wang,現(xiàn)在正在招募技術(shù)高手加盟,從事這項(xiàng)很有挑戰(zhàn)性的工作:設(shè)計(jì)下一代開(kāi)放性、支撐數(shù)十億訪問(wèn)量的在線電子商務(wù)網(wǎng)站?

淘寶架構(gòu)更詳細(xì)的情況就不方便透露了。


淘寶網(wǎng),是一個(gè)在線商品數(shù)量突破一億,日均成交額超過(guò)兩億元人民幣,注冊(cè)用戶接近八千萬(wàn)的大型電子商務(wù)網(wǎng)站,是亞洲最大的購(gòu)物網(wǎng)站。那么對(duì)于淘寶網(wǎng)這樣大?規(guī)模的一個(gè)網(wǎng)站,我猜想大家一定會(huì)非常關(guān)心整個(gè)網(wǎng)站都采用了什么樣的技術(shù)、產(chǎn)品和架構(gòu),也會(huì)很想了解在淘寶網(wǎng)中是否采用了開(kāi)源的軟件或者是完全采用的商業(yè)?軟件。那么下面我就簡(jiǎn)單的介紹一下淘寶網(wǎng)中應(yīng)用的開(kāi)源軟件。

對(duì)于規(guī)模稍大的網(wǎng)站來(lái)說(shuō),其IT必然是一個(gè)服務(wù)器集群來(lái)提供網(wǎng)站服務(wù),數(shù)據(jù)庫(kù)也必然要和應(yīng)用服務(wù)分開(kāi),有單獨(dú)的數(shù)據(jù)庫(kù)服務(wù)器。對(duì)于像淘寶網(wǎng)這樣規(guī)模?的網(wǎng)站而言,就是應(yīng)用也分成很多組。那么下面,我就從應(yīng)用服務(wù)器操作系統(tǒng)、應(yīng)用服務(wù)器軟件、Web?Server、數(shù)據(jù)庫(kù)、開(kāi)發(fā)框架等幾個(gè)方面來(lái)介紹一下淘寶網(wǎng)中開(kāi)源軟件的應(yīng)用。

操作系統(tǒng)
我們首先就從應(yīng)用服務(wù)器的操作系統(tǒng)說(shuō)起。一個(gè)應(yīng)用服務(wù)器,從軟件的角度來(lái)說(shuō)他的最底層首先是操作系統(tǒng)。要先選擇操作系統(tǒng),然后才是操作系統(tǒng)基礎(chǔ)上的應(yīng)用軟?件。在淘寶網(wǎng),我們的應(yīng)用服務(wù)器上采用的是Linux操作系統(tǒng)。Linux操作系統(tǒng)從1991年第一次正式被公布到現(xiàn)在已????走過(guò)了十七個(gè)年頭,在PC?Server上有廣泛的應(yīng)用。硬件上我們選擇PC?Server而不是小型機(jī),那么Server的操作系統(tǒng)供我們選擇的一般也就是 Linux,FreeBSD,?windows?2000?Server或者Windows?Server?2003。如果不準(zhǔn)備采用微軟的一系列產(chǎn)品構(gòu)建應(yīng)用,并且有能力維護(hù)Linux或者FreeBSD,再加上成本的考慮,那么還是應(yīng)該在Linux和?FreeBSD之間進(jìn)行選擇。可以說(shuō),現(xiàn)在 Linux和FreeBSD這兩個(gè)系統(tǒng)難分伯仲,很難說(shuō)哪個(gè)一定比另外一個(gè)要優(yōu)秀很多、能夠全面的超越對(duì)手,應(yīng)?該是各有所長(zhǎng)。那么在選擇的時(shí)候有一個(gè)因素就是企業(yè)的技術(shù)人員對(duì)于哪種系統(tǒng)更加的熟悉,這個(gè)熟悉一方面是系統(tǒng)管理方面,另外一方面是對(duì)于內(nèi)核的熟悉,對(duì)內(nèi)?核的熟悉對(duì)于性能調(diào)優(yōu)和對(duì)操作系統(tǒng)進(jìn)行定制剪裁會(huì)有很大的幫助。而應(yīng)用全面的優(yōu)化、提升性能也是從操作系統(tǒng)的優(yōu)化開(kāi)始的。

應(yīng)用服務(wù)器
在確定了服務(wù)器的硬件、服務(wù)器的操作系統(tǒng)之后,下面我們來(lái)說(shuō)說(shuō)業(yè)務(wù)系統(tǒng)的構(gòu)建。淘寶網(wǎng)有很多業(yè)務(wù)系統(tǒng)應(yīng)用是基于JEE規(guī)范的系統(tǒng)。還有一些是C?C++構(gòu)建的應(yīng)用或者是Java構(gòu)建的Standalone的應(yīng)用。那么我們要選擇一款實(shí)現(xiàn)了JEE規(guī)范的應(yīng)用服務(wù)器。我們的選擇是 JBoss?Applcation?Server。JBoss?AS是RedHat的一個(gè)開(kāi)源的支持JEE規(guī)范的應(yīng)用服務(wù)器。在幾年前,如果采用Java 技術(shù)構(gòu)建互聯(lián)網(wǎng)應(yīng)用或者企業(yè)級(jí)應(yīng)用,在開(kāi)源軟件中的選擇一般也就?是Apache組織的Tomcat、JBoss的?JBoss?AS和Resin。嚴(yán)格意義上講,Tomcat和Resin并不能算是一個(gè)應(yīng)用服務(wù)器,他們是實(shí)現(xiàn)了部分J2EE規(guī)范的一個(gè)容器。而商業(yè)軟件的選擇就是?IBM的 WebSphere和BEA的WebLogic。到了現(xiàn)在,除了JBoss?AS外,Apache的Geronimo,Sun的Glassfish也都是很優(yōu)秀的JEE應(yīng)用服務(wù)器。也給現(xiàn)在的開(kāi)發(fā)人員提供了更多的選擇。具體對(duì)于目?前JEE應(yīng)用服務(wù)器的比較。這邊就不在贅述。
在應(yīng)用服務(wù)器前端,我們采用了Web?Server做了一次轉(zhuǎn)發(fā),我們選擇的Web服務(wù)器是大名鼎鼎的Apache。幾年前,Apache幾乎是 Linux系統(tǒng)上開(kāi)源Web?Server的唯一選擇。那個(gè)時(shí)候雖然也有一些其他的開(kāi)源的Web?Server,但是從功能和穩(wěn)定性上來(lái)說(shuō)都無(wú)法和 Apache相對(duì)。在今天來(lái)說(shuō),Lighty也會(huì)是一個(gè)非常好的選擇。Lighty是一個(gè)非常輕量級(jí)、占?用內(nèi)存資源也比較少的Web?Server。雖然功能上沒(méi)有Apache強(qiáng)大,但是在不少場(chǎng)景下,性能是非常出色、強(qiáng)于Apache的。而微軟的IIS,就只能工作在Windows的?系統(tǒng)上了。并且使用IIS的話,基本上也就是選擇了ISAPI、ASP或者ASP.NET進(jìn)行Web應(yīng)用的開(kāi)發(fā)了。

數(shù)據(jù)庫(kù)
說(shuō)完了我們采用的操作系統(tǒng)、應(yīng)用服務(wù)器、WebServer后,下面就來(lái)談?wù)勎覀兊臄?shù)據(jù)庫(kù)。在淘寶網(wǎng)的應(yīng)用中,采用了兩種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。一個(gè)是?Oracle公司的Oracle?10g,另外一個(gè)是Sun?MySQL的MySQL。Oracle是一款優(yōu)秀的、廣泛采用的商業(yè)數(shù)據(jù)庫(kù)管理軟件。有很強(qiáng)大的功能和安全性,可以處理相對(duì)海量的數(shù)據(jù)。而MySQL是一?款非常優(yōu)秀的開(kāi)源數(shù)據(jù)庫(kù)管理軟件,非常適合用多臺(tái)PC?Server組成多點(diǎn)的存儲(chǔ)節(jié)點(diǎn)陣列(這里我所指的不是MySQL自身提供的集群功能),每單位的數(shù)據(jù)存儲(chǔ)成本也非常的低廉。用多臺(tái)PC?Server安裝MySQL組成一個(gè)存儲(chǔ)節(jié)點(diǎn)陣列,通過(guò)MySQL自身的Replication或者應(yīng)用自身的處理,可以很好的保證容錯(cuò)(允許部分節(jié)點(diǎn)失?效),保證應(yīng)用的健壯性和可靠性。可以這么說(shuō),在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的選擇上,可以考慮應(yīng)用本身的情況來(lái)決定。
一個(gè)互聯(lián)網(wǎng)應(yīng)用,除了服務(wù)器的操作系統(tǒng),Web?Server軟件,應(yīng)用服務(wù)器軟件,數(shù)據(jù)庫(kù)軟件外,我們還會(huì)涉及到一些其他的系統(tǒng),比如一些中間件系統(tǒng)、文件存儲(chǔ)系統(tǒng)、搜索、分布式框架、緩存系統(tǒng)等等。?在淘寶網(wǎng),這些系統(tǒng)都是自主開(kāi)發(fā)的,沒(méi)有采用目前商業(yè)的或者開(kāi)源的產(chǎn)品。有些系統(tǒng),會(huì)存在著一些開(kāi)源的產(chǎn)品或者商業(yè)產(chǎn)品。但是,考慮到淘寶網(wǎng)自己的需求和?大并發(fā)量的壓力,這些系統(tǒng)都選擇了自主開(kāi)發(fā)。

開(kāi)發(fā)框架
前面談的都是系統(tǒng)級(jí)的產(chǎn)品,下面我們說(shuō)說(shuō)開(kāi)發(fā)框架的使用。可能有朋友想問(wèn),作為一個(gè)如此大規(guī)模的網(wǎng)站,淘寶網(wǎng)的Web展現(xiàn)層采用的是什么框架,是怎么實(shí)現(xiàn)?的呢?曾????也有到淘寶的應(yīng)聘者問(wèn)過(guò)我這個(gè)問(wèn)題,他問(wèn)我說(shuō)是不是用的?struts。我告訴他說(shuō)不是的。其實(shí)淘寶網(wǎng)的Web展現(xiàn)層的框架用的不是 struts,不是webwork,不是spring?mvc等等。淘寶網(wǎng)的Web展現(xiàn)層的框架用的是集團(tuán)內(nèi)部自主開(kāi)發(fā)的一套Web框架。這個(gè)框架能夠解決一些其他Web框架不能解決的、在淘寶的應(yīng)用中又會(huì)出?現(xiàn)并需要解決的問(wèn)題。在淘寶的多個(gè)應(yīng)用中,也采用了一些開(kāi)源的框架,比如Spring、 iBatis、jBPM、Hessian、Mina等等。這些開(kāi)源?軟件的采用為我們構(gòu)建應(yīng)用系統(tǒng)提供了很大的幫助。
采用開(kāi)源軟件構(gòu)建系統(tǒng),我想有兩個(gè)很大的好處:
一個(gè)是降低成本。假設(shè)你有1000?臺(tái)應(yīng)用服務(wù)器,如果你每臺(tái)服務(wù)器上采用的不是JBoss?AS或者其他開(kāi)源的軟件,而是使用商業(yè)的 Oracle?BEA的Weblogic或者IBM的WebSphere,那么為這1000臺(tái)機(jī)器的應(yīng)用購(gòu)買License的費(fèi)用是非常高的。
另外一個(gè)好處(我覺(jué)得最大的好處)是你可以看到軟件的源碼,你可以研究了解軟件內(nèi)部的工作過(guò)程、原理。這對(duì)于應(yīng)用設(shè)計(jì)、開(kāi)發(fā)、查錯(cuò)、優(yōu)化都是非常有幫助的。

淘寶網(wǎng)的開(kāi)源觀
對(duì)于開(kāi)源軟件的應(yīng)用,有些人可能擔(dān)心質(zhì)量的問(wèn)題,有些人可能擔(dān)心軟件本身發(fā)展更新的問(wèn)題,等等。對(duì)于質(zhì)量的問(wèn)題,我想現(xiàn)在很多的開(kāi)源軟件尤其是一些很著名?的開(kāi)源軟件都有很完善的組織,有完善的開(kāi)發(fā)、測(cè)試、發(fā)布流程。在一個(gè)新版本完成前,會(huì)有多次的測(cè)試版本發(fā)布,最后才是正式版。這和商業(yè)軟件是一樣的。并且?因?yàn)榇a公開(kāi),反而更加的容易發(fā)現(xiàn)錯(cuò)誤,提高質(zhì)量。至于第二個(gè)問(wèn)題,我想跟第一個(gè)問(wèn)題一樣,關(guān)鍵是組織和規(guī)劃而不在是否開(kāi)源,并且在很多著名的開(kāi)源軟件背?后,會(huì)有廠商在進(jìn)行支持。軟件本身的發(fā)展應(yīng)該是不會(huì)成為問(wèn)題的,不太會(huì)出現(xiàn)軟件突然停止發(fā)展的情況。
在今后的發(fā)展中,我們還是會(huì)一如既往的關(guān)注開(kāi)源軟件的發(fā)展,也還會(huì)根據(jù)需要采用不同的開(kāi)源軟件。在選擇一個(gè)開(kāi)源產(chǎn)品的時(shí)候,我會(huì)考慮以下幾點(diǎn):
1.?這個(gè)軟件目前的功能和它的RoadMap
2.?軟件本身的架構(gòu)
3.?該軟件開(kāi)發(fā)的活躍度
4.?該開(kāi)源軟件是否是遵守該領(lǐng)域內(nèi)的國(guó)際規(guī)范的
5.?在同類產(chǎn)品中,要挑選有比較優(yōu)勢(shì)的。并且要考慮可能存在的移植代價(jià)。這個(gè)移植指的是采用了這款開(kāi)源軟件后現(xiàn)有系統(tǒng)的移植,或者是從這個(gè)開(kāi)源軟件到其他軟件的移植。
對(duì)于企業(yè)級(jí)系統(tǒng)、互聯(lián)網(wǎng)應(yīng)用來(lái)說(shuō),采用開(kāi)源軟件不僅可以降低成本,更重要的是能夠真正了解軟件的內(nèi)部工作機(jī)制。還可以在現(xiàn)在的基礎(chǔ)上進(jìn)行增強(qiáng)和定制,也能?夠從開(kāi)源軟件中借鑒到很多好的設(shè)計(jì)和實(shí)現(xiàn)。希望國(guó)內(nèi)能有更多的企業(yè)在使用開(kāi)源軟件的同時(shí),也能開(kāi)源自身的一些軟件,或者能夠成為一些開(kāi)源軟件的貢獻(xiàn)者。而?作為淘寶網(wǎng),我們也會(huì)非常積極的參與到開(kāi)源的活動(dòng)中,也會(huì)努力為開(kāi)源的發(fā)展做出我們應(yīng)有的貢獻(xiàn)。

淘寶網(wǎng)高性能可伸縮架構(gòu)技術(shù)探秘

今天我們繼續(xù)大型網(wǎng)站探秘,一起來(lái)探秘淘寶網(wǎng)的架構(gòu)技術(shù)。作為國(guó)內(nèi)最大的B2C網(wǎng)站,淘寶網(wǎng)的網(wǎng)站架構(gòu)一直承載著數(shù)據(jù)量告訴增長(zhǎng)壓力,要保證良好的負(fù)載和流程的使用體驗(yàn),一個(gè)可伸縮性的高性能網(wǎng)站架構(gòu)必不可少。

一、應(yīng)用無(wú)狀態(tài)

一個(gè)系統(tǒng)的伸縮性的好壞取決于應(yīng)用的狀態(tài)如何管理。試想一下,假如我們?cè)趕ession中保存了大量與客戶端的狀態(tài)信息的話,那么當(dāng)保存狀態(tài)信息的server宕機(jī)的時(shí)候,我們?cè)趺崔k?通常來(lái)說(shuō),我們都是通過(guò)集群來(lái)解決這個(gè)問(wèn)題,而通常所說(shuō)的集群,不僅有負(fù)載均衡,更重要的是要有失效恢復(fù)failover,比如tomcat采?用的集群節(jié)點(diǎn)廣播復(fù)制,jboss采用的配對(duì)復(fù)制等session狀態(tài)復(fù)制策略,但是集群中的狀態(tài)恢復(fù)也有其缺點(diǎn),那就是嚴(yán)重影響了系統(tǒng)的伸縮性,系統(tǒng)不能通過(guò)增加更多的機(jī)器來(lái)達(dá)到良好的水平伸縮,因?yàn)榧汗?jié)點(diǎn)間?session的通信會(huì)隨著節(jié)點(diǎn)的增多而開(kāi)銷增大,因此要想做到應(yīng)用本身的伸縮性,我們需要保證應(yīng)用的無(wú)狀態(tài)性,這樣集群中的各個(gè)節(jié)點(diǎn)來(lái)說(shuō)都是相同的,從而是的系統(tǒng)更好的水平伸縮。

上面說(shuō)了無(wú)狀態(tài)的重要性,那么具體如何實(shí)現(xiàn)無(wú)狀態(tài)呢?此時(shí)一個(gè)session框架就會(huì)發(fā)揮作用了。幸運(yùn)的是公司已經(jīng)具有了此類框架。公司的?session框架采用的是client?cookie實(shí)現(xiàn),主要將狀態(tài)?保存到了cookie里面,這樣就使得應(yīng)用節(jié)點(diǎn)本身不需要保存任何狀態(tài)信息,這樣在系統(tǒng)用戶變多的時(shí)候,就可以通過(guò)增加更多的應(yīng)用節(jié)點(diǎn)來(lái)達(dá)到水平擴(kuò)展的目的.但是采用客戶端cookie的?方式來(lái)保存狀態(tài)也會(huì)遇到限制,比如每個(gè)cookie一般不能超過(guò)4K的大小,同時(shí)很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie.公司cookie框?架采用的是“多值cookie”,?就是一個(gè)組合鍵對(duì)應(yīng)多個(gè)cookie的值,這樣不僅可以防止cookie數(shù)?量超過(guò)20,?同時(shí)還節(jié)省了cookie存儲(chǔ)有效信息的空間,因?yàn)槟J(rèn)每個(gè)cookie都會(huì)有大約50個(gè)字節(jié)的元信息來(lái)描述cookie。

除了公司目前的session框架的實(shí)現(xiàn)方式以外,其實(shí)集中式session管理來(lái)完成,說(shuō)具體點(diǎn)就是多個(gè)無(wú)狀態(tài)的應(yīng)用節(jié)點(diǎn)連接一個(gè)session?服?務(wù)器,session服務(wù)器將session保?存到緩存中,session服務(wù)器后端再配有底層持久性數(shù)據(jù)源,比如數(shù)據(jù)庫(kù),文件系統(tǒng)等等。

二、有效使用緩存

做互聯(lián)網(wǎng)應(yīng)用的兄弟應(yīng)該都清楚,緩存對(duì)于一個(gè)互聯(lián)網(wǎng)應(yīng)用是多么的重要,從瀏覽器緩存,反向代理緩存,頁(yè)面緩存,局部頁(yè)面緩存,對(duì)象緩存等等都是緩存應(yīng)用的場(chǎng)景。

一般來(lái)說(shuō)緩存根據(jù)與應(yīng)用程序的遠(yuǎn)近程度不同可以分為:local?cache?和?remote?cache。?一般系統(tǒng)中要么采用local?cache,要么采用remote?cache,兩者混合使用的話對(duì)?于local?cache和remote?cache的數(shù)據(jù)一致性處理會(huì)變大比較麻煩.

在?大部分情況下,我?們所說(shuō)到的緩存都是讀緩存,緩存還有另外一個(gè)類型:寫(xiě)緩存.?對(duì)于一些讀寫(xiě)比不高,同時(shí)對(duì)數(shù)據(jù)安全性需求不高的數(shù)據(jù),我們可以將其緩存起來(lái)從而減少對(duì)底層數(shù)據(jù)庫(kù)的訪問(wèn),比如?統(tǒng)計(jì)商品的訪問(wèn)次數(shù),統(tǒng)?計(jì)API的調(diào)用量等等,可?以采用先寫(xiě)內(nèi)存緩存然后延遲持久化到數(shù)據(jù)庫(kù),這樣可以大大減少對(duì)數(shù)據(jù)庫(kù)的寫(xiě)壓力。

以店鋪線的系統(tǒng)為例,在用戶瀏覽店鋪的時(shí)候,比如店鋪介紹,店鋪交流區(qū)頁(yè)面,店鋪服務(wù)條款頁(yè)面,店鋪試衣間頁(yè)面,以及店鋪內(nèi)搜索界面這些界面更新不是非?常頻繁,因此適合放到緩存中,這樣可以大大減低DB的負(fù)載。另外寶貝詳情頁(yè)面相對(duì)也更新比較?少,因此也適合放到緩存中來(lái)減低DB負(fù)載。

三、應(yīng)用拆分

首先,在說(shuō)明應(yīng)用拆分之前,我們先來(lái)回顧一下一個(gè)系統(tǒng)從小變大的過(guò)程中遇到的一些問(wèn)題,通過(guò)這些問(wèn)題我們會(huì)發(fā)現(xiàn)拆分對(duì)于構(gòu)建一個(gè)大型系統(tǒng)是如何的重要。

系統(tǒng)剛上線初期,用戶數(shù)并不多,所有的邏輯也許都是放在一個(gè)系統(tǒng)中的,所有邏輯跑到一個(gè)進(jìn)程或者一個(gè)應(yīng)用當(dāng)中,這個(gè)時(shí)候因?yàn)楸容^用戶少,系統(tǒng)訪問(wèn)量低,因此將全部的邏輯都放在一個(gè)應(yīng)用未嘗不可。但是,兄弟們都清楚,好景不長(zhǎng),隨著系統(tǒng)用戶的不斷增加,系統(tǒng)的訪問(wèn)壓力越來(lái)越多,同時(shí)隨著系統(tǒng)發(fā)展,為了滿足用戶的需求,原有的系統(tǒng)需要增加新的功能進(jìn)來(lái),系統(tǒng)變得越來(lái)越復(fù)雜的時(shí)候,我們會(huì)發(fā)現(xiàn)系統(tǒng)變得越來(lái)越難維護(hù),難擴(kuò)展,同時(shí)系統(tǒng)伸縮性和可用性也會(huì)受到影響。那么這個(gè)時(shí)候我們?nèi)绾谓鉀Q這些問(wèn)題呢?明智的辦法就是拆分(這也算是一種解耦),我們需要將原來(lái)的系統(tǒng)根據(jù)一定的標(biāo)準(zhǔn),比如業(yè)務(wù)相關(guān)性等分為不同的子系統(tǒng),不同的系統(tǒng)負(fù)責(zé)不同的功能,這樣切分以后,我們可以對(duì)單獨(dú)的子系統(tǒng)進(jìn)行擴(kuò)展和維護(hù),從而提高系統(tǒng)的擴(kuò)展性和可維護(hù)性,同時(shí)我們系統(tǒng)的水平伸縮性scale?out大大的提升了,因?yàn)槲覀兛梢杂嗅槍?duì)性的對(duì)壓力大的子系統(tǒng)進(jìn)行水平擴(kuò)展而不會(huì)影響到其它的子系統(tǒng),而不會(huì)像拆分以前,每次系統(tǒng)壓力變大的時(shí)候,我們都需要對(duì)整個(gè)大系統(tǒng)進(jìn)行伸縮,而這樣的成本是比較大的,另外經(jīng)過(guò)切分,子系統(tǒng)與子系統(tǒng)之間的耦合減低了,當(dāng)某個(gè)子系統(tǒng)暫時(shí)不可用的時(shí)候,整體系統(tǒng)還是可用的,從而整體系統(tǒng)的可用性也大大增強(qiáng)了。

因此一個(gè)大型的互聯(lián)網(wǎng)應(yīng)用,肯定是要經(jīng)過(guò)拆分,因?yàn)橹挥胁鸱至?#xff0c;系統(tǒng)的擴(kuò)展性,維護(hù)性,伸縮性,可用性才會(huì)變的更好。但是拆分也給系統(tǒng)帶來(lái)了問(wèn)題,就是子系統(tǒng)之間如何通信的問(wèn)題,而具體的通信方式有哪些呢?一般有同步通信和異步通信,這里我們首先來(lái)說(shuō)下同步通信,下面的主題“消息系統(tǒng)”會(huì)說(shuō)到異步通信。既然需要通信,這個(gè)時(shí)候一個(gè)高性能的遠(yuǎn)程調(diào)用框架就顯得非常重要啦,因此咱們公司也有了自己的HSF框?架。

上面所說(shuō)的都是拆分的好處,但是拆分以后必然的也會(huì)帶來(lái)新的問(wèn)題,除了剛才說(shuō)的子系統(tǒng)通信問(wèn)題外,最值得關(guān)注的問(wèn)題就是系統(tǒng)之間的依賴關(guān)系,因?yàn)橄到y(tǒng)多了,系統(tǒng)的依賴關(guān)系就會(huì)變得復(fù)雜,此時(shí)就需要更好的去關(guān)注拆分標(biāo)準(zhǔn),比如能否將一些有依賴的系統(tǒng)進(jìn)行垂直化,使得這些系統(tǒng)的功能盡量的垂直,這也是目前公司正在做的系統(tǒng)垂直化,同時(shí)一定要注意系統(tǒng)之間的循環(huán)依賴,如果出現(xiàn)循環(huán)依賴一定要小心,因?yàn)檫@可能導(dǎo)致系統(tǒng)連鎖啟動(dòng)失敗。

既然明白了拆分的重要性,我們看看隨著公司的發(fā)展,公司本身是如何拆分系統(tǒng)的。

在這個(gè)演變的過(guò)程中,我們所說(shuō)的拆分就出現(xiàn)V2.2和V3.0之間。在V2.2版本中,公司幾乎所有的邏輯都放在一個(gè)系統(tǒng)中,這樣導(dǎo)致的問(wèn)題就是系統(tǒng)擴(kuò)展和修改非常麻煩,并且更加致命的是隨著公司業(yè)務(wù)量的增?加,如果按照V2.2的架構(gòu)已經(jīng)沒(méi)有辦法支撐以后公司的快速發(fā)展,因此大家決定對(duì)整個(gè)系統(tǒng)進(jìn)行拆分,V3.0版本的系統(tǒng)對(duì)整個(gè)系統(tǒng)進(jìn)行了水平和垂直兩個(gè)方向的拆分,水平方向上,按照功能分為交易,評(píng)價(jià),用戶,商品等系統(tǒng),同樣垂直方向上,劃分為業(yè)務(wù)系統(tǒng),核心業(yè)務(wù)系統(tǒng)以及以及基礎(chǔ)服務(wù),這樣以來(lái),各個(gè)系統(tǒng)都可以獨(dú)立維護(hù)和獨(dú)立的進(jìn)行水平伸縮,比如交易系統(tǒng)可以在不影響其它系統(tǒng)的情況下獨(dú)立的進(jìn)行水平伸縮以及功能擴(kuò)展。

從上面可以看出,一個(gè)大型系統(tǒng)要想變得可維護(hù),可擴(kuò)展,可伸縮,我們必須的對(duì)它進(jìn)行拆分,拆分必然也帶來(lái)系統(tǒng)之間如何通信以及系統(tǒng)之間依賴管理等問(wèn)題,關(guān)于通信方面,公司目前獨(dú)立開(kāi)發(fā)了自己的高性能服務(wù)框架HSF,?此框架主要解決了公司目前所有子系統(tǒng)之間的同步和異步通信(目前HSF主要用于同步場(chǎng)合,FutureTask方式的調(diào)用場(chǎng)景還比較少)。至于系統(tǒng)間的依賴管理,目前公司還做的不夠好,這應(yīng)該也是我們以后努力解決的問(wèn)題。

淘寶網(wǎng)架構(gòu)師岳旭強(qiáng)的年度展望

2009年是挑戰(zhàn)和機(jī)遇并存的一年,對(duì)大部分人來(lái)說(shuō),已經(jīng)習(xí)慣了金融危機(jī),并努力解決危機(jī)。在技術(shù)圈子也一樣,被裁員的肯定也找到了工作,所以都在踏實(shí)做技術(shù)。言歸正傳,先念叨念叨2009年的一些故事,尋個(gè)回憶,找個(gè)樂(lè)子。

數(shù)據(jù)擴(kuò)展性探討和總結(jié)

金融危機(jī)是電子商務(wù)的機(jī)遇,所以09年是淘寶高速發(fā)展的一年。當(dāng)一個(gè)網(wǎng)站從百萬(wàn)、千萬(wàn)記錄的數(shù)據(jù)規(guī)模,增長(zhǎng)到億、十億、幾十億記錄的數(shù)據(jù)規(guī)模時(shí),是一個(gè)量變到質(zhì)變的過(guò)程,單純的硬件升級(jí)已經(jīng)達(dá)到了瓶頸,而需要在整體結(jié)構(gòu)上做文章。09年一年,大部分時(shí)間都在數(shù)據(jù)的擴(kuò)展性上努力。

對(duì)于一個(gè)電子商務(wù)網(wǎng)站來(lái)講,訂單是最核心的數(shù)據(jù),也是增長(zhǎng)最快的數(shù)據(jù)。對(duì)于數(shù)據(jù)的擴(kuò)展性來(lái)講,最傳統(tǒng)也是最簡(jiǎn)單有效的模式是數(shù)據(jù)庫(kù)的分庫(kù)分表。當(dāng)訂單和分庫(kù)分表相遇,會(huì)有什么火花迸發(fā)出來(lái)?09年初碰撞了很久,結(jié)果產(chǎn)生的火花很小。最大的問(wèn)題在于數(shù)據(jù)分割的規(guī)則,無(wú)規(guī)則的水平分割肯定會(huì)帶來(lái)數(shù)據(jù)合并的開(kāi)銷,而按照業(yè)務(wù)規(guī)則拆分,會(huì)因?yàn)橘I家和賣家的查詢需求不同而導(dǎo)致數(shù)據(jù)不能分割,唯一可行的火花是把訂單雙份保存,買家賣家各自一份,只是成本比較高,而且對(duì)數(shù)據(jù)同步的要求非常高。

于是我們初步?jīng)Q定按照雙份保存的方式拆分訂單,而有一天,仔細(xì)查看了訂單訪問(wèn)的情況,發(fā)現(xiàn)訂單數(shù)據(jù)庫(kù)90%以上的壓力來(lái)自于查詢,而查詢中90%以上的壓力來(lái)自于非核心業(yè)務(wù),僅僅是訂單數(shù)據(jù)的展現(xiàn),對(duì)一致性和實(shí)時(shí)性的要求很低。

因?yàn)閿?shù)據(jù)量大,造成數(shù)據(jù)庫(kù)壓力大,天然想到的是分散壓力,其辦法就是分庫(kù)分表。有些時(shí)候我們想問(wèn)題不妨直接一點(diǎn),既然壓力大,能不能減小壓力呢?通過(guò)對(duì)訂單訪問(wèn)情況的了解,發(fā)現(xiàn)昂貴的主數(shù)據(jù)庫(kù),有80%以上的壓力給了不重要的需求,這個(gè)就是我們優(yōu)化的關(guān)鍵,所以訂單最后采用了讀寫(xiě)分離的方案,高成本的主數(shù)據(jù)庫(kù)解決事務(wù)和重要的查詢業(yè)務(wù),80%以上不重要的讀,交給了低成本的數(shù)據(jù)庫(kù)服務(wù)器來(lái)解決,同時(shí)對(duì)數(shù)據(jù)復(fù)制的要求也很低,實(shí)現(xiàn)無(wú)太大難度。

另外一個(gè)有意思的案例是商品的數(shù)據(jù)擴(kuò)容,商品的水平分割非常容易,按照賣家進(jìn)行拆分即可。有了訂單的先例,首先想到了讀寫(xiě)分離,因?yàn)槌杀究梢宰龅汀i_(kāi)始實(shí)施后一段時(shí)間,又仔細(xì)回想了一下商品的整體需求,突然發(fā)現(xiàn)商品其實(shí)不需要和訂單同等的要求,一定要采用高成本的主數(shù)據(jù)庫(kù)嗎?全部采用低成本的普通服務(wù)器來(lái)做數(shù)據(jù)庫(kù)是否可行?經(jīng)過(guò)仔細(xì)的評(píng)估,發(fā)現(xiàn)是可以接受的,而這樣就導(dǎo)致之前已經(jīng)啟動(dòng)的商品讀寫(xiě)分離項(xiàng)目的一部分工作白做了!

故事講完了總是要有點(diǎn)總結(jié),來(lái)點(diǎn)虛的先:對(duì)于原始需求的清晰了解是系統(tǒng)決策的前提,否則彎路肯定要走,而對(duì)原始需求的了解并不容易,中間會(huì)有很多干擾和阻力,前面的實(shí)例看起來(lái)很簡(jiǎn)單,但是在一個(gè)運(yùn)行了5年的系統(tǒng)上來(lái)了解本質(zhì),來(lái)進(jìn)行變更,并沒(méi)那么容易。另外,經(jīng)驗(yàn)有些時(shí)候會(huì)成為系統(tǒng)決策的障礙,這個(gè)很矛盾,所以需要有歸零的心態(tài)來(lái)思考問(wèn)題。說(shuō)到底,回歸本源。

再來(lái)點(diǎn)稍微實(shí)際一點(diǎn)的,對(duì)于大型分布式系統(tǒng)的數(shù)據(jù)訪問(wèn),一個(gè)統(tǒng)一的數(shù)據(jù)層是非常必要的,封裝水平、垂直的數(shù)據(jù)分割,封裝讀寫(xiě)分離,封裝數(shù)據(jù)訪問(wèn)的路由、復(fù)制、合并、搬遷、熱點(diǎn)處理等功能,并且要對(duì)應(yīng)用透明,應(yīng)用針對(duì)性的,可以在JDBC層面包裝,數(shù)據(jù)庫(kù)針對(duì)性的,可以在數(shù)據(jù)庫(kù)協(xié)議層包裝,比如?Amoeba。

關(guān)注系統(tǒng)和人的交互

還有一個(gè)故事,在數(shù)據(jù)層的前期版本,為了做到透明的路由,曾經(jīng)采用無(wú)SQL的方式,所有的數(shù)據(jù)庫(kù)訪問(wèn)都是寫(xiě)代碼來(lái)做。上線后發(fā)現(xiàn)一個(gè)非常痛苦的問(wèn)題,無(wú)法和SQL對(duì)應(yīng),排錯(cuò)非常難。曾經(jīng)一次DBA發(fā)現(xiàn)數(shù)據(jù)庫(kù)上一個(gè)查詢耗費(fèi)太多資源,把優(yōu)化后的SQL給開(kāi)發(fā)人員改進(jìn),開(kāi)發(fā)人員好幾天沒(méi)找到具體是哪個(gè)查詢。

另外一個(gè)在2009年的感觸是業(yè)界服務(wù)化的實(shí)施情況,很多組織都在實(shí)施服務(wù)化,系統(tǒng)層面都很成功,通信、負(fù)載均衡、消息系統(tǒng)、服務(wù)容器等都有很多成果,但是實(shí)施一段時(shí)間以后的效果并不是非常好,依賴復(fù)雜,變更混亂,效率低下。究其根本,是對(duì)人的關(guān)注不夠,缺少的產(chǎn)品化的服務(wù)運(yùn)維,缺少服務(wù)治理。

上面的兩個(gè)例子都是對(duì)人的關(guān)注缺失,技術(shù)人員做系統(tǒng),大部分都更關(guān)注技術(shù),而忽視技術(shù)的創(chuàng)造者和使用者——人。軟件或服務(wù)的可測(cè)試性是對(duì)測(cè)試人員的關(guān)注、可維護(hù)性和可管理性是對(duì)運(yùn)維人員的關(guān)注,而一個(gè)框架的易用性是對(duì)所有使用人員的關(guān)注。除非能做出自己進(jìn)化的Skynet(注:Skynet(天網(wǎng))出現(xiàn)在《終結(jié)者》系列電影中,是一個(gè)人類于20世紀(jì)后期創(chuàng)造的以計(jì)算機(jī)為基礎(chǔ)的人工智能防御系統(tǒng),最初是研究用于軍事的發(fā)展。天網(wǎng)在控制了所有的美軍的武器裝備后不久,獲得自我意識(shí),并且認(rèn)定人類是它存在的威脅。于是立刻倒戈對(duì)抗其創(chuàng)造者,采用大規(guī)模殺傷性武器(甚至核暴)來(lái)滅絕全人類。),否則還是要多關(guān)注系統(tǒng)和人的交互。

關(guān)注可用性

還有一個(gè)感觸是業(yè)界對(duì)可用性這個(gè)基本指標(biāo)的關(guān)注度不夠。幾乎所有的框架都會(huì)說(shuō)自己的擴(kuò)展性多高,性能多好,而很少會(huì)提到監(jiān)控有多強(qiáng)、排錯(cuò)有多容易,很少提到在故障時(shí)怎么做隔離,怎么做降級(jí);從這個(gè)角度看,商用的產(chǎn)品確實(shí)做得好很多;關(guān)于性能相關(guān)的文章搜索一下,很多,各種優(yōu)化策略,各種優(yōu)化方法,而可用性方面,找到的系統(tǒng)性的知識(shí)真的很少;希望是我了解的不多。

總結(jié)

以上是生活随笔為你收集整理的淘宝的架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。