Sidecar模式助力Spring Cloud,实现跨语言微服务高效协同

开发 架构
Spring Cloud Alibaba Sidecar(以下简称:SCA Sidecar)能够有效地整合异构微服务,解决在微服务架构中由于技术栈、语言或平台差异导致的兼容性和通信问题。在什么场景下需要使用Sidecar呢?

环境:SpringBoot2.7.18 + Spring Cloud Alibaba Sidecar

1. 简介

Spring Cloud Alibaba Sidecar(以下简称:SCA Sidecar)能够有效地整合异构微服务,解决在微服务架构中由于技术栈、语言或平台差异导致的兼容性和通信问题。在什么场景下需要使用Sidecar呢?以下总结4点:

  • 多语言微服务整合:当微服务架构中涉及多种编程语言和框架时,Spring Cloud Alibaba Sidecar可以作为代理服务,实现不同语言微服务之间的通信和协调。
  • 跨平台服务集成:对于部署在不同平台或容器化环境中的微服务,Sidecar能够提供一个统一的接口和协议,简化跨平台的服务调用和集成。
  • 服务治理与监控:Sidecar可以协助实现服务的注册与发现、负载均衡、熔断降级等治理功能,并提供统一的监控和日志收集机制,提高系统的可观测性。
  • 老项目整合:那些由于版本限制或其他原因不适合引入整个如Nacos这样的注册中心的项目,Spring Cloud Alibaba  Sidecar成为了一个非常合适的解决方案。通过使用Sidecar,解决了老项目在微服务化过程中的兼容性和集成难题。

2. SCA SideCar原理

  • SCA Sidecar根据配置的异构微服务的IP、端口等信息,将异构微服务的IP/端口注册到服务发现组件上 。
  • SCA Sidecar实现了 健康检查 ,SCA Sidecar会定时检测异构微服务是否健康。如果发现异构微服务不健康,SCASidecar会自动将代表异构微服务的SCASidecar实例下线;如果异构微服务恢复正常,则会自动上线。

使用要求:

  • 【必须】你的异构微服务需使用HTTP通信。这一点严格来说不算要求,因为Spring Cloud本身就是基于HTTP的;
  • 【可选】如果微服务配置了 sidecar.health-check-url ,则表示开启健康检查,此时,你的异构微服务需实现健康检查(可以是空实现,只要暴露一个端点,返回类似 {"status": "UP"} 的字符串即可)。

3. 实战案例

3.1 准备异构项目

为了简单起见,我也不用其它语言实现一个服务了,还是用SpringBoot项目做试验,大家可以使用其它语言如:NodeJS,C#等语言实现。

该服务非常简单就提供一个业务接口,和一个健康检查所需要的接口,如下:

业务接口

@RestController
@RequestMapping("/users")
public class UsersController {
  
  @GetMapping("normal")
  public Object index() {
    return "正常请求" ;
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

健康检查接口

该接口的作用:上线 / 下线 该异构服务(我这当前就是SpringBoot服务)。

@RestController
@RequestMapping("/health")
public class HealthController {
  
  @GetMapping("")
  public Object health() {
    // 该打印是为了一会测试看效果
    System.out.println("服务状态...") ;
    Map<String, Object> status = new HashMap<>() ;
    // 注意:这里必须是status,value必须是大写的UP
    status.put("status", "UP") ;
    return status ;
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

配置文件

server.port=8080
  • 1.

该异构服务并没有依赖Spring Cloud相关的任何组件就是一个非常普通的项目。

3.2 准备Sidecar服务

引入依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sidecar</artifactId>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.

服务配置

spring:
  application:
    name: pack-car
---
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      username: nacos
      password: xxxooo
      discovery:
        enabled: true
        group: cloudApp
---
management:
  health:
    sidecar:
      enabled: true
---
# 这里的配置就是我们异构服务的相关信息
sidecar:
  ip: localhost
  port: 8088
  # 间隔多久进行一次监控检查,单位ms
  health-check-interval: 5000
  # 监控检查的URL,上面3.1中定义的接口
  health-check-url: http://${sidecar.ip}:${sidecar.port}/health
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

以上就做完了关于Sidecar服务的所有工作,我们只需要配置不需要任何的代码。  注意:上面配置的nacos服务发现端口和ip都会被修改为Sidecar配置的ip及端口,Sidecar内部实现的,有兴趣可以研究下源码非常简单。

接下来就可以分别启动上面两个服务测试,我们首先启动Sidecar服务,控制台将输出如下信息:

图片

请求了我们的异构服务,但是我们的异构服务并没有启动所以是失败状态。

启动异构服务,再次查看Sidecar控制台输出

图片

成功了,再查看异构服务控制台

图片图片

查看Nacos控制台

图片图片

成功注册异构服务,注意查看端口。

3.3 调用异构服务接口

接下来我们还需要一个服务,该服务也需要注册到nacos中,然后我们在这个服务中调用异构服务接口。

相关的依赖配置就不说了非常简单,下面我们就看能否通过服务发现成功调用异构服务的接口。

该服务的服务名为

spring.appliation.name=myapp
server.port=8100
  • 1.
  • 2.

启动服务查看服务是否成功注册到Nacos

图片图片


服务成功注册。

配置RestTemplate

@Bean
@LoadBalanced
RestTemplate lbRestTemplate(RestTemplateBuilder builder) {
  return builder.build() ; 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

通过RestTemplate调用上异构服务/users接口。

@Resource
private RestTemplate lbRestTemplate ;


@GetMapping("/lb")
@ResponseBody
public Object lb() {
  // 通过服务名请求
  return this.lbRestTemplate.getForObject("http://pack-car/users/normal", String.class) ;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.


图片图片

请求成功。

到此就完成了通过Sidecar整合异构系统。

责任编辑:武晓燕 来源: Spring全家桶实战案例源码
相关推荐

2022-07-13 13:34:30

微服务边车SideCar

2020-06-30 07:58:39

微服务Spring BootCloud

2023-03-20 08:00:00

公共云开发Spring Clo

2017-09-05 14:05:11

微服务spring clou路由

2024-02-06 18:05:54

微服务SpringCloud

2021-12-14 06:59:39

微服务Kubernetes架构

2018-06-01 23:08:01

Spring Clou微服务服务器

2024-08-05 10:03:53

2017-06-26 09:06:10

Spring Clou微服务架构

2023-12-19 09:33:40

微服务监控

2024-07-10 10:51:39

SpringEureka数据中心

2017-09-04 16:15:44

服务网关架构

2024-11-21 16:09:22

2017-07-03 09:50:07

Spring Clou微服务架构

2017-08-09 15:50:47

Spring Clou微服务架构

2017-08-10 11:15:05

Spring Clou微服务架构

2021-10-19 14:02:12

服务器SpringSecurity

2017-12-20 15:37:39

Spring Clou微服务架构

2017-07-04 17:35:46

微服务架构Spring Clou
点赞
收藏

51CTO技术栈公众号