我认识的微服务

在这里插入图片描述

微服务是一种架构风格。

说起微服务,不得不提到两个人:James Lewis和 Martin Fowler,他们在2014年发表了一篇文章Microservice,正式将微服务这个理念概念化。当然,他们更多的是在阐述微服务是一种什么样的设计思想,而没有告诉我们微服务该使用什么样的技术栈。

通过这篇文章,大概可以总结下面几点:

  • 微服务是一系列微小的服务
  • 微服务运行在进程
  • 每个服务是独立开发
  • 每个服务是独立部署
  • 服务需要分布式管理

架构的演进之路

好的架构是演进出来的。

  • 单一应用 All in one

    1. 容易测试
      容易部署
    2. 开发效率低,代码维护难
      部署不灵活,构建代码时间长
      稳定性不高
      扩展性不够
  • 垂直应用 MVC

    1. SSH
    2. Spring MVC
  • 分布式架构 RPC

    1. 多个元素共同合作完成同一件事
    2. 不共享内存
  • 流动式架构 SOA

    1. ESB 企业服务总线
  • 微服务架构 Spring Cloud

    1. 服务注册发现 Eureka
    2. 客户端负载均衡 Ribbon
    3. 服务网关 Zuul
    4. 熔断器 Hystrix
    5. 统一配置中心 Config
  • 云服务

    1. Docker
    2. Kubernetes (K8S)

SpringCloud

Spring Cloud 是一套开发工具集,是一个完整的微服务解决方案。

对比Dobbo?Dubbo是一款高性能Java RPC框架

由于Spring Cloud 各个版本间存在不兼容,我选择了如下版本,目前它们更为成熟稳定。

  • Spring Boot 1.5.7.RELEASE
  • Spring Cloud Edgware.SR5

服务注册与发现

服务发现有两种方式

  • 客户端发现
    • Eureka
  • 服务端发现
    • 需要 Proxy
    • Nginx
    • Zookeeper (Dubbo)
    • Kubernetes (K8S)

Eureka Server

1、 添加依赖

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

2、添加配置

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

3、添加注解
@EnableEurekaServer

自我保护机制
高可用方案

Eureka Server是整个微服务的注册中心,如果Server服务出现宕机,注册在其上面的服务之间调用就无法正常进行,所以需要部署高可用的注册中心。
Eureka 满足CAP理论中的AP,也就是说它本身是支持高可用的,只需要一些配置就可以完成。

对于单个Eureka节点来说:

如果有两个Eureka节点:

如果有多个Eureka节点(大于3个节点):

Eureka Client

1、 添加依赖

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

2、 添加配置

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

3、 添加注解

@EnableEurekaClient

Ribbon

  1. 通过ServerList获取所有的可用服务列表
  2. 通过ServerListFilter过滤一些地址
  3. 通过IRule选择一个实例作为调用地址

Feign

  1. 是一个声明式REST客户端
  2. 采用了基于接口的注解

Config 统一配置中心

实现异步

客户端请求不会阻塞进程,服务端的响应可以是非及时的。

  1. 通知:单向请求,一般一对一
  2. 请求、异步响应
  3. 消息:可以一对多,服务端的消息被多个客户端消费

消息中间件

消息中间件可以做到异步解耦削峰

服务网关 Zuul

  1. 服务网关的要素

    1. 稳定性,高可用
    2. 性能,并发性
    3. 安全性
    4. 扩展性
  2. 服务网关的解决方案

    1. Nginx
    2. Kong
    3. Tyk
    4. Spring Cloud Zuul
  3. Zuul的特点

    1. 路由+过滤器
    2. 前置(Pre)+后置(Post)+路由(Route)+错误(Error)
  4. Zuul的高可用

    1. 多个Zuul节点注册到Eureka Server
    2. 可以考虑Nginx与Zuul结合
  5. Zuul的限流/鉴权

    1. 继承ZuulFilter
    2. 重写run()方法

服务容错 Hystrix

服务降级

  • 优先保障核心业务,非核心服务不可用或者弱可用

1、 添加依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>

2、 添加注解
@EnableCircuitBreaker

@HystrixCommand

3、 添加配置

  • Circuit Breaker 断路器

服务追踪 Sleuth

主要功能点

  • 定位慢调用
    • Rest或RPC调用,慢SQL
  • 定位错误/异常
  • 调用链
    • 将端对端调用,异常日志,调用耗时等呈现给用户

微服务扩充

在Spring Cloud 升级到Finchley以后,多个组件的pom签名有所改变,主要涉及的都是Netflix家族产品。spring-cloud-starter-eureka改名为spring-cloud-starter-netflix-eureka-client,在starter上加入公司名,是不是很有区分度,是不是意味着会有其他公司增援?

2018年11月初,阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本。按照官方介绍,这个项目的目的是为了让大家基于所熟知的 Spring 框架,其优秀的设计模式和抽象理念,给使用阿里巴巴产品的 Java 开发者带来使用 Spring Boot 和 Spring Cloud 的更多便利。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cj96248

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值