文档章节

了解Sidecar模式

waylau
 waylau
发布于 01/28 23:55
字数 1600
阅读 1043
收藏 34

本文介绍Sidecar模式的特点,及其应用的场景。熟悉Native Cloud或者微服务的童鞋应该知道,在云环境下,技术栈可以是多种多样的。那么如何能够将这些异构的服务组件串联起来,成为了服务治理的一个重大课题。而Sidecar模式为服务治理,提供了一种解决方案。

将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。此模式还可以使应用程序由异构组件和技术组成。

这种模式被称为Sidecar,因为它类似于连接到摩托车的边车。在该模式中,边车附加到父应用程序并为应用程序提供支持功能。 sidecar还与父应用程序共享相同的生命周期,与父项一起创建和退役。边车图案有时被称为搭接图案并且是分解图案。

问题背景

应用程序和服务通常需要相关的功能,例如监控、日志、集中化配置和网络服务等。这些外围任务可以作为单独的组件或服务来实现。

如果它们紧密集成到应用程序中,它们可以在与应用程序相同的进程中运行,从而有效地使用共享资源。但是,这也意味着它们没有很好地隔离,并且其中一个组件的中断可能会影响其他组件或整个应用程序。此外,它们通常需要使用与父应用程序相同的语言或者技术栈来实现。因此,组件和应用程序彼此之间具有密切的相互依赖性。

如果将应用程序分解为服务,则可以使用不同的语言和技术构建每个服务。虽然这提供了更大的灵活性,但这意味着每个组件都有自己的依赖关系,并且需要特定于语言的库来访问底层平台以及与父应用程序共享的任何资源。此外,将这些功能部署为单独的服务可能会增加应用程序的延迟。管理这些特定于语言的接口的代码和依赖关系也会增加相当大的复杂性,尤其是对于托管、部署和管理服务。

解决方案

上述问题的解决方案是,将一组紧密结合的任务与主应用程序共同放在一台主机(Host)中,但会将它们部署在各自的进程或容器中。这种方式也被称为“Sidecar(边车)模式”。

下图展示了任务与主应用程序的部署关系图。

Sidecar(边车)模式

Sidecar模式

边车服务不一定是应用程序的一部分,而是与之相关联。它适用于父应用程序的任何位置。Sidecar支持与主应用程序一起部署的进程或服务。这就像是如下图所示的边三轮摩托车那样,将边车安装在一辆摩托车上,就变成了边三轮摩托车。每辆边三轮摩托车都有自己的边车。类似同样的方式,边车服务共享其父应用程序的主机。对于应用程序的每个实例,边车的实例被部署并与其一起托管。

边三轮摩托车

使用边车模式的优点包括:

  • 在运行时环境和编程语言方面,边车独立于其主要应用程序,因此不需要为每种语言开发一个边车。
  • 边车可以访问与主应用程序相同的资源。例如,边车可以监视边车和主应用程序使用的系统资源。
  • 由于它靠近主应用程序,因此在它们之间进行通信时没有明显的延迟。
  • 即使对于不提供可扩展性机制的应用程序,也可以使用边车通过将其作为自己的进程附加到与主应用程序相同的主机或子容器中来扩展功能。

Sidecar模式通常与容器一起使用,并称为边车容器。有关容器方面的内容,可以参阅https://waylau.com/ahout-docker/

Sidecar模式的实现

Spring Cloud Netflix Sidecar框架提供了Sidecar模式的现成解决方案。Spring Cloud Netflix Sidecar框架框架可以提供对其他非Spring Cloud技术栈的微服务的治理。比如,你可以使用Node或者Golang编写一个Web项目,这个服务同样可以以Sidecar模式,纳入到Spring Cloud管理中去。

下面是实现步骤。

1. 为Web项目添加健康检查接口

提供REST接口,返回JSON格式内容{"status" : "up"}。其中status用于描述微服务的状态,常见的取值有UP、DOWN、OUT_OF_SERVICE和UNKNOWN等。

2. 编写Sidecar微服务

创建项目,添加Eureka、Sidecar的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-sidecar</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

启动类上加上@EnableSidecar注解。这是一个组合注解,它整合了三个注解,分别是@EnableCircuiBreaker和@EnableDiscoveryClient。

在配置文件中加入端口号、服务名称、Eureka地址以及Web项目的端口以及健康检查地址,如:

server.port=8887
spring.application.name=sidecar-mylife-service
eureka.client.serviceUrl.defaultZone=http://localhost:8881/eureka/
eureka.client.instance.prefer-ip-address=true
sidecar.port=8080
sidecar.health-uri=http://localhost:8080/health
eureka.instance.hostname=localhost

启动项目,并访问8887接口,就可以访问到Web项目中的接口。

3. Sidecar的一些端点

以下是Sidecar的常用端点:

  • /hosts/{serviceId} 指定微服务在Eureka上的实例列表
  • /ping 返回OK字符串
  • /{serviceId} 请求对应的微服务

4. 部署应用

将Sidecar与Web服进行部署。一般是部署在相同的主机里面。

有关Spring Cloud的更多内容,可以参阅Spring Cloud 教程

参考引用

© 著作权归作者所有

共有 人打赏支持
waylau

waylau

粉丝 517
博文 96
码字总数 169909
作品 2
深圳
架构师
私信 提问
加载中

评论(1)

yong9981
yong9981
Node.js和Spring如何共享Session? 服务端的事还是Java来做吧,看一看GoSqlGo吧,天生的SideBar模式,因为它所有业务逻辑可以写在html中,也就是说可以和任意Java服务端整合,并共享Session。
使用Istio分布式跟踪应用程序

在微服务领域,分布式跟踪正逐渐成为调试和跟踪应用程序最重要的依赖工具。 最近的聚会和会议上,我发现很多人对分布式跟踪的工作原理很感兴趣,但同时对于分布式跟踪如何与Istio和Aspen Mes...

xiaomin0322
2018/07/26
0
0
阿里巴巴 Apache Dubbo 布道师谈 Service Mesh

“Service Mesh要解决分布式架构下如何集成的问题,同时它又是云原生的核心,Dubbo Mesh正在做这方面的实践。--- 阿里巴巴Apache Dubbo布道师 吕仁琦 ” 本文整理自2018杭州云栖大会首届开发...

技术小能手
2018/10/15
0
0
阿里Apache Dubbo布道师谈Service Mesh技术

本文整理自2018杭州云栖大会首届开发者生态峰会吕仁琦的分享,来自“阿里巴巴中间件”公众号。 Service Mesh和Dubbo Service Mesh这个“热”词是在2016年9月被“造”出来,而今年被称为Servi...

架构师技术联盟
2018/09/29
0
0
浅谈surging服务引擎中的rabbitmq组件和容器化部署

1、前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎,而这篇将介...

fanly11
2018/08/28
0
0
Service Mesh 及其主流开源实现解析

原文出处:行思錄 什么是 Service mesh Service Mesh 直译过来是 ,目的是解决系统架构微服务化后的服务间通信和治理问题。服务网格由 sidecar 节点组成。在介绍 service mesh 之前,我们先来...

行思錄
2018/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

php register_globals将接收参数转为全局变量

最近在看公司旧的系统的时候发现一个很奇怪的事情,很多页面用的变量找不到源头,没有定义也不是接收,意思是腾空出现的。 经排查,原来是php配置做的好事:register_globals = On。registe...

shikamaru
37分钟前
9
0
Linux 交换分区swap

一、创建和启用swap交换区 如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择,我...

Yue_Chen
38分钟前
3
0
notepad++如何使用列块编辑模式?

notepad++如何使用列块编辑模式? 听语音 | 浏览:18584 | 更新:2015-12-22 10:56 | 标签:软件 1 2 3 4 5 6 7 分步阅读 notepad++是一款功能强大的文本编辑器,可以支持各种不同的文本类型...

linjin200
40分钟前
1
0
Java 基础语法

一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象:对象是类的一个实例,有状态和行为。例如,一条...

二九结狐六体
44分钟前
3
0
研发团队资源成本优化实践

背景 工程师主要面对的是技术挑战,更关注技术层面的目标。研发团队的管理者则会把实现项目成果和业务需求作为核心目标。实际项目中,研发团队所需资源(比如物理机器、内存、硬盘、网络带宽...

美团技术团队
49分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部