一.微服务

1.1 什么是微服务?

  • 微服务是一种架构风格
  • 一个应用拆分为一组小型服务
  • 每个服务运行在自己的进程内,也就是可独立部署和升级
  • 服务之间使用轻量级HTTP交互(也可以通过轻量级的消息总线来通信,例如RabbitMQ和kafaka)
  • 服务围绕业务功能拆分(数据库也是独立的)
  • 可以由全自动部署机制独立部署
  • 去中心化,服务自治。服务可以使用不同的语言,不同的存储技术
  • 微服务是一个分布式系统

1.2 微服务的优势

  • 按照业务拆分,服务的边界明确,将复杂的问题简单化。编码也是按照业务拆分,代码的可读性和扩展性增加。
  • 微服务系统是分布式系统,服务与服务之间没有任何耦合。随着业务的增加,可以根据业务再拆分业务,具有极强的横向扩展能力。随着应用的用户量的增加,并发量的增加,可以将微服务集群化部署,从而增加系统的负载能力。总而言之,微服务系统的微服务单元具有很强额横向扩展能力。
  • 服务与服务之间使用HTTP网络通信协议来通信,单个微服务内部高度耦合,服务于服务之间完全独立,无耦合。这使得微服务可以采用任何的开发语言和技术来实现。
  • 微服务的每个服务单元是独立部署的,即独立运行在某个进程里。微服务的修改和部署对其他服务没有影响
  • 微服务在CAP理论中采用的是AP架构,即具有高可用和分区容错的特点。高可用主要体现在系统7*24小时不间断的服务,它要求系统有大量的服务器集群,从而提高系统的负载能力。另外,分区容错也使得系统更加健壮。

1.3 微服务的劣势

  • 分布式部署,调用的复杂性高:单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过 HTTP 来进行通信,这当中会产生很多问题,比如网络问题、容错问题、调用关系等。
  • 独立的数据库,分布式事务的挑战:每个微服务都有自己的数据库,这就是所谓的去中心化的数据管理。这种模式的优点在于不同的服务,可以选择适合自身业务的数据,比如订单服务可以用 MySQL、评论服务可以用 Mongodb、商品搜索服务可以用 Elasticsearch。缺点就是事务的问题了,目前最理想的解决方案就是柔性事务中的最终一致性。
  • 测试难度的提升:服务和服务之间通过接口来交互,当接口有改变的时候,对所有的调用方都是有影响的,这时自动化测试就显得非常重要了,如果要靠人工一个个接口去测试,那工作量就太大了。这里要强调一点,就是 API 文档的管理尤为重要。
  • 运维难度的提升:在采用传统的单体应用时,我们可能只需要关注一个 Tomcat 的集群、一个 MySQL 的集群就可以了,但这在微服务架构下是行不通的。当业务增加时,服务也将越来越多,服务的部署、监控将变得非常复杂,这个时候对于运维的要求就高了。

1.4 微服务应该具备的功能

  • 服务的注册与发现
  • 服务的负载均衡
  • 服务的容错
  • 服务网关
  • 服务配置的统一配置
  • 链路追踪
  • 实时日志
  • ...

二.Spring Cloud

2.1 简介

    Spring Cloud是基于Spring Boot的。首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。Spring Cloud是通过包装其他技术框架来实现的。Spring Cloud提供了开发分布式微服务的一些常用组件。如下:

  • Eureka:服务注册中心,用于服务管理
  • Ribbon:基于客户端的负载均衡组件
  • Hystrix:容错框架,能够防止服务的雪崩效应
  • Feign:Web服务客户端,能够简化HTTP接口的调用
  • Zuul:API网关,提供路由转发,请求过滤等功能
  • Config:分布式配置管理
  • Sleuth:服务追踪
  • Stream:构建消息驱动的微服务应用程序的框架
  • Bus:消息代理的集群消息总线

云化微服务系统架构 云服务 微服务_云化微服务系统架构

 

2.2 Spring Cloud组件升级说明

服务注册中心

  • × Eureka
  • √ Zookeeper
  • √ Consul
  • √ Nacos

服务调用

  • √ Ribbon
  • √ LoadBalancer

服务调用2

  • × Feign
  • √ OpenFeign

服务降级

  • × Hystrix
  • √ resilience4j
  • √ sentienl

服务网关

  • × Zuul
  • ! Zuul2
  • √ gateway

服务配置

  • × Config
  • √ Nacos

服务总线

  • × Bus
  • √ Nacos