簡(jiǎn)單的 Web 應(yīng)用架構(gòu)概覽

一個(gè) Web 應(yīng)用通過(guò)功能分割沈矿,可以分為不同組件上真。本文以一個(gè) Rails 應(yīng)用為例,列出各個(gè)常用組件羹膳。

簡(jiǎn)單 Web 架構(gòu)

1. 負(fù)載均衡:Nginx

使用 Nginx 作為負(fù)載均衡服務(wù)睡互,Nginx 將請(qǐng)求平衡、分?jǐn)偨o多個(gè) Web 服務(wù)陵像。

2. Web 應(yīng)用服務(wù):Puma

Web 應(yīng)用服務(wù)根據(jù)客戶端的請(qǐng)求執(zhí)行業(yè)務(wù)流程就珠,然后返回格式為 HTML 或 JSON 之類的響應(yīng)。這個(gè)過(guò)程會(huì)跟很多服務(wù)通信:從數(shù)據(jù)庫(kù)取記錄醒颖、將耗時(shí)操作發(fā)給異步任務(wù)服務(wù)等等妻怎。

3. 數(shù)據(jù)庫(kù):PostgreSQL

用數(shù)據(jù)庫(kù)來(lái)定義數(shù)據(jù)結(jié)構(gòu),根據(jù)業(yè)務(wù)規(guī)則對(duì)數(shù)據(jù)增刪改查泞歉。比如一個(gè)商城應(yīng)用逼侦,它需要?jiǎng)?chuàng)建商品、創(chuàng)建購(gòu)物車條目腰耙、修改訂單狀態(tài)等等偿洁。

4. 緩存服務(wù):Redis

Redis 是一個(gè) in-memory 數(shù)據(jù)庫(kù),提供了一種簡(jiǎn)單的鍵值對(duì)沟优,使得存取數(shù)據(jù)的時(shí)間復(fù)雜度為 O(1)。通過(guò)緩存服務(wù)睬辐,我們可以存儲(chǔ)運(yùn)算成本比較高的結(jié)果挠阁,然后以后快速取得這些內(nèi)容宾肺。

比如在權(quán)限系統(tǒng)中,在用戶訪問(wèn)資源前侵俗,需要檢查用戶的權(quán)限锨用。而用戶的權(quán)限列表需要從訪問(wèn)好幾個(gè)數(shù)據(jù)庫(kù)表才能構(gòu)建出來(lái)。

  • 我們?cè)诘谝淮螜z查權(quán)限時(shí)把構(gòu)建好的權(quán)限列表存到緩存中隘谣。
  • 下次檢查權(quán)限時(shí)增拥,就不必從數(shù)據(jù)庫(kù)加載記錄了,可以直接從緩存中讀取寻歧。

要注意的是掌栅,每次寫(xiě)緩存時(shí),都要考慮在什么條件下進(jìn)行失效處理码泛。對(duì)于權(quán)限列表猾封,我們應(yīng)該在用戶權(quán)限更改時(shí),將它刪除噪珊。

5. 任務(wù)隊(duì)列:Sidekiq

Sidekiq 是一個(gè)基于 Redis 的異步任務(wù)服務(wù)晌缘。當(dāng)我們創(chuàng)建一個(gè)任務(wù)時(shí),Sidekiq 將任務(wù)存進(jìn) Redis痢站,Sidekiq 服務(wù)根據(jù)調(diào)度規(guī)則不斷從 Redis 獲取任務(wù)磷箕,然后處理。對(duì)于一些我們不關(guān)心其返回結(jié)果或者比較耗時(shí)的操作阵难,我們可以異步處理這些操作岳枷。

比如用戶注冊(cè)成功后,系統(tǒng)會(huì)發(fā)一封歡迎郵件給該用戶多望,發(fā)送郵件這個(gè)操作不必在注冊(cè)接口中執(zhí)行嫩舟,就可以不阻塞用戶的注冊(cè)動(dòng)作。

6. 消息隊(duì)列:Active Mq

消息隊(duì)列有許多好處:平衡流量高峰怀偷、解耦家厌。消息列隊(duì)有 2 個(gè)角色:發(fā)布者、消費(fèi)者椎工。他們不關(guān)心消息從哪里來(lái)饭于,到哪里去,只關(guān)心消息內(nèi)容维蒙,從而達(dá)到解耦的目的掰吕。

比如在一個(gè)酒店管理系統(tǒng)下, A 系統(tǒng)修改房間狀態(tài)后發(fā)布了一條消息出去颅痊,B 系統(tǒng)收到這條消息殖熟,它再根據(jù)內(nèi)容做其他事情,這個(gè)過(guò)程中斑响,A 不用擔(dān)心有哪些系統(tǒng)要監(jiān)聽(tīng)這個(gè)消息菱属,也不必關(guān)心消息是否被成功處理钳榨。

作為消費(fèi)者,需要啟動(dòng)一個(gè)進(jìn)程來(lái)專門接收消息纽门,Ruby 應(yīng)用可以使用 Stomp 作為 ActiveMq 的消費(fèi)者薛耻。

7. 搜索引擎:ElasticSearch

使用搜索引擎,我們可以快速給應(yīng)用添加這些功能:實(shí)時(shí)查詢赏陵、聚合數(shù)據(jù)饼齿、全文搜索。

8. CDN

存儲(chǔ)靜態(tài)資源文件蝙搔,比如圖片缕溉、Javascript、HTML杂瘸、CSS 等等倒淫。

  • CDN 服務(wù)會(huì)將文件存儲(chǔ)在世界各地的服務(wù)器上,可以讓各個(gè)地方的用戶快速訪問(wèn)資源败玉。
  • 而且這些流量不用經(jīng)過(guò)我們的 Web 服務(wù)器敌土,為應(yīng)用服務(wù)器分擔(dān)負(fù)載。

參考文章:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末运翼,一起剝皮案震驚了整個(gè)濱河市返干,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌血淌,老刑警劉巖矩欠,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異悠夯,居然都是意外死亡癌淮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門沦补,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乳蓄,“玉大人,你說(shuō)我怎么就攤上這事夕膀⌒榈梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵产舞,是天一觀的道長(zhǎng)魂奥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)易猫,這世上最難降的妖魔是什么耻煤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上违霞,老公的妹妹穿的比我還像新娘嘴办。我一直安慰自己,他們只是感情好买鸽,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贯被,像睡著了一般眼五。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彤灶,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天看幼,我揣著相機(jī)與錄音,去河邊找鬼幌陕。 笑死诵姜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搏熄。 我是一名探鬼主播棚唆,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼心例!你這毒婦竟也來(lái)了宵凌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤止后,失蹤者是張志新(化名)和其女友劉穎瞎惫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體译株,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓜喇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歉糜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乘寒。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖现恼,靈堂內(nèi)的尸體忽然破棺而出肃续,到底是詐尸還是另有隱情,我是刑警寧澤叉袍,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布始锚,位于F島的核電站,受9級(jí)特大地震影響喳逛,放射性物質(zhì)發(fā)生泄漏瞧捌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姐呐。 院中可真熱鬧殿怜,春花似錦、人聲如沸曙砂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸠澈。三九已至柱告,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笑陈,已是汗流浹背际度。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涵妥,地道東北人乖菱。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蓬网,于是被迫代替她去往敵國(guó)和親窒所。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容