微服务架构思想及Tars框架介绍

本文章为专栏系列文章推荐进入专栏按顺序阅读

微服务架构及Tars框架

微服务方案需要的功能

完备的微服务解决方案往往需要以下的工具作为组成部分。当然以下功能并非必须的功能,而且在我们使用的很多rpc解决方案中提供了以下的一种或多种功能。在大部分情况下我们可以不去过多关注这部分内容的实现细节但是需要了解各个部分的用途。

  • 服务注册中心
  • 服务网关
  • 断路(熔断)器
  • 配置中心
  • 调用链路追踪

1. 服务注册中心

服务注册中心在微服务方案中是很核心的基础服务之一。其功能主要是服务的注册和发现,服务检查,服务注册表的维护。

服务提供者在服务启动时将自己的信息注册到注册中心,服务消费者通过服务注册中心查询服务的调用地址等信息进行服务调用。注册中心会通过心跳检测来检测已注册服务的状态如果长时间无法访问会从注册表中剔除。

2. 服务网关

微服务网关是微服务架构中的一个关键的角色,用来保护、增强和控制对于微服务的访问,微服务网关是一个处于应用程序或服务之前的系统,用来管理授权、访问控制和流量限制等,这样微服务就会被微服务网关保护起来,对所有的调用者透明。因此,隐藏在微服务网关后面的业务系统就可以更加专注于业务本身。微服务网关在Tars中没有看到,现在微服务网关的可选择性也非常多,大家可以自己去查看相关的解决方案和工具。

3. 断路(熔断)器

当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

当企业微服务化以后,服务之间会有错综复杂的依赖关系,例如,一个前端请求一般会依赖于多个后端服务,技术上称为1 -> N扇出。在实际生产环境中,服务往往不是百分百可靠,服务可能会出错或者产生延迟,如果一个应用不能对其依赖的故障进行容错和隔离,那么该应用本身就处在被拖垮的风险中。在一个高流量的网站中,某个单一后端一旦发生延迟,可能在数秒内导致所有应用资源(线程,队列等)被耗尽,造成所谓的雪崩效应,严重时可致整个网站瘫痪。

熔断在实现模式上有好几种,但是最终目的是一致的为了保证服务的高可用性,具体熔断模式和算法可以查阅相关的资料。当然同样有前人的现成的东西可以直接用,但是最好自己能够掌握其中原理。

Tars中有提供相应的过载保护功能,和容错保护,其中容错保护支持名字服务排除策略和client主动排除。

4. 配置中心

配置中心就是把项目中各种配置、各种参数、各种开关,全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。当各个服务需要获取配置的时候,就来「配置中心」的接口拉取。当「配置中心」中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。

在Tars中主服务节点有config服务能够提供相应的功能,使用起来也是非常方便的。

5. 调用链路追踪

如果想知道一个接口在哪个环节出现了问题,就必须清楚该接口调用了哪些服务,以及调用的顺序,如果把这些服务串起来,看起来就像链条一样,我们称其为调用链。

想要实现调用链,就要为每次调用做个标识,然后将服务按标识大小排列,可以更清晰地看出调用顺序。

在Tars中有消息染色功能,通过对某个请求进行消息染色从而能够查看服务调用的细节。便于问题的排查。

Tars架构

tars官网上的架构图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gloquwZB-1592364667416)(https://tarscloud.github.io/TarsDocs/assets/tars_tuopu.png)]

整体架构的拓扑图主要分为2个部分:服务节点与公共框架节点。

  • 服务节点:服务节点可以认为是服务所实际运行的一个具体的操作系统实例,可以是物理主机或者虚拟主机、云主机。随着服务的种类扩展和规模扩大,服务节点可能成千上万甚至数以十万计。 每台服务节点上均有一个Node服务节点和N(N>=0)个业务服务节点,Node服务节点会对业务服务节点进行统一管理,提供启停、发布、监控等功能,同时接收业务服务节点上报过来的心跳。

  • 公共节点:

      公共节点包括以下几个部分
    
      | Web管理系统:在Web上可以看到服务运行的各种实时数据情况,以及对服务进行发布、启停、部署等操作;
      
      | Registry(路由+管理服务):提供服务节点的地址查询、发布、启停、管理等操作,以及对服务上报心跳的管理,通过它实现服务的注册与发现;
    
      | Patch(发布管理):提供服务的发布功能;
    
      | Config(配置中心):提供服务配置文件的统一管理功能;
    
      | Log(远程日志):提供服务打日志到远程的功能;
    
      | Stat(调用统计):统计业务服务上报的各种调用信息,比如总流量、平均耗时、超时率等,以便对服务出现异常时进行告警;
    
      | Property(业务属性):统计业务自定义上报的属性信息,比如内存使用大小、队列大小、cache命中率等,以便对服务出现异常时进行告警;
    
      | Notify(异常信息):统计业务上报的各种异常信息,比如服务状态变更信息、访问db失败信息等,以便对服务出现异常时进行告警;
    

    这些服务我们会在后续使用中接触到。以上的公共节点所包含的服务在Tars主节点中也是以服务的形式来使用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章