DDD(领域驱动设计)是微服务体系结构的核心和最重要的基础 - Prabhat


DDD(域驱动设计)是微服务体系结构的核心和最重要的基础。不了解DDD就无法掌握微服务架构真正的美丽之处。
微服务架构顾名思义是一种将后端应用构建为一组小型服务的方法。每个服务都在自己的进程中运行,并使用HTTP / HTTPS,WebSocket或AMQP等协议与其他进程进行通信。每个微服务在特定的上下文边界内实现特定的端到端域或业务功能,并且每个微服务必须自主开发并且可以独立部署。
每个微服务都应拥有其相关的域数据模型和域逻辑(主权和分散数据管理)。

微服务架构的服务应为多大?
在开发微服务时,大小不应成为重点。相反,重要的一点应该是创建松散耦合的服务。以下是松散耦合服务的好处(针对每种服务):

  • 开发自主权
  • 部署方式
  • 可扩展性

在识别和设计微服务时,请尝试使其尽可能小,只要不需要与其他微服务有太多直接依赖关系即可。比微服务的大小更重要的是它必须具有的内部凝聚力以及与其他服务的独立性。

为什么使用微服务架构?
微服务架构优点是:“我提供长期的敏捷性。” 微服务使您可以基于许多可独立部署的服务来创建应用程序,从而在复杂,大型和高度可扩展的系统中实现更好的可维护性,每个服务均具有细化和自主的生命周期。
另外一个好处是,微服务可以独立扩展。您必须以一个单元为单位进行扩展,而不是拥有单个整体应用程序。例如借助Docker和Kubernetes轻松扩展。
以下是重要的好处:

  • 您可以仅扩展需要更多处理能力或网络带宽来满足需求的功能区域,而不必扩展应用程序中不需要扩展的其他区域。
  • 微服务方法允许对每个服务进行敏捷更改和快速迭代,因为您可以更改复杂,大型和可伸缩应用程序的特定,较小区域。
  • 架构基于微服务的细粒度应用程序可以实现持续集成和持续交付实践。它还加快了向应用程序中交付新功能的速度。
  • 应用程序的细粒度组合还使您能够独立运行和测试微服务,并在保持它们之间明确的合同的同时自主地发展它们。
  • 只要不更改接口或协定,就可以更改任何微服务的内部实现或添加新功能,而不会破坏其他微服务。

微服务架构如何在生产中提供帮助?
以下是使基于微服务的系统成功投入生产的重要方面:
  • 监视和健康检查服务和基础结构。
  • 服务的可扩展基础架构(即云和协调器)。
  • 多个级别的安全设计和实现:身份验证,授权,机密管理,安全通信等。
  • 快速交付应用程序,通常由不同的团队专注于不同的微服务。
  • DevOps和CI / CD实践和基础架构。

结论
DDD是微服务架构的一个非常重要的概念。事件源,CQRS,API网关等是微服务架构师的重要组成部分。如今,DockerKubernetesLinux等是可伸缩性的重要组成部分。
在最重要的供应商的支持下,Docker正在成为容器行业的事实上的标准。此外,微服务架构正在成为分布式关键任务应用程序的重要方法。
在基于微服务的体系结构中,应用程序建立在可以独立开发,测试,部署和版本控制的服务集合上。


 


下图是基于Kubernetes+Istio+Knative的微服务应用:
https://haralduebele.blog/2020/07/02/knative-example-deploying-a-microservices-application/

首先在笔记本Win10中基于WSL+Docker Desktop安装Kubernetes和Istio、Knative
下载案例源码:https://github.com/IBM/cloud-native-starter

$ git clone https://github.com/IBM/cloud-native-starter.git
$ cd cloud-native-starter
$ ROOT_FOLDER=$(pwd)
$ cd ${ROOT_FOLDER}
$ docker run -v $ROOT_FOLDER/:/cloud-native-starter -it --rm ibmcom/ibm-cloud-developer-tools-amd64
$ cd ${ROOT_FOLDER}
$ scripts/check-prerequisites.sh
$ scripts/deploy-articles-java-jee.sh
$ scripts/deploy-web-api-java-jee.sh
$ scripts/deploy-authors-nodejs.sh
$ scripts/deploy-istio-ingress-v1.sh
$ scripts/deploy-web-app-vuejs.sh
$ scripts/show-urls.sh

浏览器打开案例URL: http://192.168.99.100:31380
案例API端点: http://192.168.99.100:31380/web-api/v1/getmultiple