iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解Spring Cloud和Docker的微服务架构
  • 189
分享到

如何理解Spring Cloud和Docker的微服务架构

2023-06-04 16:06:21 189人浏览 薄情痞子
摘要

如何理解spring cloud和Docker的微服务架构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  Spring Cloud和Docker的微服务架构  功能服务

如何理解spring cloudDocker微服务架构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

  Spring Cloud和Docker的微服务架构

  功能服务

  整体应用被分解成三个核心的微服务。这些微服务是围绕某些业务功能进行组织,可独立部署的应用程序。

如何理解Spring Cloud和Docker的微服务架构

服务间关系

  Account Service(账户服务)

  包含用户的输入逻辑和验证:收入/支出,储蓄和账户设置。

如何理解Spring Cloud和Docker的微服务架构

  Statistics Service(统计服务)

  对主要统计参数执行计算,并获取每个帐户的时间线。数据点包含标准化为基本货币和时间段的值。这些数据可用于追踪账户一生中的现金流动态

如何理解Spring Cloud和Docker的微服务架构

  Notification Service(通知服务)

  保存用户联系信息和消息设置(比如提醒和备份频率),定时器从其他服务器上收集所需的信息并通过 emial 发送给订阅者。

如何理解Spring Cloud和Docker的微服务架构

  注意

  ·每个微服务都有自己的数据库,不能绕过微服务提供的 api 直接访问微服务的持久化数据。

  ·这个例子中我采用 mongoDB 作为每个微服务的数据库,用户可以根据微服务的类型选择合适的数据库。

  ·微服务和微服务间的采用同步的 REST API 进行通信,通常的做法是采用交互风格进行通信,比如:通过同步的 GET 请求来检索数据,通过Message Broker使用异步方法来创建/更新操作,以便分离服务和缓冲区消息,目标是实现最终一致性。

  Infrastructure Services(基础设施服务)

  分布式系统中有许多共同的模式,可以帮助我们描述核心服务。spring cloud提供了强大的工具以帮助 Spring Boot 应用实现这些模式,下面会做一些简单的介绍:

如何理解Spring Cloud和Docker的微服务架构

系统架构

  Config Service(配置服务)

  spring cloud config 是分布式系统中的集中式配置服务。

  在这个项目中,我使用 native profile 从本地的 classpath 上加载配置文件,你可以在 shared 目录下面查看 config service resources。比如:当Notification-service请求它的配置信息,配置服务会返回如下来两个文件:shared/notification-service.yml 和 shared/application.yml(这个文件会被所有的应用共享).

  Client-side Usage(客户端使用)

  只要用spring-cloud-starter-config依赖构建Spring Boot应用程序,其余部分将自动配置

  应用中不需要其他任何内置的properties,只需要提供一个bootstrap.yml文件,这个文件中需要包含当前应用的名字和Config service 的url

  spring:

    application:

      name: notification-service

    cloud:

      config:

        uri: Http://config:8888

        fail-fast: true

  spring cloud config支持动态修改 App 的配置信息,比如: 在EmailService bean上添加@RefreshScope注解,这就意味着你可以修改 email 的正文和标题而不用重新编译或者重启Notification service。具体操作如下:

  1、修改config server 上相关的属性

  2、对Notification service执行刷新请求:

  curl -H "Authorization: Bearer #token#" -XPOST http://127.0.0.1:8000/notifications/refresh

  也可以采用WEBhooks自动执行这个流程

  注意

  1、动态刷新有如下限制:@RefreshScope 注解无法在@Configuration 类和 @Scheduled 方法上生效。

  2、fail-fast属性意味着如果服务无法连接上 config service,则服务会在启动期间立即失败。这在一起启动所有服务的时候十分有用。

  Auth Service(鉴权服务)

  授权职责完全提取到单独的服务器,后者为后端资源服务授予OAuth3令牌。 身份验证服务器用于用户授权以及在外围进行安全的机器对机器通信。

  在这个项目中,我使用密码凭证作为用户授权的授权类型(因为它只被本机应用程序UI使用),而客户端凭证作为微服务授权的授权类型。

  Spring Cloud Security提供了便利的注释和自动配置,使得从服务器和客户端都可以轻松实现。 您可以在文档中了解更多信息,并查看Auth Server代码中的配置详细信息。

  客户端与传统的基于 session 的权限验证类似,你可以从 request 中获取Principal对象信息,校验用户的角色,使用@PreAuthorize注解进行基于正则的访问控制。

  每个 client (account-service, statistics-service, notification-service 和 browser)都有一个 scope属性: server :后台服务, ui: 浏览器,通过scope 能防止 controller 被外部访问:

  @PreAuthorize("#oauth3.hasScope('server')")

  @RequestMapping(value = "accounts/{name}", method = RequestMethod.GET)

  public List getStatisticsByAccountName(@PathVariable String name) {

      return statistiCSService.findByAccountName(name);

  }

  API Gateway

  在这个例子中,存在三个核心服务,将外部API 暴露给客户端,但是在现实世界中,随着系统复杂度的增加,核心服务数也会急剧增长。可能存在一个复杂页面,渲染这个页面需要调用上百个服务。

  理论上,客户端应该直接请求每一个微服务,但是这种方式存在很多挑战和局限性,比如:客户端需要了解所有微服务的地址,为每一个信息独立地执行 http 调用,然后在客户端 merger 这些信息。Another problem is non-web-friendly protocols, which might be used on the backend.

  通常一个更好的实现方式是使用 API Gateway,它是一个进入系统的单入口,目的是将请求路由到合适的后台服务或者调用多个后台服务并将结果聚合返回给客户端。API Gateway也会被用来做权限验证,监控,压力测试,服务迁移,静态响应处理和主动流量管理

  在 Spring cloud 项目中可以通过@EnableZuulProxyannotation注解使用Netflix开源的项目edge service,

  在这个例子中我们使用Zuul存储静态内容(UI application),路由请求到合适的微服务上,下面是Notification service的路由配置:

  zuul:

      routes:

          notification-service:

              path: /notifications/**

              serviceId: notification-service

              stripPrefix: false

  这个配置意味着所有以 /notifications开头的请求都会被路由到Notification service,Notification service 地址并没有硬编码,Zuul使用服务发现机制定位Notification service 实例并实现访问的负载均衡

  Service Discovery(服务发现)

  通过服务发现能够自动地确定服务实例的网络位置(由于实例数扩展,实例失败/更新,会导致服务实例的网络地址发生变化)

  服务发现的关键部分是服务注册,在这个例子中我们使用Netflix Eureka 实现这个功能,Eureka是基于客户端服务发现模式的一个好的例子,客户端负责确定可用服务实例(使用注册服务器)的位置和负载均衡请求。

  在Spring Boot中,您可以使用spring-cloud-starter-eureka-server依赖项,通过@EnableEurekaServer注释和简单的配置属性来构建Eureka ReGIStry。

  客户端支持需要使用@EnableDiscoveryClient注解和添加包含应用名称的bootstrap.yml文件

  spring:

      application:

          name: notification-service

  在应用启动的时候,它会在Eureka Serve中注册,并提供相关的meta-data信息(比如:host,port,健康检查页,主页等)。Eureka从微服务的每个实例接收心跳信息,如果在约定的时间内(可配置)没有接受到心跳信息,这个实例就会被注册中心移除。

  Eureka提供了一个简单的页面,在这个页面上你可以查看运行的微服务以及这些服务对应的实例

如何理解Spring Cloud和Docker的微服务架构

Eureka

  Load Balancer, Circuit Breaker, and Http Client(负载均衡,断路器以及 http Client)

  Netflix OSS 提供了另外一套优秀的工具集

  Ribbon

  Ribbon是一个客户端的负载均衡器,可以通过它控制 HTTP 和 tcp client 请求,与传统的负载均衡器相比,每个线上调用不需要额外的跳跃,你可以直接联系所需的服务。

  Eureka本身与Spring Cloud 和 Service Discovery集成在一起,开箱即用,Eureka Client提供了一个可用服务的动态列表,Ribbon可以通过这个列表来实现负载均衡。

  Hystrix

  Hystrix是熔断器模式的实现,通过网络访问依赖关系来控制延迟和失败。核心思想是在大量微服务的分布式环境中停止级联失败,这有助于系统尽快恢复 。

  除了提供熔断器,Hystrix还可以添加一个fallback方法,在主命令失败的情况下返回默认值。

  而且,Hystrix为每个命令生成执行结果和延迟的度量标准,我们可以用它来监视系统行为。

  Feign

  Feign是一个声明式HTTP客户端,与Ribbon和Hystrix无缝集成。 实际上,通过一个Spring-Cloud-Starter-Feign依赖和@EnableFeignClients批注,您可以拥有一整套负载均衡器,断路器和HTTP客户端,并具有合理的随时可用的默认配置。

  下面是Account Service的一个列子:

  @FeignClient(name = "statistics-service")

  public interface StatisticsServiceClient {

      @RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)

      void updateStatistics(@PathVariable("accountName") String accountName, Account account);

  }

  上面的例子指定了所需的服务id - statistics-service,依靠Eureka的自动发现

  Monitor Dashboard

  在这个项目配置中,搭载Hystrix的每个微服务都通过Spring Cloud Bus(使用AMQP代理)向Turbine推送指标。Monitoring project只是一个小型的包含Turbine和Hystrix仪表板的Spring boot应用程序。

  让我们看看不同负载下的系统行为:Account service调用Statistics service ,Statistics service 响应模拟不同的延迟。响应超时阈值设置为1秒。

如何理解Spring Cloud和Docker的微服务架构

Monitor Dashboard

  Log Analysis

  集中式日志在分析分布式系统中存在的问题时十分有效。elasticsearch, Logstash, 和 Kibana的技术栈让你轻松搜索和分析你的日志,系统利用率和网络活动数据。在这篇文章中可以找到相关的描述。

  Security

  高级安全配置超出了这个概念验证项目的范围。 要更真实地模拟真实系统,请考虑使用https和JCE密钥库来加密微服务密码和配置服务器属性内容(请参阅文档以了解详细信息)。

  Infrastructure Automation(基础设置自动化)

  部署相互依赖的微服务,比部署整体应用程序要复杂得多。 拥有完全自动化的基础设施非常重要。 采用持续交付方式,我们可以获得以下好处:

  ·随时发布软件的能力。

  ·任何构建可能最终成为一个release。

  ·一次构建工件,根据需要进行部署

  这是在这个项目中实现一个简单的持续交付工作流程:

如何理解Spring Cloud和Docker的微服务架构

持续交付流程

  在这个配置中,Travis CI为每个成功的git推送建立标记的图像。 因此,Docker Hub上的每个微服务总是有最新的镜像,而旧镜像使用Git commit hash进行标记。 如果需要的话,部署它们很容易并且快速回滚。

  How to Run All the Things?

  你将启动8个Spring Boot应用程序,4个mongoDB实例和RabbitMQ。 确保您的机器上有4 Gb RAM。 通过Gateway,Registry,Config,Auth Service和Account Service,您始终可以运行重要的服务。

  开始之前

  ·安装Docker和Docker Compose。

  ·导出环境变量: CONFIG_SERVICE_PASSWord, NOTIFICATION_SERVICE_PASSWORD, STATISTICS_SERVICE_PASSWORD, ACCOUNT_SERVICE_PASSWORD, MONGoDB_PASSWORD

  Production Mode

  在这种模式下,会从 docker hub 下抓取最新的 images,只需复制docker-compose.yml并点击docker-compose up -d

  Development Mode

  如果您想自己构建镜像(例如,在代码中进行了一些更改),则必须克隆所有repository并使用Maven构建。 然后运行

  docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

  docker-compose.dev.yml继承了docker-compose.yml,可以在本地构建镜像并公开所有容器端口以方便开发

  ·Important Endpoints

  ·Ilocalhost:80 - Gateway

  ·Ilocalhost:8761 - Eureka Dashboard

  ·Ilocalhost:9000 - Hystrix Dashboard

  ·Ilocalhost:8989 - Turbine stream (source for Hystrix Dashboard)

  ·Ilocalhost:15672 - RabbitMq management

  注意

  所有Spring Boot应用程序都需要依赖运行中的Config Server才能启动。 但是,我们可以同时启动所有的容器,因为docker-compose选项始终存在Spring Boot的fail-fast和restart属性。 这意味着所有从属容器将尝试重新启动,直到配置服务器启动并运行。

  此外,在所有应用程序启动之后,服务发现机制还需要一些时间,服务都不会立马被客户端的发现,直到实例,Eureka服务器和客户端在其本地缓存中都具有相同的元数据,因此可能需要3个心跳。 默认心跳周期是30秒。

关于如何理解Spring Cloud和Docker的微服务架构问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 如何理解Spring Cloud和Docker的微服务架构

本文链接: https://www.lsjlt.com/news/238644.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解Spring Cloud和Docker的微服务架构
    如何理解Spring Cloud和Docker的微服务架构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  Spring Cloud和Docker的微服务架构  功能服务 ...
    99+
    2023-06-04
  • 如何理解Spring Cloud微服务架构
    这篇文章主要讲解了“如何理解Spring Cloud微服务架构”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Spring Cloud微服务架构”吧!...
    99+
    2024-04-02
  • 如何使用Spring Cloud构建微服务架构?
    微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。在 Java 生态圈,目前使用较多的微服务框架就是集成了包括 Netflix O...
    99+
    2023-06-05
  • spring cloud微服务分布式云架构Spring Cloud Zuul
    Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码请加企鹅求求: 三五三六二四七二五九POM依赖<dependencies>      &n...
    99+
    2023-06-05
  • spring cloud + spring boot + springmvc+mybatis微服务云架构
    做一个微服务架构需要的技术整理:了解springcloud架构可以加求求:三五三六二四七二五九View: H5、Vue.js、Spring Tag、React、angularJsSpring Boot/Spring Cloud:Z...
    99+
    2023-06-05
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
    Spring Cloud是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器、数据监控等(这里只简单的列了一部分),都可以用Spring Boot...
    99+
    2023-06-05
  • 基于Spring Cloud的微服务架构演变史
    导读一段时期以来 “微服务架构 ”一直是一个热门词汇,各种技术类公众号或架构分享会议上,关于微服务架构的讨论和主题也都非常多。对于大部分初创互联网公司来说,早期的单体应用结构才是最合适的选择,只有当业务进入快速发展期,在系统压力、业务复杂度...
    99+
    2023-06-05
  • spring cloud微服务架构-Eureka保护机制
     首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行。了解springcloud架构可以加求求:三五三六二四七二五九默认情况下,如果Eur...
    99+
    2023-06-05
  • spring cloud微服务分布式云架构 - Spring Cloud集成项目简介
    Spring Cloud集成项目有很多,下面我们列举一下和Spring Cloud相关的优秀项目,我们的企业架构中用到了很多的优秀项目,说白了,也是站在巨人的肩膀上去整合的。在学习Spring Cloud之前大家必须了解一下相关项目,希望可...
    99+
    2023-06-05
  • 如何理解微服务架构
    因为Martin Fowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微服务架构,又要各想办法,具体问...
    99+
    2023-06-05
  • Spring Cloud微服务架构Sentinel数据双向同步
    目录Sentinel数据双向同步前言Sentinel的规则管理模型准备工作1. 版本选取2. 下载Sentinel源码3. 解压并导入项目改造Sentinel控制台1. 全局修改① ...
    99+
    2022-11-13
    SpringCloud Sentinel数据双向同步 SpringCloud Sentinel
  • spring cloud微服务分布式云架构 - 整合企业架构的技术点
    spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢?有spring cloud b2b2c电子商务需求的朋友可以加企鹅求求:三五三六二四七二五九下面我针对于...
    99+
    2023-06-05
  • (二)spring cloud微服务分布式云架构 - 整合企业架构的技术点
    spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢?下面我针对于spring cloud微服务分布式云架构做了以下技术总结,希望可以帮助到大家:View:&...
    99+
    2023-06-05
  • 阿里架构师:带你快速理解微服务架构,理解微服务架构的核心
    什么是微服务首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。传统的WEB应用核心分为业务逻辑、适配器以及API或通过UI访问的WEB界面。业务逻辑定义业务流程、业务规则以及领域...
    99+
    2023-06-04
  • Spring Cloud 如何保证微服务内安全
    一、简介 在微服务的架构下,我们需要把系统的业务划分成多个单一的微服务。每个微服务都会提供接口供其他微服务调用,在Dubbo中可以通过rmi、nio等实现,Spring Cloud中...
    99+
    2024-04-02
  • 构建Spring Cloud微服务北京赛车平台架设详细步骤
    大型企业分布式微服务云北京赛车平台架设服务组件,企 娥:217 1793 408 实现模块化、微服务化、原子化、灰度发布、持续集成 commonservice eureka Netflix ...
    99+
    2024-04-02
  • 微服务架构中如何进行服务的部署和管理?
    随着云计算、容器技术和DevOps的快速发展,微服务架构正变得越来越流行。与传统的单块应用相比,微服务架构可以将应用程序划分为小型且自治的服务,以便更好地达到可伸缩性和灵活性。在同步开发、测试和发布服务等任务时,部署和管理服务是极为重要的,...
    99+
    2023-05-17
    微服务架构 服务部署 服务管理
  • 微服务架构中如何处理服务的追踪和诊断?
    随着云计算以及容器技术的不断普及,微服务架构作为一种新型的软件架构方式也引起了广泛的关注。相比传统的单体应用架构,微服务架构具有更好的可拓展性和可维护性,并且能够更好地适应快速变化的需求。然而,随着微服务数量的增多和复杂度的增加,问题的排查...
    99+
    2023-05-17
    微服务 服务追踪 服务诊断
  • 微服务架构中如何处理服务的故障处理和恢复?
    随着互联网和云计算技术的飞速发展,越来越多的企业开始采用微服务架构来构建分布式系统,以实现更高的可伸缩性、可扩展性和可靠性。但是,微服务架构中服务的故障处理和恢复也是一个重大挑战,因为微服务架构中的服务是高度分布式和松散耦合的。因此,了解微...
    99+
    2023-05-17
    恢复 微服务架构 故障处理
  • 微服务架构中如何处理服务的生命周期和管理?
    随着互联网和移动互联网的快速发展,软件开发变得越来越复杂,而微服务架构已成为当今软件开发的主流趋势之一。微服务架构是一种将大型应用程序划分为多个小型服务的方法。每个服务都具有特定的业务功能,并且可以独立地进行开发、测试和部署。在这种架构中,...
    99+
    2023-05-17
    微服务 生命周期 管理。
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作