硅谷Spring项目组专家教你利用Spring Cloud构建微服务

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

 

在这一系列文章中,我将为您介绍利用Spring Cloud和Docker构建微服务平台的一些基本概念。

 

什么是Spring Cloud

 

Spring Cloud是一系列Pivotal云应用开放工具的合称,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式,为构建分布式系统的一些常见模式提供了解决方案。

 

如果您熟悉构建应用程序的Spring Framework,那么对Spring Cloud就应该也不陌生,因为它就是以这些框架为基础而发展出来的。

 

在Spring Cloud提供的解决方案当中,你会发现解决以下问题的工具:

  • 配置管理

  • 服务探索

  • 断路器

  • 分布式会话

 

采用Spring Cloud 的最大好处在于它是构建在Spring Boot的概念之上的。

 

对第一次听说Spring Boot 的你们而言,从这个项目的名字就可以洞察一切。你可以从Spring Framework和项目生态系统当中得到一切所需,调整完善、简化配置并实现生产就绪。

 

服务探索和智能路由

 

每个服务在微服务架构中都有专门用途。在Spring Cloud上构建微服务架构时先要应对几个首要的问题,首先要创建的两个微服务分别叫做配置服务和探索服务。下面用一张图例来说明。

 

 

上图阐释了4步微服务设置,模块间的线条代表它们之间的关联性

 

配置服务位于上方,为黄色,并且依赖于其他的微服务;探索服务位于底部,为蓝色,也依赖于其他微服务。

 

有两个微服务是绿色的,它们与我将在本系列中使用的示例应用程序相关:电影和建议。

 

配置服务

 

配置服务是任何微服务架构的重要组成部分。以十二要素应用宣言的方法为基础,你的微服务的应用程序配置应储存于环境下,而非项目中。

 

配置服务之所以必要,是因为它通过简单的点到点服务呼叫来检索配置,从而处理所有服务,这样做的优点是多目的性。

 

假设我们拥有多个部署环境,那么如果我们只有一个测试环境和生产环境,这些环境的配置就将有所不同。配置服务可能会为某个环境配置专用的Git仓库,其他环境中无法访问该配置,仅有该环境中运行的配置服务可以访问该配置。

 

 

当配置服务启动时将引用这些配置文件的路径,并开始将这些文件提供给需要配置的微服务。每个微服务可以拥有各自的配置文件来配置到它正在运行的环境中,在此过程中,配置具体且集中于同一地方,这个地方可供版本控制和修订,无需重新启动服务来改变配置。

 

有了Spring Cloud可访问的管理端点,你可以更改环境中的配置和主导探索服务的刷新,这将使所有的消费者都获取全新配置。

 

探索服务

 

探索服务是微服务架构的另一个重要组成部分。探索服务处理并保有可用于集群的服务实例列表。在应用程序中,服务到服务的请求是由客户端发起的,而这个实例项目中却使用了Spring Cloud Feign,一个源自Netflix OSS项目,为微服务RESTful架构以客户为基础的API。

 

 

在上面的代码示例中,我创建了一个Feign客户端映射到由电影服务披露的REST API架构方法。首先使用@FeignClient注释,指定我想创建为电影微服务的客户API,接下来明确映射我想消费的服务,在描述REST API的方法中指定一个URL模式。

 

最有意思的部分则是创建Feign客户端,我只需知道想要创建的客户端服务ID就可以了。该服务URL是在运行时自动配置的,因为设置时集群中每个微服务都将在探索服务上注册一个服务ID。

 

这同样适用于微服务架构中的其他所有服务,用户只需提供想要通信的服务ID即可,其他一切将被Spring自动完成。

 

API网关

 

如果我们想要创建服务集群来管理领域实体,那么API网关服务就是另一个重要组成部分。下面的绿色六边形是我们的数据驱动服务,该服务管理领域实体,甚至还管理其数据库。通过增加API网关服务,我们可以为每个由绿色服务披露的API路径创建代理。

 

 

假定建议服务和电影服务在他们所管理的领域实体上暴露了自己的REST API,API网关将通过探索服务找出这些服务,并注入其他服务的API方法的代理路径。这种方式下,建议服务和电影服务将在所有暴露REST API的微服务中具有完整定义的本地路径,API网关将把路径请求通过HTTP重新转到其请求路径的服务实例上去。

 

示例项目

 

我将使用一个示例项目为您演示一个终端到终端的云原生平台,使用Spring Cloud构建实际微服务架构的方法。

 

示例中所展示的概念有:

  • Docker集成测试

  • 混合持久化

  • 微服务架构

  • 服务探索

  • API网关

 

各个服务均是通过Docker建立和部署的,终端到终端的集成测试可以使用Docker在开发人员的机器上组建完成。

 

示例项目的核心概念之一是如何在实践中实现混合持久化,项目微服务使用其数据库的同时与其他服务通过REST或消息总线进行数据集成,以下各个数据库的都可以拥有微服务。

  • Neo4j(图形)

  • MongoDB的(文件)

  • MySQL的(关系)

 

示例项目演示了如何使用微服务,而非使用整体优先策略来构建新的应用程序。由于项目中的每个微服务都是“单亲项目”的一个模块,开发人员能够运行和开发其本地机器上运行的每个微服务。添加新的微服务的过程相当轻松,因为探索服务将自动发现集群上运行的新服务。

 

该项目包含两个探索服务,一个在Netflix Eureka上,另一个使用Hashicorp的Consul。拥有多个探索服务使得我们可以使用其一(Consul)为集群DNS提供商,另一(Eureka)为API网关代理。

 

每个微服务将与Eureka为整个集群协调检索API路径。在集群中,每个微服务均使用这种策略保持负载平衡,并通过一个API网关进行曝光。每个服务将自动探索并把API请求转到该路径服务上去。这个代理技术在开发用户界面方面和通过它自己的主机作为代理来访问平台上的全部API方面同样大有裨益。

 

示例项目使用Docker打造各个微服务的容器图像。作为Maven构建过程的一部分,我们可以轻易地在设备上通过Docker协调组建所有微服务集群。

 

让我们开始吧!

 

开始使用之前请访问此示例项目的GitHub信息库(在浏览器中手动输入如下链接)。

 

https://github.com/kbastani/spring-cloud-microservice-example

 

复制项目并将信息库下载到你的计算机上,下载后,你需要同时使用Maven和Docker进行本地编辑和构建图像。

 

首先,请下载Docker。如果您还没有下载,请先在开发设备上下载和运行Docker。您还需要安装DockerCompose,如果您使用的是Mac OSX和boot2docker,请确保您在VirtualBox上为boot2docker-VM配置的内存至少是5GB,具体方法详见如下命令。

 

 

在您的设备上运行该示例的要求如下:

  • Maven 3

  • Java 8

  • Docker

  • Docker Compose

 

想要从终端构建项目,请在项目的根目录下运行以下命令。

 

 

该项目将下载所有依赖关系和编写各个项目所需的要素,各个服务即将构建,然后Maven Docker插件将把各个图像自动构建到本地Docker注册中去。Docker必须运行,并且在运行mvn clean install命令后可以访问即为构建成功。

 

该项目成功生成后,你会看到如下内容:

 

 

现在,既然各个图像已经成功生成,我们可以使用Docker Compose运转集群,项目预配置中已包含Docker Compose的yaml文件。

 

从项目根目录,导航到spring-cloud-microservice-example/docker目录。

要启动微服务集群,请运行以下命令:


 

如果一切配置正确,我们先前构建的各个容器图像将在其Docker VM容器内推出,并可与自动服务探索联网。你会发现各个服务均有日志输出波动,因为它们开启了启动顺序,取决于你正在运行的设备的性能,这一过程可能需要几分钟。
 

一旦启动序列完成,就可以导航到Eureka主机,将会显示已注册探索服务的服务。

 

复制并粘贴以下命令到可以通过$ DOCKER_HOST环境变量进行访问的Docker终端上去。

 

 

如下图所示,如果Eureka可以正确启动,一个浏览器窗口将在Eureka服务仪表盘位置打开。


 

我们可以看到各个正在运行的服务实例及其状态,然后,我们可以访问数据驱动型服务中的一种,例如电影服务。

 

 

该命令将导航到API网关的端点,并将代理转向电影服务的REST API端点。这些REST API已配置为可使用HATEOAS的状态,可以自动探索所有服务的功能性和嵌入式链接的有效性。

 

总结

 

本文中主要回顾了以下概念,如果您能仔细回味一下刚刚的例子,相信能为您更好地理解微服务有所帮助。

 

  • 服务探索

  • 配置具体化

  • API网关

  • 使用Docker Compose进行服务编排

 

作者介绍  Kenny Bastani

  • Spring项目组的一员,也是硅谷一位充满激情的技术推广者和开源软件的倡导者。

  • 作为一个企业软件顾问,他把多样化的技能应用到敏捷模式下需要全栈Web开发人员的项目中去。作为流行的图形数据库Neo4j的积极倡导者,Kenny支持在其技术堆栈中嵌入NoSQL数据库。

  • 作为一个充满激情的博主和开源贡献者,Kenny是开源开发社区中的一员,利用全新图形处理技术进行数据分析。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-07-05

目录
相关文章
|
9天前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
108 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
28天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
154 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
25天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
202 13
Spring Cloud Alibaba:一站式微服务解决方案
|
11天前
|
Java 关系型数据库 Nacos
微服务SpringCloud链路追踪之Micrometer+Zipkin
SpringCloud+Openfeign远程调用,并用Mircrometer+Zipkin进行链路追踪
120 20
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
122 5
|
30天前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
42 2
|
30天前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
3月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
254 2
|
9天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
16天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
66 14