ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大话微服务中的边车模式

2020-10-24 07:01:26  阅读:321  来源: 互联网

标签:服务 大话 springframework 模式 边车 SideCar 烟哥 cloud


(以下故事纯属虚构,如有雷同纯属巧合)

概念

自从微服务的浪潮席卷了烟哥的公司之后,烟哥的领导内心蠢蠢欲动,指派烟哥去将公司的传统服务架构改成微服务架构!于是烟哥就喊上了小刘到了一个僻静的角落探讨如何实施!

烟哥:"小刘啊,去把公司那套天霸动霸Tua系统整整,接入注册中心,熔断器什么的,整成微服务架构!领导发话了,就用java里的spring cloud那些组件来做,有没有问题?"

只见小刘眼角闪过一丝泪花,说道:"有一个大大的问题!天霸动霸Tua系统中的动霸Tua应用是08年开发的,是用php写的!你让我怎么接入那些java的注册中心、熔断器啊..."
接下来自然就是:
725429-20190217132600336-448040374.jpg

烟哥瞪了瞪眼,说道:"小刘啊,你知道什么是边车(SideCar)嘛?"

小刘说:"知道啊,就是如果只是单独一辆自行车只能坐一个人,可以给自行车加一个边车(SideCar),扩展一下现有的功能,像下面这样"

"嗯嗯,其实这个模式在微服务中也可以用的!你想啊,我们给动霸Tua应用做一个代理,然后呢,服务注册、鉴权、限流啊...这些功能都做在代理里,然后呢我们不要直接调动霸Tua应用,调的是动霸Tua应用的代理,这里代理就是所谓的边车(SideCar),大概部署图是下面这样的!"

说到,这里小刘的眼神中似乎露出了满脸的期待,像下面这样
725429-20190217133020231-584896354.jpg

烟哥很装13了停了停,然后继续说道:"说到这里,我们基本可以明白!要将一个应用改成微服务架构,基本有两种方式:"

  • 以改FrameWork的方式,直接在原来的项目代码里头进行修改!

  • 边车(SideCar)模式的方式,通过边车(SideCar)进行转发请求!

"小刘你瞅啊,边车(SideCar)模式这种方式,不仅对原来的应用代码零侵入,而且不限制原来应用的语言,特别适合这种异构微服务的场景!另外,以后你的边车(SideCar)要升级了,是可以独立升级的,不用重新打包原来的应用!听起来是不是很完美?"

725429-20190217133030736-1700327643.jpg 烟哥回答道:"嗯嗯,你看啊!缺点主要有下面几点:" - 服务之间的调用多了**一跳**,如果两个微服务都是边车模式,那就是多了**两跳**,如果使用边车模式的微服务接口调用非常频繁,记得思考一下能否接受这种延迟开销! - 因为你的`边车(SideCar)`集成了微服务的通用功能、如果`边车(SideCar)`进行重试调用,会对你的系统造成额外的影响么?也就是保证你的接口幂等性! - 刚说到了使用`边车(SideCar)`后,边车是可以独立升级的!那这也带来了一个问题,你的原程序要进行升级或`边车(SideCar)`要进行升级如何协同来保证请求的正常处理或转发,可以理解为如何进行优雅上下线,这些要考虑清楚!

小刘问道:"那具体怎么做呢?"

"嗯,听好啦"

怎么做

(由于我们的技术栈是Spring Cloud,因此只能说明在该技术栈下是怎么做的!)
SpringCloud中有一个组件叫spring-cloud-netflix-sidecar是提供了边车模式的支持的!
自己搭建一个microservice-sidecar的工程也非常简单,maven中的dependencies依赖如下

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

然后,在Application中加上@EnableSidecar注解,像下面这样

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.sidecar.EnableSidecar;@SpringBootApplication@EnableSidecarpublic class Application {  public static void main(String[] args) {
    SpringApplication.run(SidecarApplication.class, args);
  }
}

最后就是修改你的配置文件,像下面这样

server:  port: 8070spring:  application:    name: microservice-sidecar-node-serviceeureka:  client:    service-url:      defaultZone:http://localhost:8761/eureka/
  instance:    prefer-ip-address: truesidecar:
  # 你的PHP微服务的端口  port: 8060                                    
  # PHP微服务的健康检查URL  health-uri:http://localhost:8060/health.json#

然后你就可以通过sidecar来访问了

http://localhost:8070/

拓展

过了几天,小刘又来找我了!只见小刘说道:"能不能给所有的微服务都搭一个边车(SideCar),然后用一个平台将边车(SideCar)管理起来,像下面这样"

烟哥回答道:“可以的!这就是去年年初被炒的火热的服务网格(ServiceMesh)模式!”
请看下回《大话微服务中的服务网格》


标签:服务,大话,springframework,模式,边车,SideCar,烟哥,cloud
来源: https://blog.51cto.com/1991785/2543300

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有