學習後端基礎 - 後端通訊設計模式 1
做網站工程師也有一段時間了,但是一直沒有機會去拆解後端的每個環節,並且深入瞭解底層原理。前陣子剛考完 AWS 的三張證照,考完之後覺得學習不能停歇,於是就把先前買的 Hussein Nasser 老師在 Udemy 上開的後端基礎課程拿出來看,希望能有很大的收穫。
課程裡面最一開始講到了幾種設計模式:Request Response、Synchronous vs Asynchronous、Push、Polling、Long polling、Server sent events、Pub/Sub 等等。這些設計模式對於後端工程師來說應該耳熟能詳,但我也認為說對於沒有實務經驗的新手,應該也可以用一套比較生動的比喻,讓大家都能夠了解各個設計模式的核心概念,以及優缺點。
Request — Response 模式是最經典的,也是一切的基礎。客戶端向伺服器要些資料,伺服器回應這些資料,這就是一次的請求跟回應。而這個請求的結構是由客戶端跟伺服器定義的,兩邊總會有一個協議,傳遞格式化的訊息。做網站後端,最熟悉的一定就是 HTTP 請求了吧,它的格式大概就長下面這個樣子。
GET / HTTP/1.1
Headers
<CRLF>
BODY你可以想像假設你今天想要去銀行匯錢,你走進銀行只跟櫃員說你想要匯錢,他一定覺得很莫名其妙吧。如果想要匯錢,就是乖乖填好匯款單,匯款單就是格式化的 Request,照著格式填好,櫃員才有辦法幫你作業。手續完成之後,櫃員會再給你一個證明或明細,這個也就是格式化的 Response。
接著是 Synchronous / Asynchronous 的觀念,翻成中文就是同步、非同步。什麼是同步呢?假設有 A、B、C、D 這幾件事,A 做完了後馬上去做 B,B 做完了後馬上去做 C,依此類推。上件事情做完後才緊接著做下件事,這就是同步。那什麼是非同步呢,假設有 W、X、Y、Z 這幾件事,W、X 比較花時間,但是我可以放著請人做,我先去做 Y 和 Z,再回來拿 W 跟 X 的結果,這樣就叫非同步。我覺得這個觀念不僅僅是在軟體工程上很重要,在現實生活中也是非常重要的概念。
請試著想像一個社畜的早晨是怎麼過的,假設你起床後的 10 分鐘內,必須要完成煮熱水、沖麥片、吃早餐、上廁所、洗臉這幾件事情,你會按下煮水按鈕之後就在那乾等 5 分鐘嗎?不可能吧。如果你真的那麼做,那就是前面提到的同步概念,效率並沒有最大化。你可以怎麼做呢?先去按下煮水鍵,然後可能就是去上廁所、洗臉,弄完之後水應該也煮好了,再去沖麥片、吃早餐。這個就是非同步的概念,我按下煮水按鈕之後熱水壺就會開始工作,等水煮好的空檔我還可以做很多事,如此一來才能發揮最大效益。