当前位置: 首页 > 科技观察

如何用SpringBoot和Cloud实现微服务

时间:2023-03-17 12:39:16 科技观察

【.com快译】近年来,微服务架构凭借其架构上的种种优势,成为应用开发的首选。但不可否认的是,每一种架构都有自己的不足,微服务架构也不例外。例如:在微服务架构中,我们可以部署很多自主开发的服务来提供某些特定场景下的功能。但是,它们需要通过不同的API或事件相互通信。有时,他们甚至需要与一些外部系统通信以获得完整的系统功能。虽然我们在开发过程中需要尽量减少一个微服务对其他微服务的直接依赖。但在某些情况下,这是不可避免的。因此,在开发和部署微服务时,我们需要充分考虑和管理诸如:ServiceDiscovery、CircuitBreaker、DistributedTracing、路由、Connector、配置(Configurations)等关系。首先,我为大家准备了如下关系图。它向您展示了如何使用SpringBoot构建微服务,以及如何使用SpringCloud部署和管理微服务。如上图所示,我使用过SpringCloud提供的各种产品。下面我就每个组件解决的实际问题进行说明。SpringCloudGateway——如下图所示,所有从互联网(Web或OpenAPI)调用微服务都要经过Gateway来处理路由和交互(Cross-Cutting)等问题,包括:安全性能、监控和健壮性.如何使用SpringCloud搭建Gateway,请访问https://spring.io/projects/spring-cloud-gateway。配置服务器(ConfigServer)——如下图所示,微服务往往自带很多配置,这些配置对系统集成测试(SystemIntegrateTest,SIT)、用户验收测试(UserAcceptanceTest,UAT)、以及生产环境(PROD)各不相同。因此,这些配置应该是直接可管理和可维护的,无论是在应用程序外部还是在应用程序的中央位置。此外,如果需要更改配置,则不应强制其应用程序代码进行相应更改。SpringCloudConfig可以为分布式系统中的各种外部配置提供服务器端和客户端的支持。使用ConfigServer,您可以集中管理当前环境中所有应用程序的外部属性。如果您想了解更多有关如何使用SpringCloud轻松创建ConfigServer的详细信息,请参阅--https://spring.io/projects/spring-cloud-config。服务注册中心——各种类型的用户或服务需要使用不同类型的客户端或服务器端发现来确定向他们发送请求的服务实例的确切位置。然而,问题是:这些服务的客户如何知道每个环境都不同的可用服务实例?业界常见的解决方案是实施服务注册中心。它是各种可用服务及其实例和位置的数据库。毕竟各种服务实例在启动的时候就已经在服务注册中心注册过了。在这里,EurekaServer可以帮助我们创建对应的ServiceRegistry服务器,并注册其他所有服务。如果要创建并启用自己的注册表服务器,请使用spring-cloud-starter-netflix-eureka-server依赖项以及@EnableEurekaServer。EurekaDiscoveryClient–不同的服务需要相互调用。如今,大多数微服务都部署在虚拟机或容器化环境中,服务实例的数量及其位置经常动态变化。因此,我们需要实现一种机制,使服务客户端能够向那些动态变化的服务实例集发出请求。在这里,EurekaDiscoveryClient就派上用场了。可以帮助我们从Eureka服务注册中心获取注册相关服务。相应地,SpringCloud可以轻松实现服务发现。如下图所示,只要SpringCloudNetflix和EurekaCore在类路径(classpath)上,任何使用@EnableEurekaClient的SpringBoot应用都会尝试使用http://localhost:8761(默认值为eureka.client.serviceUrl.defaultZone)联系Eureka服务器。Zipkin服务器-在分布式系统中,仅了解实例的状态是不够的。我们经常需要聚合服务中所有实例的矩阵、日志和跟踪信息,以深入了解这些特定事务所采用的路径。在这里,我们需要使用分布式跟踪(也称为请求跟踪,参见--https://opensource.com/article/18/9/distributed-tracing-microservices-world)。它遵循系统内的一系列整体操作来查明发生故障的原因和性能不佳的根本原因。Zipkin(https://zipkin.io/)作为一个分布式追踪系统,其功能主要包括数据收集和搜索。也就是说,它可以帮助收集与服务架构中的延迟问题相关的各种时序数据。因此,SpringCloud在其整体解决方案中加入了zipkin,并相应推出了SpringCloudSleuth(https://spring.io/projects/spring-cloud-sleuth#overview),提供了SpringBoot对分布式tracingAutomate配置的支持。断路器(CircuitBreaker,Hystrix)——在微服务架构中,如果一个服务不可用,当另一个服务同步调用它时,等待响应的时间可能会过长,同时调用者会消耗各种资源。线程等资源。显然,如果资源耗尽,调用服务将无法处理其他类型的请求。因此,为了防止这样的网络或服务的故障蔓延到其他服务,我们需要使用断路器模式来构建容错和健壮的系统,以确保当关键服务不可用或出现高延迟时,系统仍然可以正常运行。在SpringCloud系统中,我们可以通过Hystrix(https://spring.io/projects/spring-cloud-circuitbreaker)来实现。如果您想了解更多有关如何在Springboot应用程序中使用Hystrix的信息,请参阅教程--https://dzone.com/articles/microservices-part-4-spring-cloud-circuit-breaker。此外,SpringCloud还提供了一个漂亮的dashboard来监控Hystrix各种命令的状态。您可以将主入口类@EnableHystrixDashboard与HystrixDashboardStarter一起使用来创建SpringBoot应用程序。SpringFeignClient-在微服务架构中,服务之间的通信可以说是“套路”,你经常需要使用某种机制来调用(invoke)另一个服务。作为声明式RestClient,SpringFeignClient可以创建一个用JAX-RS或SpringMVC注解装饰的接口。此类的动态实现非常易于使用,如下图所示。至此,通过以上的介绍,你想必已经了解了如何使用SpringBoot和Cloud实现微服务的知识和过程。有兴趣的可以尝试自己写一套简单的服务实例。【原标题】MicroservicesImplementationusing(SpringBootandCloud)(作者:NiteshGupta)