当前位置:主页 > 查看内容

技术之巅|这样搭建全套微服务,同事纷纷跪服

发布时间:2021-06-11 00:00| 位朋友查看

简介:关注公众号“AI码师”领取2021最新面试资料一份 面试官经常会问你开发过微服务么 我们肯定会回答开发过的之前什么什么项目就用过。 面试官接着问那如果让你搭建一套微服务的话你觉得需要哪些组件 这时我们一般选择以沉默回应哑口无言了…因为我们平时都是在……

关注公众号“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码师”,领取面试资料和最新全套微服务教程
在这里插入图片描述

;原文链接:https://blog.csdn.net/weixin_34311210/article/details/115606320
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐