KK 的 Web 實驗室(Day28–30)

Chunhao Weng
9 min readOct 20, 2020

‘Flames to dust Lovers to friends Why do all good things come to an end?’

這純粹是自己不知道為什麼想做的事情,紀錄一下 KK 的生命旅程。

恭喜鐵人賽完賽!

Web 實驗室資源:

Youtube

Facebook

以下為 KK 課程內容的文字紀錄,我本人不是KK。(重要)

影片開始。

32 成為看起來很強的後端:運算是什麼?

KK 老師今天來談談運算(Computation or Computing),也就是商業邏輯的部分。

以電商網站為例,運算包含計算商品價錢、訂單總量、折扣金額、過去消費習慣…等等。

如果是遊戲的話,運算談的是如何從a點走到b點、中間練了什麼技能、揮了幾刀、損失多少血…等等。

那我們要怎麼區分各種運算呢?

用「使用位置」區分運算

一種是「雲端運算」,會在遠端的在 Server 上做運算。

雲端運算

優點:

不用吃本地端的效能,可以有非常多台機器做運算。

可以讓更多人進行連結,比較好擴展。

缺點:

沒有網路或網路不穩的時候就不能使用。

一種是「本地運算」,也就是自己的 Client 端做運算。

有可能是瀏覽器、App、或是嵌入式裝置(如:智慧手環)。

本地運算

還有一種是結合「雲端運算」和「本地運算」的「霧運算」(Fog computing),會定義哪些資料適合在雲端、哪些在本地端運算。

霧運算

前幾年 IoT (物聯網,Internet Of Things) 開始被廣泛討論,各種智慧裝置逐漸普及,如:智能電燈、智能手錶、智能音響、智能監控…等。

這些裝置規格較低而且大小偏小,所以比較便宜但運算能力比較差

所以本地端需要雲端運算協助。

拿智能車來說,進到山洞或去收訊不好的地方,如果純靠雲運算就可能會出問題。

用「運算種類」區分運算

分為三種:單一、平行、網格,這幾種運算。

單一運算

假設我們拿到很多點數卡,讓一個人拿著一台計算機把點數加總,這就是「單一運算」。

那如果要算快一點呢?

一種方法是讓這個人按計算機按快一點,也就是讓運算的演算法變得更快。

另一種方法是加大規格(垂直擴充),例如從一般的計算機變成工程計算機。

因此單一運算比較難去做擴充或是加速。

平行運算

以剛剛的點數卡例子來說,如果要算快一點,能不能找十個人算?

那這時候就會遇到一些挑戰,例如點數卡要如何分配?

要先每個人拿十張、還是每個人算完一張再去拿一張?

這樣的方式就會影響到「平行運算」的策略。

一個好的策略,不管是十個人、一百個人、一千個人來做,都可以做好。

我們稱這種方式為「水平擴充」。

網格運算

網格運算比較像是單一和平行合再一起。

KK 老師說他對這塊沒有特別研究,不過如果平行運算是一個維度,網格運算就是兩個維度做運算。

以上這三種方法,在本地端、雲端都可以實作。

本地端:

單一運算,從手機瀏覽器(效能比較差)改用電腦瀏覽器(效能比較好),就是垂直擴充。

平行運算各位可能聽過 P2P (Peer-to-peer)或是區塊鏈。 有很多裝置代表節點,互相溝通。

網格運算,KK老師說他不懂。

雲端:

單一機器越換越強。

雲端有各種平行策略來處理大量資料、讓大量的人算同一個東西。

那如果現在有一萬個任務,要分給十個人,要怎麼分?怎麼拿任務?怎麼通知每個人?

33 成為看起來很強的後端:什麼是 Webhook?

為什麼要在網站上做一個鉤子?

各位請想像,門上面放一個掛鉤。

門上有鉤子

希望達到的目的是:當某件事情發生時,會觸發另外一個事件。

我們假設這個門,是一個 Server 。

這其實不是門,是一個 Server

今天有人按了喜歡的文章讚、付完款訂單被更新、把物品加到購物車…等等行為(Action)。

使用者進行了某種 Action

這時候鉤子被掛上另外一個行為(Action2)。

鉤子被掛上 Action2

實際例子

拿第三方金流來做例子。

通常會看到一個 Webhook 的網址,讓你輸入發生 Action 時要把資料打給哪個網址。

因此當使用者付款的 Action 發生時,Server1 上的 Webhook 會被觸發 Action2 給 Server2。

現在門變成了第三方金流

此時 Action2 會告訴 Server2 幾個東西。

Name 會說明是否付款完成、失敗、預期…等,type 會說明是否為付款或檢修或其他、payload 會有其他的資料。

這裡以 name、type、payload 來說明,實際名稱會由第三方金流做定義。

Action2 會有不少資料

Webhook 通常使用 HTTP POST 來進行,也就是 Server2 必須開一個 API 讓 Server1 打過來,如 /listen。

而 Server1 就需要設定 Webhook 的 URL 為 https:/server2/listen

Server1 設定 Webhook URL

Server2 接到這些資料之後,會跟自己的 DB 做串接,來處理這個商業邏輯。

Server2 跟 DB 處理商業邏輯

Webhook 模型應用

Webhook 模型很泛用,常在後端的商業邏輯做 event trigger ,處理訂單狀態、出貨…等。

另外一個常見應用就是使用 Github 的時候,把上面畫的圖的第三方金流換成 Github。

當 code 被丟上去 Github ,後端程式會被觸發去幫忙作部署,也稱為 CI/CD

(CI/CD 是 continuous integration, continuous delivery, and continuous deployment 的縮寫,這邊剛好有篇文章參考。https://ithelp.ithome.com.tw/articles/10219083

用 Webhook 的缺點是什麼?

以第三方金流為例,如果今天只有付款成功對方才把資料打給你,而付款失敗不會,這樣就會有問題。

因為你可能無法知道失敗的原因是什麼。

Webhook 的細緻程度,就會影響這個第三方服務好不好用。

如果今天在一個比較大的公司,Server1 跟 Server2 是不同的部門在做,當缺資料的時候,只要請另外一個部門多把資料打給你就不會有限制了。

如何透過 Webhook 去進行平行運算?

如果給 Server1 多個不同的 Webhook URL ,當很多 Action 進來就可以分配給不同的 Server 作處理。

34 成為看起來很強的後端:更多 Webhook

透過之前的例子,我們 Webhook 實作有打出去的 outcoming 跟接收的 incoming。

Webhook 模型

Client 到 Service 之間主要是做商業邏輯的事情,例如轉帳、付錢…等。

Client 到 Service 商業邏輯

Service 主要處理使用者給的各種資料,處理完就打給 Handler 。

對 Handler 來說,Service 打給他的資料就稱為 incoming 或 inbound 的 Webhook。

反之,對 Service 來說就是 outcoming 或 outbound 的 Webhook 。

假設我們在 Slack App (辦公室協作軟體)上輸入 /weather 想要查天氣狀況。

Slack 的 Service 可能就會把這個 Request 存在自己的 DB 裡面,紀錄有這個指令。

處理完後打給 Handler , Handler 會去找天氣資料(例如中央氣象局)。

然後再把資料打回去給 Service 。

Incoming 和 Outcoming 怎麼看?

圖上的 in 跟 out 是從 Handler 的角度來看,而對 Service 來說剛好是相反。

因此你在談 Webhook 時,要注意你的主詞是誰。

主詞不同 in out 不同

使用的第三方服務 Webhook 通常以他們的平台為主詞。

接下來請用兩倍速看這不到三十秒的複習影片,已經幫大家選好時間了。

恭喜 KK 順利完賽!

大家有興趣請直接去 Web 實驗室的 Youtube 跟 Facebook 社團吧。

Web 實驗室資源:

Youtube

Facebook

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Chunhao Weng
Chunhao Weng

Written by Chunhao Weng

Random notes for personal use.

No responses yet

Write a response