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

Java架構高并發的解決實戰總結方案,看完這些就夠了!

開發 后端
網站架構的整個演變過程主要是圍繞大數據和高并發這兩個問題展開的,解決方案主要分為使用緩存和多資源兩種類型。

 [[262675]]

1.應用和靜態資源分離

剛開始的時候應用和靜態資源是保存在一起的,當并發量達到一定程度的時候就需要將靜態資源保存到專門的服務器中,靜態資源主要包括圖片、視頻、js、css和一些資源文件等,這些文件因為沒有狀態所以分離比較簡單,直接存放到響應的服務器就可以了,一般會使用專門的域名去訪問。

通過不同的域名可以讓瀏覽器直接訪問資源服務器而不需要再訪問應用服務器了。架構圖如下:

2.頁面緩存

頁面緩存是將應用生成的頁面緩存起來,這樣就不需要每次都生成頁面了,從而可以節省大量的CPU資源,如果將緩存的頁面放到內存中速度就更快了。如果使用Nginx服務器就可以使用它自帶的緩存功能,當然也可以使用專門的Squid 服務器。頁面緩存的默認失效機制一班都是按緩存時間處理的,當然也可以在修改數據之后手動讓相應的緩存失效。

頁面緩存主要是使用在數據很少發生變化的頁面,但是很多頁面是大部分數據都很少發生變化,而其中很少一部分數據變化頻率卻非常高,比如說一個顯示文章的頁面,正常來說完全可以靜態化,但是如果文章后面有“頂”和“踩”的功能而且顯示的有響應的數量,這個數據的變化頻率就比較高了,這就會影響靜態化。這個問題可以用先生成靜態頁面然后使用Ajax來讀取并修改響應的數據,這樣就可以一舉兩得來,既可以使用頁面緩存也可以實時顯示一些變化頻率高的數據來。

其實大家都知道,效率***、消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的網站上的頁面采用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。但是對于大量內容并且頻繁更新的網站,我們無法全部手動去挨個實現,于是出現了我們常見的信息發布系統CMS,像我們常訪問的各個門戶站點的新聞頻道,甚至他們的其他頻道,都是通過信息發布系統來管理和實現的,信息發布系統可以實現最簡單的信息錄入自動生成靜態頁面,還能具備頻道管理、權限管理、自動抓取等功能,對于一個大型網站來說,擁有一套高效、可管理的CMS是必不可少的。

 除了門戶和信息發布類型的網站,對于交互性要求很高的社區類型網站來說,盡可能的靜態化也是提高性能的必要手段,將社區內的帖子、文章進行實時的靜態化,有更新的時候再重新靜態化也是大量使用的策略,像Mop的大雜燴就是使用了這樣的策略,網易社區等也是如此。

同時,html靜態化也是某些緩存策略使用的手段,對于系統中頻繁使用數據庫查詢但是內容更新很小的應用,可以考慮使用html靜態化來實現,比如論壇中論壇的公用設置信息,這些信息目前的主流論壇都可以進行后臺管理并且存儲再數據庫中,這些信息其實大量被前臺程序調用,但是更新頻率很小,可以考慮將這部分內容進行后臺更新的時候進行靜態化,這樣避免了大量的數據庫訪問請求。

3.集群與分布式

集群是每臺服務器都具有相同的功能,處理請求時調用那臺服務器都可以,主要起分流作用。

分布式是將不同的業務放到不同的服務器中,處理一個請求可能需要用到多臺服務器,這樣就可以提高一個請求的處理速度,而且集群和分布式也可以同時使用。

集群有兩個方式:一種是在靜態資源集群。另一種是應用程序集群。靜態資源集群比較簡單。應用程序集群在處理過程中最核心的問題就是Session 同步問題。

Session 同步有兩種處理方式:一種是在Session 發生變化后自動同步到其他服務器,另一種就是用個程序統一管理Session。所有集群的服務器都使用同一個Session,Tomcat 默認使用就是***種方式,通過簡單的配置就可以實現,第二種方式可以使用專門的服務器安裝Mencached等高效的緩存程序統一來管理session,然后再應用程序中通過重寫Request并覆蓋getSession 方法來獲取制定服務器中的Session。

對于集群來說還有一個核心的問題就是負載均衡,也就是接收到一個請求后具體分配到那個服務器去處理的問題,這個問題可以通過軟件處理也可以使用專門的硬件(如:F5)解決。

4. 反向代理

反向代理指的是客戶端直接訪問的服務器并不真正提供服務,它從別的服務器獲取資源然后將結果返回給用戶。

圖:

4.1 反向代理服務器和代理服務器的區別

代理服務器的作用是代我門獲取想要的資源然后將結果返回給我們,所要獲取的資源是我門主動告訴代理服務器的,比如,我門想訪問Facebook,但是直接訪問不了,這時就可以讓代理服務器訪問,然后將結果返回給我們。

反向代理服務器是我門正常訪問一臺服務器的時候,服務器自己去調用了別的服務器資源并將結果返回給我們,我門自己并不知道。

代理服務器是我們主動使用的,是為我們服務的,他不需要有自己的域名;反向代理服務器是服務器自己試用的,我門并不知道,它有自己的域名,我門訪問它和訪問正常的網址沒有任何區別。

反向代理服務器主要有三個作用:

1. 可以作為前端服務器跟實際處理請求的服務器集成;

2. 可以做負載均衡

3. 轉發請求,比如說可以將不同類型的資源請求轉發到不同的服務器去處理。

5. CDN

cdn其實是一種特殊的集群頁面緩存服務器,他和普通集群的多臺頁面緩存服務器相比,主要是它存放的位置和分配請求的方式有點特殊。CDN 服務器是分布在全國各地的,當接收到用戶請求后會將請求分配到最合適的CDN服務器節點獲取數據。比如聯通的用戶分配到聯通的節點,上海的用戶分配到上海的節點。

CDN的每個節點其實就是一個頁面緩存服務器,如果沒有請求資源的緩存就會從主服務器獲取,否則直接返回緩存的頁面。

CDN分配請求(負載均衡)的方式是用專門的CDN域名解析服務器在解析域名的時候就分配好的。一般的做法是在ISP哪里試用CNAME將域名解析到一個特定的域名,然后再將解析到的那個域名用專門的CDN服務器解析道相應的CDN節點。如圖。

第二步訪問CDN的DNS服務器是應為CNAME記錄的目標域名使用NS記錄指向了CDN的DNS服務器。CDN的每個節點可能也是集群了多臺服務器。

6. 底層的優化

前面說的所有都是架構都是建立在最前面介紹的基礎結構之上的。很多地方都需要通過網絡傳輸數據,如果可以加快網絡傳輸的速度,那將會讓整個系統得到改善。

7.數據庫集群和庫表散列

大型網站都有復雜的應用,這些應用必須使用數據庫,那么在面對大量訪問的時候,數據庫的瓶頸很快就能顯現出來,這時一臺數據庫將很快無法滿足應用,于是我們需要使用數據庫集群或者庫表散列。

在數據庫集群方面,很多數據庫都有自己的解決方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案,您使用了什么樣的DB,就參考相應的解決方案來實施即可。

上面提到的數據庫集群由于在架構、成本、擴張性方面都會受到所采用DB類型的限制,于是我們需要從應用程序的角度來考慮改善系統架構,庫表散列是常用并且最有效的解決方案。我們在應用程序中安裝業務和應用或者功能模塊將數據庫進行分離,不同的模塊對應不同的數據庫或者表,再按照一定的策略對某個頁面或者功能進行更小的數據庫散列,比如用戶表,按照用戶ID進行表散列,這樣就能夠低成本的提升系統的性能并且有很好的擴展性。sohu的論壇就是采用了這樣的架構,將論壇的用戶、設置、帖子等信息進行數據庫分離,然后對帖子、用戶按照板塊和ID進行散列數據庫和表,最終可以在配置文件中進行簡單的配置便能讓系統隨時增加一臺低成本的數據庫進來補充系統性能。

8. 小結

網站架構的整個演變過程主要是圍繞大數據和高并發這兩個問題展開的,解決方案主要分為使用緩存和多資源兩種類型。多資源主要指多存儲(包括多內存)、多CPU和多網絡,對于多資源來說又可以分為單個資源處理一個完整的請求和多個資源合作處理一個請求兩種類型,如多存儲和多CPU中的集群和分布式,多網絡中的CDN和靜態資源分離。理解了整個思路之后就抓住了架構演變的本質,而且自己可能還可以設計出更好的架構。

其它簡單總結:

首先,我認為解決問題之前首先要有清晰的思路,如果只是用來別人的解決方案那也只能是拿來主義,沒有真正理解,沒有做到舉一反三。

海量數據和高并發經常被連在一塊說事兒,雖然他們完全是兩回事兒。海量數據純指的是數據庫的海量數據,而并發指的卻包括數據庫和服務器的高訪問量。

那么問題來了,既然是數據庫的數據量大,那怎么辦呢?要想解決問題,首先要知道問題是什么!!!那么海量數據會給我帶來什么樣的問題呢?

海量數據帶來的問題無非就是增刪改查的問題,除了之外還能有啥問題呢?總不能是帶來安全問題吧(打臉一,還真有可能是安全問題)

1 數據庫訪問緩慢

2 插入更新緩慢,這個問題只能通過分庫分表解決

要解決數據庫訪問緩慢的問題還有幾種方法,既然訪問數據庫慢的話,在邏輯允許的情況下可以不訪問數據庫呢?

1 使用緩存

2 使用頁面靜態化

既然不訪問數據庫逃不過去了,那我們就對數據庫進行優化

3 優化數據庫(包含的內容非常多,比如參數配置,索引優化,sql優化等等)

4 分離數據庫中活躍的數據

5 讀寫分離

6 批量讀取和延遲修改;

7 使用搜索引擎搜索數據庫中的數據;

8 使用NoSQL和Hadoop等技術;

9 進行業務的拆分;

高并發的解決方案

其實這個問題必須結合上面的海量數據來討論,什么情況下會出現高并發呢?一定是平時訪問量就比較大的情況,那么平時訪問量比較大相應的數據存儲也就越來越多,這都是相輔相成的,當然也有個例,比如剛需,比如12306,這里的高并發相比于它的數據來說已經不算海量了。那么平時訪問量大如何解決呢?因為這里牽扯到服務器和數據庫的問題,所以要從這兩方面來進行優化

1 增加web服務器數量,也就是做集群,做負載均衡。既然一臺服務器無法完成任務,那就多用幾臺,幾臺不夠用機房

在通向第二種解決方法之前,還有沒有除了數據庫服務器之外能做的一些優化手段呢?當然有

1.1 頁面緩存

1.2 cdn

1.3 反向代理

1.4 應用程序和靜態資源分離(比如***下載的資源單獨放在一起,給這臺服務器提供很高的帶寬資源)

2 增加數據庫服務器數量,同樣做集群,做負載均衡。

海量數據的解決方案

1 使用緩存

好多事情都是相輔相成的,相比來說使用緩存更多是用來解決高并發問題的,因為海量數據導致了訪問的緩慢,容易造成高并發問題的嚴重性,又因為數據庫一般是web訪問的瓶頸,所以我們在業務邏輯允許的情況下盡量先避免操作數據庫,于是,就有了緩存。將必要的數據存放在內存中,而不必每次都去數據庫中讀取造成不必要的性能浪費和加快訪問速度---這就是緩存帶來的好處。那使用緩存以及選用管理緩存軟件時應該注意些什么東西呢?

2 頁面靜態化---不想解釋,還有什么值得去解釋呢?

3 數據庫優化

3.1 數據庫表結構涉及

3.2 數據類型的選用

3.3 sql優化

3.4 索引優化

3.5 配置優化

需要注意的地方實在太多,應該作為單獨的一章拿出來講

4 分離數據庫中的活躍數據

為什么要分離呢?說一個我實際環境中遇到的問題吧!有一個表只有10幾個字段,表有130萬條數據,但大小已經到了5G的數據,這本身是不太合理的,這么少的數據占用了太多的數據,說明其中有些字段存儲了大量的字符串(比如說文章內容等),每次檢索這個表時大部分是用不到這些大字段內容的,但卻需要耗時比較長,產生很多的慢日志。這時我們可以考慮將表進行垂直切分,將活躍數據分離開來,這樣能大大加快訪問速度。

歡迎大家和我一起學習交流構建Java云架構,我這邊會將近期研發的Java云架構的搭建過程和精髓記錄下來,幫助更多有興趣研發Java高級架構的朋友,大家來一起探討Java高級架構的搭建過程及如何運用于企業項目。

我本人邀約各大BATJ架構大牛共創Java架構師社區,致力于免費提供Java架構行業交流平臺,通過這個平臺讓大家相互學習成長,提高技術,讓自己的水平進階一個檔次,成功通往Java架構技術大牛或架構師發展 (關注我:私信:【架構】,即可獲取)

希望此文能幫到大家的同時,也聽聽大家的觀點。歡迎留言討論,加關注,分享你的高見!持續更新!

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-05-07 07:52:51

Java并發編程

2020-04-10 10:10:28

Nginx高并發性能

2022-09-02 19:10:46

高并發架構系統

2017-03-07 15:35:26

Android適配 界面

2017-03-10 21:04:04

Android適配

2012-04-24 09:30:57

淘寶開發

2019-07-10 15:15:23

JVM虛擬機Java

2021-04-24 23:06:47

JavaScript編程語言

2018-07-12 13:24:14

多云云計算云管理平臺

2015-10-10 10:10:20

2018-08-21 10:32:43

數據庫Redis高可用技術

2017-11-27 08:50:29

架構數據存儲

2018-05-28 14:37:05

數據庫NoSQL高并發

2021-06-07 06:25:35

畫流程圖開發技能

2022-12-19 08:30:51

ViteWebpack

2019-09-09 14:13:31

電商數據分析指標

2018-09-15 04:59:01

2018-03-01 10:03:37

服務器架構高并發

2018-04-23 11:00:44

PythonRedisNoSQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费激情网站 | 欧美日韩高清在线一区 | 人人看人人草 | 欧美日韩亚洲国产 | 黄色在线网站 | 国产91网站在线观看 | 少妇特黄a一区二区三区88av | 亚洲高清视频在线 | 理论片免费在线观看 | 羞羞视频在线观看 | 成人在线精品 | 国产女人精品视频 | 国产真实精品久久二三区 | 91av在线电影 | 国产一级淫片免费视频 | 欧美日韩一区在线播放 | 99久久免费精品视频 | 日韩一级免费大片 | 97精品国产97久久久久久免费 | 国产精品区一区二 | 日本不卡一区二区 | 国产情侣在线看 | 91欧美精品 | 奇米四色影视 | 中文字幕日韩欧美一区二区三区 | 九九亚洲精品 | 日韩成人av在线 | 国产一区二区三区在线 | 欧美一级小视频 | 天堂在线www | 91视频一88av| 成人动慢 | 国产美女黄色片 | 免费一级毛片 | 日日夜夜草| 亚洲免费观看视频 | 中文字幕亚洲区一区二 | 久优草| 欧美日韩专区 | 狼色网 | 国产日产欧产精品精品推荐蛮挑 |