服务与数据之争

SOA是面向服务的架构,大数据是处理大规模数据,这两个门派其实还是有很大区别的。

服务是一种对象化概念,一个服务包含很多函数方法,基于服务的治理从服务注册发现 集成 路由和流程; 数据处理从函数式编程到数据流。

问题来了,服务跟着数据跑,还是数据跟着服务跑? 如果能够发现业务边界与上下文,把数据与服务就能自然聚合在一起,DDD是有关数据聚合发现的方法,找到聚合单元,服务跟着跑。然后基于这些服务设计流程,通过流程整合实现数据整合,问题是为什么会有这些流程? 为什么政府大企业流程多?部门多,人多,所以,是人的过多介入导致了偏重服务的设计,然后再通过流程整合在一起,这是一种初级信息化。

如果业务无边界,或者说我们不根据现实去设计我们的系统,而是真正研究数据自己跑的规律,这时候我们就先有数据了,这些数据虽然是人产生出来的,但是我们不从人那里下手,而是直接面对数据,数据一直在产生,如同水流,就是数据流,通过数据流处理,实时分析结果,那么计算功能可以用服务实现,直接用细粒度的函数实现更好,如果云计算提供基于函数的调用,函数代表一个服务。

至此,服务与函数以及数据流在云原生架构下得到统一,你可以把数据抓到服务里面计算,也可以把计算规则分配到数据所在地去计算,这两种方式根据不同场景选择,虽然只有两个选项,但是经常在疯狂编码中忘记方向,只顾埋头插秧,忘记直腰看方向,结果插歪了。

两个方向不同还决定事务架构不同,服务第一公民的方向就要事务引入到服务中,什么JTA XA,补偿式事务 柔性事务,分布式情况下CAP定理又来束缚你,但是如果以数据流为主的架构,数据流过来是一个个进行处理,没有多个服务争改一个状态数据情况出现,数据流处理具有天然事务性,数据库里面的事件日志就是把SQL操作看成事件流进行实时流处理,数据表只不过是数据流的缓存,一个视图而已,一个静态切片,时光生涯中一刹那,是照片和电影图像流的区别,说白了,维度空间不同。

区块链其实是一种数据流,链和流的概念差不多,区块链本质是事件链,是事件流,这也是那么多人吹捧区块链,都是从流式这个维度去吹捧,但是区块链只是流式维度中一种,肯定有其他种,流式维度是一种时间维度,人们适应空间维度,不适合时间维度,空间维度可以划领地边界,狗狗出门撒尿是一种本能的领地意识,可见动物的空间感是最直接的,如何跳跃到时间维度去思考,恐怕就难了。