在这篇文章中,了解采用数据API网关如何显着降低微服务架构的开发和维护成本。
您是否遇到过如何在微服务架构中管理数据的挑战?在本文中,我们研究了传统方法并介绍了数据API网关(有时也称为“数据网关”),这是一种新型数据基础设施。我们探讨了数据API网关的特性、为什么要实现它以及如何将它应用到您的架构中。
传统数据服务模式
首先,让我们考虑如何在微服务架构中管理数据。一种常见的模式是执行“CRUD”(创建、读取、更新、删除)操作的数据服务层。例如,考虑图1所示的名义酒店预订应用程序。
图1:示例微服务架构中的数据服务
这种微服务架构包括一层管理特定数据类型(包括酒店、价格、库存、预订和客人)的数据服务,以及一层实现特定流程(如购物和预订预订)的业务服务。业务服务为Web和移动应用程序提供主要接口,并将数据的存储和检索委托给数据服务。数据服务负责对底层数据库执行CRUD操作。
虽然有许多方法可以集成和编排这些服务之间的交互,但分离负责数据和业务逻辑的服务的基本模式自面向服务架构(SOA)的早期就已经存在。
识别、设计和实施数据服务
开发这些微服务的典型方法包括如下步骤:
使用诸如域驱动设计之类的技术识别服务以管理域中的特定数据类型。有关域驱动设计、服务识别和数据建模之间交互的更多信息,请参阅Cassandra的第7章,权威指南:第3版。
设计服务,包括API和架构来管理分配的数据类型。每个单独的服务都是特定数据类型的主要所有者,并负责数据存储、检索和潜在的消息传递或流式传输。我们将在下面扩展这对数据库选择的影响。
使用选定的语言和框架实施服务。在Java世界中,像SpringBoot这样的框架可以很容易地使用嵌入式HTTP服务器构建服务,然后将其打包到VM或容器中。Quarkus是一个更新的框架,可以在单个CI工作流中构建、测试和容器化服务。
数据服务和多语言持久性
许多早期的SOA架构包括与单个遗留关系数据库模式交互的服务。一个不幸的结果是“通过数据库集成”的趋势,其中服务可以自由地读取和写入多个表。这种缺乏强有力的所有权通常会导致难以调试的数据完整性问题。
随着年代开始向云中的大规模微服务架构迈进,包括Netflix在内的大规模创新者强烈主张独立服务管理自己的数据类型。这样做的一个结果是各个数据服务可以自由选择自己的数据库,这种模式称为多语言持久性。图2显示了我们假设的酒店应用程序中的示例。
图2:微服务架构的多语言持久化方法
在这种架构中,更改频率较低的中等大小的数据(如酒店描述)可能是文档数据库或传统关系数据库的自然选择。具有高容量或高读/写流量的数据(例如费率、库存和预留)可能会使用基于NoSQL的集群解决方案来有效扩展。其他数据服务可能是第三方API的前端,例如来自客户关系管理(CRM)系统的访客信息。
用数据API网关替换数据服务
在创建多个数据服务时,开发团队经常发现实现非常相似,几乎是样板代码,因为他们的主要职责是在数据库后端执行简单的CRUD操作。认识到这种重复工作,许多组织已经开始采用数据API网关作为维护容器化数据服务层的替代方案。
数据API网关是一种软件基础架构,可通过各种样式的API(包括REST、gRPC等)提供对数据的访问。网关使用一个或多个持久存储抽象存储和检索数据的细节。这使应用程序开发人员可以专注于编写通过易于使用的API访问数据的业务服务,而不必学习数据库查询语言的复杂性。
图3显示了如何将此类网关应用于酒店应用示例的示例。数据API网关负责管理酒店、房价、库存和其他数据类型的数据持久性,无需整个数据服务层。
图3:数据API网关的示例用法
可以通过提供模式或数据模型将数据类型添加到网关。或者,文档样式的端点可以提供“无模式”体验,其中可以存储任何有效的JSON文档,例如酒店描述,其结构可能经常更改。
因此,采用数据API网关与实现数据服务模式非常相似。该设计包括识别关键数据类型并创建模式或JSON格式来描述它们。然后通过网关提供的API使这些数据类型可用。
比较API样式
数据API网关为开发人员提供了通过API访问数据类型的自由,这对其客户端服务和应用程序最有意义。图4比较了一些最常见的API样式,就它们如何构建数据及其性能特征而言。
图4:数据API网关提供的API的特征
像gRPC这样的API样式提供了更结构化的数据表示,可以带来更优化的性能。GraphQL和RESTAPI在以额外延迟为代价的数据表示方面提供了更大的灵活性。文档样式的API提供了最大的灵活性,它可以以客户端选择的任何格式存储和搜索JSON,但对于更复杂的查询可能会降低性能。
数据API网关项目
许多组织已经构建了自己的数据API网关,其中一些处于作为开源项目发布的不同阶段。Stargate就是一个例子,它是一个开源项目,它提供多种API样式作为ApacheCassandra之上的无状态代理层。GraphQL框架(例如ApolloSupergraphPlatform或Netlify的OneGraph)也可能被认为是数据API网关模式的特定剪裁,因为它们聚合了来自多个持久性后端和API的数据。
部署数据API网关
部署容器化网关可能包括多个API服务和支持数据存储。让我们将Stargate视为一个数据API网关的示例,该网关本身被部署为微服务应用程序。图5显示了Stargate在Kubernetes中的示例部署。
图5:在Kubernetes中使用支持Cassandra集群的Stargate部署示例
Cassandra集群使用StatefulSet部署,它允许将pod绑定到PersistentVolume以实现存储数据的高可用性。无状态Stargate协调器节点和API服务,如文档、gRPC和REST,在Kubernetes部署中进行管理,以便每个微服务都可以独立扩展。Kubernetes服务提供跨多个微服务实例的负载平衡。
结论
数据API网关是一种新型的数据基础设施,可以帮助消除您必须开发和维护的多层CRUD式微服务。虽然有多种样式的网关,但它们具有一组共同的功能,使开发人员和运营商都受益。数据API网关通过在单个支持数据库上提供各种API样式来提高开发人员的工作效率。从操作的角度来看,数据API网关及其支持数据库可以与其他应用程序一起在容器中运行,以简化您的整体部署过程。总之,采用数据API网关是降低微服务架构开发和维护成本的好方法。
谢谢大家阅读,喜欢的朋友请