阿里巴巴dns设置(2021最快最稳定的dns排行)

微服务架构已经成为中小型企业必备的项目支撑能力,尤其互联网BATJ企业在04年已经非常成熟,在大规模的核心业务实战中总结了很多大规模服务调度与大数据集的处理方案。微服务架构中涉及到很多模块,本文以微服务架构的服务注册与发现产品来讲讲,如何基于DNS做服务发现。 服务注册与发现 微服务体系中,服务注册与服务发现是两个最核心的模块。业务服务调用订单服务时,需要通过服务发现模块找到订单服务的IP和端口列…

微服务架构已经成为中小型企业必备的项目支撑能力,尤其互联网BATJ企业在04年已经非常成熟,在大规模的核心业务实战中总结了很多大规模服务调度与大数据集的处理方案。微服务架构中涉及到很多模块,本文以微服务架构的服务注册与发现产品来讲讲,如何基于DNS做服务发现。

服务注册与发现

微服务体系中,服务注册与服务发现是两个最核心的模块。业务服务调用订单服务时,需要通过服务发现模块找到订单服务的IP和端口列表,而订单服务的实例在启动时需要把提供服务的IP和端口注册到服务注册中心。一个典型的结构如下图:

阿里巴巴dns设置(2021最快最稳定的dns排行)

服务注册

目前,流行的注册中心比较多,常见的有zookeeper、ectd、consul、eureka等。服务注册通常有三种:自注册、第三方注册、注册中心主动同步。

  • 自注册: 就是服务提供方在启动服务时自己把提供服务的IP和端口发送到注册中心,并通过心跳方式维持健康状态;服务下线时,自己把相应的数据删除。典型的像使用ZK客户端发布微服务。
  • 第三方注册: 第三方注册是指,存在一个第三方的系统负责在服务启动或停止时向注册中心增加或删除服务数据。典型的用法是devops系统或容器调度系统主动调注册中心接口注册服务;
  • 注册中心主动同步 与第三方注册方式类似,主动注册方式是指注册中心和调度或发布系统打通,主动同步最新的服务IP列表;一个例子是kubernetes体系中,coredns订阅api server数据。

服务发现

在真正发起服务调用前,调用方需要从注册中心拿到相应服务可用的IP和端口列表,即服务发现。服务发现从对应用的侵入性上可以分为两大类:

  • SDK服务发现方式,需要调用方依赖相应的SDK,显式调用SDK代码才可以实现服务调用,即对业务有侵入性,典型例子如eureka、zookeeper等。
  • DNS本身是一种域名解析系统,可以满足简单的服务发现场景,如双方约定好端口、序列化协议等等。但是,这远远不能满足真正的微服务场景需求。

基于DNS的服务发现

DNS协议是目前最为通用的协议之一,几乎所有操作系统都会有DNS客户端实现。所以,其天然具有跨语言特性。这也是快速接入微服务体系最快的一个方式。要基于DNS做服务发现,首先注册中心的数据应该可以通过DNS的数据格式暴露出来。让任何系统的DNS 客户端都可以通过DNS协议获取服务列表。

备注:仅仅是服务发现系统提供DNS协议接入

基于DNS的服务发现方式,大致可以归结两类:

独立DNS服务器

独立DNS Server模式的基本架构如下图:

阿里巴巴dns设置(2021最快最稳定的dns排行)

如上图所示,这种架构中,需要独立的DNS服务器。DNS服务器从注册中心获取所有已注册的服务及对应的IP端口列表。调用方Service A 通过DNS查询某个服务下的IP列表,然后发起调用。

这种类型的服务发现方式优缺点分别如下:

  • 优点 集中的DNS服务器,便于升级维护
  • 缺点 对DNS服务器性能要求高这种情况下一般需要LVS设备为DNS服务器集群做请求转发,存在单点问题

DNS Filter

DNS Filter模式我们定义为把DNS服务器集成到服务调用方机器或容器里,如下图所示:

阿里巴巴dns设置(2021最快最稳定的dns排行)

这种模式中,首先要保证ServiceA的DNS查询都被拦截到本机的DNS服务器上(127.0.0.1:53),在获取到服务的IP列表后发起调用。由于这种方式把DNS服务器前置到实际调用的机器上,所以它解决了独立DNS服务器模式的单点问题,完全P2P的模式。但由于需要在应用机器上安装DNS服务器,其维护和升级成本较前者高一些。

基于DNS的服务发现实践

阿里巴巴早在2014年就开始了基于DNS做服务发现的尝试了,现在已经形成了较为成熟的模式。阿里内部以VIPServer作为注册中心,并开发了DNS Filter,部署在应用容器内。目前已经有超过100w+个机器或容器上安装了DNS Filter,支持了几乎所有REST服务发现。

注册中心 VIPServer

VIPServer是阿里中间件软负载团队自研的服务注册中心,VIPServer同时支持三种模式的服务注册,并且均有相当规模的应用。除此之外,VIPServer具备如下特性:

  • 主动与被动健康检查 VIPServer同时支持主动与被动健康检查。 主动健康检查是指VIPserver服务端主动定期发送健康检查探测包,探测服务提供方是否可以正常提供服务。 用户可以配置多种健康检查方式,自定义探测端口和探测URL(HTTP)。 主动探测的好处在于服务提供方不用做任何改动即可快融入微服务架构。被动健康检查则是指服务提供方主动注册自己的IP、端口和服务名等信息,并通过心跳方式保持活性。
  • 多种负载均衡策略 同时,VIPServer支持多种负载均衡策略,包括权重、同机房、同地域、同环境等等,是异地多活项目的核心系统之一。
  • 多重容灾保护策略 VIPServer提供了多种容灾保护策略,可以有效减少人为或者底层系统(网络等)异常带来的影响。这些容灾保护包括: 客户端缓存,即使VIPServer服务端挂掉也不影响应用的正常调用;服务端保护阈值,有效防止应用因压力过大而发生雪崩;客户端容灾目录,提供人工干预服务IP列表的能力;客户端空列表保护,有效防止人为误删IP列表操作或VIPServer服务端异常

DNS-F客户端

出于性能的考虑,我们采用了第二种DNS Filter的服务发现模式。为此,我们单独开发了DNS-F客户端,DNS-F客户端跟应用部署在同一个主机或容器内。其工作原理如下图所示:

阿里巴巴dns设置(2021最快最稳定的dns排行)

  • 首先,应用ServiceA通过DNS查询获取到ServiceB的可用IP列表
  • DNS-F会拦截到ServiceA的查询请求,判断自己是否该查询的答案,如果有(服务已在VIPServer中注册)则直接返回IP列表;
  • 如果查询的服务在VIPServer中没有注册,DNS-F把DNS查询转发给系统的nameserver,由真正的DNS系统解析;

本文来自投稿,不代表来拓客立场,如若转载,请注明出处:https://www.laituoke.com/ltk/9241.html