Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

一個微信專案從0到000的效能調教

431 views

Published on

某年某月 twMVC 分享內容。
從人、事、物三個面向來談專案與效能調教相關內容。

Published in: Technology
  • Be the first to comment

一個微信專案從0到000的效能調教

  1. 1. 一個微信專案 從0到.000的效能調教之路 三部曲
  2. 2. http://mvc.tw  twMVC 核心講師  現任微軟最有價值專家  微軟 TechDay & MSDN 講師  著有《ASP.NET MVC 4/5網站開發美學》  譯有《Bootstrap 2/3》中文教材  https://kkbruce.tw  http://blog.kkbruce.net @Bruce 2
  3. 3. http://mvc.tw 首部曲、二部曲? 3 http://mvc.tw/004Q http://mvc.tw/004R
  4. 4. 一個微信專案 從秒到毫秒的效能調教之路
  5. 5. 一個微信專案 效能調教面面面觀但內容是
  6. 6. http://mvc.tw 人 事物 Agenda 6
  7. 7. http://mvc.tw 效能有兩種  與人有關  …  …  …  …  …  與Code有關  …  …  …  …  … 7
  8. 8. 8
  9. 9. http://mvc.tw 硬體公司的軟體新創團隊 9
  10. 10. http://mvc.tw  專注於 Mobile 平台 MIB Team 10
  11. 11. http://mvc.tw  專注於 Mobile 平台  微信限定版 MIB Team 11
  12. 12. http://mvc.tw MIB Team  專注於 Mobile 平台  微信限定版  血淚史不是講假的 12
  13. 13. http://mvc.tw  專注於 Mobile 平台  不負責 in-house  電腦不接內網   沒有人知道我們在幹什麼  對內外,什麼都不講  令人眼紅  MIB Team 13
  14. 14. http://mvc.tw  專注於 Mobile 平台  不負責 in-house  負責新技術研究與導入  研究:想怎麼玩都行  導入:有難度 MIB Team 14
  15. 15. http://mvc.tw  專注於 Mobile 平台  不負責 in-house  負責新技術研究與導入  一年之後才有正式組織名稱 MIB Team 15
  16. 16. http://mvc.tw  如何打魔王? Team – “同生共死”的一個單位 16
  17. 17. http://mvc.tw  如何打魔王?  只有一位勇者打得贏嗎? Team – “同生共死”的一個單位 17
  18. 18. http://mvc.tw  如何打魔王?  只有一位勇者打得贏嗎?  組隊 – 戰士(短距離) – 弓箭手(中距離) – 魔法師(長距離) Team – “同生共死”的一個單位 18
  19. 19. http://mvc.tw  如何打魔王?  只有一位勇者打得贏嗎?  組隊 – 戰士(短距離) – 弓箭手(中距離) – 魔法師(長距離)  通常多技能的贏面大 Team – “同生共死”的一個單位 19
  20. 20. http://mvc.tw 人 is Team 20
  21. 21. 內部 Startup 21
  22. 22. 22
  23. 23. http://mvc.tw 江湖事  一開始,專案使用 NLog 輸出至 File日誌  專案進行發行測試開始,問題慢慢出現…  出現問題時,File 日誌不易追查  需一條一條從日誌中查看  File 日誌散落各站點  需將所有站點 File 日誌下載回來  上線後發現,SPA頁面難以偵錯  前端日誌無法收集分析問題  相當不即時…
  24. 24. http://mvc.tw 互推  前端 – 是不是你們後端沒寫好?  後端 – 我們輸出的資料是正確的哦?  Database – 不關我的事?
  25. 25. http://mvc.tw Hipchat  第一次是選用 https://www.hipchat.com/ 進行日誌的整 合。  類似 slack 的另一家服務商。
  26. 26. http://mvc.tw Hipchat的即時日誌  將 hipchat 當成我們Log日誌中心  專案以 room 進行區分,分類收集所需日誌訊息  room 有各自成員互不干擾
  27. 27. http://mvc.tw 可以看到許多有趣的事(1) 27
  28. 28. http://mvc.tw 可以看到許多有趣的事(2) 28
  29. 29. http://mvc.tw 為什麼會換slack?  hipchat 沒什麼不好的。  不過當站點訊息量大時,容易呈現掛點狀態。  非 hipchat 問題,猜測為第三方元件(HipChat.Net )沒 處理好。
  30. 30. http://mvc.tw Slack能做什麼事?  說明影片  http://mvc.tw/004i
  31. 31. http://mvc.tw Slack 重點整理  團隊通訊平台服務。  依據需求 – 不同主題、不同成員、不同專案、不同功能 – 去訂 制不同的 Channels 來使用。  傳遞訊息、檔案、圖片與任何資料。  強大的搜尋、過濾與回顧歷史訊息的功能。Slack 免費版可以搜 尋最近的 10000 則訊息,並且任何新成員加入後都可以回溯每 個頻道之前的歷史訊息內容,銜接討論進度。  容易與許多第三方服務進行整合。(mail 也能)  跨平台訊息同步。
  32. 32. http://mvc.tw 第三方服務  提供大量第三方服務  整合容易
  33. 33. http://mvc.tw 專案 channel
  34. 34. http://mvc.tw 那前端呢?
  35. 35. http://mvc.tw 用 Console.log ?
  36. 36. http://mvc.tw jsnlog  http://jsnlog.com/  解決前端 - SPA頁面無法收集日誌問題。  可與 Log4Net、Elmah、NLog 等套件整合。  多種整合方案:.NET、PHP、Node、JS Only。  整合容易 
  37. 37. 37 Jsnlog
  38. 38. http://mvc.tw 即時且跨平台的效果 … 很恐怖
  39. 39. http://mvc.tw 來自團隊的見證 – 前端 未導入Slack(紀錄Log) •遇到使用者反應系統有Bug時,常常使用者講 得很清楚,但聽得很模糊…很難快速從知道 的訊息中,歸納知道問題出在哪,需花費大 量的時間在理解問題,並在猜測的可能問題 中,不斷嘗試,Bug還可能再度出現…. 導入Slack(紀錄Log) •無時無刻都能根據使用者的描述與Slack的紀 錄(自訂描述,支援手機版以及桌機板),減少 與使用者溝通之間的代溝,能快速歸納出Bug 的問題,徹底解決Bug,還有時間喝杯咖啡唷 ~
  40. 40. http://mvc.tw 來自團隊的見證 情境 Gina: 認真工作中 Boss: User 反應有錯 誤,看一下Log Gina: 等我一下,我 去Azure FTP 下載log 回來看,我找一下 Log 喔! 等等跟你說… (十分鐘過去…) Boss: 找到了嗎? Gina: 部屬完了 Boss: API沒辦法正 常呼叫耶! Gina: 真的嗎? 可是 我只加了Log而已, 哈哈! Log量太大,好 像沒記錄到,導致 API掛掉,我再部一 次沒Log的。 Boss: 可以了耶! Gina: 公車上 Boss: User 反應有錯 誤,看一下Log Gina: 好,我現在看 一下(開啟手機App), 啊! 有Log,DB有… 問題,前端有…問題, 後端有…問題,所以 造成錯誤。 Boss: 好,有空可以 先改一下
  41. 41. 41
  42. 42. 環境 改善 42
  43. 43. 43 從公司要資源
  44. 44. http://mvc.tw Office v1 – 讓高牆倒下 44
  45. 45. http://mvc.tw 8GB out – 16GB in 45
  46. 46. http://mvc.tw HDD out – SSD in 46
  47. 47. http://mvc.tw http://mvc.tw/004P 47
  48. 48. 48 投資自己
  49. 49. 1. 以下都是花自己錢 49 2. 以下都是花自己錢 3. 以下都是花自己錢
  50. 50. http://mvc.tw 有要推坑的手 XD 50
  51. 51. http://mvc.tw Multi-Monitor 51
  52. 52. http://mvc.tw Mouse  多螢幕,可以試試滾輪。  鍵盤、滑鼠的錢不要省。 52
  53. 53. http://mvc.tw 要坐得舒服 53
  54. 54. http://mvc.tw 高度要對  54
  55. 55. http://mvc.tw Office V2 - 目前 55
  56. 56. http://mvc.tw Office V3 - 人生一定要有目標    56
  57. 57. http://mvc.tw  令人眼紅   很敢花錢,被誤會獎金領很多 靠腰 57
  58. 58. http://mvc.tw  缺點,想低調,完全行不通。常常有人跑來照像   不要老是想著公司,他只是給你一份工作,但你可以在裡面 生活。  扣除睡覺,Office 搞不好是你第一個家,何不讓他舒服 一點。  先交女朋友才再成為工程師,不然很大的機會成為… 物 - 小結 58
  59. 59. http://mvc.tw 靠北工程師 59
  60. 60. 60
  61. 61. http://mvc.tw 專案終於來了 61
  62. 62. http://mvc.tw  Mobile first  Cloud first  Global Azure  China Azure  China user first – GFW    first 62
  63. 63. http://mvc.tw  以 VSTS 進行 Version Control (TFVC)  後來才知道,可以一個專案同時執行兩種版控  TFVC and Git repositories in the same team project  http://mvc.tw/004S VSTS 63
  64. 64. http://mvc.tw 架構 64
  65. 65. http://mvc.tw  Test Site:Microsoft Global Azure  Stage Site:Microsoft China Azure  兩個 Azure 有非常明顯的技術落差,我們在採用 Azure 相關技術時,必須做 balance 的考量。 發行 65
  66. 66. http://mvc.tw  Web App (scale out)  SQL Database  Storage  CDN  Webjobs Azure Service 66
  67. 67. http://mvc.tw 效調前,一定要有... 67
  68. 68. http://mvc.tw 爛Code     我的爛CODE重構之路  http://mvc.tw/004U  我的爛CODE重構之路(二)  http://mvc.tw/004V 68
  69. 69. 經典 回顧 69
  70. 70. http://mvc.tw 經典(1) 70
  71. 71. http://mvc.tw 經典(2) 71
  72. 72. 註解 下課 72
  73. 73. http://mvc.tw 滅了它 73
  74. 74. http://mvc.tw Empty + MVC, MVC Empty + MVC MVC 74
  75. 75. http://mvc.tw MVC 75
  76. 76. http://mvc.tw Empty + Web API, Web API 76
  77. 77. http://mvc.tw Web API 77
  78. 78. http://mvc.tw  ASP.NET Identity  你有使用?  自由度太高,入門成本不小,在內部推廣不易  packages 的相依性很麻煩  很多不(再)使用的套件移不掉  結論:專案越乾淨越好,才有染黑的空間  Empty目的 78
  79. 79. http://mvc.tw 導入分層架構  http://mvc.tw/004X  找這位  79
  80. 80. http://mvc.tw 三層式架構
  81. 81. http://mvc.tw 關於架構  沒有架構或是有架構都可以做 到相同功能,只是有架構的情 況可以提供維護性與可用性, 但過度的架構是件災難,功能 分切太細會增加開發上的困難 與時程。  圖為高手高手高高手級別。
  82. 82. Logger.Plus.篇 82
  83. 83. http://mvc.tw  平常你如何取得以下三種資訊  呼叫者是唯?  那一支檔案呼叫?  第幾行出錯? 再論 Logger 83
  84. 84. http://mvc.tw Member, sourceFile, sourceLine 84
  85. 85. 85 Logger plus
  86. 86. Database.DBA.篇 86
  87. 87. http://mvc.tw 資料庫專案 87
  88. 88. Stored Procedure 88
  89. 89. http://mvc.tw  Entity Framework  Entity Framework Performance and What You Can Do About It  中文討論:http://mvc.tw/004Y  NHibernate  OpenAccess  之前使用 思考 ORM Framework 89
  90. 90. CRUD 90
  91. 91. http://mvc.tw  Install-Package Dapper  https://github.com/StackExchange/dapper-dot-net Dapper 91
  92. 92. http://mvc.tw  小 – 僅單一Dapper.dll  快 – Performance ( http://mvc.tw/004Z )  靈活 – SQL to ORM  學習成本低  Stackoverflow 使用保證 Dapper 92
  93. 93. 93 Dapper
  94. 94. 程式碼.加加加速.篇 94
  95. 95. http://mvc.tw 導入C# 6 – 語法糖 95
  96. 96. http://mvc.tw 加速心法  Parallel Processing and Concurrency in the .NET Framework  http://mvc.tw/004a 96
  97. 97. 不就是 async awaint 97
  98. 98. 98 考考各位 – Async Life flow
  99. 99. http://mvc.tw 輸出:1,2,3,4,5,6 99 static void Main(string[] args) { ShowThreadInfo(1); var task = MyDownloadPageAsync("https://www.youtube.com/"); ShowThreadInfo(??); string content = task.Result; ShowThreadInfo(??); Console.WriteLine($"網頁內容總共為{content.Length}個字元。"); } static async Task<string> MyDownloadPageAsync(string url) { ShowThreadInfo(2); var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); ShowThreadInfo(??); string content = await task; ShowThreadInfo(??); return content; }
  100. 100. 1,4,6 2,3,5 100
  101. 101. 101 轉吧七彩霓虹燈
  102. 102. http://mvc.tw  在非UI工作上,盡量使用 .ConfigureAwait(false)  從頭到尾都使用非同步方法 非同步兩大原則 102
  103. 103. http://mvc.tw  非同步的 File I/O 沒處理好,可能會有減低10倍的效能?  如何取消非同步嗎?  如何回報非同步進度?  清楚 compute-bound 與 I/O-bound 差異?  多個非同步,要如何互相等待?  非同步的 re-try 機制? 未能介紹 103
  104. 104. Azure.Data加速.篇 104
  105. 105. http://mvc.tw  MemoryCache  Storage Table  Redis  Session  OutputCache Cache 105
  106. 106. http://mvc.tw  最省成本;最好處理;  不能應用在 scale-out 情境。  .NET Framework 應用程式中的快取  http://mvc.tw/004b  改良式GetCachableData可快取查詢函式  http://mvc.tw/004c MemoryCache 106
  107. 107. http://mvc.tw Storage Table  NoSQL服務  Key-Value 組合  存取 Wecaht JSON Data  減少 Azure SQL Database (DTU) 壓力  http://mvc.tw/004W 107
  108. 108. http://mvc.tw Redis  未使用!!!  還是要學哦!  Redis for Windows  http://mvc.tw/004g  StackExchange.Redis  http://mvc.tw/004h 108
  109. 109. 109 Redis 還是要 Demo :)
  110. 110. WebAPI.唯快不破.篇 110
  111. 111. http://mvc.tw  序列化  反序列化 只做二件事 111 Web API
  112. 112. 進出要 快 112
  113. 113. http://mvc.tw Jil – 序列化 113
  114. 114. http://mvc.tw Jil – 序列化 114
  115. 115. http://mvc.tw Jil – 序列化 115
  116. 116. http://mvc.tw Jil – 反序列化 116
  117. 117. http://mvc.tw Jil – 反序列化 117
  118. 118. http://mvc.tw Jil – 反序列化 118
  119. 119. http://mvc.tw 注意:日期 119
  120. 120. http://mvc.tw  Jil  http://mvc.tw/004d  MVC with Jil  http://mvc.tw/004e  WebAPI with Jil  http://mvc.tw/004f Jil三部曲 120
  121. 121. 121 Jil
  122. 122. http://mvc.tw 終於 122
  123. 123. http://mvc.tw 結論(1) 123
  124. 124. http://mvc.tw 結論(2) 124
  125. 125. 125
  126. 126. http://mvc.tw Blog 是記錄知識的最佳平台 126
  127. 127. http://mvc.tw 感謝 Jetbrains 贊助贈品 127 https://www.jetbrains.com/resharper/
  128. 128. http://mvc.tw 感謝 OzCode 贊助贈品 128 http://www.oz-code.com/
  129. 129. http://mvc.tw 感謝 ALIVE 贊助贈品 129 https://comealive.io/
  130. 130. http://mvc.tw 業界師資、實戰教學 130 http://skilltree.my
  131. 131. 謝謝各位 • 本投影片所包含的商標與文字皆屬原著作者所有。 • 本投影片使用的圖片皆從網路搜尋。 • 本著作係採用姓名標示-非商業性-相同方式分享 3.0 台灣授權。閱讀本授權條款,請到 http://creativecommons.org/licenses/by-nc-sa/3.0/tw/,或寫信至Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. h t t p : / / m v c . t w

×