热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

面向数据的架构DOAeyassh

这是软件架构中一个鲜为人知的模式,值得更多关注。一个 Joshi在RTI的2007年白皮书中首次描述了面向数据的架构,2017年维也纳大学的ChristianVorhemus和Er



这是软件架构中一个鲜为人知的模式,值得更多关注。一个 Joshi 在RTI 的 2007 年白皮书中首次描述了面向数据的架构,2017 年维也纳大学的 Christian Vorhemus 和 Erich Schikuta 在这篇 iiWAS 论文中再次描述了面向数据的架构。DOA 一方面是单体二进制文件和数据存储(单体架构)之间的传统二分法的反转,另一方面是小型、分布式、独立的二进制文件,每个二进制文件都有自己的数据存储(微服务和面向服务的架构)。
在面向数据的架构中,单体数据存储是系统中状态的唯一来源,由松散耦合的无状态微服务执行。
 
在单体服务中,大部分服务器端代码位于一个程序中,该程序与一个或多个数据库通信,处理功能计算的多个方面。
在单体服务器中,代码仍然可以组件化并分离到单独的模块中,但程序的不同组件之间没有强制的API 边界。程序中唯一严格定义的 API 通常是

  • (a)在 UI 和服务器之间(在他们决定的任何 REST/HTTP 协议中)
  • (b)在服务器和数据存储之间(在他们决定的任何查询语言中) ) 或在服务器及其外部依赖项之间。

另一方面,面向服务的体系结构(SOA) 将单体程序分解为每个独立的组件化功能的服务。
由于 SOA 中的每个服务都定义了自己的 API,因此每个服务都可以独立访问并与之交互。开发人员调试或模拟单个部分可以单独调用单个组件,新流程可以重新组合这些单个服务以启用新行为。
微服务是一种面向服务的架构。根据您的要求,它们可能与 SOA 不同,因为这些服务旨在特别小和轻量级,或者它们只是 SOA 的同义词。
随着微服务生态系统的发展,它开始大规模地受到以下问题的影响:
  1. 随着组件数量的增加,集成复杂度的N²增长,
  2. 网络的形状变得难以先验推理;即创建或维护测试环境或沙箱将需要大量推理以确保图中没有任何组件具有外部依赖关系

 

面向数据的架构
在面向数据的架构(DOA) 中,系统仍然围绕小型、松散耦合的组件进行组织,就像在 SOA 微服务中一样。但 DOA 在两个关键方面与微服务不同:

  1. 组件始终是无状态的 :DOA 要求根据集中管理的全局模式来描述数据或状态层,而不是对每个相关组件进行组件化和联合数据存储。
  2. 组件之间的交互被最小化,而是通过数据层进行交互。在我们的交易系统案例中,接收不同证券价格的组件只是在我们的数据存储中以规范的形式发布价格。系统可以通过向数据层查询价格来使用这些价格,而不是通过特定 API 从特定服务(或一组服务)请求价格。在这里,集成成本是线性化的。DOA 模式更改意味着可能需要更新多达N个组件,而不是它们之间的多达N²个连接。

当单个高级数据类型由不同的提供者填充时,这才是真正的亮点。

如果我们用一张表替换一项服务,那么我们并没有简化很多事情。好处是如果有多个相同通用数据类型的源。如果一个交易系统连接到多个市场,每个市场都将客户的请求发布到一个表中,那么下游系统可以查询这个表,而不必担心客户请求来自哪里。
 
既然DOA中组件与组件的交互被最小化了,那么如何用通过数据层的交互来代替今天 SOA 中的组件间通信呢?


  • 1. 数据生产和消费

将组件组织成数据的生产者和消费者是设计 DOA 系统的主要方式。
在 SOA 交易系统中,从市场接受订单的组件可能会生成 RPC 来确定如何对订单进行定价、报价或交易。在 DOA 中,微服务消费接受来自市场的请求(通常以 SOA 方式)并生成RFQ,而微服务生产者则生成定价数据等;另一个微服务会查询 RFQ,连同其所有定价和输出报价、订单或任何自定义需要实现最后的响应数据。

  • 2. 触发动作和行为

组件之间通信的最简单方法虽然是RPC。设计良好的 DOA 系统应该看到其大部分组件间通信被生产者/消费者范式所取代,但您可能仍需要组件 X 直接告诉 Y 执行 Z 的方法。
将 RPC 重构为事件及其影响。即,询问是否不是组件 X 向发生事件E的组件 Y 发送 RPC,而是 X 是否可以生成事件E并让组件 Y 通过使用这些事件来驱动响应?这种方法,我称之为基于数据的事件。
基于数据的事件:是我们通常如何进行组件通信的强大反转。它如此强大的原因是因为它允许我们将松散耦合这个术语提升到一个新的水平。系统不需要知道谁在消费他们的事件,并且生产者不需要担心事件来自哪里,只需担心业务 -这些事件的逻辑语义含义。
 
这种架构不是灵丹妙药。在面向数据的架构消除了各类问题的地方,新的问题出现了:它要求设计人员认真考虑数据所有权。多个写入者修改同一记录的情况可能很脆弱,通常会鼓励系统仔细划分记录写入所有权。而且由于组件间 API 是在数据中编码的,因此必须经过深思熟虑,才能使用一种共享的全局模式。


推荐阅读
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 提供:ZStack云计算原创2016-12-26张鑫讲师介绍张鑫ZStack总架构师、联合创始人《系统虚拟化》主要作者,曾任职Intel开源软件技术中心 ... [详细]
  • 说出来你可能不信,我用三天做了一个完整的项目
    Java在人工智能中能起到什么作用?作为编程语言中的扛把子,Java20多年稳定不倒,就在于它的稳定性,维护成本极低。这使得 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
author-avatar
手机用户2502938985
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有