[实践]网关技术

目录

前言

网关的主要功能说起来很简单,就是实现域名解析和路由转发。但是当具体落地到公司项目中的时候事情就有点复杂了起来, 从链路上分析可以具体分为一下的类别:

  1. DNS: 主要负责内部域名解析,外部访问域名解析。qps非常大,稳定性要求极高,需要做好的负载均衡策略。且作为每台机器都配置的组件很可能需要经常迁移,需要vip。
  2. NLB(Network Load Balancer): 即4层负载均衡,早前为LVS。对性能要求很高,出现了基于DPDK技术改造的DPVS。
  3. ALB(Application Load Balancer):7层负载均衡。通常为魔改nginx。
  4. SNAT(Source Network Address Translation): 出口网关,其技术跟NLB差别不大,实际上可以理解为一种4层代理服务。
  5. 7层代理:有4层代理,自然也有7层代理。技术跟ALB是类似的。
  6. 负载均衡手段—ECMP: 基于BGP等价路由技术的负载均衡技术,具体软件有很多,本人使用过Bird。这个技术对机房网络结构有要求,不是所有的机房都有条件用。
  7. 负载均衡手段—VRRP: 基于虚拟路由器冗余协议的负载均衡技术。准确的说这是一种冗余技术,做不到负载均衡。
  8. 衍生相关—注册中心:网关对接k8s的话,需要转发到具体容器,由于容器本身处于不断变化中,我们需要一个注册中心来记录这种变化。本人接触比较多的是zookeeper
  9. 衍生相关—-etcd: etcd通常用于存一些配置信息,方便跨region发布,便于回滚等。 当然上面也只是大致的分类,实际到具体场景,还得继续拆分成具体的产品。下面根据我的理解我来挨个分析分析。

DNS

DNS成熟的软件已经很多,光我接触过的就有: Coredns, Ubound, DPDK Ubound。 其实现标准在RFC 1034 - RFC 1035也已经定义的很清楚了。所以改造空间其实有限,除了最基本的功能,还有一些功能是需要实现的:

    1. 实现控制面和数据面分离。通过公司平台让用户配置,下发到具体机器上。由于DNS的配置通常不太大,通常都是CNAME,A type。直接数据面通过api访问控制面问题也不会太大。
    1. 实现内部域名和外部域名的统一管理。相当于既可以解析内部用户的域名,也可以在内部域名不能访问时,去公有DNS拉取公有域名。这里存在一个问题,即对于公有域名的缓存策略应该怎么做。这个问题在我的职业生涯中遇到过很多次。
    1. 权重。应该支持同一个域名配置多个权重不同的解析。以实现用户可以通过更改权重,切换不同的后端,也方便进行一些测试。
    1. 循环检查。dns如果存在域名循环解析,可能直接导致集群崩溃。 除此之外,就是最重要的负载均衡策略。我理解最优的策略就是ECMP。
Zehao Liu 支付宝支付宝
Zehao Liu 微信微信
0%