国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

GitHub標星163K,大廠高級研發必備的系統設計指南

開發 架構
說到系統設計,在我們日常工作往往接觸的不多,因為很多時候項目組的項目架構都是成熟的,我們只需要負責增刪改查就行,本文主要介紹在系統設計中我們應該注意哪些問題,以及提供一些解決思路及利弊分析。

學習本文可以有以下收獲

1、了解如何設計大型系統

2、拿捏面試

面試中我們常常被問到系統設計這一塊的問題,那么作為系統設計的新手,我們首先需要對通用原則具有基本的了解,知道它們是什么,怎么使用它們以及它們的缺點。話不多說,直接進入正題。

  1. 垂直縮放
  2. 水平縮放
  3. 緩存
  4. 負載均衡
  5. 數據庫復制
  6. 數據庫分區
  7. 涵蓋的內容:
  • 首先可以觀看可擴展性視頻講座哈佛可擴展性講座https://www.youtube.com/watch?v=-W9F__D3oY4
  • 查看可擴展性文章可擴展性http://www.lecloud.net/tagged/scalability/chrono當我們學習完上面的知識后,那么接下來我們需要更高的層次去權衡
  • 性能與可擴展性
  • 延遲與吞吐量
  • 可用性與一致性
  • 克隆
  • 數據庫
  • 緩存
  • 異步
  • 涵蓋的主題

性能與可擴展性

如果服務以與添加的資源成比例的方式提高性能,則服務是**可擴展的。**通常,提高性能意味著服務更多的工作單元,但也可以處理更大的工作單元,例如當數據集增長時。

另一種查看性能與可擴展性的方法:

  • 如果您有性能問題,您的系統對于單個用戶來說很慢。
  • 如果您有可擴展性問題,您的系統對于單個用戶來說速度很快,但在重負載下速度很慢。

我們可以進一步的閱讀了解

  • 了解延遲與吞吐量

??https://community.cadence.com/cadence_blogs_8/b/sd/archive/2010/09/13/understanding-latency-vs-throughput

  • 可擴展性、可用性、穩定性、模式
  • ??http://www.slideshare.net/jboner/scalability-availability-stability-patterns/

延遲與吞吐量

延遲是執行某些操作或產生某些結果的時間。

吞吐量是單位時間內此類操作或結果的數量。

通常,您應該以可接受延遲的最大吞吐量為目標。

深入學習可以進一步閱讀

  • 了解延遲與吞吐量

??https://community.cadence.com/cadence_blogs_8/b/sd/archive/2010/09/13/understanding-latency-vs-throughput

可用性與一致性

CAP

資料來源(重新審視CAP定理):http://robertgreiner.com/2014/08/cap-theorem-revisited

在分布式計算機系統中,您只能支持以下兩種保證:

  • 一致性- 每次讀取都會收到最近的寫入或錯誤
  • 可用性- 每個請求都會收到響應,但不保證它包含最新版本的信息
  • 分區容限- 盡管由于網絡故障導致任意分區,系統仍繼續運行

網絡不可靠,因此您需要支持分區容錯。您需要在一致性和可用性之間進行軟件權衡。

CP - 一致性和分區容錯

等待來自分區節點的響應可能會導致超時錯誤。如果您的業務需要原子讀寫,CP 是一個不錯的選擇。

AP - 可用性和分區容錯

響應返回任何節點上可用的最容易獲得的數據版本,這可能不是最新的。解析分區后,寫入可能需要一些時間才能傳播。

如果業務需求允許最終的一致性,或者當系統需要在外部錯誤的情況下繼續工作時,AP 是一個不錯的選擇。

進一步閱讀:

  • 重新審視 CAP 定理

??http://robertgreiner.com/2014/08/cap-theorem-revisited/)

  • CAP 定理的簡單英文介紹

??http://ksat.me/a-plain-english-introduction-to-cap-theorem

  • CAP 常見問題

??https://github.com/henryr/cap-fa

  • CAP 定理

??https://www.youtube.com/watch?v=k-Yaq8AHlF

一致性

擁有一致的數據視圖。回想一下CAP 定理中一致性定義——每次讀取都會收到最近的寫入或錯誤。

弱一致性

寫入后,讀取可能會或可能不會看到它。采取了盡力而為的方法。

這種方法見于 memcached 等系統。弱一致性適用于實時用例,例如 VoIP、視頻聊天和實時多人游戲。例如,如果您正在接聽電話并在幾秒鐘內無法接收信號,那么當您重新連接時,您將聽不到在連接中斷期間所說的內容。

最終一致性

寫入后,讀取最終會看到它(通常在幾毫秒內)。數據是異步復制的。

這種方法見于 DNS 和電子郵件等系統。最終一致性在高可用性系統中運行良好。

強一致性

寫入后,讀取將看到它。數據同步復制。

這種方法出現在文件系統和 RDBMS 中。強一致性在需要事務的系統中運行良好。

到這里我們可以進一步閱讀

  • 跨數據中心的交易

??http://snarfed.org/transactions_across_datacenters_io.html

可用性模式

支持高可用性有兩種互補模式:故障轉移和復制。

故障轉移

主動-被動

使用主動-被動故障轉移,心跳會在備用的主動和被動服務器之間發送。如果心跳中斷,則被動服務器接管主動服務器的 IP 地址并恢復服務。

停機時間的長短取決于被動服務器是否已經在“熱”備用狀態下運行,或者它是否需要從“冷”備用狀態啟動。只有活動服務器處理流量。

主動-被動故障轉移也可以稱為主從故障轉移。

主動-主動

在主動-主動中,兩臺服務器都在管理流量,在它們之間分散負載。

如果服務器面向公眾,則 DNS 需要了解兩臺服務器的公共 IP。如果服務器是面向內部的,則應用程序邏輯需要了解兩臺服務器。

主動-主動故障轉移也可以稱為主-主故障轉移。

缺點:故障轉移

  • 故障轉移增加了更多的硬件和額外的復雜性。
  • 如果主動系統在任何新寫入的數據可以復制到被動系統之前發生故障,則可能會丟失數據。

復制

主從復制和主主復制

數據庫部分將進一步討論該主題:

  • 主從復制

??https://github.com/donnemartin/system-design-primer#master-slave-replication

  • 主主復制

??https://github.com/donnemartin/system-design-primer#master-master-replication

分片

分片將數據分布在不同的數據庫中,這樣每個數據庫只能管理數據的一個子集。以用戶數據庫為例,隨著用戶數量的增加,集群中會添加更多的分片。

分片導致更少的讀寫流量、更少的復制和更多的緩存命中。索引大小也減少了,這通常會通過更快的查詢來提高性能。如果一個分片出現故障,其他分片仍然可以運行,盡管您需要添加某種形式的復制以避免數據丟失。與聯邦一樣,沒有單個中央主控序列化寫入,允許您并行寫入并增加吞吐量。

對用戶表進行分片的常用方法是通過用戶的姓氏首字母或用戶的地理位置。

缺點:分片
  • 再平衡增加了額外的復雜性。基于一致性哈希的分片功能可以減少傳輸的數據量。
  • 您需要更新應用程序邏輯以使用分片,這可能會導致復雜的 SQL 查詢。
  • 分片中的數據分布可能會變得不平衡。例如,與其他分片相比,分片上的一組高級用戶可能會導致該分片的負載增加。
  • 連接來自多個分片的數據更加復雜。
  • 分片增加了更多的硬件和額外的復雜性。

域名系統

域名系統 (DNS) 將諸如www.example.com之類的域名轉換為 IP 地址。

DNS 是分層的,頂層有一些權威服務器。您的路由器或 ISP 提供有關在進行查找時要聯系的 DNS 服務器的信息。較低級別的 DNS 服務器緩存映射,這可能由于 DNS 傳播延遲而變得陳舊。DNS 結果也可以由您的瀏覽器或操作系統緩存一段時間,由生存時間 (TTL)確定。

NS 記錄(名稱服務器) - 為您的域/子域指定 DNS 服務器。

MX 記錄(郵件交換) - 指定接受郵件的郵件服務器。

記錄(地址) - 將名稱指向 IP 地址。

CNAME(規范) - 將名稱指向另一個名稱或CNAME(example.com 到www.example.com)或A記錄。

CloudFlare和Route 53等服務提供托管 DNS 服務。一些 DNS 服務可以通過各種方法路由流量:

加權循環

  • 防止流量進入維護中的服務器
  • 不同集群大小之間的平衡
  • A/B 測試

基于延遲

基于地理位置

DNS的缺點

訪問DNS服務器會帶來輕微的延遲,盡管上述緩存可以緩解這種延遲。DNS服務器管理可能很復雜,通常由政府、ISP 和大公司管理。DNS服務最近受到DDoS 攻擊,阻止用戶在不知道 Twitter 的 IP 地址的情況下訪問 Twitter 等網站。

內容網絡分發

來源(為什么要使用CDN):https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/

內容交付網絡 (CDN) 是一個全球分布的代理服務器網絡,從更靠近用戶的位置提供內容。通常,靜態文件(如 HTML/CSS/JS、照片和視頻)從 CDN 提供,盡管一些 CDN(如 Amazon 的 CloudFront)支持動態內容。該站點的 DNS 解析將告訴客戶端要聯系哪個服務器。

從 CDN 提供內容可以通過兩種方式顯著提高性能:

  • 用戶從靠近他們的數據中心接收內容
  • 您的服務器不必為 CDN 滿足的請求提供服務

推送 CDN

每當您的服務器發生更改時,推送 CDN 都會接收新內容。您對提供內容、直接上傳到 CDN 以及重寫 URL 以指向 CDN 負全部責任。您可以配置內容何時過期以及何時更新。僅在內容是新的或更改時才上傳內容,從而最大限度地減少流量,但最大限度地增加存儲空間。

流量較少的站點或內容不經常更新的站點可以很好地與推送 CDN 配合使用。內容被放置在 CDN 上一次,而不是定期重新拉取。

拉取 CDN

當第一個用戶請求內容時,拉取 CDN 從您的服務器中獲取新內容。您將內容留在服務器上并重寫 URL 以指向 CDN。這會導致請求變慢,直到內容緩存在 CDN 上。

生存時間 (TTL)確定緩存內容的時間長度。拉取 CDN 可最大限度地減少 CDN 上的存儲空間,但如果文件過期并在文件實際更改之前被拉取,則會產生冗余流量。

流量大的網站可以很好地使用拉式 CDN,因為流量分布更均勻,只有最近請求的內容保留在 CDN 上。

缺點:CDN

  • CDN 成本可能很大,具體取決于流量,盡管這應該與不使用 CDN 所產生的額外成本相權衡。
  • 如果在 TTL 過期之前更新內容,則內容可能已過時。
  • CDN 需要更改靜態內容的 URL 以指向 CDN。

來源和進一步閱讀

  • 全球分布式內容交付
  • 推式和拉式 CDN 的區別
  • 維基百科

負載均衡器

來源(資料來源:可擴展系統設計模式):http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html

負載平衡器將傳入的客戶端請求分發到計算資源,例如應用程序服務器和數據庫。在每種情況下,負載均衡器都會將來自計算資源的響應返回給適當的客戶端。負載均衡器在以下方面有效:

  • 防止請求進入不健康的服務器
  • 防止資源過載
  • 幫助消除單點故障
  • 負載均衡器可以使用硬件(昂貴的)或軟件(例如 HAProxy)來實現。

其他好處包括:

SSL 終止- 解密傳入請求并加密服務器響應,因此后端服務器不必執行這些潛在的昂貴操作 無需在每臺服務器上安裝X.509 證書 會話持久性- 如果 Web 應用程序不跟蹤會話,則發出 cookie 并將特定客戶端的請求路由到同一實例 為了防止出現故障,通常設置多個負載均衡器,無論是主動-被動還是主動-主動模式。

負載均衡器可以根據各種指標路由流量,包括:

  • 隨機負載
  • 最小負載
  • 循環或加權循環
  • 傳輸層負載
  • 應用層負載

負載均衡的缺點:

  • 如果負載均衡器沒有足夠的資源或配置不正確,它可能會成為性能瓶頸。
  • 引入負載平衡器以幫助消除單點故障會導致復雜性增加。
  • 單個負載均衡器是單點故障,配置多個負載均衡器會進一步增加復雜性。

緩存

緩存可以縮短頁面加載時間,并可以減少服務器和數據庫的負載。在這個模型中,調度器會先查找之前是否已經發出過請求,并嘗試找到之前的結果返回,以保存實際執行。

數據庫通常受益于跨其分區的讀取和寫入的均勻分布。熱門商品可能會扭曲分布,導致瓶頸。將緩存放在數據庫前面可以幫助吸收不均勻的負載和流量峰值。

  • 客戶端緩存
  • CDN緩存
  • Web服務器緩存
  • 數據庫緩存
  • 中間件緩存

緩存缺點

  • 一致性問題
  • 節點故障帶來延遲
  • 額外的開銷和編碼復雜度

異步

異步工作流有助于減少成本高昂的操作的請求時間,否則這些操作將在線執行。他們還可以通過提前完成耗時的工作來提供幫助,例如定期匯總數據。

消息隊列

消息隊列接收、保存和傳遞消息。如果操作太慢而無法內聯執行,您可以使用具有以下工作流程的消息隊列:

  • 應用程序將作業發布到隊列,然后通知用戶作業狀態
  • 工作人員從隊列中取出作業,對其進行處理,然后發出作業完成的信號

用戶未被阻止,作業在后臺處理。在此期間,客戶端可能會選擇性地進行少量處理,以使任務看起來像是已完成。例如,如果發布一條推文,這條推文可能會立即發布到您的時間線上,但可能需要一些時間才能將您的推文實際發送給您的所有關注者。

Redis作為一個簡單的消息代理很有用,但消息可能會丟失。

RabbitMQ很受歡迎,但需要您適應“AMQP”協議并管理自己的節點。

Amazon SQS是托管的,但可能具有很高的延遲,并且有可能將消息傳遞兩次。

任務隊列

任務隊列接收任務及其相關數據,運行它們,然后傳遞它們的結果。它們可以支持調度,并可用于在后臺運行計算密集型作業。

Celery支持調度,主要支持 python。

背壓

如果隊列開始顯著增長,隊列大小可能會變得大于內存,從而導致緩存未命中、磁盤讀取,甚至性能下降。背壓可以通過限制隊列大小來提供幫助,從而為隊列中的作業保持高吞吐率和良好的響應時間。隊列填滿后,客戶端會收到服務器繁忙或 HTTP 503 狀態代碼,以便稍后重試。客戶端可以稍后重試請求,可能使用指數退避。

缺點:異步

  • 廉價計算和實時工作流等用例可能更適合同步操作,因為引入隊列會增加延遲和復雜性。

安全

安全是一個廣泛的話題。除非您有豐富的經驗、安全背景,或者正在申請需要安全知識的職位,否則您可能只需要了解基礎知識:

  • 在傳輸和靜止時加密。
  • 清理所有用戶輸入或暴露給用戶的任何輸入參數,以防止XSS和SQL 注入。
  • 使用參數化查詢來防止 SQL 注入。
  • 使用最小權限原則。

以上就是系統設計的大體模塊了,快學習起來吧。

責任編輯:張燕妮 來源: 程序員巴士
相關推薦

2021-11-26 05:57:12

開源備份Restic

2021-04-09 16:25:00

GitHub代碼開發者

2023-02-22 15:02:52

GitHub指南

2021-10-21 05:57:33

網盤開源云盤系統

2020-11-10 10:46:57

開源后臺管理系統Base Admin

2019-12-05 14:30:09

Java開發代碼

2020-02-20 10:00:04

GitHubPyTorch開發者

2019-12-24 11:13:02

GitHub代碼開發者

2021-04-26 14:44:44

程序員技能開發者

2021-09-04 15:42:17

GitHub面試程序員

2021-09-18 11:28:29

GitHub代碼開發者

2019-11-01 12:47:39

Github技術 軟件

2019-09-16 09:58:16

GitHub搶票Python

2020-03-23 15:35:36

Java工具類Hutool

2023-03-28 08:29:52

2019-11-08 10:34:42

開發者技能工具

2021-03-24 10:01:54

GitHub代碼開發者

2020-11-27 15:35:18

GitHubVue.js開發

2021-07-21 16:13:54

GitHub 技術開源

2023-04-12 08:43:25

點贊
收藏

51CTO技術棧公眾號

91久久国产综合久久蜜月精品| 日韩成人在线视频观看| 日韩免费在线观看| 91九色国产在线| 动漫一区在线| 日韩精品一二区| 夜夜嗨av一区二区三区网页 | 黄动漫在线观看| 日本少妇精品亚洲第一区| 亚洲人成网站色在线观看| 欧美日韩在线精品| av网址在线免费观看| 国产一区二区三区探花| 一区二区三区在线视频播放| 99精品欧美| 日韩欧美亚洲成人| 欧美国产日韩免费| 粉嫩av一区二区三区天美传媒 | 久久精品国产亚洲a∨麻豆| 天天做天天爱天天高潮| 国产剧情av在线播放| 欧美mv日韩| 一区二区三区在线观看国产| 欧美在线视频免费| 国产另类在线| 欧美高清精品3d| 免费观看国产精品视频| av色图一区| 国产精品天天看天天狠| 99香蕉国产精品偷在线观看 | 天堂аⅴ在线地址8| 91精品国产麻豆国产在线观看 | 波多野结衣在线一区| 亚洲一区二区三区中文字幕| 久久久精品欧美| 色老板在线观看| 麻豆成人精品| 国产乱人伦真实精品视频| 亚洲精品一区三区三区在线观看| 国产·精品毛片| 欧美日韩国产二区| 日韩精品福利片午夜免费观看| 最新精品在线| av在线播放一区二区三区| 国产视频999| 精品三级久久| 亚洲一区二区三区免费视频| 色撸撸在线观看| 99九九热只有国产精品| 国产一区二区三区18| 你懂得网站在线| 中文字幕国产一区二区| 国产精品入口免费视| 亚洲一二三四| 亚洲黄色小说网站| 无码 制服 丝袜 国产 另类| 欧美日韩一区自拍| 欧美激情国内偷拍| av电影免费在线看| 在线一区二区观看| 欧美精品99久久| 久久天堂成人| 成人看片人aa| 韩国成人免费视频| 欧美午夜精品久久久久久人妖 | 亚洲欧美日韩网| 国产美女特级嫩嫩嫩bbb片| 成人激情开心网| 在线观看日韩专区| 国产视频第一区| 亚洲v中文字幕| free亚洲| 久久久久久久久久久久久女国产乱| 99久久99久久| cao在线视频| 色婷婷亚洲精品| 国产1区2区视频| 中文成人综合网| 激情综合在线观看| 国产精品77777| 日韩色妇久久av| 国产在线观看免费| 亚洲欧美日韩一区二区三区在线观看| 无码精品a∨在线观看中文| 极品美女销魂一区二区三区免费| 国产精品美女在线播放| 狠狠色丁香久久婷婷综合丁香| www.成人69.com| 亚洲一区二区高清| 在线观看黄色小视频| 欧美少妇性性性| 精品一性一色一乱农村| 在线精品视频视频中文字幕| 国产精品专区免费| 伊人伊成久久人综合网小说| 91大神精品| 亚洲一区二区三区xxx视频| 秋霞午夜鲁丝一区二区老狼| 日韩精品手机在线观看| 久久亚区不卡日本| 天堂中文字幕| 91麻豆精品一二三区在线| 精品剧情在线观看| 欧美aaa视频| 日韩一区在线视频| 日本精品视频| 91亚洲va在线va天堂va国| 精品制服美女丁香| 黄色av网站在线| 中文字幕日韩高清| 一区二区91| 在线国产福利| 中文字幕久久久av一区| 日韩亚洲精品在线| 成人网18免费软件大全| 日韩精品久久久久久福利| 国产精品国产三级国产在线观看| 精品视频在线观看一区| 国产精品污网站| 在线天堂中文资源最新版| 成人性生交大片免费看小说| 日韩激情一区二区| 黄页网址在线观看| 深夜福利国产精品| 日韩午夜精品| 日本在线аv| 亚洲欧洲日本专区| 欧美日韩 国产精品| 日韩av卡一卡二| 欧美在线一区二区| a√资源在线| 国内精品一区二区三区| 久久成人综合网| 国产黄在线看| 国产成人精品优优av| 国产精品最新自拍| www.国产精| 久久久国产精品视频| 精品一区二区三区在线观看 | 美女久久久久| 午夜激情福利在线| 在线电影欧美日韩一区二区私密| 老牛影视一区二区三区| 中文字幕中文字幕在线中文字幕三区| 欧美激情亚洲一区| 激情六月婷婷综合| 一二三四社区在线视频| 国产精品久久不能| 五月天激情综合| 亚洲综合小说| 国产黄色在线网站| 日产精品高清视频免费| 日韩av一区二区在线观看| 国产一二三精品| 国产成人a视频高清在线观看| 99福利在线观看| 91国内在线视频| 黄色一区二区三区| 1024成人| 欧美男男激情videos| 国产一二三在线视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 精品国产综合| 91精品国产一区二区人妖| 日本中文一区二区三区| 色多多在线观看| 日本女优爱爱视频| 国产成人精品免费久久久久| 无吗不卡中文字幕| 欧美在线综合| 亚洲精品国产嫩草在线观看| 亚洲视频在线观看一区二区三区| 国产91色在线|| 亚洲人成网站影音先锋播放| 国产无遮挡裸体免费久久| 中文字幕日韩精品久久| 亚洲视频电影图片偷拍一区| 99国产精品国产精品毛片| 亚洲开心激情| www.男人的天堂| 日韩视频在线你懂得| 亚洲专区在线| 99热99re6国产在线播放| 日韩在线三级| 亚洲韩国日本中文字幕| 国产精品综合一区二区| a屁视频一区二区三区四区| 91传媒久久久| 欧美一级片免费在线| 色综合激情久久| 香蕉成人久久| 先锋影音欧美| 欧美成人精品xxx| 一区二区三区中文免费| 欧美日韩少妇| 国产中文在线播放| www.com操| 国内精品**久久毛片app| 亚洲精品国产免费| 国产女同性恋一区二区|