--- title: GCP MemoryStore # 簡報的名稱 tags: GCP # 簡報的標籤 --- # [MemoryStore](https://cloud.google.com/memorystore/docs/redis/) :::warning 使用於GCP專案內部網路 ::: #### 專注於建構優質應用程式 藉助 Redis 開放原始碼的絕佳優勢,您可以減少進行管理工作的時間,將更多時間投注在程式設計工作上。Cloud Memorystore 可以自動化處理多項複雜的工作,例如啟用高可用性設定、容錯移轉、修補及監控應用程式,讓您有更多時間編寫程式碼。 #### 彈性化的資源調度方式 有了 Cloud Memorystore for Redis,您就能輕鬆將延遲時間維持在 1 毫秒以內,並滿足應用程式的總處理量需求。您可以先從最低級別和最小規模開始,然後輕鬆增加執行個體配置,對應用程式可用性的影響也能維持在最低限度。Cloud Memorystore 支援的執行個體最高可達 **300 GB**,網路總處理量上限則為 **12 Gbps**。 #### 高可用性 高可用性執行個體會在兩個區域之間複製,並提供高達 99.9% 的可用性服務水準協議。系統會持續監控執行個體,並透過自動容錯移轉盡可能避免應用程式發生服務中斷的情況。 #### Google 級安全防護 Cloud Memorystore 執行個體使用的是私人 IP,不會連結至網際網路,因此能夠受到保護。另外,您也可以使用身分與存取權管理來控管不同角色的存取權限,進一步提升安全性。 #### 隨即轉移,易如反掌 Cloud Memorystore for Redis 與 Redis 的通訊協定完全相容。只要使用匯入/匯出功能,您不必修改任何程式碼,也能將開放原始碼 Redis 中的應用程式隨即轉移至 Cloud Memorystore。所有現有工具和用戶端程式庫都能正常運作,因此您無需學習使用新工具。 ![](https://i.imgur.com/8KZ7Y9R.png) ## MemoryStore 與 開源 Redis差異 * 開源Redis提供了多種將數據持久保留到磁盤的選項。RDB持久化可以生成數據集的時間點快照,而AOF持久化可以記錄服務器接收的每個寫入操作。**Cloud Memorystore for Redis目前不支持RDB和AOF持久化。** * Cloud Memorystore for Redis實例的大多數參數已預先配置,無法更改。 * 某些命令可能會干擾託管的Redis服務,因此會被屏蔽。 * 標準層級實例不允許從副本讀取。 ## Redis 測試工具 ``` -h <hostname> Server hostname (default 127.0.0.1) -p <port> Server port (default 6379) -s <socket> Server socket (overrides host and port) -a <password> 密碼 -c <clients> 並聯數 (default 50) -n <requests> 請求總數 (default 100000) -d <size> SET / GET值的數據大小 (default 3) --dbnum <db> 選擇指定的數據庫編號 (default 0) -k <boolean> 1 =保持活動狀態0 =重新連接 (default 1) -r <keyspacelen> 對SET / GET / INCR使用隨機鍵,對SADD使用隨機值 使用此選項,基準測試將擴展字符串__rand_int__ 在具有指定範圍內的12位數字的參數中 從0到keyspacelen-1。每次命令替換都會更改 被執行。默認測試使用它來擊中 指定範圍。 -P <numreq> 管道<numreq>請求。 Default 1 (no pipeline). -e 如果服務器回复錯誤,請在標準輸出上顯示 -q 只顯示查詢/秒值 --csv 輸出CSV -l loop迴圈. -t <tests> 僅運行以逗號分隔的測試列表。測試名稱與作為輸出產生的名稱相同。 -I Idle mode. Just open N idle connections and wait. # 1秒鐘 16管道機制 1000000個隨機鍵 2000000次亂數指令 redis-benchmark -h [REDIS_HOST] -p [PORT] -r 1000000 -n 2000000 -t get,set,l push,lpop -P 16 -q redis-benchmark -h 10.98.22.188 -p 6379 -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q ``` ## MemoryStore 的詳細資料 ``` gcloud redis instances describe [INSTANCE_ID] --region=[REGION] ``` * `currentLocationId` 主要節點位置 * `locationId` 與 `alternativeLocationId` 會相互轉換 ## MemoryStore 調整儲存大小 :::danger 對基本層級實例進行擴縮會清空緩存 ::: ## 容錯轉移 ## MemoryStore 的手動容錯移轉 ``` gcloud redis instances failover [INSTANCE_ID] --data-protection-mode=force-data-loss --region=[REGION] ``` * `force-data-loss` 最能呈現災難式演練 * `limited-data-loss` 主副節點的最低容錯演練 ### 容錯轉移範例 ``` redis-benchmark -h 10.83.46.188 -p 6379 -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q DBSIZE //864497 ``` ``` DBSIZE //864497 gcloud redis instances describe redis-funk --region=asia-east1 gcloud redis instances failover redis-funk --data-protection-mode=limited-data-loss --region=asia-east1 停一分鐘 DBSIZE //864497 ``` ![](https://i.imgur.com/C7aktfH.png) ``` sudo apt-get update && apt-get install telnet ``` ``` gcloud redis instances failover redis-funk-2 --data-protection-mode=limited-data-loss --region=asia-east1 ``` ### 複製檔案進入vm ``` scp -i ~/.ssh/id_rsa local-file-path username@ip-address:~ ``` ## [Storage](https://cloud.google.com/storage/docs) Cloud Storage 在世界各地提供具備擴充性的耐用物件儲存空間,能夠儲存 EB 規模的資料。您可以立即從任一儲存空間級別存取資料、利用單一整合式 API 將儲存空間整合至您的應用程式,以及輕鬆地進行價格/效能最佳化。 * 分析和機器學習整合式存放區 * 媒體內容儲存與傳遞 * 備份與封存 ### 儲存位置(地區)類別 主要影響就是為了法規去控制儲存空間 * Region - 可在單一地區中提供最低延遲 * Multi-region - 可用性最高,涵蓋範圍最大 * Dual-region - 可在 2 個地區中提供高可用性和低延遲 ### 儲存位置(地區)類別 | API 和gsutil 的名稱 | 最短存儲時長 | 典型的每月可用性 | 價位 | |:------------------- | ------------ | ---------- | --- | | STANDARD | 無 | 多區域和雙區域位置高於99.99% / 各區域99.99% | 最貴 | | NEARLINE | 30 天 | 多區域和雙區域位置達99.95% / 各區域達99.9% | 次貴 | | COLDLINE | 90 天 | 多區域和雙區域位置達99.95% / 各區域達99.9% | 次便宜 | | ARCHIVE | 365 天 | 多區域和雙區域位置達99.95% / 各區域達99.9% | 最便宜 | ### [gsutil tools](https://cloud.google.com/storage/docs/gsutil) 創建一個 Storage ``` gsutil md -l asia -c standard gs://<bucket-name> ``` 遷移物件 ``` gsutil cp <~/local/path-to-file> gs://<bucket-name>/path ``` > 路徑相反就是下載下檔案 磁曲版控 ``` gsutil versioning set on gs://<bucket-name> // 設置磁區版控啟用 gsutil versioning set off gs://<bucket-name> // 設置磁區版控停用 gsutil versioning get gs://<bucket-name> // 檢查磁區是否版控 ``` 靜態頁面訪問 ``` gsutil web set -m index.html -e 404.html gs://<bucket-name> // 頁面設定 gsutil web get gs://<bucket-name> // 頁面設定JSON ```