关注公众号“AI码师”领取2021最新面试资料一份
面试官经常会问:你开发过微服务么?我们肯定会回答:开发过的,之前什么什么项目就用过。面试官接着问:那如果让你搭建一套微服务的话,你觉得需要哪些组件?这时,我们一般选择以沉默回应,哑口无言了..因为我们平时都是在写业务,很少去关注这些,所以今天给大家介绍一下微服务的基本组成:
文末有福利哦。。。
微服务基本组成
本篇文章推荐的基本都是spring cloud alibab套件,也是目前最流行的微服务全家桶,先贴一张目前比较成熟的微服务架构图:
注册中心
- 作用:因为在开发微服务项目中,至少会有两三个服务,然而这些单个服务又会启动多个实例,当服务间进行调用的时候,我们是无法把每个服务的地址全部保存下来的,因为这些服务有可能会被下线,或者进行扩容,导致我们很难去维护这些服务地址;所以就需要一个注册中心,去处理这些服务的注册请求,服务提供者会自己注册到这个注册中心,然后消费者会按照服务名去注册中心寻找自己需要的服务,获取具体的实例地址,能够做到动态地进行切换,免去自己维护这些地址的成本。
- 推荐组件:Nacos
配置中心
- 作用:因为在开发微服务项目中,项目在运行过程中,会启动很多服务,每个服务又会启动很多实例,如果有一个需求来了,说是要修改一下配置文件,这时候按照传统的单体的项目,肯定是改好配置文件后,重新打个包,然后丢到线上,就可以了。但是,现在微服务一般有多个相同的实例在运行,为了改一个配置文件,必须停止所有实例,然后重启,成本是不是有点高?如果加上一个配置中心,只需要修改配置中心,所有实例会动态去刷新这些配置文件,就不需要一个个停止重启了。
- 推荐组件:Nacos,阿里出版的nacos 即可支持注册中心又能支持配置中心
服务网关
- 作用:我们启动多个服务的时候,这些服务有可能运行在不同服务器上,有可能运行不同的端口,这样会导致我们前端在请求接口的时候,需要写很多基地址,每个服务都用不同的调用地址。如果能将这些服务统一暴露出一个地址的话,前端就不会这么麻烦了,谁能做这个事呢?当然就是网关了。前端只要将网关的基地址保存下来,就可以拼接不同服务的接口地址了,通过网关去转发到对应的服务。
- 推荐组件:gateway
服务调用/负载均衡
- 作用:我们在服务间进行调用的时候虽然传的是服务名称,但是我们最终调用的地址肯定是IP加端口的形式,但是这一步当然不能由我们自己做,因为每个服务会有多个实例,每个实例有自己的地址,我们不可能一直调用同一个实例,肯定需要做负载均衡,并且还需要一个能把服务名转换为最终实例地址的组件。
- 推荐组件:openfeign
限流/熔断/降级
- 作用:
- 限流:防止某一服务访问量太高,导致其他服务不可用,或者拒绝服务;对于用户级别,防止某个恶意用户对系统进行攻击,导致系统瘫痪,不能对其他用户提供正常服务,限流算法一般包括:令牌桶和漏桶两种算法。
- 熔断:熔断是某个服务发生故障了,调用方就没必要再去调用这个服务,就直接执行自己的本地方法,减少网络资源消耗。
- 降级:降级和熔断不同,降级是为了在某些场景下,对某些服务进行降级,为的是让出更多资源给其他服务,例如双11的时候,就会把无关交易的服务进行降级,把更多的资源给交易服务腾出来。
- 限流/熔断/降级,是微服务中抗高并发的三板斧,都发挥极其重要的作用。
- 推荐组件:sentinel,同时支持三个功能
日志中心
- 作用:目前来看,日志系统的主要作用是用来排查线网问题的,当系统出现问题时,我们必须依赖日志系统去排查。当然,既然做了微服务,肯定不会直接查看日志文件,因为我们有成熟的套件能够将这些数据进行可视化展现。
- 推荐组件:ELK,EFLK,
链路追踪
- 作用:在系统出问题的时候,我们在排查问题时,需要将整个微服务调用链路给串联起来,才能找到是哪个环节出现问题
- 推荐组件:Sleuth Zinkin
分布式事务
- 作用:在微服务开发中,每个微服务使用的都是自己的数据库,如果操作需要事务的数据,在两个数据库中间是无法完成的,这就得引入分布式事务。
- 推荐组件:seata,上手简单
分布式锁
- 作用:在进行分布式开发时,肯定避免不了使用锁,但是在分布式中,传统的锁是锁不住的,因为传统的锁只能锁住一个进程里面;在分布式中,每个实例都运行在自己的进程中,只能使用分布式锁才能保证业务的一致性。
- 推荐组件:klock,基于redis的封装,实现的是功能完善的分布式锁,当然你也可以自己基于redis实现,但是有一个现成的用不香么?
授权认证中心
- 作用:验证用户身份和授权
- 推荐组件:spring cloud security oauth2
其他组件
缓存:redis,读写分离:mycat,消息中间件:rabbitmq,福利大放送
关注微信公众号“AI码师”,领取面试资料和最新全套微服务教程