微服务基础架构的5个关键问题

本文深入探讨了微服务架构中的关键技术,包括OAuth2授权模式的选择、Apollo配置中心的架构理解、Zuul网关的核心职责、CAT调用链监控的实践以及Hystrix的隔离策略。通过具体案例和场景分析,帮助读者全面掌握微服务架构的设计与实施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者介绍
杨波,微服务技术专家,曾主导了拍拍贷微服务架构体系建设。任职携程技术研发总监期间,主导了携程大规模SOP体系建设,也是极客时间「微服务架构实战160讲」课程讲师。

一、OAuth2的四种模式该如何选择?

\"\"

OAuth2协议主要规范了四种授权模式,在实际应用中选型的时候,我们主要通过如下三个维度进行考虑:

第一方还是第三方应用?

所谓第一方应用就是你足够信任的组织开发的应用,例如淘宝App是淘宝自己开发的,对它的授权方式是淘宝充分信任的,可以认为是第一方应用。所谓的第三方应用就是你并不信任的组织开发的应用,例如某第三方公司基于淘宝开放API开发的App,淘宝并不信任这个应用,那么它就是第三方应用。

谁拥有访问令牌?

授予访问令牌表示授予客户应用一种权限,能够去访问受保护的资源。如果你授权机器去访问资源,不需要用户的参与,那么就采用客户端凭证模式(Client Credentials Grant)。如果需要用户参与授权,那么还要继续看客户类型。

哪种客户应用类型?

  • Web服务器端应用,客户应用住在Web服务器上,使用授权码模式(Authorization Code Grant)。
  • 单页SPA应用,整个Web应用都住在前端浏览器中,对于第一方应用,可以使用用户名密码模式(Resource Owner Credentials Grant);对于第三方应用,使用简化模式(Implicit Grant)。
  • 原生Native应用,对于第一方的无线原生应用,可以使用用户名密码模式;第三方的原生应用应该使用授权码模式,注意要使用原生浏览器,而不是使用嵌入式的浏览器。

戳此试看「微服务安全架构与实战」

二、如何理解Apollo配置中心的架构?

\"\"
在2018年度最受欢迎开源软件评选中,携程开源配置中心Apollo名列Top20之内,这一方面说明Apollo解决了微服务应用配置复杂的一大痛点,同时也说明社区对微服务需要集中配置的普遍认同。Apollo配置中心架构相对复杂,但理解其架构对正确部署和使用Apollo非常重要,Apollo本身采用微服务架构,使用了服务发现和软负载等分布式技术,它的核心组件和服务发现机制如下:

  • Client\u0026amp;ConfigService:Apollo客户端Client通过ConfigService感知并获取实时配置。两者的发现机制是,ConfigService启动时首先注册到Eureka,Client再通过MetaServer(相当于Eureka Proxy)获取ConfigService的地址列表,并通过客户端软负载的方式连接ConfigService。这个连接采用long pulling方式,支持ConfigService实时推送数据到Client,且Client会定期重连获取配置,实现推拉结合效果。
  • Portal\u0026amp;AdminService:Portal是给用户使用的配置管理(添加、修改和发布等)界面,AdminService是实际操作配置的接口服务。两者的服务发现机制是,AdminService启动时首先注册到Eureka,Portal再通过MetaServer(Eureka Proxy)获取AdminService的地址列表,并通过客户端软负载的方式调用AdminService。
  • Eureka\u0026amp;MetaServer:Apollo采用Eureka做服务发现。在服务提供端,ConfigService和AdminService启动时会自动注册到Eureka。服务消费端比较复杂,首先,Apollo引入MetaServer以屏蔽Eureka服务发现接口的复杂性,简化多语言客户端接入,MetaServer相当于是Eureka Proxy;其次,MetaServer无状态以集群方式部署,需要前置Nginx做负载均衡;最后,Client和Portal通过Nginx-\u0026gt;MetaServer-\u0026gt;Eureka方式间接发现目标服务。

戳此试看「微服务配置中心Apollo架构与实战」

三、微服务网关Zuul承担哪些核心职责?

\"\"
网关在微服务基础架构中承担重要职责,这些职责一般是非业务性的,称为跨横切面职责(cross-cutting concerns),包括:

1. 单点入口:企业内部的系统虽然是由诸多微服务组成,但是对于外部的客户端来说,这些内部细节可能会不断变化,应该被隐藏,即网关为外部客户隐藏内部实现细节,提供单一抽象入口。另外,通过引入网关这层抽象,让内外两边不强耦合,可以相互独立变化。

2. 路由转发:由于外部客户端看到的是单点入口,而内部是复杂的微服务系统,当请求进入的时候,网关需要将请求按照某种规则(例如根据请求path)定位并转发到内部具体的微服务,即网关要承担路由转发的职责。

3. 限流熔断:面对外部的突发流量(比如双十一促销),网关需要有限流和熔断的能力,保护后台服务不被突发流量冲垮。

4. 日志监控:网关是外部流量到内部系统的集中入口点,非常适合收集访问日志,对流量进行集中监控。

5. 安全认证:同样由于集中入口点的特性,网关非常适合承担集中安全认证、防爬虫防攻击等职责。

Zuul是经过Netflix大规模微服务落地验证,后被Pivotal进一步封装推广的一款生产级的微服务网关,通过Zuul特有的可插拔过滤器(pluggable filter)机制,可以很方便地实现上述职责。

戳此试看「微服务网关Zuul架构与实战」

四、如何使用CAT进行微服务调用链埋点?

\"\"

对一个分布式微服务系统进行埋点,为了将端到端的调用链串起来,一些关键的地方需要埋点:

  • 网关的入口和出口:网关是外部客户接入内部系统的集中入口,适合采用CAT进行集中埋点,在请求进入的地方需要埋点,按照CAT的术语,这个地方产生的叫Root Transaction,表示整个调用链的启动,在调用后台服务的地方也需要埋点,同时注意需要将CAT调用链上下文(CAT Context)向后台传递(一般以HTTP Header方式)。
  • 后台服务的入口和出口:在每个后台服务的入口点,都需要用CAT埋点,注意在入口埋点时需要先恢复CAT调用链上下文,这样上下游调用链才能串联起来。在每个服务的出口点(如果有对其它服务进行调用的话),同样需要用CAT进行埋点,同样也要向后传递CAT调用链上下文。

上述埋点应该尽量集中封装,提供封装好的框架给业务方直接用,降低业务方接入CAT的复杂性,尽量避免业务方直接埋点。

戳此试看「微服务调用链监控CAT架构与实战」

五、Hystrix的线程和信号量隔离的优劣以及试用场景

\"\"

信号量隔离,优点是轻量,无额外开销,不足是不支持任务排队和主动超时,不支持异步调用,适用于:

  • 受信客户:比如内部服务调用我们一般认为是受信的,而第三方服务我们不确定其性能,一般认为是不信的。
  • 高扇出:所谓高扇出就是一个服务要调用很多(几十甚至上百个)其它服务,网关就是这种场景,需要调用很多后台服务,如果每个后台服务调用都用一个线程池隔离,开销就非常大,所以适合信号量隔离。
  • 高频高速调用:例如对于缓存的访问,一般是高速高频,适合用信号量这种轻量隔离机制。

线程池隔离,优点是支持排队和超时,也支持异步调用,不足是线程调用会产生额外的开销,适用于:

  • 不受信客户:比如调用第三方服务,可能很慢,可以用线程池隔离。
  • 有限扇出:如果内部服务调用扇出是有限的,一般不超过十个,可以考虑用线程池隔离。

戳此试看「微服务容错限流Hystrix架构与实战」

课程介绍 【完善体系+精品资料】本课程总计115课时,打造全网最全的微服务体系课程;从微服务是什么、能够做什么开始讲起,绝对零基础入门到精通类型。课程整体脉络十分清晰,每个章节一个知识点,画图+源码+运行讲解,不信你学不会。1、课程先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。2、从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。3、讲解Spring Boot 与 Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码学习服务的远程调用。7、为了解决服务之间的稳定性,避免发生雪崩问题,我们引入了Hystrix断路器,服务降级和熔断机制。8、微服务集群十分庞大,监控起来是十分困难的,尤其是对每一个接口的熔断情况进行监控,因此我们引入了Turbine微服务监控。9、微服务的调用是杂乱无章的,可以网状调用,怎么做到统一的入口口,统一的授权、加密、解密、日志过滤,我们引入了第一代网关Zuul。10、微服务的配置分散,每次要修改配置都要重启服务,因此我们引入了Config配置中心。11、跟上主流,Consul是当前主流的服务注册与发现、配置中心一体化的解决方案。12、阿里的Nacos服务注册与发现、配置中心在国内炙手可热,Nacos 经历过双十一的微服务中间件。13、Turbin做微服务监控还是太弱,我们需要更强大,可视化,操作性更强的监控系统,因此我引入了Spring Boot Admin体系。14、Zuul已经停止更新支持,Spring Cloud官方推荐的二代网关Spring Cloud Gateway更加强大。15微服务的安全架构体系虽然复杂,但是是有学习条例的,什么是认证授权、什么是OAuth2.0的原理、 JWT、怎么样去开发实现。 课程资料 【独家资料】1、课程附带全部63个项目源码,其中Hoxton版本项目源码37个,Edgware版本项目26个,2、230页清PDF正版课件。3、附带nacos、consul、cmder等视频配套软件。学习方法1、每一节课程均有代码,较好的方式为一边听我的讲解,一边使用我提供的项目代码进行观察和运行。2、课程体系庞大,但是并不杂乱,每个章节只针对一个知识点,减轻学习压力。3、坚持每天学习1~2个章节,可以在地铁、公交上用手机学习。【完善知识体系图】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值