Thoughts💡 .Net Conf 2020 社群日 — 與會心得

Jayden Lin
Dec 20, 2020 · 8 min read

筆者任職於 Yahoo ,粉絲團:《程式猿吃香蕉🍌》

首先感謝主辦單位提供了這麼棒的活動,一連兩天的社群技術議程讓我收穫滿滿,在社群日所分享的主題並不限於 .Net 的技術,對於第一次與會的我感到十分新鮮,在此也要肯定微軟在台灣對技術社群的耕耘。

附帶一提,我目前所在的工作專案上並未使用到 .Net 的技術,會參加此活動實在是因為議程主題太吸引我,尤其是 91 App 主講的幾個主題。在實際參與後,也完全沒讓我失望,不僅滿滿的乾貨,也很啟迪人心。

此外,兩天活動中精心安排的「捕捉大神」活動設計也十分有趣,以集點的概念用 Line Bot 掃描在講者身上的 QR Code (如下圖所示),算是給了許多生性害羞的工程師一個由頭,可以多與講者交流,我自己也借此機會與講者小聊了一下。

(Line Bot 捕捉大神遊戲)

回歸技術面,此次我參加的議程有:

  • 非同步系統的服務水準保證:淺談非同步系統的 SLO 設計
  • 微型任務編排器 — 以 Process Pool 為例
  • 刻意練習:如何鍛鍊你的抽象化能力

以下會就這幾場的內容摘錄我的心得。

▍非同步系統的服務水準保證:淺談非同步系統的 SLO 設計

這一場是由來自 91 App 的講者 Andrew 主講,講者在一開始先說明了 SLO、SLI、以及 SLA 的定義:

(SLA, SLO, SLI 的定義)
  • SLO (Service Level Objectives) : 服務要達到的目標,例如:消費者註冊帳號驗證簡訊要 5 秒內發送給消費者。
  • SLI (Service Level Indicator) : 為了達到 SLO 要監控的指標,例如:監控簡訊需求發送到 Message Queue 的時間、在 Message Queue 中的等待時間、處理簡訊需求的時間等等。
  • SLA (Service Level Agreements) : 根據 SLO 跟 SLI 的要求所制定的協議,可能會涉及 2 方的合約。

講者提到消費者註冊帳號驗證簡訊的例子:消費者註冊帳號會發送簡訊驗證,而這些發送簡訊的需求會先進入 Message Queue 後,再排隊進行處理 (例如套用簡訊樣式等等),最後再呼叫第三方程式做簡訊發送。而此服務的 SLO 要求是,在簡訊的需求發送後,5 秒內要能呼叫第三方程式做發送。

然而,此 Message Queue 是與行銷部門的行銷簡訊發送功能所共用,所以某次當行銷部門大量發送行銷簡訊時,便發生了 Message Queue 堆積的情況 (如下圖所示),無法完成 SLO 的要求。

問題本身並不難理解,許多人可能會立馬想到使用兩個不同的 Message Queue 來做分流,或是加開簡訊處理的機器來消化掉 Message Queue 堆積的情況,當然這些都是解法,但讓我驚豔的是,講師默默地提出靈魂拷問:

『看能不能以系統化的方式來解這個問題。』

這句話給了我非常大的啟發,當我們面對問題的時候,是採用兵來將擋水來土淹的方式一一處理掉,還是說我們會去將問題抽象化,探索是否有更系統化的做法來推演這類的問題?

接下來,講師採用限制理論(Theory of Constraints,TOC)的框架來思考這個問題:

  • 找出瓶頸:限制理論提到,瓶頸前一步驟,通常會有堆積的特徵,由此我們可以判定簡訊處理那這邊是瓶頸。
  • 充分利用瓶頸:在改善之前,先不要浪費,充分利用瓶頸的產能
  • 提升/打破瓶頸:透過加開簡訊處理的機器來提升瓶頸,或是另開 Message Queue 來打破瓶頸。

雖然推演出一樣的結論,但重點在於使用系統化的思考方式 (例如:使用限制理論來思考) 來解決問題。

雖然大學時期便已讀過 Goldratt 對於限制理論的幾本經典書籍(《目標》、《絕不是靠運氣》、《仍然不足夠》以上列出幾本,有興趣的朋友可以看看),但我卻並未能將這些思考方式應用於實際工作上,講者在這場講座上強調了這個『抽象化思考』思維,讓我收穫甚多。

▍微型任務編排器 — 以 Process Pool 為例

這一場同樣是由 91 App 的講者主講,講者 Steven 提到,因為業務需求需要手刻 Process pool ,並實際以程式碼手把手帶大家看 Process Pool 從零到有的開發,以及設計思路。架構圖如下所示:

簡單來說,不同的任務會有不同的 Process pool 來處理,並且透過 Thread 來平行處理任務,是一個典型的 Producer / Consumer 模型。

『模型畫得出來,但能不能做得出來?』

同樣是來自講者的靈魂拷問,筆者我自己在目前的公司也曾接觸過手刻 Process Pool 的系統,深知這類系統對於基本功的要求,其對於多執行緒、例外處理、狀態保存或分享等方面都很需要經驗,若是牽扯到任務之間的相依性則更為複雜。

結束時我有提問一個關於狀態保存/分享的問題,講者回答大意是:當 B 任務需要 A 任務的資料時,A 會將「資料已經處理完成」的訊息透過 Message Queue 來傳送,對應的 B 任務得知資料已經準備好,便會進行下一輪的處理。

講者在講座中,帶我們實際走過一遍手刻 Process pool 的 POC 附帶 Live Demo,算是十分有誠意,收穫頗豐。我認為這類微型任務編排器很適合當工程師平時的作業練習,來磨練自己的功力。

『當基本功愈扎實,

能提出的解決方案便能愈多元』

▍刻意練習:如何鍛鍊你的抽象化能力

這一場是由 91 App 的講者 Andrew 以及 Fion 主講,再次強調了抽象化能力的重要性。

講者舉例,用「日心說」來解釋太陽系天體的運行,會比用「地心說」來解釋容易得多,因此選擇一個好的「模型」十分重要,而好的模型又需要好的「抽象化能力」,講者提出好的抽象化的幾個重點:

  • 要能去除對象中不必要的「細節」
  • 但要能維持對象的「特徵」
(地心說與日心說的差異)

而要養成這個抽象化的能力,則需要「刻意練習」,強迫自己去發現問題,用抽象化的方式去拆解問題,這也呼應到前一場「 非同步系統的服務水準保證:淺談非同步系統的 SLO 設計」講座中,提到使用限制理論(Theory of Constraints,TOC)的框架來思考 SLO 的問題。另外,講者也提到利用製作 Interface 的方式來抽象化問題的手法,我個人認為這是一個非常實用的作法,很值得參考使用。

Fion 講者主講的部分,提及她如何用抽象化思考,完成 《康威生命遊戲》這個經典的題目,其中包含思考:

  • 時間的紀錄方式
  • 細胞的可視範圍
  • 演化的時序計算等等

講者製作了許多精美的圖片,來演繹她的思路,待官方釋出投影片時,非常建議大家可以下載來看看。

(大會已釋出簡報,也可以連結參考:https://github.com/Study4/DotNetConfTaipei2020/tree/master/slides)

(康威生命遊戲圖示)

▍心得

我在先前的文章也強調過「抽象化思考」在計算機科學(Computer Science)學科中的重要性,有機會在講座中聽到實際案例是如何利用這些思維來解決問題時,還是覺得很開心。

幾場講座下來,我認為難能可貴的是講者不僅提供實際案例,更提供其背後的思路,讓聽眾知道講者「是怎麼推演出這個結論」(包含 Andrew 講者用限制理論推演其思路、Steven 講者手把手實作 Process Pool、以及 Fion 用圖象化解釋其抽象化思路),而這些思路是十分有價值的,它提供一個思考方式,而不只是答案。

整體而言是非常棒的活動,明年還會想再參加,謝謝講者與主辦單位。

若是喜歡我分享的內容,歡迎幫我按個拍手,可拍 50下,給我一點鼓勵,或是加入我的粉絲團《程式猿吃香蕉🍌》,一起分享軟體知識與心得!

程式猿吃香蕉

來點軟體世界中那些更營養的知識

程式猿吃香蕉

『來點更營養的軟體知識,吃香蕉吧!』成員均為軟體開發愛好者,任職於網路產業,熱於分享與討論交流,訂閱我們吧

Jayden Lin

Written by

Yahoo 擔任 Lead Engineer,負責搜尋廣告系統開發。曾擔任樂天市場前端開發組經理,從零建立樂天台灣前端開發團隊。也是《程式猿吃香蕉》團隊創辦人,致力提供優質的、入門的、科普性質的軟體知識給大家。

程式猿吃香蕉

『來點更營養的軟體知識,吃香蕉吧!』成員均為軟體開發愛好者,任職於網路產業,熱於分享與討論交流,訂閱我們吧

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store