设计基于微服务的应用

在使用微服务架构设计应用程序时,请考虑遵循微服务优秀实践和开发微服务的 12 种成功模式。这些模式结合了 12 要素应用注意事项,并利用融合数据库在微服务部署方面的经验。

了解用于设计微服务的优秀实践

通过在设计微服务时遵循某些优秀实践,您可以确保应用易于扩展、部署和维护。请注意,此处讨论的并非所有最佳实践都可能与您的应用程序相关。

每个微服务都必须实施单一的应用功能。开发团队必须确定每个微服务的限制和责任。一种方法是为应用程序中的每个常见请求任务定义一个微服务。另一种方法是按业务任务划分功能,然后为每个区域定义微服务。

请考虑设计中的以下要求:

  • 响应式微服务:微服务必须向请求客户机返回响应,即使服务失败也是如此。
  • 向后兼容性:在添加或更新微服务的功能时,API 方法和参数中的更改不能影响客户机。REST API 必须保持向后兼容。
  • 灵活通信:每个微服务都可以指定协议,该协议必须用于客户机与 API 网关之间的通信以及微服务之间的通信。
  • 幂等性:如果客户机多次调用微服务,则它应生成相同的结果。
  • 高效运行:设计必须简化监视和故障排除。日志系统通常用于实现此要求。

了解微服务成功的 12 种模式

微服务很难实现,这 12 种模式使得使用融合数据库平台以及容器和 Kubernetes 轻松利用 mircoservices 架构的敏捷性和简单性优势。

  1. 边界上下文:提前设计,或者使用数据重构指导将单体转换为微服务。
  2. 松散耦合:通过将方案隔离到微服务并使用可靠的事件网格来分离数据。
  3. 面向微服务的 CI/CD :多租户数据库非常适合微服务。添加可插入数据库 (PDB) 以独立部署和构建。应用程序(使用 Jenkins)和模式(数据库中的 Liquibase、Flyway 和 EBR)也是不错的选择。
  4. 微服务安全性:保护每个端点(从 API 网关、负载平衡器、事件网格到数据库)的安全。
  5. 面向微服务的统一观测:将指标、日志和跟踪信息整合到单个仪表盘中,以进行调优和自我修复。
  6. 事务性发件箱:在单个本地事务处理中发送消息和数据处理操作。
  7. 可靠事件网格:具有高吞吐量事务消息传递以及 pub 和 sub 的所有事件的事件网格;具有事件转换和事件路由。
  8. 事件聚合:事件是临时事件,并通知或触发实时操作;之后,事件聚合到数据库中 - 数据库是最终的压缩主题。
  9. 命令查询责任隔离 (Command Query Responsibility Segregation,CQRS) :微服务可用数据的运行和分析副本。
  10. Sagas :跨微服务的事务,由数据库中的事件网格和托管日志提供支持。
  11. 多语言编程:支持以各种语言使用 JSON 作为有效负载的微服务和消息格式。
  12. 后端即服务 (BaaS) :适用于任何云部署或内部部署的测试、开发和生产部署(中小规模)的微服务基础设施;适用于 Spring Boot 应用。

从有边界上下文模式开始

为微服务实现持久性的建议模式是在容器数据库中使用单个可插入数据库 (PDB) 。对于每个微服务,将持久性数据保持私有状态,并在微服务实施过程中创建可插入数据库。

在此模式中,只能通过微服务 API 访问专用持久性数据。

下图显示了微服务的持久性设计。

后面是 microservices_persistence.png 的说明
插图 microservices_persistence.png 的说明
此微服务实现的以下变体适用于融合数据库:
  • 专用表:每个服务拥有一组表或文档。
  • 方案:每个服务都拥有一个专用数据库方案或集合。
  • 数据库:每个服务在容器数据库中拥有一个可插入数据库,如图中所示。

微服务的持久性防范模式是跨多个微服务共享一个数据库方案。您可以实施原子、一致、隔离和持久的事务,实现数据一致性。这种反模式的优势在于它使用了一个简单的数据库。缺点是微服务在访问数据库时可能会相互干扰,开发周期可能会减慢,因为不同微服务的开发人员需要协调模式更改,这也会增加服务间依赖性。

您的微服务可以连接到 Oracle Cloud Infrastructure 上运行的 Oracle Database 实例。Oracle 多租户数据库支持容器中的多个可插入数据库 (Pluggable Database,PDB)。对于微服务、数据上下文隔离、安全性和高可用性而言,这是持久层的最佳选择。在许多情况下,使用方案级隔离的 PDB 较少。

了解在容器中部署微服务的价值

构建微服务后,必须将其容器化。在自己的容器中运行的微服务不会影响部署在其他容器中的微服务。

容器是软件的标准化单元,用于开发、发运和部署应用程序。

容器使用容器引擎(例如 Docker)进行管理。容器引擎提供了将所有应用程序依赖项打包为容器所需的工具。

您可以使用 Docker 引擎在容器中创建、部署和运行微服务应用。在 Docker 容器中运行的微服务具有以下特征:

  • 标准:微服务是可移植的。他们可以在任何地方跑。
  • 轻量级:Docker 共享操作系统 (operating system,OS) 内核,不需要每个实例都使用 OS,并作为轻量级进程运行。
  • 安全:每个容器作为隔离进程运行。因此,微服务是安全的。

将微服务容器化的过程包括创建 Dockerfile、创建和构建包含其相关项和环境配置的容器映像、将映像部署到 Docker 引擎以及将映像上载到容器注册表以进行存储和检索。

后面是 docker_container_process.png 的说明
插图 docker_container_process.png 的说明

了解如何使用 Kubernetes 编排微服务

容器中运行的微服务必须能够交互和集成,以提供所需的应用程序功能。此集成可以通过容器编排来实现。

通过容器编排,您可以在集群中启动、停止容器并将其分组。它还可以实现高可用性和扩展。Kubernetes 是容器编排平台之一,可用于管理容器。

将微服务容器化后,您可以将其部署到 Oracle Cloud Infrastructure Container Engine for Kubernetes

在将容器化微服务应用部署到云之前,您必须在本地 Kubernetes 引擎中部署和测试该应用,如下所示:

  • 创建您的微服务应用。
  • 构建 Docker 映像,将微服务容器化。
  • 在本地 Docker 引擎中运行微服务。
  • 将容器映像推送到容器注册表。
  • 在本地 Kubernetes 引擎(例如 Minikube)中部署和运行微服务。

在本地 Kubernetes 引擎中测试应用后,按如下方式将其部署到 Oracle Cloud Infrastructure Container Engine for Kubernetes

  • 创建集群。
  • 下载 kubeconfig 文件。
  • 在本地设备上安装 kubectl 工具。
  • 准备 deployment.yaml 文件。
  • 将微服务部署到集群中。
  • 测试微服务。

下图显示了将容器化微服务应用部署到 Oracle Cloud Infrastructure Container Engine for Kubernetes 的流程。

后面是 oke_deployment_process.png 的说明
插图 oke_deployment_process.png 的说明

了解 Oracle Backend for Spring Boot and Microservices

Spring Boot 是用 Java 构建微服务的最流行的框架。成功部署微服务架构的 12 种模式之一是后端即服务 (BaaS) 模式。OCI 市场中提供 Oracle BaaS,可在 30 分钟内使用 Terraform 和 Ansible 进行部署。Oracle BaaS 提供了一组部署和运行微服务所需的平台服务,这些服务是 Spring Boot 环境不可或缺的。下图显示了 Oracle Backend for Spring Boot and Microservices 平台的详细信息。