1.微服务介绍
1.1.微服务是什么
- 微服务是分布式架构的一种实践方案
- 分布式架构即要把服务做拆分,拆分的过程中会产生各种问题,这些问题需要我们解决。
- 例如:SpringCloud就是用于解决服务拆分后的服务治理问题,其他的问题也有各自的解决方案。
1.2.微服务包括哪些组件
1、服务集群
- 一个单体项目,代码高度耦合,不便管理
- 所以一个大的互联网项目,一般都会将单体项目拆分成多个独立的项目
- 每一个项目完成一部分功能和业务,对每一个独立开发和部署,我们将拆分后的每一个项目称为一个服务。
2、注册中心
- 当服务特别多的时候,形成服务集群。
- 而一个业务往往会用到多个服务,当业务逐渐复杂起来后,各个服务之间的调用关系也会越来越复杂,这么复杂的调用关系靠人记录和维护是不可能的,所以就需要一个组件:注册中心。
- 注册中心负责记录微服务中每一个服务的ip、端口、能处理的业务功能等等。
- 当一个服务需要调用另外一个服务时,只需要找注册中心即可拉取对应的服务信息,进而完成调用。
3、配置中心
- 随着服务越来越多,每一个服务都有自己的配置文件,要修改一个服务的配置,是不可能人为更改对应的配置文件的,所以需要一个组件:配置中心。
- 配置中心可以统一的管理微服务里成千上百的配置,如果需要变更一些配置,只需要找配置中心即可,配置中心会通知相关的服务,实现配置的热更新。
4、服务网关
- 服务搭建好,用户来访问的时候,服务太多了,用户不知道该访问哪个服务,而且用户也不一定有权限访问某些服务,所以就需要一个组件:服务网关。
- 服务网关:对用户的身份做校验、将用户的请求路由到对应的服务上,而且还可以做一些负载均衡。
5、分布式缓存
- 各个服务处理业务,该访问数据库时就访问数据库,数据库肯定要部署成集群。
- 但是数据库集群依旧扛不住用户的访问量,所以还需要一个组件:分布式缓存。
- 分布式缓存,将数据库的部分数据放入内存,提高响应速度。
- 且缓存也要部署成分布式缓存。
6、分布式搜索
业务中可能还会有一些复杂的搜索功能,简单查询可以走缓存,但是海量数据的复杂搜索、统计、分析,缓存做不了,就需要一个组件:分布式搜索。
7、异步消息队列
- 分布式服务中,一个业务往往会跨越多个服务,比如一个请求调用了服务A,A又调用了B,B又调用了C,整个业务的链路就会很长,那么调用时长=每个服务时长之和,性能有所下降。因此需要一个异步消息队列来解决这个问题。
- 异步消息队列,请求来了,调用了服务A,服务A要调用B,不会去直接调用,而是发个消息通知B去干活,A自己直接就结束了,业务链路就变短了,响应时间也缩短了,吞吐能力也就变强了。
- 所以异步通信可以大大提高并发能力,在秒杀等场景下可以起到很好的作用。
8、分布式日志服务
- 这么庞大的微服务集群,如果出了异常、问题,很难定位,所以需要一个组件:分布式日志服务。
- 分布式日志服务,可以统计整个集群中成千上百个服务的运行日志,统一进行存储、统计、分析。
9、系统监控、链路追踪
- 系统监控、链路追踪组件,可以监控记录每一个服务节点的运行状态、CPU负载、内存占用等情况
- 一旦出了什么问题,可以立即定位到具体的某个方法、栈信息,可以快速定位异常所在。
10、持续化集成
- 这么庞大的系统,不可能手动的部署,所以要利用类似于Jenkins的工具进行自动化编译。
- 然后使用docker进行打包,形成镜像。
- 再基于kubernetes、rancher等工具实现自动化的部署。
- 这一套就称为持续集成。
1.3 认识微服务
1.3.1.服务架构演变
1、单体架构
2、分布式架构
分布式架构虽有很多优点,但是也带来了很多问题。
为了解决分布式拆分带来的问题,涌现了很多的解决方案,不过近几年最火的还是微服务方案。
微服务架构是分布式架构的一种实现。
3、微服务架构的特征
4、总结
1.3.2 微服务技术对比
1、微服务的不同实现技术框架
既然都是微服务,他们包含的组件、实现的功能基本都是一致的,只不过实现的方式有所不同。
2、对比微服务技术框架
Dubbo、SpringCloud、SpringCloudAlibaba
3、企业开发用哪种?
上面4种都有可能遇到
1.3.3 SpringCloud
SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
其中常见的组件包括:
- 原生的微服务组件使用非常繁琐,而SpringBoot擅长整合第三方技术,所以SpringCloud就基于SpringBoot,对原生的微服务组件进行了整合,并且可以做到自动装配,大大简化了微服务的开发。
- SpringCloud底层是基于SpringBoot的,所以他们有严格的版本对应关系。如下:
我们课堂学习的版本是 Hoxton.SR10,因此对应的SpringBoot版本是2.3.x版本。