Published inStarbugs Weekly 星巴哥技術專欄·Feb 7Goroutine 的併發治理:掌握生命週期從併發的角度來看,Goroutine 跟 Thread 的概念很類似,都是將任務交給一個執行單元來處理。然而不同的是,Goroutine 將調度放在用戶態,因此更加輕量,也能避免多餘的 Context Switch。我們可以說,Go 的併發處理是由語言原生支援,有著更好的開發者體驗,但也因此更容易忘記底層仍存在著輕量成本,當這些成本積沙成塔,就會 …Golang23 min readGolang23 min read
Jan 20OAuth 2.0 的身份認證:OpenID ConnectOAuth 2 讓網路服務可以存取第三方的受保護資源,因此,有些開發者會進一步利用 OAuth 2 來進行使用者認證。但這中間存在著一些語義落差,因為 OAuth 2 當初設計目的是「授權」而不是「認證」,兩者關注的焦點會有些不同。OpenID Connect 是基於 OAuth 2 的一套身份認證協定,讓開發者可以在 OAuth 2 授權的基礎 …Openid Connect17 min readOpenid Connect17 min read
Jan 13更好的選擇?用 JWT 取代 Session 的風險因為 HTTP 是無狀態協定,為了保持使用者狀態,需要後端實作 Session 管理機制。在早期方式中,使用者狀態會跟 HTTP 的 Cookie 綁定,等到有需要的時候,例如驗證身份,就能使用 Cookie 內的資訊搭配後端 Session 來進行。但自從 JWT 出現後,使用者資訊可以編碼在 JWT 內,也開始有人用它來管理使用者身份。前些日 …Security9 min readSecurity9 min read
Published inStarbugs Weekly 星巴哥技術專欄·Jan 5Goroutine 的併發治理:管理 Worker Pool併發會需要多個 Goroutine 來同時執行任務,Goroutine 雖然輕量,也還是有配置成本,如果每次新的任務進來,都需要重新建立並配置 Goroutine,一方面不容易管理 Goroutine 的記憶體,一方面也會消耗 CPU 的運算效能。這時 Worker Pool 就登場了,我們可以在執行前,先將 Goroutine 配置好放到資源池 …Golang21 min readGolang21 min read
Published inStarbugs Weekly 星巴哥技術專欄·Dec 26, 2022Goroutine 的併發治理:值是怎麼傳遞?當併發時,每個 Goroutine 可以看成是一個個單獨的個體,他們維護著自己的 Call Stack,彼此互不干涉。如果希望這些默默運行的 Goroutine 攜手完成任務,就要在他們之間建立一種通訊方式。在 Go 中,資訊應該如何被傳遞?其中的權衡又有哪些?這篇文章會介紹 Goroutine 常用的三種值的傳遞方式,以及相關衍生議題。 使用閉包取得值 第一種 …Golang11 min readGolang11 min read
Published inStarbugs Weekly 星巴哥技術專欄·Dec 7, 2022Goroutine 的併發治理:由錯誤處理談起當需要同時執行多個任務時,Go 開發者會多開 Goroutine 來分擔任務,這稱為併發。併發聽起來似乎很理想,能其他任務等待時,照樣執行需要運算的任務,有效利用 CPU 資源,但如果要用在生產環境,它也需要完善的管理機制。想想看,Goroutine 在哪個情況下會被啟動?哪個情況下會結束?如果任務需要回傳結果,它應該要怎麼回傳?而如果執行中發生 …Golang10 min readGolang10 min read
Published inStarbugs Weekly 星巴哥技術專欄·Nov 20, 2022設計模式作為一種語言:物件導向的語法要素「設計模式」這個詞出自 Christopher Alexander 的《建築模式語言》,這本書出版於 1977 年,主題圍繞著建築,城市設計和社區宜居性。作者 Alexander 是一名建築師,他在意的是,能不能找到一種切實可行的模式語言,讓讀者用以設計辦公室、車庫或公共建築。 儘管這樣的期待難免於可操作性,但在另一方面,Alexander 同時 …Design Patterns16 min readDesign Patterns16 min read
Nov 14, 2022OAuth 2.0:用 Go 跟 Google 要資料在上一篇的結論中,我們講到開發者通常最想知道,開發 OAuth 2.0 客戶端需要什麼知識。後端工程師要實現 OAuth 2.0,最常見的情境是開發一個客戶端應用,用來存取資源擁有者的受保護資源。因此在這篇中,我們將用 Go 來牛刀小試一番,開發一個網路應用,它會取得使用者同意後,跟 Google 拿取使用者姓名並顯示出來。 註冊客戶端 不是隨便哪個應用都能 …Golang14 min readGolang14 min read
Nov 9, 2022OAuth 2.0:授權許可在前一篇中,我們討論了 OAuth 2.0 的角色與信道,知道 OAuth 2.0 將授權模型劃分為四個角色,讓它們經由前/後端信道交流,完成整個授權許可流程。在這篇中,我們要進一步來討論,具體的授權許可是什麼?我們將改由時序的角度出發,探討模型中的物件如何交換訊息。如果覺得這段話太抽象,可以理解成,上一篇介紹了遊戲中的角色與道具,而在這篇,我們 …Oauth217 min readOauth217 min read
Nov 2, 2022OAuth 2.0:角色與信道使用者體驗是 B2C 重要的產品面向。通常一個網路服務,會要求使用者註冊帳戶後才能開始使用——以台灣金融保險法規為例,使用者需要建立帳戶後,才能得到報價。站在行銷觀點,註冊會降低用戶的轉換率,因為它需要填寫姓名、暱稱、生日、信箱等資料,步驟相當繁瑣,對行動場景,這百分百是個負面體驗。這讓人不禁想問,這個環節是可以優化的嗎? 事實上,我們可以合理假設使 …Oauth211 min readOauth211 min read