开源权限引擎祭奠高考:祭奠我们的高考。

luda 15-06-08
              

需要找好方法改造主体的内世界
梁山权限引擎发现现实世界中的访问控制是在无形中进行的,比如一栋大楼,大楼里有各种各样的资源,提供各种各样的服务。比如老婆在大楼内的店铺中买衣服,同一件衣服只可能同时被一个人买走,同一件衣服只可能同时被同一个人在试穿,如果老婆发现有别人正在试穿那件衣服的话她自己会等一等(排队)或者改试别件的。

资源(衣服)是不能主动移动的,只能被动移动,只有主体可以移动它,资源唯有被主体携带才能在系统中改变位置。系统中的运动一共只有一种,就是主体的运动。主体读资源:这种运动的意思是资源保持在系统中的位置不动,主体向着资源运动,主体来到资源所在的位置看一下资源上的信息。主体带离资源:主体把资源带走,资源被主体从资源在系统中的原来那个位置摘下带走。主体将资源带离原来的位置,然后主体携带着那个资源在系统中运动,然后把它放在新的位置。
只要保证了下面这个简单的规则:同一个主体不能同时出现在系统中的不同位置,同一个资源不能同时被不同的主体带走。(前面那个从两个角度表述出来的规则可能是同一个意思所以是一条规则而不是两条)只要保证了这条规则,系统中的安全、并发都会迎刃而解。这可能是那个隐藏在rust下的没有被以这种方式显式识别表述出来的模式。

系统中的主体的运动最终都是被cpu驱动的,宏观上系统中的很多主体是在同时运动的,但是微观上它们是严格的一个一个的先后运动的,如果系统中有不允许多个主体同时进入的区域(场所、资源、空间)的话那么系统基于cpu的时序是很容易排出个队列的。

以时(运动)空(资源)的方式表述减库存
比如电商系统中的减库存这件事情,使用上面的主体、资源、空间、运动逻辑理解的话就非常形象了,主体来到某个商品所在的位置(数据库中存储商品时可以是只存储一条Product记录并为Product记录打上一个Inventory附加属性,但是这只是存储层节省空间的局部逻辑不影响和违反整个系统整体的逻辑,逻辑上看待Inventory=10的一条Product记录的时候是看作10个产品资源的),主体将10个商品中的2个带走,Inventory变成了8,主体携带着这两个商品在系统中行走然后来到主体私人的仓库中把这两个商品放下。

事务
事务有两种保证方式,一种是冻结局部的时间(时间=运动),一种是记录下客体在系统中的运动轨迹,记录下它在系统中的每一次位置的变动(这种变动是离散的,不是现实世界中的连续的,所以这种记录是有限的)而不冻结时间。两种方式其实应该也是完全一致的同一种方式,只不过第一种方式是交给数据库进程去做第二件事情,交给数据库进程去做的话坏处是无法避免数据库进程临时冻结我们的系统中的大尺寸的局部的(数据库看作在我们的系统内,是我们的系统进程的一个子进程节点,数据库冻结了自己局部的时间)空间的变化(也即时间)。使用第二种方式可以避免冻结大尺寸的局部的空间(即时间 即运动 即变化)但是却需要我们的系统去承担很多事情,需要记录下资源在系统空间中的每一次位置改变,需要能够回退。最终就是需要把数据库干的那样的事情自己干一遍。

总结
看来所有问题的关键是准确的分清楚空间和时间,关键是把每一个物理开关看作一个空间单元,把物理开关的开合变化看作时间,然后据此一一映射到现实世界的空间和时间中去。然后再从现实世界映射到主体的内在世界中来(当然如果能消除现实世界这个中转环节更好),反正主体本身也是被同一个物理世界构造出来的,这种映射肯定是非常顺畅、自然、节能的。

又到高考时间了
发挥右脑的能力让右脑的空间能力参与进来协助左脑去看待和处理问题可能正是那个原因,是那个前桌的同学为什么比我们快的原因。前桌的同学看图说话看图做题,而我眼前一抹黑完全靠累死抽象和逻辑的左脑去处理问题,这实在是很令人生气,生气自己读书时没发现世界原来是可以被这样指数级提高速度去高效的处理的。
——哈,祭奠我们的高考。