前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术之巅|这样搭建全套微服务,同事纷纷跪服

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

作者头像
AI码师
发布2022-09-19 12:01:47
2710
发布2022-09-19 12:01:47
举报

关注公众号“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码师”,领取面试资料和最新全套微服务教程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哥聊编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微服务基本组成
    • 注册中心
      • 配置中心
        • 服务网关
          • 服务调用/负载均衡
            • 限流/熔断/降级
              • 日志中心
                • 链路追踪
                  • 分布式事务
                    • 分布式锁
                      • 授权认证中心
                        • 其他组件
                        相关产品与服务
                        云数据库 Redis®
                        腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档