1 整体架构

1 微服务架构图

image.png

  • 服务集群
    • 传统的单体架构,业务功能耦合在一起,难以升级维护
    • 微服务根据业务功能模块将单体的项目拆分成许多独立的服务,每个服务独立开发和部署、完成一部分业务功能
    • 一个大型的互联网项目可能包含成百上千的服务,最终形成一个服务集群
    • 一个业务功能往往需要多个服务共同来完成,比如一个请求可能先调用了服务A,然后服务A再调用服务B,服务B再调用服务C…
  • 注册中心
    • 注册中心可以记录服务集群中每一个服务的IP、端口等信息
    • 当需要调用某个服务时,不需要知道服务的IP等信息,只需要从注册中心获取即可
  • 配置中心
    • 每个服务都有自己的配置文件,配置中心用于统一管理服务的配置文件
    • 更改服务配置时不需要到具体的服务中去修改,直接改配置中心的配置文件即可,修改后配置中心会通知具体的服务,实现配置的热更新
  • 服务网关
    • 用户调用服务时找的是服务网关
    • 服务网关用于权限控制(用户身份校验、服务调用合法性校验)、将用户请求路由到具体的服务、路由的过程中可能还包含负载均衡
  • 分布式缓存
    • 分布式缓存用于缓解数据库的压力
    • 缓存将数据存放在内存中,访问速度比数据库快很多
  • 分布式搜索
    • 简单的查询可以走缓存和数据库,但是海量数据的复杂搜索、统计和分析等,需要用到分布式搜索
  • 消息队列
    • 消息队列用于实现服务之间的异步通信,可以提高服务的并发性
    • 一个业务往往会跨越多个服务,如果一个服务在调用另一个服务时,一直等待另一个服务的完成,那么将严重影响效率
    • 使用消息队列后,如果服务A需要调用服务B和C,A只需要给服务B和C发送一条消息,然后就可以结束服务了
  • 分布式日志和系统监控
    • 庞大复杂的服务集群需要有效排查错误的手段,因此引入了分布式日志和系统监控组件
    • 分布式日志可以记录服务的运行日志,统一地进行日志的管理
    • 系统监控组件可以实时监控服务集群中每一个服务节点的运行状态、CPU负载、内存占用等等信息
  • 微服务的部署
    • 微服务集群中的服务数量可能达到成百上千个,难以采用手动部署
    • 因此我们需要Jenkins对服务进行自动化编译、利用docker打包编译后的服务形成镜像、利用k8s或Rancher实现服务的自动化部署

2 微服务技术栈

image.png

2 服务架构演变

随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?

1 单体架构

将业务的所有功能集中在一个项目中开发,打成一个包部署
image.png
单体架构的优缺点
优点

  • 架构简单
  • 部署成本低

缺点

  • 耦合度高(维护困难、升级困难)

2 分布式架构

根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务
image.png
分布式架构的优缺点
优点

  • 降低服务耦合
  • 有利于服务升级和拓展

缺点

  • 服务调用关系错综复杂

分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考

  • 服务拆分粒度如何
  • 服务集群地址如何维护
  • 服务之间如何实现远程调用
  • 服务健康状态如何感知(如果一个服务调用了一个挂了的服务,将发生级联失败

人们需要制定一套行之有效的标准来约束分布式架构

3 微服务

image.png
微服务架构特征

  • 单一职责

微服务相比于分布式架构拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责

  • 独立自治

团队独立、技术独立、数据独立,部署独立、交付独立

  • 面向服务

服务对外暴露业务接口

  • 隔离性强

服务调用做好隔离、容错、降级,避免出现级联问题(尽量避免一个服务挂了,连带挂一片服务)

微服务与分布式架构

  • 微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
  • 可以认为微服务是一种经过良好架构设计的分布式架构方案

3 微服务相关技术

微服务技术对比
image.png

  • SpringCloudAlibaba相当于同时兼容Dubbo和SpringCloud两种体系

微服务企业需求
image.png

SpringCloud

  • SpringCloud是目前国内使用最广泛的微服务框架

  • SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。

其中常见的组件包括:
image.png

4 微服务Demo

1 微服务拆分原则

  1. 不同微服务,不能重复开发相同业务
  2. 微服务数据独立,不要访问其它微服务的数据库

image.png

  1. 微服务可以将自己的业务暴露为接口,供其它微服务调用

2 Demo实现

cloud_demo