使用 GraphQL 和 NoSQL 部署容器化视频应用程序

以视频点播流处理应用为例。它流媒体显示全球各地的客户手表。节目可以有多个季节,一个季节可以有多个集。您需要一个持久的现代化元数据存储来跟踪此客户活动。

一般来说,客户对跟踪诸如他们观看的剧集、每集的观看时间、观看的季节总数等内容感兴趣。客户还希望流式应用从他们停止观看的地方开始流式传输—毕竟,谁希望从头再来?

此架构可引导您浏览视频点播流应用,该应用由使用各种 Oracle Cloud Infrastructure 服务的多个微服务组成。在这种架构中,重点是跟踪微服务的活动。流处理应用的后端会收集数据来生成报告,例如最受欢迎的节目和平均观看时间。



体系结构

此应用程序使用三层体系结构,表示应用程序的大脑。利用这些服务的功能,您可以构建具有高可用性、可扩展性和安全性的无服务器生产应用。应用程序可以使用数千台服务器,但是,通过利用无服务器范式,您不必管理单个服务器。

最近,REST 已成为设计 Web API 的标准。REST 架构样式允许在无状态服务器上运行,并提供对资源的结构化访问。但是,REST API 在满足访问它们的客户端快速变化的需求(例如移动使用量增加、低功耗设备和草率网络)时显示出不灵活。

对于这些应用程序,我们寻找一个解决方案,最大限度地减少通过网络传输的数据,并允许用户通过直接使用 API 轻松查询数据。

GraphQL 是 API 的开源数据查询和操纵语言,您可以使用多种语言进行编码。GraphQL 提供了 API 中数据的完整且易于理解的说明,同时提供了运行时功能来使用现有数据执行查询。虽然 GraphQL 通常与数据库技术混淆,但 GraphQL 不会绑定到任何特定的数据库或存储引擎,而是由现有数据提供支持。

现代应用开发人员在决定何时以及如何持久保存数据时有许多选择。近年来,NoSQL 数据库变得越来越流行,现在被视为每个应用程序开发人员必须拥有的必要工具之一。虽然“试用和真实”关系数据库非常擅长解决数据规范化、严格一致性和访问这些数据的任意复杂查询等经典应用程序问题,但 NoSQL 数据库采用了不同的方法。

运行容器化应用程序可能需要大量开销,例如实例化虚拟机、安装组件以运行容器映像(以及支持这些映像的所有依赖项,包括软件和操作系统更新),以及监视应用程序以确保它们以最佳方式运行、可用且不妥协。

作为开发人员,您可以使用多种语言提供的 NoSQL SDK 连接到 Oracle NoSQL Database Cloud Service 并使用 NoSQL 表。Oracle Cloud Infrastructure 容器服务是一项完全托管的服务,适用于不需要 Kubernetes 等容器编排平台来部署 GraphQL 应用的容器化工作负载。当您的开发团队想要可靠地构建、部署和管理云原生应用时,请使用 OCI Kubernetes Engine (OKE)。

Oracle Cloud Infrastructure API Gateway 支持您发布具有可从网络中访问的专用端点的 API,如果您希望它们接受互联网流量,可以使用公共 IP 地址公开 API。这些端点支持 API 验证、请求和响应转换、CORS、验证/授权和请求限制。

这一切都提供了无服务器体验,让客户可以专注于为其应用增加价值,而不是部署和管理基础设施。

以下是使用 Oracle NoSQL Database Cloud Service 的一些优势:

  • 数据建模Oracle NoSQL Database Cloud Service 支持基于模式和无模式 (JSON) 建模。它提供了一种直观的方式来开发基于 GraphQL 的应用程序。GraphQL 方案是使用嵌套数据结构设计的,与开发人员在执行 NoSQL 数据建模时将使用的数据结构匹配。原生选择。
  • 加快开发生命周期:开发人员编写应用。Oracle 可执行数据库管理、存储管理、高可用性和可扩展性,帮助开发人员专注于交付高性能应用。开发人员为 GraphQL 微服务部署和管理表或表层次结构,而不是集群或数据库。
  • 身份访问和管理Oracle NoSQL Database Cloud Service 使用 Oracle Cloud Infrastructure Identity and Access Management 提供对 Oracle Cloud 的安全访问。通过 Oracle Cloud Infrastructure Identity and Access Management ,您可以创建动态组并授予检查、读取、使用或管理 Oracle NoSQL Database Cloud Service 表的权限。
  • 冗余数据安全Oracle NoSQL Database Cloud Service 在单个 AD 区域中跨多个可用性域 (AD) 或容错域 (FD) 存储数据。如果 AD 或 FD 变得不可用,则仍可从其他 AD 或 FD 访问用户数据。对区域端点的请求不是特定于 AD/FD 的,因此 AD/FD 不可用性是透明的。
  • 高性能和可预测性Oracle NoSQL Database Cloud Service 通过大规模提供高性能,充分利用 Oracle Cloud Infrastructure 中的最新组件技术。开发人员深知,即使吞吐量和存储需求不断增长,他们的应用也会以可预测的延迟返回数据。
  • 零管理完全托管:开发人员无需管理数据服务器或底层基础设施和安全性。Oracle 负责维护硬件和软件,开发人员可以集中精力构建应用。
  • 按需吞吐量和存储预配Oracle NoSQL Database Cloud Service 可扩展,以低延迟和可预测的延迟满足应用吞吐量性能要求。随着工作负载的定期业务波动,应用可以提高预配吞吐量,从而保持一致的用户体验。随着工作负载的减少,相同的应用可以降低预配的吞吐量,从而降低运营费用。利用按需容量,您无需为每个表预配读取或写入容量。您只需为实际消耗的读取和写入单位付费。

下图说明了此引用体系结构。



containerized-video-app-graphql-nosql-architecture.zip

该体系结构具有以下组件:

  • Tenancy

    租户是 Oracle 在您注册 Oracle Cloud Infrastructure 时在 Oracle Cloud 中设置的安全隔离分区。您可以在您的租户内的 Oracle Cloud 中创建、组织和管理资源。

    租户是公司或组织的同义词。通常,公司将具有单个租户并反映其在该租户中的组织结构。单个租户通常与单个订阅关联,单个订阅通常只有一个租户。

  • 区域

    Oracle Cloud Infrastructure 区域是包含一个或多个数据中心(称为可用性域)的本地化地理区域。地区独立于其他地区,远距离可以把它们分开(跨越国家甚至大陆)。

  • 区间

    区间是 Oracle Cloud Infrastructure 租户中的跨区域逻辑分区。使用区间在 Oracle Cloud 中组织资源、控制对资源的访问并设置使用限额。要控制对给定区间中资源的访问,您可以定义策略来指定谁可以访问资源以及可以执行哪些操作。

  • 可用性域

    可用性域是区域中的独立数据中心。每个可用性域中的物理资源与其他可用性域中的资源隔离,从而提供容错能力。可用性域不共享电源或冷却设备等基础设施,也不共享内部可用性域网络。因此,一个可用性域出现故障不会影响区域中的其他可用性域。

  • 容错域

    容错域是可用性域内的一组硬件和基础设施。每个可用性域都有三个容错域,它们具有独立的电源和硬件。在多个容错域之间分配资源时,应用可以承受容错域内的物理服务器故障、系统维护和电源故障。

  • 虚拟云网络 (VCN) 和子网

    VCN 是一个可定制的软件定义网络,您可以在 Oracle Cloud Infrastructure 区域中设置。与传统的数据中心网络一样,VCN 允许您控制您的网络环境。VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后更改这些块。您可以将 VCN 划分为子网,子网可以限定为区域或可用性域。每个子网都包含一系列不与 VCN 中的其他子网重叠的连续地址。可以在创建后更改子网的大小。子网可以是公共子网,也可以是专用子网。

  • 安全列表

    对于每个子网,可以创建安全规则来指定必须允许进出子网的通信的源、目标和类型。

  • 服务网关

    通过服务网关,您可以从 VCN 访问其他服务,例如 Oracle NoSQL Database Cloud Service 。从 VCN 到 Oracle 服务的流量通过 Oracle 网络结构传输,并且永远不会遍历互联网。

  • Internet 网关

    通过互联网网关,可以在 VCN 中的公共子网与公共互联网之间进行流量传输。

  • API 网关

    借助 Oracle API Gateway,您可以发布具有专用端点的 API,这些专用端点可从网络内访问,并且您可以根据需要向公共互联网公开。这些端点支持 API 验证、请求和响应转换、CORS、验证和授权以及请求限制。

  • 身份和访问管理 (IAM)

    Oracle Cloud Infrastructure Identity and Access Management (IAM) 是 Oracle Cloud Infrastructure (OCI) 和 Oracle Cloud Applications 的访问控制层。通过 IAM API 和用户界面,您可以管理身份域和身份域中的资源。每个 OCI IAM 身份域代表一个独立的身份和访问管理解决方案或不同的用户群体。

  • 策略

    Oracle Cloud Infrastructure Identity and Access Management 策略指定谁可以访问哪些资源以及如何访问这些资源。可以在组和区间级别授予访问权限,这意味着您可以编写策略来为组提供特定区间内或租户的特定类型的访问权限。

  • NoSQL 数据库

    借助 Oracle NoSQL Database Cloud Service ,开发人员可以轻松使用文档、列和键值数据库模型构建应用,并通过数据复制实现高可用性,从而实现可预测的单位数毫秒级响应时间。该服务为按需和预配容量模式提供 ACID 事务处理、无服务器扩展、全面的安全性以及按使用付费的低定价,包括与本地 Oracle NoSQL Database 100% 兼容性。

  • Oracle Cloud Infrastructure 容器服务

    Oracle Cloud Infrastructure 容器服务是一项无服务器计算服务,通过该服务,您可以即时运行容器,而无需管理任何服务器。

  • OCI Kubernetes 引擎

    Oracle Cloud Infrastructure Kubernetes EngineKubernetes EngineOKE )是一项完全托管、可扩展的高可用性服务,可用于将容器化应用部署到云中。您可以指定应用所需的计算资源,Kubernetes Engine 在现有租户的 Oracle Cloud Infrastructure 上预配这些资源。OKE 使用 Kubernetes 跨主机集群自动部署、扩展和管理容器化应用。

推荐

使用以下建议作为起点。您的要求可能与此处所述的体系结构不同。
  • API 网关

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

    • 服务验证和授权
    • 服务控制,例如速率限制
    • 捕获服务使用分析

    API 网关(不是防火墙或负载平衡器)应执行解决方案感知路由,以便可以将不满足 GraphQL 功能的任何端点定向到正确的位置。应根据后端解决方案支持的最大性能功能以及任何一个服务用户的峰值权利来考虑合理的速率限制。

注意事项

部署此引用体系结构时,请考虑以下事项。

  • 安全

    您应在 API 网关中解决应用级别的安全性问题。通过使用 GraphQL 指令(如 @auth),可以解决细粒度 GraphQL 特定安全问题(例如,属性级别访问)。

部署

要部署此体系结构,请按照此 Live Lab 中活动跟踪应用程序部署的说明进行操作:

浏览更多

详细了解如何使用 GraphQL 和 Oracle NoSQL Database Cloud Service 部署容器化视频应用。

查看以下附加资源:

Oracle Cloud Infrastructure 资源:

确认

Authors :

  • Dario Vega
  • Michael Brey