成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析大型Java項(xiàng)目架構(gòu)演進(jìn)

開發(fā) 架構(gòu)
以淘寶網(wǎng)為例,簡(jiǎn)單了解一下大型電商的服務(wù)端架構(gòu)是怎樣的。

前言

以淘寶網(wǎng)為例,簡(jiǎn)單了解一下大型電商的服務(wù)端架構(gòu)是怎樣的。如圖所示:

最上面的就是安全體系系統(tǒng),中間的就是業(yè)務(wù)運(yùn)營(yíng)系統(tǒng),包含各個(gè)不同的業(yè)務(wù)服務(wù),下面是一些共享服務(wù),然后還有一些中間件,其中 ECS 就是云服務(wù)器,MQS 是隊(duì)列服務(wù),OCS 是緩存等等,右側(cè)是一些支撐體系服務(wù)。

除圖中所示之外還包含一些我們看不到的,比如高可用的體現(xiàn)。淘寶目前已經(jīng)實(shí)現(xiàn)多機(jī)房容災(zāi)和異地機(jī)房單元化部署,為淘寶的業(yè)務(wù)也提供了穩(wěn)定、高效和易于維護(hù)的基礎(chǔ)架構(gòu)支撐。

這是一個(gè)含金量非常高的架構(gòu),也是一個(gè)非常復(fù)雜而龐大的架構(gòu),當(dāng)然這個(gè)架構(gòu)不是一天兩天演進(jìn)成這樣的,也不是一開始就設(shè)計(jì)并開發(fā)成這樣的,對(duì)于初創(chuàng)公司而言,很難在初期就預(yù)估到未來(lái)流量千倍、萬(wàn)倍的網(wǎng)站架構(gòu)會(huì)是怎樣的狀況,同時(shí)如果初期就設(shè)計(jì)成千萬(wàn)級(jí)并發(fā)的流量架構(gòu),也很難去支撐這個(gè)成本。

因此一個(gè)大型服務(wù)系統(tǒng),都是從小一步一步走過來(lái)的,在每個(gè)階段找到對(duì)應(yīng)該階段網(wǎng)站架構(gòu)所面臨的問題,然后不斷解決這些問題,在這個(gè)過程中,整個(gè)架構(gòu)會(huì)一直演進(jìn),同時(shí)內(nèi)含的代碼也就會(huì)演進(jìn),大到架構(gòu)、小到代碼都是在不斷演進(jìn)和優(yōu)化的。所以說高大上的項(xiàng)目技術(shù)架構(gòu)和開發(fā)設(shè)計(jì)實(shí)現(xiàn)不是一蹴而就的,這是所謂的萬(wàn)丈高樓平地起。

單機(jī)架構(gòu)

從一個(gè)小網(wǎng)站說起,一般來(lái)說初始一臺(tái)服務(wù)器就夠了,文件服務(wù)器、數(shù)據(jù)庫(kù)以及應(yīng)用都部署在一臺(tái)機(jī)器上。也就是俗稱的 allinone 架構(gòu)。

多機(jī)部署

隨著網(wǎng)站用戶逐漸增多,訪問量越來(lái)越大,硬盤、cpu、內(nèi)存等開始吃緊,一臺(tái)服務(wù)器難以支撐??匆幌卵葸M(jìn)過程,我們將數(shù)據(jù)服務(wù)和應(yīng)用服務(wù)進(jìn)行分離,給應(yīng)用服務(wù)器配置更好的 cpu、內(nèi)存等等,而給數(shù)據(jù)服務(wù)器配置更好、更快的大的硬盤,如圖所示用了三臺(tái)服務(wù)器進(jìn)行部署,能提高一定的性能和可用性。

分布式緩存

隨著訪問的并發(fā)越來(lái)越高,為了降低接口的訪問時(shí)間提高服務(wù)性能,繼續(xù)對(duì)架構(gòu)進(jìn)行演進(jìn)。

我們發(fā)現(xiàn)有很多業(yè)務(wù)數(shù)據(jù)不需要每次都從數(shù)據(jù)庫(kù)中獲取,于是我們使用了緩存,因?yàn)?80% 的業(yè)務(wù)訪問都集中在 20% 的數(shù)據(jù)上 (二八原則),如果能將這部分?jǐn)?shù)據(jù)緩存下來(lái),性能就能提高很多,緩存又分兩種,一種是 Application 中的本地緩存,還有遠(yuǎn)程緩存,遠(yuǎn)程緩存又分為遠(yuǎn)程的單機(jī)式緩存和分布式緩存 (圖所示的是分布式緩存集群)。

我們需要思考幾點(diǎn),具有哪種業(yè)務(wù)特點(diǎn)的數(shù)據(jù)使用緩存,具有哪種業(yè)務(wù)特點(diǎn)的數(shù)據(jù)使用本地緩存,具有哪種業(yè)務(wù)特點(diǎn)的數(shù)據(jù)使用遠(yuǎn)程緩存。分布式緩存在擴(kuò)容時(shí)會(huì)遇上什么問題,如何解決,分布式緩存的算法都有哪幾種,都有什么優(yōu)缺點(diǎn)。這些問題都是我們?cè)谑褂眠@個(gè)架構(gòu)時(shí)需要思考并解決的問題。

服務(wù)器集群

這個(gè)時(shí)候隨著訪問的 qps 不斷提高,假設(shè)我們使用的 Application Server 是 tomcat,那么 tomcat 服務(wù)器的處理能力就會(huì)成為一個(gè)瓶頸,雖然我們也可以通過購(gòu)買更強(qiáng)大的硬件但總會(huì)有上限,并且這個(gè)成本到后期是呈指數(shù)級(jí)的增長(zhǎng)。

這時(shí)候就可以對(duì)服務(wù)器做一個(gè)集群 (cluster) ,然后添加負(fù)載均衡調(diào)度器  (LoadBalancer) ,服務(wù)器集群后我們就可以橫向擴(kuò)展我們的服務(wù)器了,解決了服務(wù)器處理能力的瓶頸。

此時(shí)我們又需要思考幾個(gè)問題, 負(fù)載均衡的調(diào)度策略都有哪些,各有什么優(yōu)缺點(diǎn),各適合什么場(chǎng)景,比如輪詢、權(quán)重、地址散列,地址散列又分為原 IP 地址散列、目標(biāo) IP 地址散列、最小連接、加權(quán)最小連接等等。

服務(wù)器集群后,假設(shè)我們登陸了 A 服務(wù)器,session 信息存放在 A 服務(wù)器上了,如果我們的負(fù)載均衡策略是輪詢或者最小連接等,下次是有可能訪問到 B 服務(wù)器,這時(shí)候存儲(chǔ)在 A 服務(wù)器上的 session 信息我們?cè)?B 服務(wù)器是讀取不到的,所以我們需要解決 session 管理的問題。

Session 共享解決方案

session sticky

我們使用 session sticky 這種方式來(lái)解決這個(gè)問題,它的處理規(guī)則是對(duì)于同一個(gè)連接中的數(shù)據(jù)包,負(fù)載均衡會(huì)將其進(jìn)行 NAT 轉(zhuǎn)換后,轉(zhuǎn)發(fā)至后端固定的服務(wù)器進(jìn)行處理,這種方案解決了 session 共享的問題。

如圖所示客戶端 1 通過負(fù)載均衡會(huì)固定轉(zhuǎn)發(fā)到服務(wù)器 1 中。缺點(diǎn)是第一假設(shè)有一臺(tái)服務(wù)器重啟了,那么該服務(wù)器的 session 將全部消失,第二是我們的負(fù)載均衡服務(wù)器成了一種有狀態(tài)的服務(wù)器,要實(shí)現(xiàn)容災(zāi)會(huì)有麻煩。

session 復(fù)制

session 復(fù)制,即當(dāng) browser1 經(jīng)過負(fù)載均衡服務(wù)器把 session 存到 application1 中,會(huì)同時(shí)把 session 復(fù)制到 application2 中,所以多臺(tái)服務(wù)器都保存著相同的 session 信息。

缺點(diǎn)是應(yīng)用服務(wù)器的帶寬問題,服務(wù)器之間要不斷同步 session 信息,當(dāng)大量用戶在線時(shí),服務(wù)器占用內(nèi)存會(huì)過多,不適合大規(guī)則集群,適合機(jī)器不多情況。

基于 cookie

基于 cookie,也就是說我們每次都用攜帶 session 信息的 cookie 去訪問應(yīng)用服務(wù)器。缺點(diǎn)是 cookie 的長(zhǎng)度是有限制的,cookie 保存在瀏覽器上安全性也是一個(gè)問題。

session 服務(wù)器

把 session 做成了一個(gè) session 服務(wù)器,比如可以使用 redis 實(shí)現(xiàn)。這樣每個(gè)用戶訪問到應(yīng)用服務(wù)器,其 session 信息最終都存到 session server 中,應(yīng)用服務(wù)器也是從 session server 中去獲取 session。

要考慮以下幾個(gè)問題,在當(dāng)前架構(gòu)中 session server 是一個(gè)單點(diǎn)的,如何解決單點(diǎn),保證它的可用性,當(dāng)然也可以將 session server 做成一個(gè)集群,這種方式適用于 session 數(shù)量及 web 服務(wù)器數(shù)量大的情況,同時(shí)改成這種架構(gòu)后,在寫應(yīng)用時(shí),也要調(diào)整存儲(chǔ) session 的業(yè)務(wù)邏輯。

數(shù)據(jù)庫(kù)讀寫分離

在解決了服務(wù)器橫向擴(kuò)展之后,繼續(xù)看數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的讀與寫操作都需要經(jīng)過數(shù)據(jù)庫(kù),當(dāng)用戶量達(dá)到一定量時(shí),數(shù)據(jù)庫(kù)性能又成為了一個(gè)瓶頸,我們繼續(xù)演進(jìn)。

我們可以使用數(shù)據(jù)庫(kù)的讀寫分離,同時(shí)應(yīng)用要接入多數(shù)據(jù)源。通過統(tǒng)一的數(shù)據(jù)訪問模型進(jìn)行訪問。數(shù)據(jù)庫(kù)的讀寫分離是將所有的寫操作引入到主庫(kù)中 (master) ,將讀操作引入到從庫(kù)中  (slave) ,此時(shí)應(yīng)用程序也要做出相應(yīng)的變化,我們實(shí)現(xiàn)了一個(gè)數(shù)據(jù)訪問模塊  (data accessmodule) ,使上層寫代碼的人不知道讀寫分離的存在,這樣多數(shù)據(jù)源的讀寫對(duì)業(yè)務(wù)代碼就沒有侵入,這就是代碼層面的演變。

如何支持多數(shù)據(jù)源,如何封裝對(duì)業(yè)務(wù)沒有侵入,如何使用目前業(yè)務(wù)使用的 ORM 框架完成主從的讀寫分離,是否需要更換 ORM,各有什么優(yōu)缺點(diǎn),如何取舍都是當(dāng)前這個(gè)架構(gòu)需要考慮的問題。

當(dāng)訪問量過大時(shí)候,也就是說數(shù)據(jù)庫(kù)的 IO 非常大,我們的數(shù)據(jù)庫(kù)讀寫分離又會(huì)遇到以下問題?

例如主庫(kù)和從庫(kù)復(fù)制有沒有延遲,如果我們將主庫(kù)和從庫(kù)分機(jī)房部署的話,跨機(jī)房傳輸同步數(shù)據(jù)更是一個(gè)問題。另外應(yīng)用對(duì)數(shù)據(jù)源的路由問題,這些也是需要思考和解決的點(diǎn)。

CDN 加速與反向代理

我們繼續(xù)增加了 CDN 和反向代理服務(wù)器  (Reverseproxy server) ,使用  CDN 可以很好的解決不同地區(qū)訪問速度問題,反向代理則在服務(wù)器機(jī)房中可以緩存用戶的資源。

分布式文件服務(wù)器

這個(gè)時(shí)候我們的文件服務(wù)器又出現(xiàn)了瓶頸,我們將文件服務(wù)器改成了分布式文件服務(wù)器集群,在使用分布式文件系統(tǒng)時(shí),需要考慮幾個(gè)問題,如何不影響部署在線上的應(yīng)用訪問,是否需要業(yè)務(wù)部門幫忙清洗數(shù)據(jù),是否需要備份服務(wù)器,是否需要重新做域名解析等等。

數(shù)據(jù)庫(kù)分庫(kù)分表

這個(gè)時(shí)候我們的數(shù)據(jù)庫(kù)又出現(xiàn)了瓶頸,我們選擇專庫(kù)專用的形式,進(jìn)行數(shù)據(jù)的垂直拆分,相關(guān)的業(yè)務(wù)獨(dú)用自己的一個(gè)庫(kù),我們解決了寫數(shù)據(jù)并發(fā)量大的問題。

當(dāng)我們把這些表分成不同的庫(kù),又會(huì)帶來(lái)一些新的問題。例如跨業(yè)務(wù)和跨庫(kù)的事務(wù),可以使用分布式事務(wù),或者去掉事務(wù),或者不追求強(qiáng)事務(wù)。

隨著訪問量過大,數(shù)據(jù)量過大,某個(gè)業(yè)務(wù)的數(shù)據(jù)庫(kù)數(shù)據(jù)量和更新量已經(jīng)達(dá)到了單個(gè)數(shù)據(jù)庫(kù)的瓶頸了,這個(gè)時(shí)候就需要進(jìn)行數(shù)據(jù)庫(kù)的水平拆分,例如把 user 拆分成了 user1 和 user2,就是將同一個(gè)表的數(shù)據(jù)拆分到兩個(gè)數(shù)據(jù)庫(kù)當(dāng)中,這個(gè)時(shí)候我們解決了單數(shù)據(jù)庫(kù)的瓶頸。

水平拆分時(shí)候又要注意哪些點(diǎn),都有哪幾種水平拆分的方式。進(jìn)行了水平拆分后,又會(huì)遇到幾個(gè)問題,第一 sql 路由的問題,假設(shè)有一個(gè)用戶,我們?nèi)绾沃肋@個(gè)用戶信息是存在了 user1 還是 user2 數(shù)據(jù)庫(kù)中,由于分庫(kù)了,我們的主鍵策略也會(huì)有所不同,同時(shí)會(huì)面臨分頁(yè)的問題,假設(shè)我們要查詢某月份已經(jīng)下單的用戶明細(xì),而這些用戶又分布在 user1 和 user2 庫(kù)中,我們后臺(tái)運(yùn)營(yíng)管理系統(tǒng)對(duì)它進(jìn)行展示的時(shí)候還要進(jìn)行分頁(yè)。這些都是我們?cè)谑褂眠@個(gè)架構(gòu)時(shí)需要解決的問題。

搜索引擎與 NoSQL

在網(wǎng)站發(fā)布并進(jìn)行了大規(guī)模的推廣后,導(dǎo)致我們應(yīng)用服務(wù)器的搜索量又飆升,我們把應(yīng)用服務(wù)器的搜索功能單獨(dú)抽取出來(lái)做了一個(gè)搜索引擎,同時(shí)部分場(chǎng)景可以使用 NoSQL 來(lái)提高性能。同時(shí)我們開發(fā)一個(gè)數(shù)據(jù)統(tǒng)一的訪問模塊,同時(shí)連著數(shù)據(jù)庫(kù)集群、搜索引擎和  NoSQL ,解決上層應(yīng)用開發(fā)的數(shù)據(jù)源問題。

后序

這里只是簡(jiǎn)單舉例,并沒有依據(jù)什么實(shí)際的業(yè)務(wù)場(chǎng)景。事實(shí)上各個(gè)服務(wù)的架構(gòu)是要根據(jù)實(shí)際的業(yè)務(wù)特點(diǎn)進(jìn)行優(yōu)化和演進(jìn)的,所以這個(gè)過程也不是完全相同的。當(dāng)然這個(gè)架構(gòu)也不是最終形態(tài),還存在很多要提升的地方。

例如負(fù)載均衡服務(wù)器目前是一個(gè)單點(diǎn)的,如果負(fù)載均衡服務(wù)器訪問不了,那么后續(xù)的包括服務(wù)器集群等也就無(wú)法訪問了。所以可以將負(fù)載均衡服務(wù)器做成集群,然后做一些主從的雙機(jī)熱備,同時(shí)做一個(gè)自動(dòng)切換的解決方案。

在整個(gè)架構(gòu)的演進(jìn)過程中,其實(shí)還包含更多需要關(guān)注的內(nèi)容,比如安全性、數(shù)據(jù)分析、監(jiān)控、反作弊......

針對(duì)一些特定的場(chǎng)景例如交易、充值、流計(jì)算等使用消息隊(duì)列、任務(wù)調(diào)度......

整個(gè)架構(gòu)繼續(xù)發(fā)展下去,做成 SOA 架構(gòu)、服務(wù)化 (微服務(wù))、多機(jī)房......

最后,我想說高大上的項(xiàng)目技術(shù)架構(gòu)和開發(fā)設(shè)計(jì)實(shí)現(xiàn)絕不是一僦而就的。

 

責(zé)任編輯:張燕妮 來(lái)源: 俠夢(mèng)的開發(fā)筆記
相關(guān)推薦

2021-03-08 09:52:55

架構(gòu)運(yùn)維技術(shù)

2018-01-09 22:18:18

架構(gòu)阿里巴巴服務(wù)器

2024-03-06 11:22:33

架構(gòu)演進(jìn)技巧

2018-04-13 08:44:40

存儲(chǔ)大型網(wǎng)站

2015-10-22 10:35:06

2015-12-08 09:13:05

開發(fā)維護(hù)Java項(xiàng)目

2018-05-31 09:27:38

服務(wù)器架構(gòu)原理

2023-09-28 21:46:10

2023-11-14 20:51:08

2015-12-09 15:16:03

架構(gòu)師京東架構(gòu)

2013-10-15 13:24:00

負(fù)載均衡架構(gòu)

2016-11-07 21:00:04

網(wǎng)站service架構(gòu)設(shè)計(jì)

2010-11-15 17:23:09

網(wǎng)絡(luò)架構(gòu)

2010-11-18 11:44:27

廣域網(wǎng)優(yōu)化網(wǎng)絡(luò)拓?fù)?/a>H3C

2024-06-05 12:03:43

微服務(wù)架構(gòu)場(chǎng)景

2023-11-27 07:40:55

2015-08-26 10:36:32

ios開發(fā)漫談

2015-08-31 10:11:43

iOS大項(xiàng)目開發(fā)

2021-05-12 08:54:56

FastAP web 框架數(shù)據(jù)庫(kù)操作

2020-07-21 08:20:23

系統(tǒng)架構(gòu)編輯器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品一区二区免费 | 99热在线免费 | 久久久久久久国产精品影院 | 亚洲视频中文 | 欧美精品一区二区在线观看 | 日韩欧美中文字幕在线视频 | 亚洲视频在线观看 | 欧美视频精品 | 午夜影院在线视频 | 91精品国产欧美一区二区成人 | 国产av毛片 | 男女搞网站 | 狠狠干狠狠操 | 久久99精品久久久久久琪琪 | 久久影音先锋 | 男女污污动态图 | 亚洲福利网站 | 国产精品日韩 | 国产免费一区二区三区 | 在线国产一区 | 中文字幕亚洲区一区二 | 国产精品国产精品国产专区不卡 | 91精品国产91久久久久久 | 久久i | 久优草 | 欧美一级大片免费观看 | 免费一级黄色 | 日日爱视频 | 91精品国产综合久久婷婷香蕉 | 在线免费中文字幕 | 麻豆精品国产91久久久久久 | 一区二区伦理电影 | 桃色五月| 成人在线播放 | 成人在线观看免费 | 中文字幕91av | 国产欧美一区二区三区日本久久久 | 国产不卡在线 | 亚洲精品视频免费 | 国产a级毛片 | 99热欧美|