搜尋
首頁資料庫mysql教程mysql大型網站技術架構核子案例分析

七、隨需應變:網站的可擴展架構

擴充性(Extensibility):指對現有系統影響最小的情況下,系統功能可持續擴展或提升的能力。是系統架構設計層面的開閉原則,架構設計考慮未來功能擴展,當系統增加新功能時,不需要對現有系統的結構和程式碼進行修改。

伸縮性(Scalability):指系統能夠透過增加(減少)自身資源規模的方式增強(減少)自行計算處理事務的能力。

A.建立可擴展的網站架構

1.軟體架構師最大的價值不在於掌握多少先進的技術,而在於具有將一個大系統切分成N個低耦合的子模組的能力,這些子模組包含橫向的業務模組,也包含縱向的基礎技術模組。

2.核心思想是模組化,在此基礎上,降低模組間的耦合性,提高模組的複用性。

B.利用分散式訊息佇列降低系統耦合性

1.事件驅動架構

  • 事件驅動架構( Event Driven Architecture):透過在低耦合的模組之間傳輸事件訊息,以保持模組的鬆散耦合,並藉助事件訊息的通訊完成模組間合作,常用的是分散式訊息佇列。

  • 訊息佇列利用發布—訂閱模式工作,訊息發送者發布訊息,一個或多個訊息接收者訂閱訊息。

2.分散式訊息佇列

  • 佇列是先進先出的結構,應用程式可以透過遠端存取介面使用分散式訊息佇列,進行訊息存取操作,進而實現分散式的非同步呼叫。

  • 訊息生產者應用程式透過遠端存取介面將訊息推送給訊息佇列伺服器,訊息佇列伺服器將訊息寫入本機記憶體佇列後立即傳回成功回應給訊息生產者。訊息佇列伺服器根據訊息訂閱清單尋找 訂閱訊息的訊息消費者應用程式 ,將訊息佇列中的訊息依照先進先出(FIFO)的原則將訊息透過遠端通訊介面傳送給訊息消費者程式。

  • 分散式訊息佇列可以很複雜,例如可以支援ESB(企業服務匯流排)、支援SOA(服務導向的架構),也可以很簡單使用MySQL記錄:訊息生產者程式將訊息當作資料記錄寫入資料庫,訊息消費者程式查詢資料庫並依記錄寫入時間戳排序,就實作了一個事實上的分散式訊息佇列。

C.利用分散式服務打造可重複使用的業務平台

1.分散式服務透過介面分解系統耦合性,不同子系統透過沙漠玫瑰的介面描述進行服務呼叫。

2.巨無霸系統的問題:編譯、部署困難;程式碼分支管理困難;資料庫連線耗盡;新增業務困難;

3.解決方案

  • #縱向分割:將一個大應用程式拆分為多個小應用程式

  • #橫向分割:將重複使用的業務分割出來,獨立部署為分散式服務,新增業務只需要呼叫這些分散式服務,不需要依賴特定的模組程式碼

4.Web Service與企業級分散式服務

缺點:臃腫的註冊與發現機制;低效的XML序列化手段;開銷相對較高的HTTP遠端通訊;複雜的部署與維護手段;

5.大型網站分佈式服務的需求與特性

負載平衡、失效轉移、高效率的遠端通訊、整合異質系統、對應用最少侵入、版本管理、即時監控

##6.分散式服務框架設計:Thrift、Dubbo

D.可擴展的資料結構

利用NoSQL資料庫中使用的ColumnFamily(列族)設計。

E.利用開放平台建立網站生態圈

1.開放平台是網站內部和外部互動的接口,外部需要面對人多的第三方開發者,內部需要面對網站內眾多的業務服務。

2.架構:API介面、協定轉換、安全性、稽核、路由、流程

#八、固若金湯:網站的安全架構

A.網站應用攻擊與防禦

1.XSS攻擊

  • #XSS攻擊即跨站腳本攻擊(Cross Site Script),指駭客通過篡改網頁,注入惡意HTML腳本,在使用者瀏覽網頁時,控制使用者瀏覽器進行惡意操作的一種攻擊方式。


  • 一種攻擊是反射型,攻擊者誘使用戶點擊一個嵌入惡意腳本的鏈接,達到攻擊的目的


  • 另一種攻擊是持久型XSS攻擊,駭客提交含有惡意腳本的請求,保存在被攻擊的網路網站的資料庫中,使用者瀏覽網頁時,惡意腳本被包含在正常頁面中,達到攻擊的目的。常用在論壇、部落格等Web應用程式。


  • 預防措施包括消毒和過濾危險字符,同時禁止頁面JS訪問帶有HttpOnly屬性的Cookie

#2.注入攻擊

  • 分為SQL注入與OS注入

  • SQL注入來取得資料庫結構:利用開源軟體程式、錯誤回顯、盲注

  • SQL注入防範:消毒;參數綁定,使用預編譯手段,綁定參數;

#3. CSRF攻擊

  • CSRF(Cross Site Request Forgery,跨站點請求偽造),攻擊者透過跨站請求,以合法使用者的身分進行非法操作。主要手法是利用跨站請求,在使用者不知情的情況下,以使用者的身分偽造請求,利用了瀏覽器Cookie或伺服器Session策略,盜取使用者身分。

  • 防範:表單Token、驗證碼、Referer check(檢查HTTP請求頭的Referer域中記錄的請求來源)

4.其他攻擊漏洞

  • Error Code:錯誤回顯、HTML註解、檔案上傳、路徑遍歷

5.Web應用防火牆:ModSecurity

6.網站安全漏洞掃描

B.資訊加密技術及金鑰安全管理

1.單向雜湊加密:md5、sha等,加上salt

2.對稱加密:DES演算法、RC演算法等,加密使用同一個金鑰

3.非對稱加密:RSA演算法

4.金鑰安全管理

  • 透過將金鑰和演算法置於獨立伺服器或專用硬體裝置中,並透過服務的呼叫實現資料加解密。

  • 將解密演算法放在應用系統中,金鑰則放在獨立伺服器中,實際儲存時,金鑰被切分成數片,加密後分別保存在在不同儲存媒體中,兼顧密鑰安全性的同時又改善了效能。

C.訊息過濾與反垃圾

1.文字匹配:解決敏感字詞過濾的問題

  • #少量內容使用正規替換一類的就可以

  • #詞多且並發高時,使用Trie樹演算法(雙數組Trie演算法)

  • 建構Hash表進行文字匹配

  • #有時還需要進行降噪處理,如」阿_拉_伯」

2.分類演算法:貝葉斯演算法、TAN演算法、ARCS演算法

3.黑名單:Hash表、蒲隆過濾器

D.電子商務風險控制

1.風險:帳戶風險、買家風險、賣家風險、交易風險

2.風控

  • 機器自動識別高風險交易和資訊會傳送給風控審核人員進行人工審核,機器風控的技術和方法也不斷透過人工發現的新風險類型進行逐步完善。

  • 規則引擎:當交易的某些指標滿足某一條件時,就會被認為具有高風險的詐欺可能性。

  • 統計模型:使用分類演算法或更複雜的機器學習演算法進行智慧統計。根據歷史交易中的詐欺交易資訊訓練分類演算法,然後將經過收集加工後的交易資訊輸入分類演算法,即可得到交易風險分值。

九、淘寶網的架構演化案例分析

1.LAMP->JAVA/ORACLE->MySQL/ NoSQL

2.業務推動技術不斷進步

#C、維基百科的高效能架構設計分析

A.Wikipedia網站整體架構:LAMP 開源產品,GeoDNS、LVS、Squid、Lighttpd、PHP、Memcached、Lucene、MySQL

B.Wikipedia效能最佳化策略

1.前端效能最佳化

  • 前端架構的核心是反向代理伺服器Squid集群,由LVS負載平衡,在反向代理之前,透過CDN返回。

  • Wikipedia CDN快取的準則:內容頁不包含動態資訊;每個內容頁有唯一的REST風格的URL;在HTML回應頭寫入快取控制資訊;

2.服務端效能最佳化:使用APC、Imagemagick、Tex、取代PHP的字串尋找函數starter()使用更最佳化的演算法

# 3.後端效能最佳化:

快取

  • #熱點特別集中的資料直接快取到應用程式伺服器的本機記憶體中

  • 快取資料的內容盡量是應用程式伺服器可以直接使用的格式

  • #使用快取伺服器儲存session物件

  • 比相比資料庫,Memcached的持久化連線非常廉價,有需要就建立一個

##MySQL

  • 使用較大的伺服器記憶體


  • 使用RAID0磁碟陣列以回事存取


  • 將資料庫交易一致性設定在較低層級


  • 如果Master資料庫當機,立即將應用程式切換到Salve資料庫,同時關閉寫入服務


十一、海量分散式儲存系統Doris的高可用架構設計分析

對於一個資料儲存系統而言,高可用意味著:高可用的服務、高可靠的資料

A.分散式儲存系統的高可用架構

1.冗餘:伺服器熱備、資料多份儲存

2.系統整體分割:

  • 應用程式伺服器:儲存系統的客戶,對系統發起資料操作請求

  • 資料儲存伺服器:儲存系統的核心,儲存資料、回應應用伺服器的資料操作請求

  • #管理中心伺服器:由兩台機器組成的主-主熱備的小規模伺服器集群,負責集群管理,對資料儲存集群進行健康心跳檢測;集群擴容、故障恢復管理;對應用程式伺服器提供集群位址配置資訊服務等

B.不同故障情況下的高可用解決方案

1.分散式儲存系統的故障分類:瞬時故障、暫時故障、永久故障

2.瞬時故障解決:多次重試

3.暫時故障解決:需要手動幹預,有問題伺服器使用臨時儲存伺服器

4.永久故障解決:啟用備用伺服器替代永久失效伺服器

十二、網購秒殺系統架構設計案例分析

#A.秒殺活動的技術挑戰:對現有網站業務造成衝擊、高併發下的應用,資料庫負載、突然增加的網路及伺服器頻寬、直接下單

B.秒殺系統的應對策略

  • 秒殺系統獨立部署

  • 秒殺商品頁面靜態化

  • 租借秒殺活動網路頻寬

  • 動態產生隨機下單一頁面URL

#C.秒殺系統架構設計

1.如何控制秒殺商品頁面購買按鈕的點亮:使用一個JS文件,開始時修改其中內容,每次都請求,不被CDN等緩存,使用隨機版本號。

2.如何只允許第一個提交的訂單被發送到訂單子系統:控制進入下單頁面的入口,只有少數用戶能進入,其他用戶直接進入秒殺結束頁面。例如10台伺服器,每台處理10個請求,當請求超過10個,其他回傳錯誤,再請求全域快取記錄,如果是第一個,進入訂單頁面,其他回傳失敗。

十三、大型網站典型故障案例分析

A.寫入日誌也會引發故障


  • ##應用程式自己的日誌輸出配置和第三方元件日誌輸出要分別配置

  • #檢查log設定文件,日誌來玩吧考慮至少為Warn

  • 需要關閉某些第三方元件可能輸出的太多Error日誌

#B.高並發存取資料庫引發的故障

  • 首頁不應該存取資料庫

  • 首頁應該是靜態的

C.高並發情況下鎖定引發的故障

#使用鎖定操作要謹慎

D.緩存引發的故障

快取伺服器已經是網站架構不可或缺的一部分,需要和資料庫一樣的層級去管理

E.應用程式啟動不同步引發的故障

F.大檔案讀寫獨佔磁碟引發的故障

#小檔案和大檔案不要共用儲存

G .濫用生產環境引發的故障

存取生產環境要格外小心,資料庫請專門的DBA維護

H.不規範的流程引發的故障

代碼提交前用diff指令比較,確認沒有提交不該提交的代碼;加強code review,提交前至少被一個其他工程師做過code review並共同承擔因代碼引起的故障責任

I.不好的程式設計習慣引發的故障

注意對空物件、空值等的處理

十四、架構師領導藝術

A.關注人而不是產品

#1.一群優秀的人做一件他們熱愛的事,一定能取得成功

2.最好的軟體管理是發掘專案組每個成員的優秀潛能

3.尋找一個值得共同奮鬥的目標,營造一個讓大家都能最大限度發揮自我價值的工作氛圍

B.發掘人的優秀

1.是事情成就了人,而不是人成就了事

2.大多數人,包括我們自己,都比自己以為的更優秀,有些優秀需要在合適的環境中才會被激發出來,比如做一些有挑戰的事,和更優秀的人合作,抑或擁有了超越自我的勇氣

3.發掘人的優秀遠比發掘優秀的人更有意義

C.共享美好藍圖

###1.藍圖應該是表述清楚的:產品要做什麼、不做什麼、要達到什麼業務目標###

2.藍圖應該是形象的:產品能為使用者創造什麼價值、能實現什麼樣的市場目標、產品最終會長什麼樣子

3.藍圖應該是簡單的:一句話說明白:我們在做什麼

4.架構師要保持對目標藍圖的關注,對任何偏離藍圖的設計和決定保持警惕,錯誤的偏離要及時修正,必要的變更要經過大家討論,並且需要重新獲得大家的認同。

D.共同參與架構

1.不要只有架構師一個人擁有架構

2.讓其他人維護框架與架構文件

E.學會妥協

反對架構和技術方案的意見實質上是在關注、試圖理解和接受這些方案。架構師不應過於敏感,應該坦率分享意見,求同存異

2.對於技術細節的爭論應該立即驗證而不是繼續討論

3.當大家不在討論架構的時候,表明架構已經融入專案、系統和開發者了,架構師越早被遺忘表明架構越成功

F.成就他人

1.我們的工作不只是生產產品,還要成就人,並最終成就我們自己

2.做成一個專案不但要給客戶創造價值,為公司獲利,還要讓專案成員獲得成長

#3.架構師作為團隊的技術領導者,在專案過程中不要去試圖控制什麼,帶著一個彈性的計劃和藍圖推進,團隊會管好他們自己

##十五、網站架構師職場攻略

  • 開發軟體的目的是為了解決現實世界的問題,但是很多時候人們並不清楚真正的問題是什麼。


  • 軟體開發過程中也會遇到很多問題,需要協調各方面的利益關係獲取盡可能大的支持,需要平衡客戶需求、軟體產出、開發資源之間的關係,需要搞定許多事情才能實現軟體設計最初的藍圖。


A.發現問題,尋找突破

當期望不能被滿足時,人們會感覺出了問題,因為問題即是體驗與期望之間的差距。消除問題有兩種手段:改善體驗或降低期望。只是降低期望並不能解決問題,相反,要面對期望與實際體驗的差異,這樣才能找到問題所在並尋找突破口。

2.新進員工首先要做的事情是融入團隊

3.新進員工最不需要做的事情就是證明自己的能力。

B.提出問題,尋求支持

1.問題被發現,它只是問題發現者的問題,而不是問題擁有者的問題,如果想要解決一個問題,就必須提出這個問題,讓問題的擁有者知道問題的存在。

2.提出問題Tips:

  • 把「我的問題」表述成「我們的問題」


  • ##給上司提封閉式問題(給出AB方案讓上司選擇哪個更好),給下屬提開放式問題

  • 指出問題而不是批評人

  • 用贊同的方式提出問題

  • #3.所謂直言不諱是指想要表達的意圖要直截了當說明白,不要兜圈子,但是在表達方式上要有所避諱,照顧到當事人的感受

C.解決問題,達成績效

1.解決我的在問題之前,先解決你的問題

    你幫別人解決了問題,別人也會幫你解決問題

  • 在在幫別人解決問題的過程中,熟悉了情況

  • 解決別人的問題用的是你的解決方案,這個方案在你的控制之中

  • 2.適當的逃避問題

十六、漫話網站架構師

A.依作用劃分架構師

設計型架構師、救火型架構師、佈道型架構師、Geek型架構師

B.依效果劃分架構師

夏爾巴人架構師:通常會開發專案中最具技術難度和挑戰性的模組、斯巴達人架構師、達官貴人架構師

C.按職責角色分割架構師

產品架構師:參與產品的整個生命週期、基礎服務架構師(平台型架構師)、基礎架構架構師

D .以關注層次劃分架構師

只關注功能的架構師、關注非功能的架構師、關注團隊組織與管理的架構師、關注產品運營的架構師、關注產品未來的架構師

E.依口碑劃分架構師

最好的架構師、好的架構師、一般的架構師、差的架構師、最差的架構師

F.非主流方式分割架構師

普通架構師、文藝架構師、1 1架構師

附錄A:大型網站技術一覽

A.前端架構

#瀏覽器最佳化技術、CDN、動靜分離,靜態資源獨立部署、圖片服務、反射代理、DNS

B.應用層架構

開發框架、頁面渲染、負載平衡、Session管理、動態頁面靜態化、業務分割、虛擬化伺服器

C.服務層架構

#分散式訊息、分散式服務、分散式快取、分散式配置

D.儲存層架構

分散式檔案、關聯式資料庫、NoSQL資料庫、資料同步

E.後台架構

搜尋引擎、資料倉儲、推薦系統

F.資料擷取(日誌)與監控

瀏覽器資料擷取、伺服器業務擷取、伺服器效能資料擷取、系統監控、系統警報

G.安全架構

Web攻擊、資料保護

H.資料中心機房架構

機房、機櫃、伺服器 

#

以上是mysql大型網站技術架構核子案例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
解釋酸的特性(原子,一致性,隔離,耐用性)。解釋酸的特性(原子,一致性,隔離,耐用性)。Apr 16, 2025 am 12:20 AM

ACID屬性包括原子性、一致性、隔離性和持久性,是數據庫設計的基石。 1.原子性確保事務要么完全成功,要么完全失敗。 2.一致性保證數據庫在事務前後保持一致狀態。 3.隔離性確保事務之間互不干擾。 4.持久性確保事務提交後數據永久保存。

MySQL:數據庫管理系統與編程語言MySQL:數據庫管理系統與編程語言Apr 16, 2025 am 12:19 AM

MySQL既是數據庫管理系統(DBMS),也與編程語言緊密相關。 1)作為DBMS,MySQL用於存儲、組織和檢索數據,優化索引可提高查詢性能。 2)通過SQL與編程語言結合,嵌入在如Python中,使用ORM工具如SQLAlchemy可簡化操作。 3)性能優化包括索引、查詢、緩存、分庫分錶和事務管理。

mySQL:使用SQL命令管理數據mySQL:使用SQL命令管理數據Apr 16, 2025 am 12:19 AM

MySQL使用SQL命令管理數據。 1.基本命令包括SELECT、INSERT、UPDATE和DELETE。 2.高級用法涉及JOIN、子查詢和聚合函數。 3.常見錯誤有語法、邏輯和性能問題。 4.優化技巧包括使用索引、避免SELECT*和使用LIMIT。

MySQL的目的:有效存儲和管理數據MySQL的目的:有效存儲和管理數據Apr 16, 2025 am 12:16 AM

MySQL是一種高效的關係型數據庫管理系統,適用於存儲和管理數據。其優勢包括高性能查詢、靈活的事務處理和豐富的數據類型。實際應用中,MySQL常用於電商平台、社交網絡和內容管理系統,但需注意性能優化、數據安全和擴展性。

SQL和MySQL:了解關係SQL和MySQL:了解關係Apr 16, 2025 am 12:14 AM

SQL和MySQL的關係是標準語言與具體實現的關係。 1.SQL是用於管理和操作關係數據庫的標準語言,允許進行數據的增、刪、改、查。 2.MySQL是一個具體的數據庫管理系統,使用SQL作為其操作語言,並提供高效的數據存儲和管理。

說明InnoDB重做日誌和撤消日誌的作用。說明InnoDB重做日誌和撤消日誌的作用。Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?Apr 15, 2025 am 12:15 AM

EXPLAIN命令的關鍵指標包括type、key、rows和Extra。 1)type反映查詢的訪問類型,值越高效率越高,如const優於ALL。 2)key顯示使用的索引,NULL表示無索引。 3)rows預估掃描行數,影響查詢性能。 4)Extra提供額外信息,如Usingfilesort提示需要優化。

在解釋中使用臨時狀態以及如何避免它是什麼?在解釋中使用臨時狀態以及如何避免它是什麼?Apr 15, 2025 am 12:14 AM

Usingtemporary在MySQL查詢中表示需要創建臨時表,常見於使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通過優化索引和重寫查詢避免其出現,提升查詢性能。具體來說,Usingtemporary出現在EXPLAIN輸出中時,意味著MySQL需要創建臨時表來處理查詢。這通常發生在以下情況:1)使用DISTINCT或GROUPBY時進行去重或分組;2)ORDERBY包含非索引列時進行排序;3)使用複雜的子查詢或聯接操作。優化方法包括:1)為ORDERBY和GROUPB

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。