导语

微服务产品团队为了广阔开发者朋友们能够更好的运用腾讯云微服务产品,将继续为咱们供给微服务上云快速入门的指引性文档,内容通俗易懂易上手,本篇为本系列的第一篇,欢迎咱们收看。

微服务架构

下图是一个典型的微服务架构。从图中能够看到恳求从前端进来之后,一般会有一个网关来接受一切的恳求,这个网关一般承载的是负载均衡的作用,以及流量路由相关的一些功用。然后网关会把恳求转发到后端的微服务中去,那么服务与服务之间相互调用,就会涉及到服务的注册与发现,需求有一个注册中心来办理一切的注册与发现,而服务一切的装备也需求进行统一办理,这个时分也需求有一个装备中心来负责一切服务的装备办理。服务在这个进程中,或许需求去做熔断限流以及动态路由这些操作,这就或许用到服务办理相关的结构或许东西来帮咱们完成。一起在整个进程中都需求有完善的监控数据来协助咱们排查毛病。终究这些服务调用底层的数据库,比如说MongoDB、MySQL,或许其他中间件消息行列等,以上就组合成了下图这个典型的微服务架构。

微服务上云快速入门指引

运用场景

在上述的微服务架构下,有哪些能够用到的运用场景呢?

微服务场景一:构建安全可靠、功用微弱的事务网关

典型Web架构:Nginx网关

微服务上云快速入门指引

一个典型的依据Nginx的web架构是什么姿态呢?如上图所示,能够看到来自于网页、小程序、APP的恳求进来后,会经过一个负载均衡,然后把恳求转发到Nginx, Nginx负责把恳求转发到后端的web服务中去,后端或许是PHP、Tomcat等,这个流程便是一个典型的web架构。

典型微服务架构:服务网关

微服务上云快速入门指引

而典型的微服务架构是什么姿态呢?除了上图展现的Nginx和负载均衡的部分外,一般还会有一个服务网关,如图上所画的,会有Spring Cloud Gateway来作为服务网关去拜访后端的服务,服务网关一般会和服务注册中心合作去做网关直通服务的主动发现,这样就能够完成网关直达服务的诉求。

微服务之 Nginx Ingress

微服务上云快速入门指引

别的一个场景,微服务Ingress的方法合作K8s,在网关层面创立一个Ingress Controller来负责和底层的服务以及K8s操控台完成从网关直达服务的场景。

以上三个是网关层面的典型的微服务架构下的运用场景,微服务的场景除了有网关,还会涉及到注册装备中心。

微服务场景二:构建轻量、高可用、易弹性的微服务架构

微服务中心组件 = 网关 + 注册中心 + 装备中心

微服务上云快速入门指引

如上图所示,除了网关,咱们还会合作注册装备中心来办理一切服务的实例,也会涉及到在这个进程中运用到监控和链路追踪来协助咱们更好的去查看事务的运行情况以及毛病排查,终究会去拜访底层的数据库和一些中间件,在这个进程中用到的注册中心涉及到的运用场景是什么姿态的呢?

注册中心:运用场景

  • 服务注册与发现

如下图所示,供给者注册到服务之后,让顾客能够发现这个服务,服务顾客就经过服务注册中心去调用供给者。

微服务上云快速入门指引

  • 客户端健康检查

第二种场景是客户端健康检查,假如有100个服务,咱们怎么确认100个服务都是正常运行的,这个时分就能够运用注册中心来去完成客户端的健康检查。注册中心供给健康检查的能力,依据心跳上报方法保持活性,服务端在x秒内假如没收到客户端的心跳恳求,会将该实例设置为不健康,在x秒内没收到心跳,会将这个临时实例去除。以确保服务的可用性。

微服务上云快速入门指引

  • 内网DNS拜访

终究一种场景是经过注册中心供给DNS接入能力,支持将注册中心的数据以域名的方法露出出来,客户端能够直接经过域名寻址进行直连服务的调用,无需运用CLB转发。

微服务上云快速入门指引

以上是注册中心的几大运用场景。接下来看一下装备中心。

装备中心:运用场景

装备中心的运用场景大致能够分为两类。

  • 事务装备

1、第一种情况:上线新功用的时分,假如想要依据地域用户等信息来去进行灰度,就能够经过装备中心动态办抱负要灰度条件。

2、第二种情况:当进行促销活动的时分,一般会有抽奖,中奖的概率,参数的操控,咱们希望是实时动态的操控,这个时分就能够运用装备中心完成。

3、第三种情况:能够经过装备中心动态的展现一条公告。

微服务上云快速入门指引

  • 基础组件装备

比如在开发进程中会用到数据库的拜访密钥,以及日志的设置,或许其他组件设置参数,这些参数都能够经过装备中心来统一办理,这样就不需求对每个服务进行修正,削减作业量。

出产阶段:确保多活容灾

在一个典型的微服务架构里边,涉及到网关注册装备中心还有服务自身,怎么去确保全体架构的多货容灾呢?那么就会有下面这样一个布置架构了。云原生网关和注册装备中心能够协助事务架构完成多活容灾:

  • 云原生网关和注册装备中心的服务端采用同城三可用区布置
  • 事务运用能够采用同城多可用区布置。一个运用的多个节点布置在不同的可用区,注册到同一个服务下。

微服务上云快速入门指引

图中赤色的线是可用区的分割线,在上图里边展现了三个可用区。假如要做到一个架构的高可用,就得确保运用到的每一个组件都是跨可用区布置的,比如说咱们的网关在这三个可用区都会布置一个节点,然后咱们服务自身也是跨可用区,在多个可用区布置不同的节点,到了注册装备中心也是相同的,每个注册装备中心都是三节点来去布置,然后一起都是跨可用区的,这样就能够确保在实际的事务场景中,任何一个可用区挂了之后,全体的微服务架构仍然是可用的,然后完成多获容灾的一个场景。

微服务运用场景三:完成全链路的流量和服务办理

测验阶段:处理多测验环境的流量路由问题

如何处理测验环境的流量路由问题呢?

微服务上云快速入门指引

从上图看咱们想要处理什么问题呢?开发者做微服务开发的时分,或许会有多个服务,假如想要进行联调,一般会到一个环境里边把一切的服务都布置一遍,然后做端到端的测验,但假如服务变多,开发团队并行作业变多,那就很难和谐。

抱负情况便是能不能经过一种方法让多个测验环境并存,一起又只需求按需布置,那不同的团队运用不同的环境,就能做到这样的测验需求呢?答案是有的,那便是运用TSE云原生网关加服务办理来完成这种多环境的流量路由。那么做法是什么呢?

首要经过服务办理对实例进行环境标签的实例打标,如上图所示,把测验环境分为三个环境,第一个是基线环境,基线环境便是正常布置测验的服务,以及两个特性环境,团队一就用左面的特性环境,团队二就用右边的特性环境,当团队一想要测验的时分,他只需求把需求测验的服务布置到左面的特性环境。然后对这些布置的实例进行一个符号,把它标为feature1,然后在云原生网关里边触发恳求的时分,对恳求也打一个符号,也把它标为feature1,这个时分就能够主动的把这个恳求路由到咱们符号好的实例里边来完成流量的路由。一起这样路由的进程中也能够完成跨环境标签路由,比如说我从左面的特性环境去拜访基线环境,然后机线环境能够依据标签的路由回到这个特性环境里边,这样就完成了多测验环境的流量路由问题。

适用场景:某个微服务运用,在开发测验时,不需求布置一切的服务,仅布置本次有变更的服务,其他服务经过流量动态路由的方法复用基线环境服务资源。

优势

节约资源成本,开发/测验按需申请,用完即弃

提高研发效率,脱节大量域名本地绑定 hosts 等装备化作业

完成计划

1、实例打标

K8s注册场景:在workload上经过增加pod labels打上环境标签。

微服务结构注册场景:对服务下一切实例进⾏分组,经过标签能够区别布置的环境。

2、流量染色

云原生网关能够对流量特性进⾏染色。例如:给特定uin的恳求进行染色。

3、网关到后端服务的流量路由

经过标签路由,按照恳求中的测验环境信息进行动态路由。

4、后端服务与服务间的路由

对链路上各服务能够依据恳求流量特征对不同测验环境中的服务进⾏动态路由。

发布阶段:金丝雀、翻滚或许蓝绿发布

另一个微服务架构下,会涉及到的问题便是发布。

目前有三种流行的发布方法,一种是金丝雀发布,一种是翻滚发布,一种是蓝绿发布,这三种常见的发布战略原理都是相同,都是希望在发布的进程中,把要发布的新的版别都做到肯定的测验,让一切的用户用的进程中,防止说我的新版别有任何问题影响到一切的用户。可是在发布的进程中,这三种发布方法的战略会有一些不相同。

  • 金丝雀发布

金丝雀发布便是关于本次的发布,按份额去晋级,必定的实例,没有问题的话,再逐步的放开这个份额,直到终究一切的流量都到了V2版别,这就完成了一个金丝雀。

微服务上云快速入门指引

  • 翻滚发布

关于本次发布的服务,先晋级一个/批实例,测验没问题了,再分批晋级剩余实例,直到一切实例都晋级到V2版别。

微服务上云快速入门指引

  • 蓝绿发布

蓝绿发布是把实例分为两个阵营,一个绿阵营和一个蓝阵营,正在运行的实例是V一版别,把它放到绿阵营,这个时分布置了新的实例V2版别到蓝阵营里边。然后对V2版别进行全面的测验,测验没问题了之后再经过负载均衡,把流量从V1切到V2,这样就完成了一个无缝的发布,一起确保新版别线上环境的全面测验.

微服务上云快速入门指引

发布阶段:全链路灰度

有了以上这几种发布战略,就能够完成别的一种咱们想要的效果了,也便是全链路灰度。

全链路灰度是什么意思呢?比如说咱们在用微信时或许会遇到一种情况,有些新功用我有了,但别人没有,其实便是你被选中作为灰度用户正在测验新功用,新功用在灰度环境测验没问题了,才会让一切的用户都用到这个功用。

在微服务的架构下怎么去完成这种效果呢?首要需求在出产环境把布置的实例分为两个环境,一个是正式环境,别的一个是灰度环境。假如想要晋级,就需求对即将晋级的服务进行灰度测验,按照之前所说的的方法把新的实例布置之后,经过实例打标的方法,把它符号为灰度环境里边的实例,比如说符号版别为V2,这个时分只需求在网关层面,在恳求进来的时分,关于想要灰度的用户进行这个流量染色,比如说把上海地区的用户符号为V2,那么一切上海用户的流量都会进入到灰度环境里边进行灰度测验,灰度环境测验没有问题了,再把一切的服务都布置上来,然后把一切的流量都切到灰度环境,这样整个灰度就完成。这样能够协助咱们做到端到端的环境测验,也能做到阻隔流量甬道,也能够做到一键切流。

微服务上云快速入门指引

优势

  • 全链路阻隔流量泳道​
  • 端到端的稳定环境​
  • 流量一键切流​
  • 可观测能力

完成计划

1、实例打标

K8s注册场景:在workload上经过增加pod lables打上版别标签。

微服务结构注册场景:对服务下的一切实例进⾏分组,经过标签能够区别版别。

2、流量染色

网关对流量特性进⾏灰度染色。有动态染色与静态染色两种方法。

3、网关到后端服务的流量路由

经过标签路由,按照恳求中的服务版别信息进行流量转发。

4、后端服务与服务间的路由

在链路上各服务能够依据恳求流量特征进⾏动态路由。

出产阶段:就近拜访和多活容灾

在出产阶段,微服务的架构里有两个比较重要的场景,第一个是就近拜访,第二个是多活容灾。

什么是就近拜访呢?一般大的微服务项目都会在不同的地区去布置,比如说某个微服务项目在上海和广州都有布置,有个上海的用户想要拜访这个服务,可是恳求转发到了广州,因为地域的原因会形成必定的网络延迟。那咱们肯定更希望上海的用户就拜访到上海的服务实例,广州的用户就拜访到广州,这个时分就需求用到就近拜访,就近拜访便是帮咱们把布置的实例进行一个地域符号。把地域信息符号到实例上,这样当有恳求进来的时分,就能够依据这个地域信息找到最近的实例来供给这种就近拜访的能力。

多活容灾分为两个层面,第一个是在进口层面做多活容灾,第二个是在运用层面做多活容灾。先说进口层,如下图所示,咱们在网关层面去连接后端不同的可用区,一旦任何一个可用区挂了,网关都能够做到流量可跨可用区的切换,来确保咱们的恳求不会在网关层面给挂。那假如一个城市,比如说广州整个区都挂掉了之后,网关是能够把这个流量做跨城容灾切换的,把它全部切到上海区去,这样就能够确保恳求在网关层面能够做到无缝切换,来确保咱们进口层的多活容灾。

微服务上云快速入门指引

到了运用层,如下图所示,积分中心拜访活动中心的时分,假如广州一区的活动中心挂掉了,那么咱们就能够在这个服务层面去运用动态路由的能力,把积分中心拜访活动中心做一个同城切换,切到广州二区的活动中心。那假如整个广州区都挂了的时分,就能够把这个恳求直接跨城切换到上海区,让上海的服务的实例来响应这样的恳求,这样就在运用层做到了多活容灾。

微服务上云快速入门指引

优势

经过云原生网关和北极星服务办理中心供给接入层与运用层的多活容灾与就近拜访。完成毛病快速恢复、容量快速扩容。

  • 主动获取服务实例的地域信息

  • 主动依据地域信息进行就近路由

  • 跨可用区、跨地域容灾切换

出产阶段:限流场景

限流阶段

1.接入层流量限流

2.服务间调用限流

限流维度

1.服务/接口/标签的限流

2.秒、分钟、小时、天等时间微服的限流

限流类型

1.单机限流:针对单个被调实例的等级的限流,流量限额只针对当前被调实例收效,不同享。

2.分布式限流:针对服务下一切实例等级的限流,多个服务实例同享同一个全局流量限额

下图是一个简略的架构图关于如安在进口层以及服务间做限流。

微服务上云快速入门指引

微服务上云案例演示

下图是演示内容示例架构图。

微服务上云快速入门指引

下面将会演示一个完好的微服务场景。

weixin.qq.com/sph/AQIoDw

总结

上面演示的这个Demo涉及到的腾讯云的产品叫做微服务引擎 TSE,它供给开源增强的云原生网关、注册装备中心和服务办理渠道,协助用户快速构建轻量、高可用和易弹性的微服务架构。微服务引擎的运用方法彻底兼容开源版别,在功用、可用性和可运维性等多个方面进行增强。

微服务上云快速入门指引

在以上演示中用到的TSE云原生网关结合了流量网关、安全网关和服务网关来完成一个统一的网关。具有安全认证、流量防护、流量路由、自定义插件等功用。

微服务上云快速入门指引

弹性微服务运用场景主要便是以上这些微服务的架构,像购物、php的运用等容器布置的都能够放到弹性微服务上面,或许为了处理这个流量波峰波谷这种需求扛住流量洪峰来提高资源运用率的这种场景也是十分适合用弹性微服务的。下一篇咱们将会重点为咱们带来《秒杀场景限流处理计划》。