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