【資訊軟體知識】「鎖」的兩極化,樂觀與悲觀

更新於 發佈於 閱讀時間約 5 分鐘
raw-image

這次會分享關於「鎖」的主題除了工作上遇到這樣的情境之外,也發現到其實軟體技術大部分跟我們生活情境息息相關,覺得非常有趣,因此嘗試將艱澀難懂的技術化為淺顯易懂的圖文知識來幫助大家快速理解,除了應用在工作上,或許對於生活過程中遇到的一些問題也能得到一些啟發。

此篇章主要著重於觀念的分享,並不會深入探討實作的細節,相信只要觀念通了,對於技術實作的道路上一定會非常順暢,好吧!廢話不多說,趕快來介紹一下樂觀鎖與悲觀鎖的基本觀念。

情境

軟體開發的過程中想必我們開會過程中常常會聽到以下的關鍵字句:

- 併發問題就應該用樂觀鎖啊!
- 最安全的併發正確性應該用悲觀鎖吧!
- Scale Out的服務怎麼保證正確呢?
- 啊!雙十節要到了,如何確保客戶的訂單與商品數量是正確的又能兼顧效能?

以上的問題都圍繞在效能、正確性, 而其中最關鍵的就是「鎖」, 雖然「鎖」難免會造成效能的下降, 但這點不足之處對於現階段的群集架構之下, 已經能夠透過橫向擴展的方式進行補足, 因此「鎖」的技術值得我們好好認識一番!

悲觀鎖(Pessimistic Lock) 😭

raw-image

就如同字面上的意思, 對任何的事物都很悲觀, 而這種情緒之下的處理方式就是盡量鎖住整個資源, 保證整體一致性之後再釋放, 雖然安全但效能下降程度非常的高。

以生活化的例子來說, 當我們要去餐廳慶祝一下的時候, 通常就兩種作法, 不是預訂就是現場候位, 那麼較悲觀的人可能會事先安排, 因此會進行訂位的動作, 那麼一旦訂位之後, 該位置到某個時段就等於是被「鎖」上, 直到我們用完餐之後才釋放, 這樣的情境下確保我們能正確的慶祝用餐, 但對於資源使用上來說就相對耗費了, 尤其當我們發生非預期狀況之下無法到場時, 原本餐廳能夠服務到更多客人, 卻因為我們的「鎖」而導致服務客人的量減少了, 餐廳也少賺了一些客人的消費金額。

優點

- 保證「鎖」上的資源能夠完整處理操作後再釋放。

缺點

- 「鎖」的粒度太大導致資源的浪費。

樂觀鎖(Optimistic Lock) 😀

raw-image

先做就對了, 有衝突再解決…。

一樣以餐廳為例, 這次就變成現場候位的狀況, 不採取預訂方式, 有位置再吃, 大不了下個時段再來, 這樣對於餐廳端來說, 資源閒置的狀況減少了, 每一桌吃完就服務下一桌, 以軟體技術語言的角度來說就是,先提交若「⚔️衝突」則下次提交。

上面有三個關鍵字分別是「先提交」、「衝突」、「下次提交」, 很暴力簡單的作法卻很有效, 最關鍵的就是「⚔️衝突」的偵測, 如何識別「⚔️衝突」就是相當重要的一環了。

其實偵測「⚔️衝突」的原理非常簡單, 通常最簡易的作法就是壓上一個版本號, 假若針對目標進行異動時, 發現版本號已經被異動了, 就視為「⚔️衝突」, 再更新資料到記憶體並重新進行一次操作即可。

優點

- 資源相對悲觀鎖能夠較有效的被善用。

缺點

- 併發量越高, 可能發生衝突的機率越高。
- 通常是人為實現的, 因此使用時要非常小心控制的欄位。

結語

「🔑 鎖」的概念非常的有趣, 結合到現實面也能夠藉此改善流程及效率, 大幅減少資源的浪費, 降低成本, 在雲端時代中, 軟體也漸趨複雜, 隨著無國界的發展, 一套優質的軟體勢必會服務來自世界各地的使用者, 然而當使用量倍增時, 也勢必面臨到橫向擴展與平行處理的技術, 但在這之間如何維持正確性與兼顧效能, 就取決於我們怎麼使用這把「🔑 鎖」囉。

除非有非常強烈的一致性需求才使用悲觀鎖, 否則一般的情境下樂觀鎖基本上都能夠通用。

每一項技術的背後都有其優缺點, 並非單一項就能通吃, 因此若我們能夠多認識一些技術背後的原理與優缺點, 相信遇到狀況時就能夠隨時因應變化, 端出最適用的技術應對, 如此一來才能夠打造出穩定可靠的系統軟體。

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
138會員
301內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2024/09/25
使用docker compose來編排容器化程式非常的方便, 但隨著應用越來越複雜, 我們每個Service會有許多共同掛載的目錄、環境變數, 那這些在傳統的程式語言都能藉由繼承、覆寫的技巧來簡化程式碼, 但在YAML呢? 有沒有這樣的功能呢? 答案是有的, 也就是 anchors & ali
Thumbnail
2024/09/25
使用docker compose來編排容器化程式非常的方便, 但隨著應用越來越複雜, 我們每個Service會有許多共同掛載的目錄、環境變數, 那這些在傳統的程式語言都能藉由繼承、覆寫的技巧來簡化程式碼, 但在YAML呢? 有沒有這樣的功能呢? 答案是有的, 也就是 anchors & ali
Thumbnail
2023/09/07
上一篇我們為您帶來了「【資料交換格式 - YAML】YAML真的有比較好嗎? 與JSON相比又如何?應用場景…」,相信對於YAML與JSON這兩種資料交換格式已經相對的熟悉了吧,那這次我們介紹一個更新的資料交換格式TOML,從上一篇我們可以知道YAML相較於JSON之下帶來了許多的好處,也越來越多的
Thumbnail
2023/09/07
上一篇我們為您帶來了「【資料交換格式 - YAML】YAML真的有比較好嗎? 與JSON相比又如何?應用場景…」,相信對於YAML與JSON這兩種資料交換格式已經相對的熟悉了吧,那這次我們介紹一個更新的資料交換格式TOML,從上一篇我們可以知道YAML相較於JSON之下帶來了許多的好處,也越來越多的
Thumbnail
2023/08/27
我們在「」有稍微介紹了JSON格式, 也知曉JSON格式非常簡單暴力, 只要一對<key>與<value>就能成行, 對於工程人員來說已經比XML、文字檔…等傳統格式更加容易理解, 而且也具備一定的資料型態基礎, 但使用這麼久以來常常發現到想要對某個欄位註解時好像不太容易, 頂多就是多一個欄位叫做「
Thumbnail
2023/08/27
我們在「」有稍微介紹了JSON格式, 也知曉JSON格式非常簡單暴力, 只要一對<key>與<value>就能成行, 對於工程人員來說已經比XML、文字檔…等傳統格式更加容易理解, 而且也具備一定的資料型態基礎, 但使用這麼久以來常常發現到想要對某個欄位註解時好像不太容易, 頂多就是多一個欄位叫做「
Thumbnail
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
這次會分享關於「鎖」的主題除了工作上遇到這樣的情境之外,也發現到其實軟體技術大部分跟我們生活情境息息相關,覺得非常有趣,因此嘗試將艱澀難懂的技術化為淺顯易懂的圖文知識來幫助大家快速理解,除了應用在工作上,或許對於生活過程中遇到的一些問題也能得到一些啟發。 此篇章主要著重於觀念的分享,並不會深入探討實
Thumbnail
這次會分享關於「鎖」的主題除了工作上遇到這樣的情境之外,也發現到其實軟體技術大部分跟我們生活情境息息相關,覺得非常有趣,因此嘗試將艱澀難懂的技術化為淺顯易懂的圖文知識來幫助大家快速理解,除了應用在工作上,或許對於生活過程中遇到的一些問題也能得到一些啟發。 此篇章主要著重於觀念的分享,並不會深入探討實
Thumbnail
你好,歡迎閱讀《紫式書摘》。 我是王啟樺,目前在加州大學洛杉磯分校(UCLA)擔任統計機器學習方向的博士後研究員。 這篇文章是《紫式書摘》的第001篇文章,紀錄了我閱讀《李松蔚·心理學通識(年度日更)》中〈080|慢系統:哪些自動化的反應不靠譜?〉後,產生對「成功的關鍵因素:理性思考、持續學習與尋找
Thumbnail
你好,歡迎閱讀《紫式書摘》。 我是王啟樺,目前在加州大學洛杉磯分校(UCLA)擔任統計機器學習方向的博士後研究員。 這篇文章是《紫式書摘》的第001篇文章,紀錄了我閱讀《李松蔚·心理學通識(年度日更)》中〈080|慢系統:哪些自動化的反應不靠譜?〉後,產生對「成功的關鍵因素:理性思考、持續學習與尋找
Thumbnail
你內心的小劇場是怎麼來的?有6個演員聯手演出,你都認識嗎?
Thumbnail
你內心的小劇場是怎麼來的?有6個演員聯手演出,你都認識嗎?
Thumbnail
給人更多關心,關注他人的情緒和心理變化,才能夠懂得人心,贏得更多情誼、信任、認同和尊重,最終才能成就自我。
Thumbnail
給人更多關心,關注他人的情緒和心理變化,才能夠懂得人心,贏得更多情誼、信任、認同和尊重,最終才能成就自我。
Thumbnail
人與人之間,舒適的距離到底該怎麼界定或者維持? 交會之後,錯身朝迥異的方向前進頭也不回?或者並行一段時間、爾後各赴前程就好? 最穩定的,是平行線嗎? 但,有沒有可能,在看不見的方向、角度、維度,根本早就漸行漸遠,甚至,從來沒有靠近過?所有交會與平行,都只是單一介面的表象,或者想像? 俗稱的,冷了。
Thumbnail
人與人之間,舒適的距離到底該怎麼界定或者維持? 交會之後,錯身朝迥異的方向前進頭也不回?或者並行一段時間、爾後各赴前程就好? 最穩定的,是平行線嗎? 但,有沒有可能,在看不見的方向、角度、維度,根本早就漸行漸遠,甚至,從來沒有靠近過?所有交會與平行,都只是單一介面的表象,或者想像? 俗稱的,冷了。
Thumbnail
近幾年看到蠻多光怪陸離的開發鬼故事,也見識過各種奇醜無比的失事原因
Thumbnail
近幾年看到蠻多光怪陸離的開發鬼故事,也見識過各種奇醜無比的失事原因
Thumbnail
規則就是:考試的時候不要談戀愛、每堂課都要出席、我們要做個正向的人,諸如此類換個環境,就會變體的東西。
Thumbnail
規則就是:考試的時候不要談戀愛、每堂課都要出席、我們要做個正向的人,諸如此類換個環境,就會變體的東西。
Thumbnail
來一個振奮人心的,就是今天終於回復二級啦!​ ​ 我腦中迅速跳出所有想吃的餐廳,在我腦海中排排隊站好。​ ​也該安排實體課程場次,讓我見見那些疫情前就報名的許多學員。​ ​不過,可以預想得到的是,今天解封一定會有「報復性」行為出現。​
Thumbnail
來一個振奮人心的,就是今天終於回復二級啦!​ ​ 我腦中迅速跳出所有想吃的餐廳,在我腦海中排排隊站好。​ ​也該安排實體課程場次,讓我見見那些疫情前就報名的許多學員。​ ​不過,可以預想得到的是,今天解封一定會有「報復性」行為出現。​
Thumbnail
許多人認為情緒是不理智的,做決策就是要拿掉情緒、理性的考量,但情緒和理性邏輯的關係是密不可分地,情緒的存在是幫助我們做出更有效率的決定。任何的情緒存在,都是有其目的與功能的!《情緒賽局》這本書在講的是決策背後的情緒機制,想要不被情緒左右,就是去了解它。情緒其實是在釋放訊號,讓我們可以更有效地協調彼此
Thumbnail
許多人認為情緒是不理智的,做決策就是要拿掉情緒、理性的考量,但情緒和理性邏輯的關係是密不可分地,情緒的存在是幫助我們做出更有效率的決定。任何的情緒存在,都是有其目的與功能的!《情緒賽局》這本書在講的是決策背後的情緒機制,想要不被情緒左右,就是去了解它。情緒其實是在釋放訊號,讓我們可以更有效地協調彼此
Thumbnail
圖摘自:https://unsplash.com/photos/FyD3OWBuXnY(有裁減加工) 說真的"同理心"這件事的重要性是我最近才意識到的,雖然自己從事服務業,但我必須很慚愧地說,絕大部分時間我沒有真的很重視「同理心」這件事,只是純粹的想要把手上的工作盡速完成而已。 直到最近到證券
Thumbnail
圖摘自:https://unsplash.com/photos/FyD3OWBuXnY(有裁減加工) 說真的"同理心"這件事的重要性是我最近才意識到的,雖然自己從事服務業,但我必須很慚愧地說,絕大部分時間我沒有真的很重視「同理心」這件事,只是純粹的想要把手上的工作盡速完成而已。 直到最近到證券
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News