欢迎访问深圳敏捷云计算科技有限公司!

甲骨文云-部署高度可扩展的GraphQL解决方案:技术突破与创新

2024-02-29 原创文章

此参考架构展示了您如何部署基于GraphQL的解决方案,该方案可以轻松扩展以满足工作负载需求。


GraphQL是一个用于API的开源数据查询和操作语言,以及一个用现有数据满足查询的运行时环境,非常适合于那些明确定义所需属性的实现,比如移动应用程序。它为API提供了一种方式,客户端可能希望请求跨相关实体的数据,以优化请求和响应流,例如最小化移动应用程序的移动网络流量。GraphQL还提供了一种有效的方法,帮助从API消费者那里抽象出后端解决方案的实现方式,通过提供可能涵盖许多不同后端服务的单一模式。


架构

这种架构为静态和动态API内容定义了不同的路由。这种方法使得通过在多个层面配置缓存选项(包括使用内容分发网络(CDN)、负载均衡器和加载及提供内容的后端服务)来优化对静态内容的访问变得更容易。


在这种架构中,后端服务是通过微服务实现的。这些服务还可以部署CMS解决方案,例如甲骨文内容和体验,或通过开源CMS选项。由于内容是静态的,安全风险相对较低。


API内容通过API网关路由,以便可以验证和控制API请求(例如,限制速率)。然后,流量被发送到甲骨文Kubernetes引擎负载均衡器,这是进入集群的入口点,它将流量引导到GraphQL服务器。理想情况下,如果使用微服务来提供静态内容,支持GraphQL和静态内容的服务应该在不同的命名空间中保持分离,以增强隔离和控制。


这种实现采用了开源的Apollo GraphQL服务器来接收调用,并将工作分解到托管解析器和变更器逻辑的不同微服务中。通过使用不同服务实现数据模型中的不同子域,您可以更有效地扩展实现。因此,更容易对解决方案进行调优,包括任何内存中的缓存。


下图展示了这种参考架构。

这种架构具有以下组件:

租户

一个租户覆盖所有正在使用的地区。为了最大化性能和弹性,您可能希望在世界各地的几个不同地区复制部

署,并结合公共DNS路由,使客户端访问最近的地区,以最小化延迟。这将需要在地区之间复制后端数据。


地域

甲骨文云基础设施地域是包含一个或多个数据中心的本地化地理区域,这些数据中心称为可用性域。地域彼此独立,可以跨越国家甚至大洲。


分区

分区是甲骨文云基础设施租户内的跨地域逻辑分区。使用分区来组织甲骨文云中的资源,控制对资源的访问,并设置使用配额。要控制对特定分区中资源的访问,您需要定义策略,指定谁可以访问资源以及他们可以执行什么操作。对于这种架构,可以添加分区控制,以将公共访问层和后端分开,最小化意外创建直接路径到安全层的风险。


可用性域

可用性域是地域内独立的、独立的数据中心。每个可用性域中的物理资源与其他可用性域中的资源隔离,提供了容错能力。可用性域不共享诸如电力或冷却的基础设施,或内部可用性域网络。因此,一个可用性域的故障不太可能影响该地域内的其他可用性域。在这个参考架构中,Kubernetes工作节点分布在故障域和可用性域之间,以确保最大程度的弹性。


故障域

故障域是可用性域内的硬件和基础设施分组。每个可用性域有三个故障域,拥有独立的电力和硬件。当您在多个故障域中分布资源时,您的应用程序可以承受物理服务器故障、系统维护和故障域内的电力故障。


虚拟云网络(VCN)和子网

VCN是您在甲骨文云基础设施地域中设置的可定制的、软件定义的网络。与传统数据中心网络一样,VCN让您完全控制您的网络环境。VCN可以拥有多个不重叠的CIDR块,您可以在创建VCN后更改这些块。您可以将VCN分割成子网,这些子网可以限定在一个地域或一个可用性域。每个子网由一个连续的地址范围组成,这些地址不与VCN中的其他子网重叠。您可以在创建后更改子网的大小。子网可以是公共的或私有的。


负载均衡器

甲骨文云基础设施负载均衡服务提供了从单一入口点到后端多个服务器的自动流量分配。在这个参考架构中,负载均衡器将包括路由策略,以分离定向到API网关的动态数据和静态内容(例如图像、网页等)的流量。这样可以利用负载均衡器的Web应用加速(WAA)能力。


安全列表

对于每个子网,您可以创建安全规则,指定必须允许进出子网的流量的源、目的地和类型。


NAT网关

NAT网关使VCN中的私有资源能够访问互联网上的主机,而不将这些资源暴露给来自互联网的入站连接。


服务网关

服务网关提供从VCN到其他服务的访问,例如甲骨文云基础设施对象存储。从VCN到甲骨文服务的流量通过甲骨文网络结构传输,永远不会穿越互联网。


云卫士

您可以使用甲骨文云卫士来监控和维护您在甲骨文云基础设施中的资源安全。云卫士使用您可以定义的检测器配方来检查您的资源是否存在安全弱点,并监控操作员和用户是否有风险活动。当检测到任何配置错误或不安全活动时,云卫士会推荐纠正措施,并根据您可以定义的响应者配方协助采取这些措施。


安全区域

安全区域从一开始就确保遵循甲骨文的安全最佳实践,通过强制执行诸如加密数据和阻止网络的公共访问等政策,适用于整个分区。安全区域与同名的分区关联,并包括适用于该分区及其子分区的安全区域政策或“配方”。您不能将标准分区添加或移动到安全区域分区。


自治数据库

甲骨文云基础设施自治数据库是完全托管的、预配置的数据库环境,您可以用于事务处理和数据仓库工作负载。您无需配置或管理任何硬件,也无需安装任何软件。甲骨文云基础设施负责创建数据库,以及备份、补丁、升级和调优数据库。


Kubernetes容器引擎

甲骨文云基础设施Kubernetes容器引擎是一个完全托管的、可扩展的、高可用性服务,您可以用它将容器化应用程序部署到云中。您指定应用程序需要的计算资源,Kubernetes容器引擎将它们预配在甲骨文云基础设施的现有租户中。Kubernetes容器引擎使用Kubernetes自动化部署、扩展和管理跨主机集群的容器化应用程序。Kubernetes集群将在不同的保管区域和可用性区域分配节点,以最大化弹性和可用性。Kubernetes集群理想情况下将拥有Istio或其他服务网格能力来管理和监控微服务。GraphQL服务将存在于它自己的Pod中,各种解析器和变更器作为自己的微服务部署在Kubernetes集群中。


注册表

甲骨文云基础设施注册表是由甲骨文管理的注册表,使您可以简化开发到生产的工作流程。注册表使您可以轻松地存储、共享和管理开发工件,如Docker镜像。甲骨文云基础设施的高可用性和可扩展架构确保您可以可靠地部署和管理应用程序。


建议

以下建议可作为起点。您的需求可能与此处描述的架构不同。


VCN

创建VCN时,根据您计划附加到VCN子网中的资源数量,确定所需的CIDR块数量及每个块的大小。使用标准私有IP地址空间内的CIDR块。选择不与任何您打算建立私有连接的其他网络(在甲骨文云基础设施、您的本地数据中心或其他云提供商中)重叠的CIDR块。创建VCN后,您可以更改、添加和移除其CIDR块。在设计子网时,考虑您的流量流动和安全需求。将特定层或角色内的所有资源附加到同一个子网,这可以作为一个安全边界。


安全

主动使用甲骨文云卫士来监控和维护您在甲骨文云基础设施中的资源安全。云卫士使用您可以定义的检测器配方来检查您的资源是否存在安全弱点,并监控操作员和用户是否有风险活动。当检测到任何配置错误或不安全活动时,云卫士会推荐纠正措施,并根据您可以定义的响应者配方协助采取这些措施。对于需要最高安全性的资源,甲骨文建议您使用安全区域。安全区域是一个与甲骨文定义的基于最佳实践的安全政策配方相关联的分区。例如,安全区域中的资源不得从公共互联网访问,且必须使用客户管理的密钥加密。在安全区域中创建和更新资源时,甲骨文云基础设施会根据安全区域配方中的政策验证操作,并拒绝违反任何政策的操作。


云卫士

克隆并自定义甲骨文提供的默认配方,创建自定义检测器和响应者配方。这些配方使您能够指定哪种类型的安全违规会产生警告以及允许对它们执行哪些操作。例如,您可能希望检测将可见性设置为公共的对象存储桶。在租户级别应用云卫士,以覆盖最广范围并减少维护多个配置的管理负担。您还可以使用“管理列表”功能将特定配置应用于检测器。


网络安全组(NSG)

您可以使用NSG定义一组适用于特定VNIC的入站和出站规则。我们建议使用NSG而不是安全列表,因为NSG使您能够将VCN的子网架构与应用程序的安全需求分开。使用NSG定义一组适用于特定VNIC的入站和出站规则。我们建议使用NSG而不是安全列表,因为NSG使您能够将VCN的子网架构与应用程序的安全需求分开。


负载均衡器带宽

创建负载均衡器时,您可以选择一个预定义的形状,提供固定带宽,或指定一个自定义(灵活)的形状,您设置带宽范围并让服务根据流量模式自动缩放带宽。无论采用哪种方法,您都可以在创建负载均衡器后随时更改形状。


API网关

API网关可用于提供初步的筛选和使用控制,例如:

  • 服务认证与授权
  • 服务控制,如限速
  • 服务使用分析的捕获
  • 此外,API网关(而不是防火墙或负载均衡器)应执行解决方案感知路由,以便任何GraphQL能力无法满足的端点可以被定向到正确的位置。鉴于此,应考虑合理的限速,基于后端解决方案支持的最大性能能力以及任何单一服务用户的峰值权益。



考虑因素

在部署此参考架构时,请考虑以下几点。


性能

这种架构将提供一种方法来垂直和水平扩展性能容量。即使是最优化的微服务,引入新节点也有一定的延迟时间,因此在手动或动态处理扩展时需要允许这种延迟。这对于任何解决方案的持久性层尤其如此。


安全

您应该在API网关处处理应用级别的安全性。然而,您可以利用GraphQL指令(如@auth)来处理细粒度的GraphQL特定安全性(例如,属性级访问控制)。


可用性

  • Kubernetes
  • 故障域在一个可用性域内提供弹性。您可以配置Kubernetes工作节点跨不同可用性区域部署。
  • API网关、负载均衡器等
  • 托管服务,如API网关,在一个地区内的可用性是由服务本身处理的。您可以配置负载均衡器以确保不同可用性区域之间的协调。
  • 如有必要,您可以通过采用多地域部署模型进一步增强可用性,尽管这会增加复杂性和协调需求。 成本 所需的可用性和弹性越高,运营成本就越大。这是因为所需的冗余计算资源的体量增加。考虑您将使用哪种实现的GraphQL,以及是否存在任何许可约束,以及提供商是否支持该实现。


部署

通过遵循Oracle DevRel GitHub仓库中的说明手动部署此架构。将容器镜像加载到注册表并部署Kubernetes是一个手动过程,或者您也可以按照GitHub文档中包含的实现细节所描述的过程来执行。



开启您的Oracle云之旅:Agilewing - 您的智能云服务伙伴

作为Oracle的高级合作伙伴,Agilewing正重新定义企业体验Oracle云服务的方式。借助于其简化的开户流程和一流的技术支持,Agilewing将复杂的开户和操作流程转化为一种轻松、直观的体验。通过我们的一站式服务,您可以迅速开启并享受Oracle云的全方位服务,从而无缝融入云端世界。


Agilewing的AgileCDN服务,结合了OCI的云基础服务,提供了一流的全球内容加速解决方案。超过2800个全球POP节点和7000个直连点的强大网络,确保了无论您的业务扩展到全球哪个角落,都能保持高效稳定的运行。


利用Oracle云的先进技术,Agilewing致力于简化云服务搭建、云迁移和业务出海的过程。我们的合作模式为客户带来经济高效的解决方案,使他们能够更加专注于核心业务,同时享受Oracle云的高性能和安全保障。


Oracle云服务,作为一个充满潜力的领域,以其高性能、安全性和全球统一的服务标准,为各类企业开启了新的机遇之门。通过Agilewing的专业服务,无论是个人用户还是企业,都能轻松步入这个充满技术革新和高效能的新时代。现在,就让Agilewing引领您开始探索Oracle云服务,打开一个全新的世界大门。