前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Polaris-Sidecar:更低成本的内网DNS实现

Polaris-Sidecar:更低成本的内网DNS实现

作者头像
腾讯云中间件团队
发布2022-03-30 13:10:38
8560
发布2022-03-30 13:10:38
举报

导语

PolarisMesh 是腾讯开源的百万级服务发现和治理中心,积累了腾讯从虚拟机到容器时代的分布式服务治理经验。作为分布式和微服务架构中的核心组件,PolarisMesh 提供服务寻址、流量调度、故障容错和访问控制等一系列能力,在K8s 和虚拟机环境中可以无差别使用,支持主流的开发模式,兼容grpc、spring cloud和servicemesh等开源生态,帮助用户快速构建扩展性强、可用性高的业务架构,实现从传统架构到云原生架构的转型。

内网寻址存在的问题

当某个服务下部署了多个应用程序副本时,一个请求如何发送给某一副本上进行处理呢?当应用部署于kubernetes时,请求流量先经过Service,再由Service将流量转发至某一个Pod进行处理;而应用部署在VM或者物理机时,会额外部署一个用于流量转发的组件,请求将先经过该组件,再由该组件将流量转发至某一台机器进行请求处理。

上述请求调用的方式,都是将所有的流量通过LVS等四层负载均衡组件进行转发,即某个服务下的所有服务实例都挂载到一个VIP(Virtual IP)下,所有的请求都先经过此VIP,再由VIP转发,但是这种方式使用起来会遇到以下几个明显的问题:

  • 负载问题:所有的请求都必须经过这个VIP,VIP的请求转发压力会增大,容易引起四层负载组件出现高负载。
  • 性能问题:请求链路中增加了负载均衡组件到业务进程的一跳,使得长尾时延变大;比如filebeat上报ES,ES集群暴露一个VIP,当filebeat上报数据时,由于每个请求都是大数据包并且均经过VIP,导致长尾时延很大。
  • 成本问题:需要维护VIP的可用性以及高性能,成本变大;直接在云上购买VIP产品,产品规格为50Mpbs的话,每月的成本都在¥3000~¥4000左右。

如果要解决VIP所带来的问题,那么通用的解决方式,就是去除负载均衡组件到业务进程这一跳的网络请求链路,直接将主调方的请求流量发送至对应业务进程进行处理。这种思路存在两种解决方案。

  1. 侵入式方案:主动获取被调方地址。主调方发起请求前先通过SDK的形式,发起请求前需调用SDK的获取服务地址的方法,在获取某服务下业务进程的的IP地址信息后向被调方发起请求。该方案需要将服务发现SDK与业务框架进行集成。
  2. 无侵入式方案:被动获取被调方地址。该方案最典型的就是DNS协议。主调方仅需要记录被调方的域名信息,通过DNS的形式,获取域名下的所有服务地址信息,随机选取一个向被调方发起请求。该方案无需将服务发现SDK与业务框架进行集成。

在上文提到的filebeat上报ES、组件Proxy统一接入地址、数据库主备节点统一接入地址等几个场景中,由于涉及到开源及第三方组件,这些组件无法通过改造的方式集成注册中心SDK,因此无法实施侵入式方案,只能通过无侵入式的方案来解决,下面我们看看如何实现无侵入的内网DNS方案。

如何实现无侵入的内网DNS

上述所提到的内网DNS方案,主要有集中式分布式两种实现方式,北极星对这两种方式均提供支持。下面向大家分享在前期北极星对于这两种方案的设计思考。

集中式DNS

集中式DNS模式,需要北极星服务端实现DNS协议,然后需要修改业务进程所在环境的/etc/resolv.conf 配置,将北极星服务端所在IP作为第一个 nameserver 地址即可,这样业务进程所有的DNS请求都将发往北极星服务端,北极星服务端会根据域名解析出对应的服务以及命名空间,将相关实例地址信息数据进行DNS回包。

可见,在时间驱动型场景中,相比执行内容而言,业务更关注的任务是定时执行还是周期执行、执行具体时间点准确性、周期频率的长短等时间因素。

分布式DNS

分布式DNS模式,则是通过在业务进程所在环境运行 polaris-sidecar 进程,然后需要修改业务进程所在环境的/etc/resolv.conf 配置,将 127.0.0.1 所在IP作为第一个 nameserver 地址,这样业务的DNS请求将全部由polaris-sidecar进程代为处理,polaris-sidecar在将自身缓存的服务地址列表进行DNS回包。polaris-sidecar 自身的服务地址信息缓存会定时和北极星服务端进行同步,从而拉取服务的最新实例地址列表。

北极星的选择:分布式DNS

这里再给出一个北极星对于集中式DNS与分布式DNS,在能力支持上的对比表格:

功能

集中DNS

分布式DNS

服务发现

支持

支持

服务注册

不支持

不支持

标签路由

不支持

支持

就近路由

不支持

支持

故障熔断

支持

支持

限流

不支持

部分支持

鉴权

不支持

支持

集中式DNS:DNS请求只能携带域名名称信息,提供的数据信息非常有限,北极星在此基础上只能做到服务发现,无法满足用户就近路由、分区路由等服务治理的需求。

分布式DNS:由于 polaris-sidecar 与业务进程在同一部署环境下,因此可以将一些静态信息注入为环境变量,polaris-sidecar 会将这些环境变量信息作为服务治理所需要的数据,每次处理DNS请求时可以通过这些静态标签执行相应的服务治理流程;因此相比集中式DNS服务发现,分布式DNS方案可以享受到更多的北极星服务治理能力。

选型依据:北极星服务端插件化的设计,要支持集中式DNS的方案十分便捷,仅需要在北极星服务端接入层中添加一个DNS协议的接入插件即可。但是北极星定位是一个服务治理中心,因此北极星在支持DNS协议的服务发现基础之上,同时还希望能将治理能力带入到DNS协议中,因此,最终北极星采用分布式DNS方案实现内网DNS寻址的能力。

后续规划

  • 协议扩展:支持SRV记录,解决后端多个实例端口号不一致的问题。
  • 能力补齐:支持限流及鉴权能力。

如何使用Polaris

参考文档

https://github.com/polarismesh/polaris-sidecar/blob/main/README.md

项目链接

  • polaris-sidecar: https://github.com/polarismesh/polaris-sidecar
  • polaris-controller: https://github.com/polarismesh/polaris-controller

学习视频链接

为了方便大家更好的学习北极星(PolarisMesh)开源项目,我们特别推出了《北极星PolarisMesh训练营系列学习课程,帮助大家更好地了解和使用北极星,您可以通过以下链接了解课程信息(视频课程每周更新1~2个),欢迎大家关注、点赞、转发:

  • bilibili: https://www.bilibili.com/video/BV1A34y147tx/
  • 知乎: https://www.zhihu.com/zvideo/1490462493013667841

往期

推荐

《Linux 下一代架构基金会宣布:联合腾讯等企业和社区,发力微服务标准化建设》

《腾讯云开源业界首个云原生标准的一站式微服务管理框架 Femas》

《分布式任务调度:你知道和不知道的事》

《云原生时代的Java应用优化实践》

《全面兼容Eureka:PolarisMesh(北极星)发布1.5.0版本》

《全面拥抱Go社区:PolarisMesh全功能对接gRPC-Go | PolarisMesh12月月报》

《SpringBoot应用优雅接入北极星PolarisMesh》

《Serverless可观测性的价值》

《RoP重磅发布0.2.0版本:架构全新升级,消息准确性达100%》

扫描下方二维码关注本公众号,

了解更多微服务、消息队列的相关信息!

解锁超多鹅厂周边!

戳原文,查看更多PolarisMesh的信息!

点个在看你最好看

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云中间件 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 《云原生时代的Java应用优化实践》
  • 《全面兼容Eureka:PolarisMesh(北极星)发布1.5.0版本》
  • 《全面拥抱Go社区:PolarisMesh全功能对接gRPC-Go | PolarisMesh12月月报》
  • 《SpringBoot应用优雅接入北极星PolarisMesh》
  • 《Serverless可观测性的价值》
  • 《RoP重磅发布0.2.0版本:架构全新升级,消息准确性达100%》
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档