開源許可權引擎祭奠高考:祭奠我們的高考。

luda發表於2015-06-08
需要找好方法改造主體的內世界
梁山許可權引擎發現現實世界中的訪問控制是在無形中進行的,比如一棟大樓,大樓裡有各種各樣的資源,提供各種各樣的服務。比如老婆在大樓內的店鋪中買衣服,同一件衣服只可能同時被一個人買走,同一件衣服只可能同時被同一個人在試穿,如果老婆發現有別人正在試穿那件衣服的話她自己會等一等(排隊)或者改試別件的。

資源(衣服)是不能主動移動的,只能被動移動,只有主體可以移動它,資源唯有被主體攜帶才能在系統中改變位置。系統中的運動一共只有一種,就是主體的運動。主體讀資源:這種運動的意思是資源保持在系統中的位置不動,主體向著資源運動,主體來到資源所在的位置看一下資源上的資訊。主體帶離資源:主體把資源帶走,資源被主體從資源在系統中的原來那個位置摘下帶走。主體將資源帶離原來的位置,然後主體攜帶著那個資源在系統中運動,然後把它放在新的位置。
只要保證了下面這個簡單的規則:同一個主體不能同時出現在系統中的不同位置,同一個資源不能同時被不同的主體帶走。(前面那個從兩個角度表述出來的規則可能是同一個意思所以是一條規則而不是兩條)只要保證了這條規則,系統中的安全、併發都會迎刃而解。這可能是那個隱藏在rust下的沒有被以這種方式顯式識別表述出來的模式。

系統中的主體的運動最終都是被cpu驅動的,宏觀上系統中的很多主體是在同時運動的,但是微觀上它們是嚴格的一個一個的先後運動的,如果系統中有不允許多個主體同時進入的區域(場所、資源、空間)的話那麼系統基於cpu的時序是很容易排出個佇列的。

以時(運動)空(資源)的方式表述減庫存
比如電商系統中的減庫存這件事情,使用上面的主體、資源、空間、運動邏輯理解的話就非常形象了,主體來到某個商品所在的位置(資料庫中儲存商品時可以是隻儲存一條Product記錄併為Product記錄打上一個Inventory附加屬性,但是這只是儲存層節省空間的區域性邏輯不影響和違反整個系統整體的邏輯,邏輯上看待Inventory=10的一條Product記錄的時候是看作10個產品資源的),主體將10個商品中的2個帶走,Inventory變成了8,主體攜帶著這兩個商品在系統中行走然後來到主體私人的倉庫中把這兩個商品放下。

事務
事務有兩種保證方式,一種是凍結區域性的時間(時間=運動),一種是記錄下客體在系統中的運動軌跡,記錄下它在系統中的每一次位置的變動(這種變動是離散的,不是現實世界中的連續的,所以這種記錄是有限的)而不凍結時間。兩種方式其實應該也是完全一致的同一種方式,只不過第一種方式是交給資料庫程式去做第二件事情,交給資料庫程式去做的話壞處是無法避免資料庫程式臨時凍結我們的系統中的大尺寸的區域性的(資料庫看作在我們的系統內,是我們的系統程式的一個子程式節點,資料庫凍結了自己區域性的時間)空間的變化(也即時間)。使用第二種方式可以避免凍結大尺寸的區域性的空間(即時間 即運動 即變化)但是卻需要我們的系統去承擔很多事情,需要記錄下資源在系統空間中的每一次位置改變,需要能夠回退。最終就是需要把資料庫乾的那樣的事情自己幹一遍。

總結
看來所有問題的關鍵是準確的分清楚空間和時間,關鍵是把每一個物理開關看作一個空間單元,把物理開關的開合變化看作時間,然後據此一一對映到現實世界的空間和時間中去。然後再從現實世界對映到主體的內在世界中來(當然如果能消除現實世界這個中轉環節更好),反正主體本身也是被同一個物理世界構造出來的,這種對映肯定是非常順暢、自然、節能的。

又到高考時間了
發揮右腦的能力讓右腦的空間能力參與進來協助左腦去看待和處理問題可能正是那個原因,是那個前桌的同學為什麼比我們快的原因。前桌的同學看圖說話看圖做題,而我眼前一抹黑完全靠累死抽象和邏輯的左腦去處理問題,這實在是很令人生氣,生氣自己讀書時沒發現世界原來是可以被這樣指數級提高速度去高效的處理的。
——哈,祭奠我們的高考。

相關文章