将迁移的 MongoDB 工作负载部署到 Oracle Autonomous JSON Database
将使用文档数据库的现有工作负载(在本例中为 MongoDB)迁移到 Oracle Cloud Infrastructure (OCI) 上的 Oracle Autonomous JSON Database ,以实现以 JSON 为中心的应用的现代化开发。
使用文档和文档数据库来发展数据方案和应用程序的工作负载和应用程序非常受欢迎,因为它们为开发人员提供了灵活性。模式灵活性、快速开发和可扩展性使应用程序功能能够快速原型化、更轻松地进行应用程序演化,并保证构建迭代更小的应用程序和功能,开发人员可以扩展这些应用程序和功能来满足大型用户群的需求。然而,这些类型的工作负载面临着挑战,包括事务性保证较弱、数据查询的多功能性,以及无法支持文档(例如分析或机器学习)上的其他工作负载。
如果这些工作负载可以从传统文档数据库的所有优势中受益,但同时又可以利用关系数据库的优势,结果会怎样?例如,拥有更强大的事务处理保证,并使用其他功能(例如分析和机器学习),而无需将数据复制到其他数据库或系统。
Autonomous JSON Database 提供 NoSQL 样式的文档 API(Simple Oracle Document Access (SODA) 和 Oracle Database API for MongoDB)、无服务器扩展、高性能 ACID 事务、全面的安全性和低按使用付费定价。自治 JSON 数据库可自动预配、配置、调优、扩展、打补丁、加密和修复数据库,从而消除数据库管理并实现 99.95% 的可用性。
功能架构
此架构中使用的关键特性之一是 Oracle Database API for MongoDB,它支持应用使用 MongoDB 驱动程序、工具和 SDK 与 Oracle Database 中的 JSON 文档集合进行交互。现有应用代码可以处理存储在自治 JSON 数据库中的数据,而无需对其进行重构。
下图描述了由数据库、后端和前端层组成的典型应用程序。
mongodb-json-logical-arch-migration-oracle.zip
用于实现此模式的流行的堆栈是 MEAN 堆栈,使用 MongoDB 作为文档数据库,使用 Express 作为后端框架,使用 Angular 作为前端框架,使用 Node.js
作为后端服务器。本文档使用 MEAN 堆栈作为将迁移到 OCI 和 Autonomous JSON Database 的现有部署的示例。
将此工作负载迁移到 OCI 和 Autonomous JSON Database 非常简单,主要包括以下步骤:
- 部署 Autonomous JSON Database 实例,并在创建时启用 Oracle Database Mongo DB API
- 将元数据和数据从 MongoDB 迁移到 Autonomous JSON Database 。
- 使用 VM、容器或 Kubernetes 将应用服务器部署到与 Autonomous JSON Database 相同的区域和可用性域,以运行
Node.js
和 Express。 - 将后端应用程序代码部署到应用服务器。
- 使用当前应用上使用的 MongoDB 工具和驱动程序,将后端应用连接到 Autonomous JSON Database 。
- 让用户连接到新的应用程序 URI。
请注意,此参考体系结构侧重于迁移的工作负载的部署,而不是迁移过程本身。有关迁移过程的更多详细信息,请参阅了解更多信息部分。
将工作负载迁移到 Autonomous JSON Database 后,您可以使用多个功能来增强现有功能,无论是 1 还是 1 都可以轻松满足其他非功能需求,例如提高可扩展性、弹性或高可用性,或 (2) 具有额外的功能特性,如运营报告、分析和机器学习,而无需将数据从数据库中复制。
为了提高可扩展性和高可用性,您可以使用 Autonomous JSON Database 自动缩放功能,只需单击一下或通过 API 调用,即可让工作负载最多使用 3 倍的基线容量,而无需停机。请注意, Autonomous JSON Database 使用 Oracle Real Application Clusters (Oracle RAC) 技术实现高可用性。对于后端层,可使用具有自动缩放规则的计算实例池,从而实现应用的高可用性和可扩展性。
由于 Autonomous JSON Database 基于多模型、多工作负载数据库技术构建,因此可以添加依赖于关系、空间、图形或向量数据类型的其他功能,并将其与现有应用一起使用。用户通常希望基于 JSON 数据执行分析,并在 Autonomous JSON Database 中使用 SQL,从而简化使用同一引擎和数据创建运营和分析报告的过程。
Autonomous JSON Database 的非 JSON 数据限制为 20 Gb,但如果数据量需求发生变化,则可以轻松转换为 Autonomous Transaction Processing Serverless,并支持相同的功能。请注意,Views 和 Materialized Views 存储不计入 Autonomous JSON Database 20 Gb 非 JSON 数据限制,因此可以轻松创建和使用这些数据,例如支持使用基于 JSON 文档的 SQL 进行操作分析。
物理体系结构
物理架构包括 OCI 中的公共子网和专用子网以及辅助备份区域,以支持高可用性。
该体系结构支持以下各项:
- 前端层
- 应用程序用户可以从 Internet 或公司网络进行连接
- 使用 Web 应用程序防火墙保护用户连接
- 负载均衡了与应用的用户连接,从而提高了弹性和可扩展性
- 部署具有高可用性的负载平衡器
- 后端层
- 使用实例池以高可用性方式部署应用服务器
- 实例池与自动缩放一起使用,以实现水平伸缩性
- 实例池配置为将实例部署在与 Autonomous JSON Database 相同的可用性域中,以进行应用和数据库托管,从而优化连接延迟
- 实例池配置为将实例分布在位于 Autonomous JSON Database 的同一可用性域中的容错域中,以提高工作负载弹性
- Database Tier
- 自治 JSON 数据库提供高可用性,因为 Oracle Real Application Clusters (Oracle RAC) 和多个数据库节点是服务实例的基础。因此,默认情况下,数据库层具有高可用性和弹性。
- 在 Autonomous JSON Database 中启用的 Oracle Database API for MongoDB 支持您无需更改即可使用现有应用代码。
- 面向 MongoDB 的 Oracle Database API 具有高度弹性, Autonomous JSON Database 可在内部确保弹性。
- 自治 JSON 数据库可以使用自动缩放,并根据系统负载的增加和减少进行调整。
- 自治 JSON 数据库通过基于备份的跨区域灾难恢复实现业务连续性。或者,可以使用可刷新克隆。
- 灾难恢复
- 两个区域支持整个云部署的跨区域灾难恢复。
- 主区域中的自治 JSON 数据库在辅助区域具有基于备份的跨区域对等数据库。
- 第二个区域部署了类似的拓扑,以减少总体恢复时间目标。
- 为了减少总体 RTO,您可以使用热 DR 策略(即已预配后端层云资源)以及自治 JSON 数据库备用数据库。
- 或者,您可以在发生故障时预配后端层资源,从而降低运行 DR 资源的成本,同时提高整体 RTO。
- 出于简单考虑,此部署中未描述的潜在设计改进包括使用 OCI Full Stack Disaster Recovery 自动为负载平衡器和后端层执行灾难恢复。
- 网络
- 在两个区域中部署的动态路由网关是对等的。
- 内部部署连接利用 OCI FastConnect 和站点到站点 VPN 实现冗余。
- 来自内部部署和互联网的所有传入流量首先路由到中心 VCN,然后路由到工作负载 VCN。
- 使用集线器和辐条式网络设计来提高安全状况并适应其他工作负载 VCN。
- 服务随专用端点一起部署,以提高安全状况。
- JSON 工作负载 VCN 会隔离到多个专用子网中,以提高安全状况。
- 安全
所有数据在传输中和静态都是安全的。
- 为了简单起见,此部署中未描述的潜在设计改进包括使用完全符合 CIS 的着陆区和利用在中心 VCN 中部署的网络防火墙。网络防火墙将通过检查所有流量和实施策略来改善整体安全状况。
下图说明了此体系结构。
mongodb-json-physical-arch-oracle.zip
该体系结构包含以下组件:
- 区域
OCI 区域是一个本地化的地理区域,其中包含一个或多个托管可用性域的数据中心。区域独立于其他区域,并且很远的距离可以将它们分开(跨越国家甚至大洲)。
- 虚拟云技术网络 (VCN) 和子网
VCN 是您可以在 OCI 区域中设置的可定制软件定义网络。与传统数据中心网络一样,VCN 允许您控制网络环境。一个 VCN 可以具有多个不重叠的无类域间路由 (classless inter-domain routing,CIDR) 块,在创建 VCN 后可以更改这些块。您可以将 VCN 细分为多个子网,这些子网可以限定为某个区域或某个可用性域。每个子网由一系列不与 VCN 中的其他子网重叠的连续地址组成。您可以在创建子网后更改子网的大小。子网可以是公共子网,也可以是专用子网。
- FastConnect
Oracle Cloud Infrastructure FastConnect 可在您的数据中心与 OCI 之间创建专用连接。与基于互联网的连接相比,FastConnect 提供了更高的带宽选项和更可靠、更稳定的网络体验。
- 动态路由网关 (DRG)
DRG 是一个虚拟路由器,用于为同一区域中的 VCN、VCN 与该区域之外的网络(例如另一个 OCI 区域中的 VCN、内部部署网络或其他云提供商中的网络)之间的专用网络流量提供路径。
- 网络地址翻译 (Network Address Transformation,NAT) 网关
NAT 网关使 VCN 中的专用资源能够访问互联网上的主机,同时不会向传入的互联网连接公开这些资源。
- 服务网关
通过服务网关,您可以从 VCN 访问其他服务,例如 Oracle Cloud Infrastructure Object Storage 。从 VCN 到 Oracle 服务的流量将通过 Oracle 网络结构传输,不会通过互联网。
- Internet 网关
互联网网关允许 VCN 中的公共子网与公共互联网之间的流量。
- 负载平衡器
Oracle Cloud Infrastructure Load Balancing 提供从单个入口点到多个服务器的自动流量分配。
- Web 应用程序防火墙
Oracle Cloud Infrastructure Web Application Firewall (WAF) 是一种符合支付卡行业 (PCI) 标准、基于区域和边缘实施服务,它连接到实施点,例如负载平衡器或 Web 应用域名。WAF 可保护应用免受恶意和不需要的互联网流量的侵害。WAF 可以保护任何面向互联网的端点,并在您的应用中提供一致的规则实施。
- 应用程序服务器
应用服务器使用辅助对等点,与数据库一样,在发生灾难时将接管处理。应用服务器使用同时存储在数据库和文件系统的配置和元数据。应用服务器集群在单个区域的范围内提供保护,但为了实现一致的灾难恢复,需要持续不断地将正在进行的修改和新部署复制到辅助位置。
- Oracle Database API for MongoDB
借助 Oracle Database API for MongoDB,应用可以使用 MongoDB 驱动程序、工具和 SDK 与 Oracle Database 中的 JSON 文档集合进行交互。
- 自治 JSON 数据库
Oracle Autonomous JSON Database 是一种云文档数据库服务,可助您轻松开发以 JSON 为中心的应用程序。它具有简单的文档 API、无服务器扩展、高性能 ACID 事务、全面的安全性和低按使用付费的定价。自治 JSON 数据库可自动供应、配置、调优、扩展、打补丁、加密和修复数据库。
- 对象存储
OCI Object Storage 可访问任意内容类型的大量结构化和非结构化数据,包括数据库备份、分析数据以及图像和视频等丰富内容。您可以直接从互联网或云平台安全地存储数据。您可以扩展存储,而不会出现性能或服务可靠性下降的情况。
将标准存储用于您需要快速、立即和频繁访问的“热”存储。将归档存储用于长期保留且很少或很少访问的“冷”存储。
体系结构变量
自治 JSON 数据库提供完全托管的 MongoDB API 是大多数工作负载的理想解决方案,因为它更易于管理。
如果需要手动控制 Oracle REST Data Services 的配置和管理,则可以选择使用客户管理的 Oracle REST Data Services。例如,允许应用程序使用更大的连接池。
注意:
如果有特定的工作负荷要求,请使用此体系结构变量。只有高级用户才应部署此体系结构变体。本节仅介绍了与之前描述的物理体系结构相比的差异,因此除非另有说明,否则所有物理体系结构设计原则都是有效的。
下面的体系结构图描述了变体的部署方式。为简单起见,只会描述部署在 JSON 工作负载 VCN 中的云资源,因为部署的其余部分与前面所述相同。
mongodb-json-arch-variant-oracle.zip
- 后端应用程序代码部署在属于实例池的应用程序服务器中。
- 传入用户请求由负载平衡器分配,因此前端层具有水平可伸缩性,并且没有单点故障。
- 客户管理的 Oracle REST Data Services 安装在每台应用服务器上,并配置为启用 MongoDB API,以便应用可以使用 MongoDB 工具和驱动程序连接到数据库。
- 客户管理的 Oracle REST Data Services 配置为可根据工作负载非功能要求进行调整,例如配置较大的连接池或使用其他数据库服务。
- 后端代码和客户管理的 Oracle REST Data Services 都预先安装并预配置在池使用的实例配置中,以便每次将实例添加到池中时,它都能够在实例预配后运行后端并连接到数据库。
推荐
- VCN
创建 VCN 时,根据您计划附加到 VCN 中的子网的资源数,确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。
选择与要设置专用连接的任何其他网络(在 Oracle Cloud Infrastructure 、内部部署数据中心或其他云提供商中)不重叠的 CIDR 块。
创建 VCN 后,您可以更改、添加和删除其 CIDR 块。
设计子网时,请考虑流量和安全要求。将特定层或角色中的所有资源附加到同一子网,该子网可以用作安全边界。
- 应用程序部署
如果应用可以在容器中运行,请考虑使用基于容器的 Oracle Kubernetes 引擎 (OKE) 部署。
- 安全
考虑使用数据安全来进一步提高工作负载安全态势,并能够执行数据库审计。
- 观测
- 考虑使用 OCI Audit 为自治 JSON 数据库以外的所有 OCI 服务执行取证审计。
- 考虑使用 Monitoring、Logging 和 Logging Analytics 全面了解环境运行状态。
- 灾难恢复
考虑使用 OCI Full Stack Disaster Recovery 来自动执行和编排堆栈所有层的灾难和恢复。
- 运营效率
- 如果自治 JSON 工作负载属于更广泛的数据库组,请考虑使用弹性池,以提高成本效率。
- 考虑启用数据库管理,这是一项提供了一整套数据库性能监视和管理功能的 OCI 服务,可以简化 AJD 实例管理。
- 应用程序演变
- 考虑使用 SQL 和前端(例如 APEX 或 Oracle Analytics Cloud)在自治 JSON 数据库中部署运营分析和实时报告,而无需将数据移出数据库,从而进行可信和实时数据分析
- 考虑使用自治 JSON 数据库进行机器学习,使用 Oracle Machine Learning (OML),使用 JSON 数据构建和训练模型,而无需任何数据移动,并部署模型以及现有工作负载,以实现高效推断
- 对于应用核心之外的其他用例,请考虑使用自治 JSON 数据库。选择 AI 和数据库视图来查询 JSON 并保存元数据,以便用户可以使用自然语言查询 JSON 数据
- 考虑使用自治 JSON 数据库存储更多数据类型(关系型、向量型、空间型或图形型),最高可达 20 Gb,从而提高工作负载功能和灵活性。