数据作为微服务:分布式数据集中集成

点击左上角蓝字,关注“锅外的大佬”640?wx_fmt=gif

专注分享国外最新技术内容

1.引言

Microservices(微服务)是新软件项目中所青睐的架构设计。随着从单一系统到分布式系统的演化不仅发生在应用程序空间中,而且发生在数据存储中,管理数据成为最困难的挑战之一,然而,要从这种类型的方法中获得最大的收益,需要克服前面的几个需求。本文研究了将数据作为服务实现的一些考虑事项。

在遵循微服务设计指南时,我们找到一些对数据处理的参考。其中一些常见的方向包括:

  • 每个服务的使用各自的私有数据库实现松散耦合。

  • 拥抱最终一致性。

  • 为最终一致性事务实现saga pattern

  • 使用Command Query Responsibility Segregation(CQRS)和API组合。

考虑到这一点,当将松耦合作为体系架构中的一个基本部分时,共享数据库现在就变成了一个反模式,使得事务和查询变得更加困难。每个服务使用数据存储都需要封装数据,而与体系架构的其他域的交互应该只发生在API级别,这鼓励我们隐藏数据实现细节。因此,使用诸如Spring Boot这样的轻量级框架只是微服务之旅的第一步。

2.查询的挑战

因为每个服务都有数据存储,所以我们需要使其可供其他服务使用,从而成为该域的入口点。由于所有数据调用都发生在服务级别,并且根据它们的域,当需要组合数据视图时,传统的table join(表连接)不再是我们在共享数据库实现中使用的方案。此外,我们无法编写查询私有数据存储并聚合数据的服务,因为它违反了封装设计。

640?wx_fmt=png

为了解决前面的挑战,我们需要回到微服务体系架构中,使用成熟的企业集成模式(Enterprise Integration Patterns, EIP),比如 content enrichment(内容浓缩)aggregator( 聚合器)。大多数时候,这些模式被重新命名为API组合模式,通常在API网关之类的组件中实现。

通常,API组合模式涉及到添加另一个服务,该服务使用所需的信息调用底层数据服务来组合所需的数据视图。如下图所示,它将首先查询客户服务的基本信息,然后使用该信息从支付服务检索该客户的历史记录。

640?wx_fmt=png

乍一看,这看起来像是一个简单的组合任务,然而,业务通常需要对数据的使用方式进行越来越多的控制,并向此类服务添加更多的逻辑。对要检索的数据量、消费终端用户的权限等的限制是常见的业务需求,这使得实现这类服务成为一项全职维护任务。

另一方面,Command Query Responsibility Segregation(CQRS)试图解决查询挑战,侧重于维护从多个源事件聚合的一个或多个物化的数据集。结果,系统的复杂性随着事件总线现在的要求而增加。我们将在以后的文章中讨论这种模式。

3.分布式数据集成

正如前面所讨论的,微服务的分布式特性使得服务与服务的通信和服务组合对于成功实现至关重要。尝试以一种主流的方式从头开始实现所有的服务,尽管这是可能的,但并不总是建议这样做,特别是在已存在专门的工具并帮助我们简化工作的情况下。

实际上,从头开始编码所有内容,通过服务使数据可用于外部消费的例子是可以避免的。我们可以公开不同商店中的数据,不仅是使用现有框架的关系数据库,这些框架可以帮助我们实现API组合模式,还可以使用简单的数据即微服务服务。

分布式数据集中集成通过一个统一的API提供对任何存储实现中的数据的集成访问。数据集成允许连接和统一数据,即使数据存储在SQLJDBC之外的不止一种数据源中。与数据库管理系统相反,它不应该存储任何数据,而应该作为一个single point(单点)接口来优化访问数据源。

640?wx_fmt=png

显然,这种框架应该与微服务的分布式特性相兼容。因此,引擎和实现应该是轻量级的,并且能够作为容器部署在云环境中。它应该具有在运行时独立执行组件的灵活性,比如Spring Boot或将其嵌入到应用程序中。

4.总结

综上所述,除了在微服务体系架构中构建服务之外,还需要使用通常已证实的实践,如 Enterprise Integration Patterns(企业集成模式)Data Integration techniques(数据集成技术)。在以轻量级和分布式方式提供安全访问层的同时,查询不同数据源并将其连接以显示有意义信息的能力,可以简化您的应用程序。而且,正如 Christian Posta在他的微服务最难的部分:数据中所说,数据、数据集成、数据边界、企业使用模式、分布式系统理论、时间等都是微服务的难点(因为微服务实际上就是分布式系统!) 

出处:spring for all 翻译组

640?wx_fmt=gif

Spring WebClient vs. RestTemplate

Spring Boot 面试的十个问题

Java并发之线程封闭

右上角按钮分享给更多人哦~smiley_63.pngsmiley_63.png

640?wx_fmt=png

来都来了,点个在看再走吧~~~

640?wx_fmt=gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据平台建设,可以采用以下一些常见的技术和架构: 1. 数据存储技术: - 关系型数据库(如MySQL、PostgreSQL):适用于结构化数据的存储和管理。 - NoSQL数据库(如MongoDB、Cassandra):适用于非结构化或半结构化数据的存储和管理。 - 数据湖(如AWS S3、Azure Data Lake Store):适用于大规模存储和处理各种类型的原始数据。 2. 数据处理与计算技术: - 分布式处理框架(如Apache Hadoop、Apache Spark):用于大规模数据处理、分析和挖掘。 - 流处理框架(如Apache Kafka、Apache Flink):用于实时数据处理和流式分析。 - 数据仓库(如Snowflake、Amazon Redshift):用于数据的集存储和查询。 3. 数据集成与ETL技术: - ETL工具(如Apache NiFi、Talend):用于数据的抽取、转换和加载,实现数据集成和清洗。 - 消息队列(如Apache Kafka、RabbitMQ):用于异步数据传输和解耦数据源与目标之间的关系。 4. 数据分析与可视化工具: - 数据分析编程语言(如Python、R):用于数据处理、建模和分析。 - 商业智能工具(如Tableau、Power BI):用于数据可视化和仪表盘展示。 - 数据挖掘工具(如RapidMiner、KNIME):用于探索和发现数据的模式和趋势。 5. 数据安全与隐私保护技术: - 数据加密:使用加密算法对敏感数据进行加密。 - 访问控制:通过身份认证和授权机制限制对数据的访问。 - 数据脱敏:对数据进行脱敏处理,如去除个人身份信息或替换敏感字段。 6. 云计算与容器化技术: - 云计算平台(如AWS、Azure、Google Cloud):提供弹性计算和存储资源,以满足不同规模的数据处理需求。 - 容器化技术(如Docker、Kubernetes):用于构建和管理可移植、可扩展的应用容器环境。 7. 架构模式: - Lambda架构:将批处理和流处理结合起来,实现实时和历史数据的分析。 - 微服务架构:将数据平台拆分为多个独立的服务,提高灵活性和可扩展性。 以上是一些常见的技术和架构选择,具体的数据平台建设方案应根据业务需求、数据规模和组织的技术栈来进行选择和定制。同时,也需要考虑系统的可靠性、性能和安全性等方面的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值