首先,網(wǎng)站應用程序背景
開發(fā)網(wǎng)站應用程序,當用戶較小時,使用簡單:應用程序服務器+數(shù)據(jù)庫服務器+文件服務器,因此您可以解決一些問題,或者您可以通過硬件。當然還考慮成本,提高網(wǎng)站應用程序的訪問性能。
當問題的大小沒有通過堆硬件在經(jīng)濟條件下解決時,我們應該通過其他想法解決問題,互聯(lián)網(wǎng)提供了很多成熟的解決方案,但它沒有適用性,你們都是淘寶的技術所有人都在移動,不一定達到淘寶的水平,這很簡單。
其次,主要數(shù)據(jù)的主要解決方案和高并發(fā)性
大規(guī)模數(shù)據(jù)解決方案:
使用緩存;
頁面靜態(tài)技術;
數(shù)據(jù)庫優(yōu)化;
在數(shù)據(jù)庫中隔離活動數(shù)據(jù);
批量閱讀和延遲修改;
讀寫分離;
使用NoSQL和Hadoop等技術;
分布式部署數(shù)據(jù)庫;
應用服務和數(shù)據(jù)服務是分開的;
使用搜索引擎搜索數(shù)據(jù)庫中的數(shù)據(jù);
執(zhí)行業(yè)務的拆分;
高并發(fā)下的解決方案:
應用程序和靜態(tài)資源文件是分開的;
頁面緩存;
集群和分布式;
逆向代理人;
CDN;
第三,大規(guī)模數(shù)據(jù)解決方案
(1)使用緩存
網(wǎng)站訪問數(shù)據(jù)的特征主要作為“28法”:80?F商業(yè)訪問集中在20?F數(shù)據(jù)上。
例如:百度的搜索熱門單詞可能集中在流行詞匯的一小部分;新浪微博也可能在一定時期內(nèi)是少數(shù)事件。
通常,用戶僅使用總數(shù)據(jù)輸入的一小部分。當網(wǎng)站已經(jīng)發(fā)展到一定規(guī)模時,數(shù)據(jù)庫IO操作成為一個性能瓶頸,使用緩存到公雞這個小部分內(nèi)存中的流行數(shù)據(jù)是一個非常好的選擇,不僅可以減少數(shù)據(jù)庫的壓力,還可以減少數(shù)據(jù)庫的壓力,還要提高整體網(wǎng)站的數(shù)據(jù)訪問速度。
使用緩存通過程序代碼將數(shù)據(jù)直接保存到內(nèi)存中,例如通過使用Map或ConcurrentHashMap;另一個,緩存框架:redis,ehcache,memcache等。
寫一張照片使用緩存框時,我們需要關心的是創(chuàng)建緩存和緩存故障策略時。
可以在許多方面創(chuàng)建緩存創(chuàng)建,并且需要根據(jù)自己的業(yè)務選擇特定。例如,第一次讀取數(shù)據(jù)時應緩存新聞報道的新聞;對于具有高點擊的文章,您可以緩存它。
內(nèi)存資源有限,并選擇如何創(chuàng)建緩存是值得思考的問題。此外,緩存的故障機制也需要良好研究,這可以通過設置故障時間來設置;或者通過將優(yōu)先級設置為流行的數(shù)據(jù)設置,根據(jù)不同的優(yōu)先級設置不同的到期時間;
應該注意的是,當我們刪除數(shù)據(jù)時,必須考慮刪除緩存,還要考慮數(shù)據(jù)是否在刪除緩存之前已到達緩存時間!
使用緩存時,如何執(zhí)行容錯處理時緩存服務器發(fā)生故障時,與n多個服務器緩存有相同的數(shù)據(jù),通過分布式部署控制緩存數(shù)據(jù),在發(fā)生故障時自動切換到其他機器;或者通過散列一致性,等待緩存服務器恢復正常使用,重新指定緩存服務器。散列一致性的另一個角色是在分布式緩存服務器上定位數(shù)據(jù),在緩存的服務器上不可用分發(fā)數(shù)據(jù)。數(shù)據(jù)緩存的哈希一致性也是比較問題。這里只能描述,關于哈希一致性,推薦文章:http://blog.csdn.net/liu76502308099
(2)頁面靜態(tài)技術
使用傳統(tǒng)的JSP接口,前端接口的顯示是在通過后臺服務器渲染后返回前端料斗,如下所示:
寫一張照片
當然,現(xiàn)在倡導前端和后端分離,前端接口基本上是HTML網(wǎng)頁代碼,角js或nodejs提供的路由將對后端服務器發(fā)出數(shù)據(jù),然后呈現(xiàn)vision上的數(shù)據(jù),這在很大程度上減少了。后端服務器的壓力。
這些靜態(tài)HTML,CSS,JS,圖片資源等也可以放在緩存服務器上或CDN服務器上,通常使用CDN最大使用。服務器或nginx服務器提供靜態(tài)資源功能。
此外,在“高性能網(wǎng)站高級指南 - Web開發(fā)人員性能優(yōu)化最佳實踐(WordStep Network Frontal Team Truest)”本書為網(wǎng)站性能的前端界面提供了一些珍貴經(jīng)驗,如下:
寫一張照片
因此,在處理這些靜態(tài)資源中,選擇正確處理的正確方法或對整體網(wǎng)站性能有很大的幫助!
(3)數(shù)據(jù)庫優(yōu)化
數(shù)據(jù)庫優(yōu)化是整個網(wǎng)站性能優(yōu)化的最基本部分,因為大多數(shù)網(wǎng)站性能的瓶頸都在數(shù)據(jù)庫IO操作中,盡管提供了緩存技術,但數(shù)據(jù)庫的優(yōu)化仍然是一個嚴重的治療。一般公司擁有自己的DBA團隊,負責創(chuàng)建數(shù)據(jù)庫,建立數(shù)據(jù)模型等,與我們不了解數(shù)據(jù)庫的人,您只能在線優(yōu)化文章,探索,有沒有系統(tǒng)的數(shù)據(jù)庫優(yōu)化概念。
對于數(shù)據(jù)庫的優(yōu)化,它是一種用技術換金錢的方法。有很多方法可以優(yōu)化數(shù)據(jù)庫,并且常見可以分為:數(shù)據(jù)庫表結構優(yōu)化,SQL語句優(yōu)化,分區(qū),分數(shù),索引優(yōu)化,使用存儲過程而不是直接操作。
1,表面結構優(yōu)化
已經(jīng)總結了一些文章,用于開發(fā)規(guī)范和使用數(shù)據(jù)庫的技術和設計以及優(yōu)化,總結了前部,并且地址被盜,有必要移動查看:
a)MySQL開發(fā)規(guī)范和使用技能摘要:http://blog.csdn.net/xlgen157387/article/details/48086607
b)如何在一百萬數(shù)據(jù)庫檢查中提高查詢效率? :http://blog.csdn.net/xlgen157387/Article/Details/44156679
此外,您需要創(chuàng)建外鍵時要創(chuàng)建數(shù)據(jù)庫表,可以輕松消除使用外鍵的一個好處,但現(xiàn)在我們?nèi)客ㄟ^數(shù)據(jù)的方式來確保數(shù)據(jù)。閱讀操作的一致性,我覺得它更加放心,我用外鍵關聯(lián)mysql使用東西來刪除類,或者使用事物來使用事物來刪除操作。當然,它也可能有一個合適的場景。每個人都有一個很好的建議,歡迎留言!
2,SQL優(yōu)化
對于SQL優(yōu)化,主要針對SQL優(yōu)化語句處理邏輯,還根據(jù)索引使用。另外,SQL語句的優(yōu)化可以針對特定的業(yè)務方法進行優(yōu)化,我們可以記錄執(zhí)行業(yè)務邏輯操作的數(shù)據(jù)庫執(zhí)行時間,使目標優(yōu)化,這種效果仍然非常好!例如,下圖顯示了執(zhí)行呼叫的時間:
寫一張照片
對SQL優(yōu)化的一些建議,在組織之前,請搬家查看:
a)19 mysql性能優(yōu)化點分析:http://blog.csdn.net/xlgen157387/article/details/50735269
b)MySQL批量SQL插入各種性能優(yōu)化:http://blog.csdn.net/xlgen157387/article/details/50949930
排放表
分數(shù)是打破一個大表來將某個規(guī)則分解為一個獨立存儲空間的單個實體表。我們可以調(diào)用每個表,每個表對應三個文件,MyD數(shù)據(jù)文件,.myi索引文件,.mmy表結構文件。這些子節(jié)可以分布在同一塊盤上,或在不同的機器上分布。根據(jù)先前已定義的規(guī)則獲取相應的子表名,然后操縱它。
例如:用戶表
有多種用戶的角色可以分為不同的類別類別:學生,教師,企業(yè)等,我們可以根據(jù)類別類別分開數(shù)據(jù)庫,以便每次查詢現(xiàn)在都鎖定了較小的范圍用戶的類型。
但是,在子表成像后,如果需要查詢完整順序,則需要使用多個表。
劃分
數(shù)據(jù)庫分區(qū)是一種物理數(shù)據(jù)庫設計技術,DBA和數(shù)據(jù)庫建模人員非常熟悉。雖然分區(qū)技術可以實現(xiàn)大量效果,但其主要目的是減少特定SQL操作中讀寫的總數(shù)據(jù)量以減少響應時間。
分區(qū)和尺度相似,所有這些都符合規(guī)則。差異謊言將大型表分解為幾個獨立實體,并且分區(qū)被劃分為多個位置的多個位置,該位置可以在不同的機器中。分區(qū)后,表面仍然是一個表,但數(shù)據(jù)散列到多個位置。數(shù)據(jù)庫讀寫操作仍然是一個大表名,DMS自動轉到分區(qū)數(shù)據(jù)。當表中的數(shù)據(jù)變大時,讀取數(shù)據(jù),查詢數(shù)據(jù)的效率很低,很容易將數(shù)據(jù)討論到不同的數(shù)據(jù)表,但這會在得分后發(fā)出麻煩。因為,在不同的表中,數(shù)據(jù)被放置在不同的表中,并且需要在搜索數(shù)據(jù)時檢查這些表中的數(shù)據(jù)。如果您想制作CRUD操作,您需要查找所有表,如果您涉及不同的表,則必須進行跨表操作,這仍然非常麻煩。
分區(qū)的使用可以解決這個問題,分區(qū)是為了將不同區(qū)域中的不同區(qū)域中的表中的數(shù)據(jù)保存在不同區(qū)域中,因此如果數(shù)據(jù)被詢問,如果數(shù)據(jù)的范圍可以分離數(shù)據(jù),則可以將數(shù)據(jù)分離。數(shù)據(jù)量較少,操作量更快,方法對程序是透明的,程序不需要進行任何更改。
索引優(yōu)化
索引的基本上原則是以數(shù)據(jù)的順序保存到類似的表,從而可以在搜索索引字段是條件記錄時從索引中快速找到相應的記錄。指針和相應的數(shù)據(jù)是從表中獲得的,這非??臁?/p>
但是,雖然查詢的效率大大提高,但它是一種浪費資源,因為需要更新數(shù)據(jù)變化,因為需要更新數(shù)據(jù)變化。
關于使用索引,不同問題或不同討論的問題,并根據(jù)具體業(yè)務選擇適當?shù)闹笖?shù),以提高性能的效果是一項重大倡議!
推薦文章閱讀:
a)索引的數(shù)據(jù)庫索引和優(yōu)缺點,11 - 使用:http://blog.csdn.net/xlgen157387/article/details/45030829
b)數(shù)據(jù)庫索引原型:http://blog.csdn.net/kenyrose/article/details/7532032
使用存儲過程而不是直接操作
存儲過程位于大型數(shù)據(jù)庫系統(tǒng)中,一組SQL才能完成特定功能語句集存儲在數(shù)據(jù)庫中。在第一次編譯后,不需要再次編譯呼叫,用戶將通過指定存儲過程的名稱來執(zhí)行它,并給出參數(shù)(如果存儲的過程具有參數(shù))。存儲過程是數(shù)據(jù)庫中的一個重要對象,并且應在存儲過程中使用任何設計的數(shù)據(jù)庫應用程序。
在操作過程的操作中,計算機更加復雜,并且寫入的SQL語句可以由存儲過程替換,并且僅需要更改存儲過程的使用,并且可以在存儲的存儲過程中進行一些復雜的操作過程。 。
(4)將活動數(shù)據(jù)分開在數(shù)據(jù)庫中
作為前面提到的“兩法律”,網(wǎng)站的數(shù)據(jù)更多,但經(jīng)常訪問的數(shù)據(jù)是有限的,因此可以單獨分離這些相對活動的數(shù)據(jù)以節(jié)省處理效率。
事實上,使用緩存前面的想法是一種非常明顯的情況,使用數(shù)據(jù)庫中的數(shù)據(jù)的用例,并且流行的數(shù)據(jù)可以緩存在內(nèi)存中。
還有一個場景,例如,網(wǎng)站中使用的注冊數(shù)量的用戶是數(shù)萬個級別的數(shù)千級,但經(jīng)常登錄只是數(shù)百萬級,并且剩余的基礎知識已經(jīng)長時間尚未登錄。如果您沒有將這些Zombie用戶分開,請單獨分隔它,然后每次查詢其他登錄用戶時都會浪費這些僵尸用戶的查詢操作。
(5)批量讀數(shù)和延遲修改
批量讀取和延遲修改的原理是通過減少操作數(shù)據(jù)庫的操作來提高效率。
批量讀數(shù)是合并多個查詢一次,因為每個數(shù)據(jù)庫請求操作都需要釋放鏈接來構建和鏈接釋放,或占用資源的一部分,可以異步讀取批量讀取。
延遲修改是對于一些經(jīng)常修改數(shù)據(jù)的一些高耗材和修改的數(shù)據(jù),首先將數(shù)據(jù)保存到每個修改的緩存中,然后將數(shù)據(jù)保存到緩存中到數(shù)據(jù)庫,程序可以同時讀取數(shù)據(jù)庫中的數(shù)據(jù)和緩存。
例如:我現(xiàn)在正在寫這個博客,我首先寫了一個寫入內(nèi)容,然后單擊post,我將返回markdown來修改操作,我有一個習慣,我沒有寫的東西,我總是按下它?!氨4妗卑粹o,然后我在另一個頁面中打開此博客,我的修改已更新,但我仍在編輯!
寫一張照片
我不知道CSDN技術是否在我沒有單擊發(fā)布之前,首先將數(shù)據(jù)放在緩存內(nèi)。
(6)讀寫分離
讀寫分離的本質是將應用程序分配給數(shù)據(jù)庫的讀寫操作到多個數(shù)據(jù)庫服務器,從而減少單個數(shù)據(jù)庫的訪問壓力。
讀寫分離通常通過配置主從數(shù)據(jù)庫,并從庫中讀取數(shù)據(jù),數(shù)據(jù)庫添加修改以刪除操作所有者。
寫一張照片
相關文章請搬家觀看:
a)MySQL5.6數(shù)據(jù)庫主要來自(Master / Slave)同步安裝和配置詳細信息:http://blog.csdn.net/xlgen157387/article/details/51331244
b)經(jīng)常拓撲,MySQL Master的原理分析,如何提高主從復制的效率:http://blog.csdn.net/xlgen157387/article/details/52451613
(7)使用NoSQL和Hadoop等技術
NoSQL是一個非結構的非關系數(shù)據(jù)庫,可以通過關系數(shù)據(jù)庫的條形框架斷開,可以靈活地運行,并且因為NoSQL通過多個塊存儲數(shù)據(jù),其運行數(shù)據(jù)速度也很快。
(8)分布式部署數(shù)據(jù)庫
任何強大的單服務器都符合大型站點不持久的業(yè)務需求。閱讀和寫入后,數(shù)據(jù)庫被分成兩個或多個數(shù)據(jù)庫服務器,但仍然對業(yè)務需求仍不滿意。分布式部署數(shù)據(jù)庫是拆分站點數(shù)據(jù)庫的最后一個方法,才是當單表數(shù)據(jù)非常大時。
分布式部署數(shù)據(jù)庫是一個理想的情況,分布式數(shù)據(jù)庫是將表格放在不同的數(shù)據(jù)庫中,然后放在不同的數(shù)據(jù)庫中,以便在處理請求時,如果需要調(diào)用多個表,則可以讓多個服務器同時處理多個服務器提高處理效率。
分布式數(shù)據(jù)庫的簡單架構圖如下:
寫一張照片
(9)應用服務和數(shù)據(jù)服務分離應用程序服務器和數(shù)據(jù)庫服務器的目的是根據(jù)應用服務器的特征和數(shù)據(jù)庫服務器的特征來優(yōu)化基礎優(yōu)化,使每個服務器的特性可以更好,數(shù)據(jù)庫服務器當然是一定的磁盤空間。應用程序服務器不需要過多的磁盤空間,以便分離很好,也可以防止使用與服務器有問題的其他服務。
寫一張照片
(10)使用搜索引擎在數(shù)據(jù)庫中搜索數(shù)據(jù)
使用搜索引擎的非數(shù)據(jù)庫查詢技術可以更好地支持網(wǎng)站應用程序的可擴展分布式功能。
常用搜索引擎,如solr將關鍵字映射到文檔的映射關系,類似于我們使用“xinhua字典”來搜索關鍵字,首先要查看字典目錄,然后定位特定位置。
搜索引擎可以通過維護某個關鍵字來快速定位您需要查找的數(shù)據(jù),與傳統(tǒng)數(shù)據(jù)庫搜索相比,效率仍然很高。
它目前是一種相對令人富有的麋鹿堆棧技術。
Solr和MySQL查詢性能的比較文章:
solr和mysql查詢性能比較:http://www.cnblogs.com/luxiaoxun/p/4696477.html? UTM_SOURCE = TUICOOL&UTM_MEDIUM =推薦
(11)拆分業(yè)務
為什么您的業(yè)務拆分,在最終分析或不合理的業(yè)務數(shù)據(jù)表是在未使用的服務器上部署的,找到相應的數(shù)據(jù),以滿足網(wǎng)站的需求。在每個應用程序之間的指定URL連接之間使用了不同的服務。
例如,一個大型購物網(wǎng)站將分開家庭,商店,訂單,買方,賣家等,一方面,業(yè)務模塊分為不同的團隊,并使用不同的業(yè)務。數(shù)據(jù)庫表部署在unconflaction上,反映了拆分的想法,當業(yè)務模塊使用數(shù)據(jù)庫服務器無法影響其他業(yè)務模塊的正常使用時。此外,當引起一個模塊時,可以動態(tài)地擴展本模塊中使用的數(shù)據(jù)庫數(shù)量以滿足業(yè)務的需求。
在高并發(fā)性下的解決方案
(1)應用程序和靜態(tài)資源文件是分開的
所謂的靜態(tài)資源是靜態(tài)資源,例如HTML,CSS,JS,圖像,視頻,GIF等。應用程序和靜態(tài)資源文件也是一個常見的解決方案。應用程序服務僅提供適當?shù)臄?shù)據(jù)服務,在指定的服務器(nginx服務器或CDN服務器)上的靜態(tài)資源部署,通過角js或node js提供的路由技術訪問應用服務器的特定服務以獲得相應的前端外殼上的數(shù)據(jù)。這可以大大降低后端服務器的壓力。
例如,百度主頁使用的圖片部署在單獨的域服務器上。
寫一張照片
(2)頁面緩存
Page Cache緩存緩存生成應用程序生成的幾個數(shù)據(jù)的頁面,因此您無需每次重新生成頁面,保存大量CPU資源,如果將緩存頁面放入內(nèi)存中更快。
您可以使用nginx提供的緩存功能,或者您可以使用特殊頁面緩存服務器魷魚。
(3)集群和分布
(4)逆代代理
參考文章請搬到:
http://blog.csdn.net/xlgen157387/article/details/49781487
(5)CDN
CDN服務器實際上是一個群集頁面緩存服務器,它的目的是盡快返回用戶所需的數(shù)據(jù),一方面加速用戶訪問速度,另一方面,后端服務器的負載壓力也減少了。
CDN的全名是內(nèi)容傳遞網(wǎng)絡,它是內(nèi)容分發(fā)網(wǎng)絡。其基本思想是避免可能盡可能地影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和鏈接,使內(nèi)容傳輸更快,更穩(wěn)定。
CDN使網(wǎng)絡流量和連接,每個節(jié)點的加載狀態(tài)以及用戶的距離以及對用戶距離的響應以及對用戶距離的響應以及對用戶距離和響應對用戶距離和響應時間以及其他全面信息的響應將用戶的請求呈現(xiàn)給最靠近用戶的服務節(jié)點。其目的是使用戶能夠實現(xiàn)所需的內(nèi)容,解決互聯(lián)網(wǎng)網(wǎng)絡擁塞的情況,并改善用戶訪問響應速度。
也就是說,CDN服務器部署在網(wǎng)絡運營商的計算機室中,提供用戶最近的層數(shù)據(jù)訪問服務,用戶可以在請求網(wǎng)站服務時從用戶最近的網(wǎng)絡訪問商業(yè)機會。電信的用戶為將分配聯(lián)通的Unicom的Noicom節(jié)點分配電信的節(jié)點。
CDN分配請求特殊的方式,而不是要分配的正常負載平衡服務器,但在解析中,使用專用CDN域名解析服務器在解析中分配好。
CDN結構如下所示:
寫一張照片
總結
如果您需要進行一個詳細的介紹,如果您需要進行其中一個方式,您可以找到資源研究學習,只能扮演擲玉的作用。當然,大型網(wǎng)站的大規(guī)模數(shù)據(jù)和高并發(fā)解決方案不限于這些技術或技術,并且存在許多需要理解的成熟解決方案。