iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
自我挑戰組

從 AWS 菜鳥敲敲雲端的大門系列 第 20

Day 13 - ElastiCache 緩存資料服務

  • 分享至 

  • xImage
  •  

ElastiCache

有學過計算機概論應該都知道 RAM 的存取效率遠高於硬碟的效率

ElastiCache 是以記憶體為快取,改善網路應用程式的效能,避免頻繁存取較低速的硬碟資源。

常見緩存資料操作手法

ElastiCache 主要有分 Lazy-loadingWrite-Through 兩種。

以下整理一個表格來說明 Lazy-loading 和 Write-Through 效益與做法以及使用時機:

Lazy-Loading Write-Through
當有人索取資料才會寫入 Cache 資料寫入資料庫時,同時寫入 Cache 中
第一次提取會比較慢 提取速度快
記憶體用量較少 記憶體用量大
第一次查詢資料會比較久屬於被動型的快取資料,有可能會存取到舊資料 快取會放很多不一定會被使用到的資料。寫入資料的成本增加,因為必須多寫一份到 Cache

但是不見得一定要選邊站一定只能選擇其中一種,我也可以先用 Write-Through 將資料寫入 Cache 裡面,若超過某個時間閥值 (例如三個小時或是一天) 就將資料從 Cache 中移除,當有資料需要查詢的時候,再用 Lazy-loading 的機制寫入 Cache 資料庫,讓 Cache 的儲存成本最佳化。

Engine

提供兩種引擎格式: MemcachedRedis

兩種都擁有: 毫秒等級的延遲、資料分割以及支援各種程式語言。

Memcached 屬於 Muti-Thread 架構 ,相較於 Redis 比較老一點。

Redis 屬於 單線程架構,擁有比 Memcached 更多的功能:

  • 進階的資料結構
  • 快照備份
  • 複寫功能 Replication
  • 支援交易功能 Transactions
  • Pub / Sub 訊息訂閱系統
  • 支援 Lua 腳本
  • 支援 GEO 地理位置

Redis

適用於對資料有複雜操作 (排序、計算)的應用場景 類似於記憶體上的資料庫。

使用前需定義 Subnet Group ,在 Subnet 裡面會開啟 Node ,在 Node 裡面會用到多個 Shard ,資料會存在 Shard 裡面。

Redis 在叢集模式下會將資料拆成多份,分別存在多個 Node 裡面,提升讀取效率與可用性,被拆分的資料稱為 Shard 。 我們也可以針對 Shard 去做 Snapshot。

AWS-ElastiCache-Redis.drawio

Subnet Group 是 VPC 的 Subnet 的集合。

跟 RDS 一樣,如果需要調教效能,可以使用 Parameter Group 調整參數。

Memcached

適用於 對不需要針對緩存資料在進行處理的應用場景 ,例如資料庫查詢結果快取

Memcached 的系統結構就不像 Redis 那麼像資料庫。但是它也是可以做成叢集,也可分散 Node。

各個 Node 之間的資料也不會互相同步,讀取資料的時候可能會找錯 Node

資料分散的方式也 不具容錯機制 ,所以會有 資料遺失 的問題。

例如以下案例的 Data 4 會因為最下面的節點掛掉導致資料遺失。

AWS-ElastiCache-Memcached.drawio

關於 不具容錯機制會有資料遺失 這點,官方給的解決方法是 多開節點 。節點越多,各個節點上的資料就越少,節點遺失造成的損失也相對較小。

Memcached 還有另外一個問題, 讀取資料的時候可能會找錯 Node 。這個問題則可以透過 Auto Discovery 來自動探勘到正確的 Node 上。

AWS-ElastiCache-Memcached-AutoDiscovery.drawio

參考資料


上一篇
Day 12 - DynamoDB NoSQL 解決方案
下一篇
Day 14- 大數據架構
系列文
從 AWS 菜鳥敲敲雲端的大門37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言