Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 64 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Andere mochten auch (20)

Anzeige

Ähnlich wie 雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場 (20)

Weitere von twMVC (17)

Anzeige

Aktuellste (20)

雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場

  1. 1. http://mvc.tw 臺北場 Microsoft Azure 資料存取策略 Dino Wang
  2. 2. http://mvc.tw 雲端資料上的存取策略 • 資料庫 • 分散式快取 • 儲存體 / CDN (Content Delivery Network) • 諸多適⽤用於其他不同情境的服務 • Notification Hub • Queue • …
  3. 3. http://mvc.tw 資料存取必須有策略性 • 我們都知道要重視使用者體驗 • 低延遲、回應快,不是永遠靠大型機器來扛下 • 也得在乎帳單上的費用 • 大家應該會使用計算機試算在 Azure 上大概要花多少錢 • Auto-scaling 萬靈丹(?) • SQL Database DTU
  4. 4. http://mvc.tw 一個真實的雲使用案例 當上了雲之後的整體服務量變大 • 第一階段:用得很爽,網站頂得住使用量 • Take action: 爽爽喝咖啡,翹腳捻鬍鬚 • 第二階段:雖然服務還能跑,但回應開始變慢 • Take action: 雲端的機器怎麼那麼弱,自動 (或手動) 加開機器擋流量吧 • 第三階段:開始出現無法建立資料庫連結,網站幾乎動不了 • Take action: 重新 deploy、順便找朋友 (或到論壇) 開罵雲端服務不夠好 • Take action: 開始看 SQL Database 更高等級費用怎麼算 (然後又開始譙) • Or take action: 樂意的話,可以找我個案研究一下(爆)
  5. 5. http://mvc.tw 一個真實的雲使用案例 • 雲端有 auto-scaling 很好啊 • 效率低的程式需要比較多的執行個體 à 成本失控 • 任意增加執行個體 à 也只是死得更快而已 • 使用雲端不是找個墊背的來挨罵而已 :P
  6. 6. http://mvc.tw 那麼雲端資料存取怎麼樣做才好 • 三字訣「少、多、懶」 • 應該經常思考 Azure SQL Database 的本質 • SQL Database 屬公共設施,與他人共用 • 別吃米不知米價,每一級的 Database 價差並不算小 • 當然也可以選擇雲端包養,只是成本高昂 … VM + SQL Server (licensed) = Dedicated Service 這是我的觀察啦 …
  7. 7. http://mvc.tw 什麼「少」 • 欄位拿得少,只拿必要的,大家都知道的基本功 • 試圖讓發出的 SQL 查詢變少
  8. 8. http://mvc.tw 什麼「多」 • 相同(類似) 的東西一次拿足、多拿一點點無所謂 • 考慮 使用量多 以及 命中快取 為基礎的開發企圖
  9. 9. http://mvc.tw 這麼說好像有點玄 • 舉個 這頁、上頁和下頁 的例子
  10. 10. http://mvc.tw
  11. 11. http://mvc.tw
  12. 12. http://mvc.tw SANDBOX
  13. 13. http://mvc.tw 適用情境 • 複合查詢的做法有它適用的情境 • 這頁、上頁和下頁的例子雖然做到了減少單一頁面 的查詢量,但配合頁面快取 (output cache) 的配置, 才是真正完整的考量 (企圖)
  14. 14. http://mvc.tw BUT • 但若會造成太過複雜的 SQL 還是要避免 …(爆) 來看一個負面例子
  15. 15. http://mvc.tw 延伸:電商購物車優惠 網站有數十個優惠專案,優惠條件設定在資料庫中 SD 規劃出一個 method 抓出只和購物車商品相關的 優惠專案來進行計算,好在執行個體上執行優惠運算 優點:只拿購物車需要的優惠專案設定 缺點:每個顧客的購物車內容肯定不同,發出的 SQL 查詢執行計畫可能很複雜,且無法造成一樣的結果
  16. 16. http://mvc.tw 延伸:電商購物車優惠 優惠專案數量有限,不如讓執行的 SQL 簡單點,且 造成能夠快取的結果 那就查詢現在作用中的所有優惠條件吧,由執行個體 去過濾需要的優惠條件(執行個體重一點,資料庫輕 一點) 少:少一點查詢的複雜性 多:多一點的快取命中率
  17. 17. http://mvc.tw 兼顧成本與效能的考量 跟資料庫比起來,執行個體的成本會比較便宜 因執行個體可以輕易的 scale-out 資料庫要做類似的事情代價極為高昂 讓頻繁存取的查詢減少資料庫的運算,是不錯的主意
  18. 18. http://mvc.tw ORM 玩家請注意 • Navigation Property • 有機會對 DB 造成巨大的影響 • 惡名昭彰的 ORM Select N+1 問題 (在有限的執行個體上造成查詢量爆炸性的增加)
  19. 19. http://mvc.tw SELECT N+1 可能的場景
  20. 20. http://mvc.tw SELECT N+1 可能的場景 • 文 article à 圖 image 會有啥問題? @model  IEnumerable<Article> foreach (var article  in  Model) { //  1  to  N  relation       var image  =  article.Images.FirstOrDefault(); //  or  even  …    1  to  1  relation       var image  =  article.Image; … }
  21. 21. http://mvc.tw SELECT N+1 可能的場景 • 只需要一道 SQL 查詢就取回文章列表 • 但實際上卻執行了 N+1 道 SQL • N = 處理的文章數量
  22. 22. http://mvc.tw SELECT N+1 可能的場景
  23. 23. http://mvc.tw N+1 問題就像是
  24. 24. http://mvc.tw DB 的角度看 SELECT N+1 …咱不幹了
  25. 25. http://mvc.tw 解法:EAGER LOADING • Navigation Property 的使用有機會對 DB 造成巨大的影響 • 惡名昭彰的 ORM Select N+1 問題 (在有限的執行個體上造成查詢量爆炸性的增加) • EntityFramework:使用 .Include() 避免 Lazy load • LINQ to SQL:使用 .LoadWith<T> 避免 Lazy load • 應用其他查詢技巧 • 寫完 LINQ 不要太過自信,善用手邊工具測試 • SQL Profiler • LINQPad (好物!) • Azure SQL Database 「管理」功能
  26. 26. http://mvc.tw PORTAL 上的資料庫效能資訊 由 Portal 進入資料庫「管理」功能
  27. 27. http://mvc.tw PORTAL 上的資料庫效能資訊 查詢效能以及預設檢視
  28. 28. http://mvc.tw 最佳化的關鍵 • 相同的一段時間內,如果發現有 • 1 萬條資料庫耗時 100 ms CPU 的查詢 • 100 條資料庫耗時 10 s CPU 的查詢 • 誰會是立即提升網站效能的關鍵?
  29. 29. http://mvc.tw 搞清楚誰是真正的消費者 強烈建議排序「執行計數」
  30. 30. http://mvc.tw TRADE OFF 效能調校有時候會面臨效能 與 架構上的取捨,請自 行斟酌。
  31. 31. http://mvc.tw 資料存取之道
  32. 32. http://mvc.tw 網 站 快 取 (我常在思考在生活上的快取倒底好不好 XD)
  33. 33. http://mvc.tw 分散式快取 再降低資料庫負擔、提升網頁回應速度 • 頁面快取 • 資料快取 分散式架構,讓快取保存在專責主機上 • 一致性 (integrity) • 利於擴展 (scale-out)
  34. 34. http://mvc.tw AZURE 快取服務的選擇性 In-Role Cache Managed Cache Service Redis Cache
  35. 35. http://mvc.tw 快取即服務 CACHE AS A SERVICE Azure Redis Cache • 基於開放原始碼專案 Redis 的專責快取服務 • 能提供可用性達 99.9% 的服務水準協議(SLA) • 提供 Basic、Standard 兩種規模與計費方式,容後介紹細節 • 可用快取空間可高達 53GB
  36. 36. http://mvc.tw REDIS CACHE 微軟建議 Azure 用戶所有的新開發的應 用系統未來皆採用 Redis Cache。 http://blogs.technet.com/b/azuretw/archive/2014 /08/09/azure-cache.aspx
  37. 37. http://mvc.tw AZURE TAIWAN USER GROUP
  38. 38. http://mvc.tw 什麼是 REDIS CACHE 開放原始碼專案,非常流行的 No-SQL 資料庫 • 既有非常多種語言程式庫的支援 不止是傳統式鍵值對 (key-value) 的快取 • 支援豐富、高效能的資料類型 hashes、lists、sets、sortedsets • 支援高效率的操作方式 append、increase、decrease、… • 支援 pub/sub pattern
  39. 39. http://mvc.tw AZURE REDIS CACHE 的優點 由微軟整合,提供具有高可用性的穩定服務 • 2014-09 推出正式版 免自行架設,不需處理繁複的容錯設定
  40. 40. http://mvc.tw AZURE REDIS 快取服務的種類 基本 Basic • 單一快取節點 • 共用 或 專用 標準 Standard • 具備兩個快取節點 • 提供複寫服務 (master/slave replication) • 提供可用性高達 99.9% 的 SLA
  41. 41. http://mvc.tw 如何建立 AZURE REDIS 快取 • 一律於新 Portal 建立 https://portal.azure.com/
  42. 42. http://mvc.tw 重要的 MAXMEMORY 原則設定 • 一旦快取服務面臨「記憶體用盡」時的處理原則 原則 說明 NoEviction 直接回傳錯誤 VolatileTTL 在過期項⽬目中尋找,清除存活時間最接近項⽬目 AllKeysRandom 隨機回收項⽬目 VolatileRandom 隨機回收過期項⽬目 AllKeysLRU 在所有項⽬目中尋找,清除最近最少使⽤用的項⽬目 VolatileLRU 在過期項⽬目中尋找,清除最近最少使⽤用的項⽬目
  43. 43. http://mvc.tw MAXMEMORY TERMS LRU • Least Recently Used • 近期最少使用為優先排除的 演算法 TTL • Time To Live • 存活時間優先演算法
  44. 44. http://mvc.tw 在 ASP.NET 網站程式 應用 AZURE REDIS CACHE
  45. 45. http://mvc.tw 網站如何應用 REDIS CACHE • ASP.NET Session State (out-of-proc) • ASP.NET OutputCache 自訂 Data Cache 機制 • 分散式快取替代本機快取 ObjectCache, WebCache, ...
  46. 46. http://mvc.tw ASP.NET SESSION • Session 是 Web 應用程式經常需要使用到的儲存體 • 優點:ASP.NET Web 應用程式存取非常方便 • 缺點:應用程式產生內部「狀態」 • In-Proc:停留在某一部主機上,造成 Web Farm 架構瓶頸 • Out-of-Proc:付出通訊成本,但換得應用程式延展性
  47. 47. http://mvc.tw REDISSESSIONSTATEPROVIDER • NuGet • web.config
  48. 48. http://mvc.tw ASP.NET OUTPUTCACHE • OutputCache 是頁面快取技術 • 避免反覆跑異動性低的頁面
  49. 49. http://mvc.tw REDISOUTPUTCACHEPROVIDER • NuGet • web.config
  50. 50. http://mvc.tw MSDN / ASP.NET REDIS PROVIDERS • RedisSessionStateProvider https://msdn.microsoft.com/en- us/library/azure/dn690522.aspx • RedisOutputCacheProvider https://msdn.microsoft.com/en- us/library/azure/dn798898.aspx
  51. 51. http://mvc.tw 自訂 DATA CACHE • 適用於複雜、規模更大的網站 • 透過 API 自行管理資料快取
  52. 52. http://mvc.tw STACKEXCHANGE.REDIS 是基礎 • StackExchange.Redis OR StackExchange.Redis.StrongName • ConnectionMultiplexer • 建立與 redis server 之間的連線
  53. 53. http://mvc.tw CONNECTIONMULTIPLEXER 只需建立一次,同一個 instance 服務本機所有操作 • Thread-Safe 執行緒安全的設計 • TCP/IP 連線建立的問題 勿每次操作時都再次建立 ConnectionMultiplexer • 耗盡 TCP port
  54. 54. http://mvc.tw REDIS RESOURCES Redis for Windows – MSOpenTech http://msopentech.com/opentech-projects/redis/ https://github.com/MSOpenTech/redis Redis Desktop Manager – RedisDesktop.com https://github.com/uglide/RedisDesktopManager
  55. 55. http://mvc.tw REDIS FOR WINDOWS Redis 的 Windows 版可執行檔與其他平台版本完全 相同 執⾏行檔 功能說明 redis-­‐server redis 啟動程式,設定檔 redis.windows.conf redis-­‐benchmark 執⾏行效能測試程式 redis-­‐cli 指令列程式,可下達 redis commands redis-­‐check-­‐dump 資料匯出程式 redis-­‐check-­‐aof 資料修復程式
  56. 56. http://mvc.tw REDIS DESKTOP MANAGER • GUI 圖形界面應用程式 • 開放原始碼, 目前是 0.7.6 版 • 可以方便的方式檢閱快取資料
  57. 57. http://mvc.tw REDIS COMMANDS • http://redis.io/commands
  58. 58. http://mvc.tw 講個秘訣 一個 Redis instance 中預設開啟 16 個 db,可將不同 性質的資料放置於個別的 db • Data Cache (db=0) • ASP.NET Session (db=1) • ASP.NET OutputCache (db=2)
  59. 59. http://mvc.tw REDISSESSIONSTATEPROVIDER • NuGet • web.config
  60. 60. http://mvc.tw REDISOUTPUTCACHEPROVIDER • NuGet • web.config
  61. 61. http://mvc.tw 使用 COMMANDS 清理快取 redis-­‐cli.exe  –h   xxxx.redis.cache.windows.net –a  "…" flushall select  [n] flushdb
  62. 62. http://mvc.tw 使用 STACKEXCHANGE.REDIS API var config =  "xxxx.redis.cache.windows.net,ssl=false,allowAdmin=true,password=……"; using  (var connection  =  ConnectionMultiplexer.Connect(config)) { connection.GetEndPoints().ToList().ForEach(x  => { connection.GetServer(x).FlushAllDatabases(); //  或 //connection.GetServer(x).FlushDatabase(); }); }
  63. 63. http://mvc.tw http://skilltree.my http://demoshop.tw http://www.hexdigits.com https://fb.me/studyazure http://cacafly.com 主辦單位 合作伙伴 協辦單位
  64. 64. http://mvc.tw • 本投影片所包含的商標與文字皆屬原著作者所有。 • 本投影片使用的圖片皆從網路搜尋。 • 本著作係採用姓名標示-非商業性-相同方式分享 3.0 台灣 (中華民國) 授權條款授權。 謝謝各位

×