模式的优点
总⽽⾔之,模式进化允许与JSON数据库提供的⽆模式/模式读取相同的灵活性,同时还可以更好地保证数据和更好的⼯具。
数据流的类型
- 通过数据库
- 通过服务调用
- 通过异步消息传递
数据库中的数据流
在不同的时间写入不同的值
架构演变允许整个数据库看起来好像是⽤单个模式编码的,即使底层存储可能包含⽤模式的各种历史版本编码的记录。
归档存储
也许您不时为数据库创建⼀个快照,例如备份或加载到数据仓库(参阅“数据仓库”)。在这种情况下,即使源数据库中的原始编码包含来⾃不同时代的模式版本的混合,数据转储通常也将使⽤最新模式进⾏编码。既然你正在复制数据,那么你可能会⼀直对数据的副本进⾏编码。
服务中的数据流:REST与RPC
Web 服务
Version:0.9 StartHTML:0000000105 EndHTML:0000003680 StartFragment:0000000141 EndFragment:0000003640
- 运⾏在⽤户设备上的客户端应⽤程序(例如,移动设备上的本地应⽤程序,或使⽤Ajax的 JavaScript web应⽤程序)通过HTTP向服务发出请求。这些请求通常通过公共互联⽹进⾏。
2.⼀种服务向同⼀组织拥有的另⼀项服务提出请求,这些服务通常位于同⼀数据中⼼内,作为⾯向服务/微型架构的⼀部分。 (⽀持这种⽤例的软件有时被称为中间件(middleware)。)
3.⼀种服务通过互联⽹向不同组织所拥有的服务提出请求。这⽤于不同组织后端系统之间的数据交换。此类别包括由在线服务(如信⽤卡处理系统)提供的公共API,或⽤于共享访问⽤户数据的OAuth。
远程过程调⽤(RPC)的问题
Web服务仅仅是通过⽹络进⾏API请求的⼀系列技术的最新版本,其中许多技术受到了⼤量的炒作,但是存在严重的问题。 Enterprise JavaBeans(EJB)和Java的远程⽅法调⽤(RMI)仅限于Java。分布式组件对象模型(DCOM)仅限于Microsoft平台。公共对象请求代理体系结构(CORBA)过于复杂,不提供前向或后向兼容性
RPC的当前⽅向
这种新⼀代的RPC框架更加明确的是,远程请求与本地函数调⽤不同。例如,Finagle和Rest.li 使⽤futures(promises)来封装可能失败的异步操作。 Futures 还可以简化需要并⾏发出多项服务的情况,并将其结果合并【45】。 gRPC⽀持流,其中⼀个调⽤不仅包括⼀个请求和⼀个响应,还包括⼀系列的请求和响应
数据编码与 RPC 的演化
消息传递中的数据流
在最后⼀节中,我们将简要介绍⼀下RPC和数据库之间的异步消息传递系统。它们与RPC类似,因为客户端的请求(通常称为消息)以低延迟传送到另⼀个进程。它们与数据库类似,不是通过直接的⽹络连接发送消息,⽽是通过称为消息代理(也称为消息队列或⾯向消息的中间件)的中介来临时存储消息。
消息掮客
详细的交付语义因实现和配置⽽异,但通常情况下,消息代理的使⽤⽅式如下:⼀个进程将消息发送到指定的队列或主题,代理确保将消息传递给⼀个或多个消费者或订阅者到那个队列或主题。在同⼀主题上可以有许多⽣产者和许多消费者