首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

memcached 在大負載高併發網站的應用(一):核心原理與架構詳解

     編輯:Java 相關知識

系列導讀

本文旨在從多角度綜合介紹 memcached,內容涵蓋:簡介、應用場景、安裝、使用、部署架構、局限性、改進方向。無論您是否聽聞或使用過 memcached,期望本文能對您的工作有所啟發。

一、簡介

1.1 背景

memcached 是一個高性能、分布式的記憶體對象緩存系統,廣泛應用於大負載高併發網站,是極為成熟的產品/技術。Facebook、YouTube、Yahoo、新浪、搜狐、網易、豆瓣等均在使用。它在以用戶為中心的網站(SNS、Blog 等 Web 2.0 應用)表現尤為突出,這類站點極度重視用戶體驗,要求極高響應速度,用戶數據關聯複雜,頻繁更新檢索資料庫。

memcache 最初由 danga.com 為 livejournal.com 開發(日 PV 達千萬級),旨在解決負載與響應速度難題。它能應對任意連接數,採用非阻塞網絡 IO,使用極簡單,核心功能不超過 5 個方法。官網:https://www.danga.com/memcached。

1.2 核心特點

1. 高性能

任何 DBMS(MySQL、Oracle、MSSQL、DB2、Postgres 等)再怎麼優化,終究繞不開與慢速存儲介質(硬盤、磁帶)的 IO 交換,一旦涉及 IO 性能急劇下降。memcached 全程在記憶體操作,存取效率極高。大型網站常用讀寫分離(主從庫)、橫向/縱向分庫分表優化資料庫,但單表超 2000 萬記錄性能仍會崩潰。資料庫在事務操作(加鎖)、數據更新(加鎖)時出現訪問瓶頸,而 memcached 基本無此類情況,官方評價 "very fast",實驗室測試對比結果網上比比皆是。

2. 分布式

分布式系統專業定義:多處理器經互連網絡構成統一系統,分散任務協調共享資源。memcache 分布式特性體現兩方面:

  • 客戶端與服務端可獨立安裝於任意伺服器,甚至單機部署多個實例。
  • 服務端可任意數量伺服器組成集群,提供並行存儲與計算能力,這是分布式本質體現。

1.3 用途

  1. 提高系統併發能力:高性能支撐更多連接。
  2. 減輕資料庫負擔:部署於業務邏輯層與存儲層間,作為數據緩衝,快速響應前端請求,減少資料庫訪問。

部署邏輯示意圖:

1.4 工作機制

Memcached 以守護進程運行於一或多台伺服器,接受客戶端連接操作,客戶端語言涵蓋 Perl/PHP/Python/Ruby/Java/C#/C 等。對象以唯一 key 存取,可設有效期。進程啟動預申請大塊記憶體自行管理,而非每次向 OS 申請。對象存放於巨大 Hash 表,採用 NewHash 算法管理,記憶體足夠時耗時僅為網絡 Socket 連接。調度採 LRU(Least Recently Used)算法,32 位系統尋址上限 4G,64 位系統大幅擴展尋址能力,現多運行於 64 位系統。

本文出自「網站架構之家」博客,轉載請保留出處:https://wangzebin.blog.51cto.com/653300/128235

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved