学习淘淘商城第一课
? ? ? ? 當今中國,互聯(lián)網(wǎng)技術(shù)迅速崛起,國家也在一直倡導互聯(lián)網(wǎng)+的概念,所以在可以預見的未來,互聯(lián)網(wǎng)工程師肯定會越來越吃香,工資水平也越來越高。想在互聯(lián)網(wǎng)行業(yè)能有一席之地,就要掌握相關(guān)技術(shù)。
? ? ? ? 首先,我們一起來了解一下電商行業(yè)技術(shù)特點:
1.技術(shù)新
2.技術(shù)范圍廣
3.分布式
4.高并發(fā)、集群、負載均衡、高并發(fā)
5.海量數(shù)據(jù)
6.業(yè)務(wù)復雜
7.系統(tǒng)安全
? ? ? ? 正是由于以上特點才讓我們的互聯(lián)網(wǎng)工程師這么吃香。
? ? ? ? 我們要學習的淘淘網(wǎng)上商城是一個綜合性的B2C平臺,類似京東商城、天貓商城。會員可以在商城瀏覽商品、下訂單,以及參加各種活動。管理員、運營可以在平臺后臺管理系統(tǒng)中管理商品、訂單、會員等。客服可以在后臺管理系統(tǒng)中處理用戶的詢問及投訴。
? ? ? ? ?提到電商,我們就一起了解下,當前的電商模式有哪些:
B2B: 商家到商家。代表公司有阿里巴巴、慧聰網(wǎng)、銘萬網(wǎng)。
B2C: 商家到客戶。代表公司是京東。
C2C: 用戶到用戶。代表公司是淘寶。
B2B2C:商家到商家到用戶。代表公司是天貓。
O2O: 線上到線下。代表公司有百度外賣、美團、餓了么。
? ? ? ? ? ?下面說下B2C電商系統(tǒng)架構(gòu),B2C電商系統(tǒng)功能列表如下圖所示。
? ? ? ? ?傳統(tǒng)項目的架構(gòu)圖如下所示,這種架構(gòu)在并發(fā)量小的情況下是沒有什么問題的,但是當并發(fā)量大的時候,這種架構(gòu)瞬間就會崩潰。
? ? ? ? ?先來說下當并發(fā)達到1000時的場景,我們知道,對于一個tomcat來講,理論上能處理500的并發(fā)量,但實際它能應(yīng)付的并發(fā)量有個三四百就不錯了,那么當有1000人同時訪問系統(tǒng)時,怎么解決問題呢?答案是加tomcat數(shù)量(搭建tomcat集群)并使用nginx反向代理來做負載均衡處理,如下圖所示,一個tomcat處理400并發(fā),3個tomcat便可以處理1000的并發(fā)。需要注意的是sessioin共享的問題,原理是tomcat之間每隔一段時間便會廣播自己的session信息,別的tomcat看到自己有些信息跟人家不一致就向人家同步,同理該tomcat也會跟別的tomcat進行同步數(shù)據(jù),從而達到數(shù)據(jù)一致的目的。
? ? ? ? ?那么當并發(fā)量達到10000時怎么辦呢?理論上說,可以部署25個tomcat來解決并發(fā)問題,但是實際上這時tomcat的集群處理并發(fā)的能力便很低了,原因是什么呢?上面我們說了,不同的tomcat之間要保持數(shù)據(jù)同步,配置了session復制,會定時廣播session,而且每個tomcat都既是廣播者又是接收者,當tomcat較多時,網(wǎng)絡(luò)帶寬都被用來進行廣播了,留給集群來處理并發(fā)的帶寬就很少了,效率很低下,由此可以看到,我們不能通過增加tomcat數(shù)量來解決高并發(fā)的問題。
? ? ? ?上面既然說了通過增加tomcat數(shù)量來解決高并發(fā)不可行,那么應(yīng)該怎么解決呢?要解決這個問題,需要按照功能點把系統(tǒng)拆分,拆分成獨立的功能。單獨為某一個節(jié)點添加服務(wù)器。需要系統(tǒng)之間配合才能完成整個業(yè)務(wù)邏輯,這就叫做分布式。其中很核心的一點就是,這種架構(gòu)把所有的session都放到單點登錄系統(tǒng)中了,這樣就解決了單純增加tomcat數(shù)量而引起的session廣播風暴的問題,我們把一個完整的系統(tǒng)拆分成多個模塊這樣做的原因是,高并發(fā)處理可能僅僅涉及一小塊,比如下圖的前臺系統(tǒng),其它模塊的并發(fā)量就小很多了,復制整個tomcat的做法顯然浪費了很多資源,我們把項目模塊化,這樣我們便可以集中處理高并發(fā)的模塊(采用集群來處理,由于這時已經(jīng)沒有廣播風暴的問題了,因此理論上講,可以處理非常高的并發(fā)量),那些并發(fā)量低的模塊可能一個tomcat便可以搞定,哪個模塊并發(fā)量高了便可以配置集群來解決。項目的運行需要各個模塊協(xié)調(diào)合作。
? ? ? ? ?概念:
? ? ? ? ?分布式架構(gòu):多個子系統(tǒng)相互協(xié)作才能完成業(yè)務(wù)流程。系統(tǒng)之間需要通信。
? ? ? ? ?集群: 同一個工程部署到多臺服務(wù)器上。
? ? ? ? ?分布式架構(gòu)的優(yōu)點:
1.把模塊拆分,使用接口通信,降低模塊之間的耦合度。
2.把項目拆分成若干個子項目,不同的團隊負責不同的子項目。
3.增加功能時只需要再增加一個子項目,調(diào)用其它系統(tǒng)的接口就可以。
4.可以靈活的進行分布式部署。
? ? ? ? 有優(yōu)點就有缺點,缺點如下:
1.系統(tǒng)之間交互需要使用遠程通信,接口開發(fā)增加工作量。
2.各個模塊有一些通用的業(yè)務(wù)邏輯無法共用。
? ? ? ? 為了解決上面分布式架構(gòu)的缺點,我們引入了soa架構(gòu),SOA:Service Oriented Architecture面向服務(wù)的架構(gòu)。也就是把工程拆分成服務(wù)層、表現(xiàn)層兩個工程。服務(wù)層中包含業(yè)務(wù)邏輯,只需要對外提供服務(wù)即可。表現(xiàn)層只需要處理和頁面的交互,業(yè)務(wù)邏輯都是調(diào)用服務(wù)層的服務(wù)來實現(xiàn)。SOA架構(gòu)如下圖所示,我們把接口和業(yè)務(wù)邏輯做成一個個的服務(wù)。比如訂單系統(tǒng)需要查詢商品服務(wù),前臺系統(tǒng)也需要查詢商品服務(wù),由于我們把商品服務(wù)獨立出來了,做到了代碼復用,它們調(diào)用即可。表現(xiàn)層只是用來展示數(shù)據(jù)而已。
? ? ? ? 我們淘淘商城的技術(shù)架構(gòu)如下圖所示,可以看到表現(xiàn)層與服務(wù)層之間加了一個服務(wù)中間件Dubbo,這樣做的目的是加快表現(xiàn)層與服務(wù)層之間的交互速度,服務(wù)層與數(shù)據(jù)庫之間加redis,可以大大提高重復性查詢的效率,持久層是一個mysql集群,由MyCat數(shù)據(jù)庫中間件來管理,MyCat相當于這么多mysql數(shù)據(jù)庫的一個抽象,我們操作數(shù)據(jù)庫直接面向的將是MyCat而不是具體的某個mysql,是由MyCat來替我們完成相關(guān)操作的。Solr服務(wù)是專門用來處理查詢的,主要是通過建立索引庫來實現(xiàn)的。消息隊列則是專門處理各個模塊之間的消息的。
?? ?
總結(jié)