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

服务注册与发现

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

服务注册

目前,流行的注册中心比较多,常见的有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服务器。DNS服务器从注册中心获取所有已注册的服务及对应的IP端口列表。调用方Service A 通过DNS查询某个服务下的IP列表,然后发起调用。

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

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

DNS Filter

DNS Filter模式我们定义为把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客户端跟应用部署在同一个主机或容器内。其工作原理如下图所示:

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

作者:Solomon_肖哥弹架构
链接:https://juejin.im/post/6892283597722484743

微服务架构的优缺点_微服务架构DNS服务注册与发现实现原理相关推荐

  1. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  2. 谷粒商城微服务分布式基础篇二—— Spring Cloud Alibaba、Nacos注册与发现

    文章目录 Spring Cloud Alibaba--微服务开发 Spring Cloud Alibaba是什么?  主要功能  组件 为什么不使用Spring Cloud 使用 Nacos Disc ...

  3. 超融合架构的优缺点_超融合服务器与传统架构服务器的区别哪?定制服务器厂家简要分析...

    传统架构下的数据中心根据各设备块资源的应用情况,对设备进行逐一升级,即设备以单点的形式采购,无法实现均衡. 在可伸缩性方面,超融合体系结构更加灵活和高效.此外,扩展节点的数量没有限制.简单地说,随着业 ...

  4. 超融合架构的优缺点_知道 超融合基础架构吗

    一"融合"架构的起源 "融合"架构最初的解决方案通常包括了服务器.SAN存储和网络(以太网或InfiniBand).一般是由单一供应商提供的包括服务器.存储和网 ...

  5. mysql指定服务标记为删除_如何解决“指定的服务已标记为删除”

    如何解决"指定的服务已标记为删除" 我尝试使用services.msc删除Windows服务,并遇到以下错误: [SC] DeleteService FAILED 1072: 指定 ...

  6. ddd架构 无法重构_漫谈分层架构:为什么要进行架构分层?

    为什么要分层 高内聚:分层的设计可以简化系统设计,让不同的层专注做某一模块的事 低耦合:层与层之间通过接口或API来交互,依赖方不用知道被依赖方的细节 复用:分层之后可以做到很高的复用 扩展性:分层架 ...

  7. 服务注册与发现的原理和实现

    什么是服务注册发现? 对于搞微服务的同学来说,服务注册.服务发现的概念应该不会太陌生. 简单来说,当服务A需要依赖服务B时,我们就需要告诉服务A,哪里可以调用到服务B,这就是服务注册发现要解决的问题. ...

  8. 2017微服务 mysql集群_微服务架构系列之Nacos集群搭建

    上回我们说到了<微服务架构系列之Nacos 配置核心概念>,这次我们讲讲Nacos 集群环境搭建. 集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图: 如果 ...

  9. 微擎url模式解读_微擎开发文档之微擎执行主流程介绍

    首先对微擎的工作原理做简单描述, 微擎使用规则和模块的机制来处理公众平台的请求数据并返回响应的结果. 执行流程描述为: 粉丝用户与公众号码进行对话或交互, 而后公众平台将粉丝用户的请求消息(当前包括: ...

最新文章

  1. [你必须知道的css系列]第一回:丰富的利器2:CSS选择符之子选择符、相邻选择符...
  2. Jmeter拓展插件(jmeter-plugins)
  3. java怎么获取服务器文件夹,java获取远程服务器的文件夹
  4. 微信小程序 - 实现购物车结算
  5. 数据结构 --- 堆
  6. AWS re:Invent 2018的5大公告
  7. Linux Kernel 多个本地信息泄露漏洞
  8. 查看线程CPU利用率
  9. 补习系列(2)-springboot mime类型处理
  10. w10系统服务器连接错误代码,Win10升级失败常见问题及错误代码解决方法汇总
  11. Python编程题汇总(附答案)
  12. 一步解决桌面文件需要管理员权限才能删除问题
  13. 汉信码今发布:国家自主研发的二维码技术
  14. mysql limit acs_Oracle Acs资深顾问罗敏 老罗技术核心感悟:牛! 11g的自动调优和
  15. (学习笔记)JAVA开发需要掌握哪些技术?
  16. Python判断某个列表是否是另一个列表的子列表
  17. 区分Linux:eth0,eth1,eth2,lo
  18. TNF拮抗剂的结构、功能与结核感染_Wallis2008
  19. linux后台运行服务
  20. Blender导出.fbx模型到Unity贴图丢失

热门文章

  1. 2017.5.7 换教室 思考记录
  2. 【英语学习】4000 Words 【V1】【U02】The Laboratory
  3. linux下overcommit_memory的问题
  4. linux的sendmail服务有啥用,Linux的SendMail服务
  5. 神经网络之文本情感分析(二)
  6. iOSQuart2D绘图之UIImage简单使用
  7. 【SDK】Memory read error at 0xF8007080
  8. MyBatis学习笔记(三) 关联关系
  9. ajax实战用法详解
  10. 策略模式Strategy——坐什么车回家?