作者:铖朴
背景
IPv4 协议(后文简称 IPv4)为互联网的发展与普及做出了重要贡献,但近年来,跟着运用程序、数据和 IT 服务的爆破式增长。最初协议规划进程中用来描绘 IP 地址所选用的 32 位二进制数格式的 IPv4 地址现已于2011 年 [ 1] 被申请耗尽,从那时起,全世界都现已处于无新地址可用的局面。
IPv6 协议(后文简称 IPv6)作为 IPv4 之后被选用的下一代互联网协议,比较 IPv4 协议中选用 32 位来表明 IP 地址,其地址表明位数扩大到了 128 位,地址数量是 IPv4 所能供给的 2 的 96 次方倍。简单看数字或许显得不太直观,换成一句描绘 IPv6 地址之多更直观和经典的话:“选用 128 位表明地址的 IPv6 能够为地球上的每一粒沙子都分配一个 IP 地址”!此外,IPv6 协议其不仅能够处理 IPv4 协议中的地址缺少问题,一同也能为互联网供给更高效、更安全的网络通讯。IPv6 协议在网络通讯中供给了许多新的功用和优势。例如,在数据传输和路由方面,其经过新的规划提高了效率和可靠性,减少了网络拥堵和数据包丢失的状况。此外,在安全领域,其内置对 IPSec 的支撑,能够更好地保护网络中的数据传输安全,防止黑客攻击和盗取数据。
作为下一代互联网协议,向 IPv6 搬迁是未来的大势所趋。在我国,从 2014 年开始相关机构现已逐渐停止向新用户和运用分配 IPv4 地址,开始全面商用 IPv6 协议 [ 2] 。在政府引导测,近年来,陆续也出台了一系列相关辅导文件例如:2017 年国务院发布的《推动互联网协议第六版(IPv6)规划布置行动计划》 [ 3] 、2021 年工业与信息化部发布的《IPv6 流量提高三年专项行动计划(2021-2023 年)》 [ 4] 、2021 年网信办发布的《关于推动 IPv6 规划布置的辅导定见》 [ 5] 等不断地在引导企业从 IPv4 协议向 IPv6 协议搬迁。
但因为当时互联网中 IPv4 协议的运用规划非常大,对于用户来说,没办法经过规矩一个时间日期,从那一刻开始,一切互联网上的设备全部运用 IPv6,这是不现实的。一次性搬迁不仅在根底设施层面不可行,对企业用户来说,就算根底设施都能准备结束,让其将少则上百,多则不计其数的运用实例在一段时间内一次性停机进行协议栈搬迁,无论是在风险上,还是成本上,对企业用户来说都是难以接受的! 既然无法一步到位,渐进式的 IP 地址搬迁成为当时的干流选择。接下来本文将介绍一些干流渐进式的 IP 地址搬迁办法。
搬迁计划
尽管 IPv6 协议具有许多优势,可是其推广和运用仍然面临许多挑战。IPv6 的普及需求全球范围内的配套根底办法和支撑,包含网络设备的更新、人员培训和政策法规的推动等等。一同,IPv6 与 IPv4 之间的兼容性也是一个重要的问题,需求经过技能手段和过渡机制来处理。
常见的 IP 协议渐进式搬迁共存计划,主要有双栈(Dual Stack)、地道(Tunneling)等技能。其间,双栈技能是现在业界运用较为广泛的一种 IPv4/IPv6 共存的一种技能,其意图是在互联网彻底过度到 IPv6 之前,经过为设备安装 IPv4 和 IPv6 双协议栈。具有双栈的设备能够完结与单 IPv4、单 IPv6 或许双栈的设备进行通讯。经过让各种协议栈能共存,渐进式地进行 IP 协议栈的搬迁。像 Kubernetes 很早也现已对双栈功用 **[ 6] **进行了支撑。
地道技能是一种把 IPv6 地址封装到IPv4数据报中的办法,当数据从 IPv6 单协议栈宣布后,在经过 IPv4 单栈网络环境的进程中,将 IPv6 地址封装到 IPv4 数据报作为 IPv4 数据报内容后,经过 IPv4 协议栈进行传输。在经过 IPv4 单栈环境后,来到 IPv6 单栈环境时,再将数据报中的 IPv6 数据段内容解析出来,构造新的 IPv6 数据报在 IPv6 协议栈环境中进行传输。
微服务双栈搬迁计划
上文介绍的计划更多的是一般化的办法论。但详细到微服务体系中,远程调用进程怎么完结多协议栈共存以便帮助企业用户滑润进行协议栈的搬迁呢?
上图是当时业界微服务体系中服务之间遍及选用的远程调用进程架构图,本文接下来介绍怎么根据双栈技能完结微服务运用的协议栈滑润搬迁的常用办法。
双注册双订阅完结协议栈滑润搬迁
在微服务体系中,比较于单栈环境下,只要一个 IP 地址,微服务的注册与发现进程都根据该地址完结服务远程调用。在多协议栈共存的环境中,其本质就是要处理服务注册和发现进程怎么运用 IP 地址的问题。
梳理清楚了问题,就不难发现根据双注册双订阅的办法能够较好地处理微服务体系中多协议栈共存的问题,以便完结微服务体系协议栈的滑润搬迁。该计划的服务注册和订阅进程能够被描绘为下图所示:
选用双注册双订阅完结微服务体系滑润进行 IP 协议栈搬迁的进程能够被大致描绘为以下过程:
-
在新的运用晋级或许发版之前,对相关微服务运用地点宿主机进行 IP 地址协议栈晋级改造,让其一同支撑 IPv4 和 IPv6 双协议栈。
-
经过过程 1 改造的微服务运用,在微服务结构层面,经过一个双栈地址提取模块提取运用宿主机中有效的 IPv4 和 IPv6 地址,并经过服务注册模块,将双栈地址都注册到注册中心。
-
顾客订阅注册中心中的某个服务的 IPv4 和 IPv6 双栈地址,经过运用服务结构层面的双栈地址解析模块,比对宿主机所支撑的协议栈类型,假如宿主机仅支撑 IPv4 协议,则运用供给者的 IPv4 地址建议服务调用;假如仅支撑 IPv6 或一同支撑双栈,则用供给者的 IPv6 地址建议服务调用;
4.当体系中的一切微服务都完结支撑 IPv6 协议栈的支撑后,逐渐对一切运用宿主机封闭 IPv4 协议栈,然后滑润完结大规划微服务体系从 IPv4 协议栈到 IPv6 协议栈的搬迁。
根据 DNS 技能完结协议栈滑润搬迁
双注册双订阅的办法尽管很天然和清晰,可是其因为服务注册进程中针对双栈环境中的运用会多注册一条 IP 地址对应的记载,会降低注册中心的服务承载量。
因此,也能够根据 DNS 技能完结多协议栈共存,处理微服务体系协议栈搬迁的办法。其本质是将原来的注册服务实例地址进程变成注册服务实例域名(这里域名更多是实例标识作用),可完结在注册中心所注册服务实例记载数量不变的状况下,经过额定的 DNS 域名体系存储服务域名所对应的双栈 IP 地址,然后完结多协议栈的共存。选用该计划的服务注册和订阅进程如下图所示:
根据 DNS 技能完结微服务体系滑润进行 IP 地址搬迁的进程能够被大致描绘为以下过程:
-
在新的运用晋级或许发版之前,对相关微服务运用进行 IP 地址协议栈改造,让其一同支撑 IPv4 和 IPv6 双协议栈。改造后的运用需求将本机的双栈 IP 地址信息和本运用实例特色的域名注册到体系的 DNS 服务上。
-
完结域名注册后,运用实例将本地域名注册到注册中心。
3.顾客订阅注册中心中的某个服务一切实例的域名,经过运用结构层面的域名解析模块,向体系中的 DNS 服务建议根据域名解析恳求,在经过 DNS 获取到示例域名对应的 IP 地址后,比对宿主机所支撑的协议栈类型,假如宿主机仅支撑 IPv4,则运用 IPv4 地址建议服务调用;假如仅支撑 IPv6 或一同支撑双栈,则优先运用 IPv6 地址建议服务调用;
4.当体系中的一切微服务都完结支撑 IPv6 协议栈的支撑后,逐渐对一切运用宿主机封闭 IPv4 协议栈,然后滑润完结大规划微服务体系从 IPv4 协议栈到 IPv6 协议栈的搬迁。
比较于双注册双订阅办法,根据 DNS 的办法能够较好地处理双注册双订阅进程中带给注册中心的多余压力,但 DNS 的高可用也是企业用户需求特别注意的点。
实践
Spring Cloud Alibaba 作为运用广泛的微服务结构,现在在 2021.0.5.0 版别中现已供给了微服务场景下的不同协议栈运用互通共存计划,以便帮助企业用户完结大规划微服务体系的协议栈搬迁才能。社区计划根据双注册双订阅完结,运用发动后会默许将微服务的 IPv4 地址和 IPv6 地址注册到注册中心中,其间 IPv4 地址会存放在 Nacos 服务列表中的 IP 字段下,IPv6 地址在 Nacos 的 metadata 字段中,其对应的 Key 为 IPv6(能够处理一般双注册双订阅进程中的同一个服务实例有两条记载,对注册中心造成压力的问题)。当服务顾客调用服务供给者时,会根据自身的 IP 协议栈支撑状况,选择适宜的 IP 地址类型建议服务调用。详细规矩:
- 服务顾客自身支撑 IPv4 和 IPv6 双协议栈或仅支撑 IPv6 协议栈的状况下,服务顾客会运用服务供给的 IPv6 地址建议服务调用;
2.服务顾客自身仅支撑 IPv4 单协议栈的状况下,服务顾客会运用服务供给的 IPv4 地址建议服务调用。
运用装备
比较于一般运用 Spring Cloud Alibaba 构建微服务,要运用协议栈共存搬迁功用需求对运用添加如下装备:
服务注册
现在,运用支撑协议栈共存搬迁功用的 Spring Cloud Alibaba 版别今后,服务供给者在进行服务注册过中,不需求做任何装备,会默许查看当时运用所支撑的协议栈状况,假如默许是单 IPv6 或 IPv4 协议栈,则仅注册相应的地址。假如运用支撑双栈,则会主动获取运用的 IPv6 地址,然后,将 IPv6 地址作为运用实例的服务示例元数据注册到注册中心上。
服务消费
假如运用是选用 Spring Cloud Alibaba 2021.0.5.0 版别,默许运用 Spring Cloud LoadBalancer 负载均衡策略,需求在顾客运用 application.properties 装备文件中添加如下装备开启协议栈共存搬迁功用:
spring.cloud.loadbalancer.ribbon.enabled=false
spring.cloud.loadbalancer.nacos.enabled=true
效果演示
为了便于演示,本文直接根据阿里云容器服务 ACK [ 7] 构建了一个双栈环境,来进行双栈环境的服务注册与消费演示。
服务注册
如下本文演示用的服务供给者实例 Pod 信息:
根据 Spring Cloud Alibaba 协议栈共存搬迁功用,其在注册中心上的服务实例列表信息:
服务消费
单栈环境服务顾客:
服务调用成功今后,服务供给者会打印调用顾客的调用 IP 地址:
从上述回来成果来看,IPv4 单栈环境中的顾客因为仅支撑单栈,所以一向经过 IPv4 协议栈向双栈服务供给者建议恳求。
双栈环境服务顾客:
服务调用成功今后,服务供给者会打印调用顾客的调用 IP 地址,能够看到打印的是顾客的 IPv6 地址:
从上述回来成果来看,IPv4/IPv6 双栈环境中的顾客因为支撑 IPv6,为了完结协议栈向 IPv6 的搬迁,所以默许一向经过 IPv6 协议栈向双栈服务供给者建议恳求。
社区近期动态
新版别发布
社区近期发布了支撑上述 IPv6 滑润搬迁才能的 Spring Cloud Alibaba 2021.0.5.0 版别,是在 Spring Cloud 2021.0.5、Spring Cloud 2.6.13 的根底上对其间包含注册装备中心、分布式业务等在内的很多组件进行了晋级,属于一个组件晋级与 Bug 修正的版别。本次发布的 Spring Cloud Alibaba 2021.0.5.0 版别对以下组件版别进行了晋级或许优化:
- Seata
晋级到了1.6.1 版别 [ 8] ,该版别比较于之前的 1.5.x 版别,现已完结 MySQL updatejoin,PostgreSQL & Oracle 多主键等功用支撑,在 InsertOnDuplicateUpdate 上做了一定优化。
- Sentinel
晋级到了1.8.6 版别 [ 9] ,该版别调整了 Sentinel 规矩类中的单个特点,修正了 SpiLoader#closeResources 中抛出异常后无法记载异常目标。
- Nacos
晋级 Nacos 客户端到2.2.0 版别 [ 10] ,该版别新增了包含批量服务注册与注销、数据源插件化等相关才能。
除了组件晋级,另外也修正和优化了一些之前版别所存在的问题。例如,处理 Nacos 客户端日志打印被重定向到标准输出、重构 Seata 客户端 XID 传递完结办法处理与外部部分组件一同运用进程中存在的潜在抵触、RocketMQ 供给者目标实例支撑复用等,进一步提高了 Spring Cloud Alibaba 运用的稳定性与健壮性。更多内容可参见该版别相关发版公告 **[ 11] **。
发展规划
现在,Spring Cloud Alibaba 社区现在正在构建 Spring Cloud 生态的微服务治理才能上。
当时社区现已根据 Istio VirtualService 和 DestinationRule 流量以及安全标准完结了标签路由和服务鉴权等才能,在未来用户仅需经过编写 CRD 规矩经过 Istio 控制面进行解析和下发到体系中的 Spring Cloud Alibaba 运用。便可轻松具备原生微服务治理才能。欢迎感兴趣的同学运用钉钉查找群号参加社区沟通群,一同参加社区未来建设!(钉钉群号:33610001098)
相关链接:
[1]www.infoq.cn/article/vpd…
[2]计算机网络(第七版)谢希仁
[3] 《推动互联网协议第六版(IPv6)规划布置行动计划》
www.gov.cn/zhengce/201…
[4] 《IPv6 流量提高三年专项行动计划(2021-2023 年)》****
www.xinhuanet.com/info/2021-0…
[5] 《关于推动 IPv6 规划布置的辅导定见》
www.gov.cn/zhengce/zhe…
[6] 双栈功用
kubernetes.io/zh-cn/docs/…
[7] 阿里云容器服务ACK
www.aliyun.com/product/kub…
[8] 1.6.1 版别
github.com/seata/seata…
[9] 1.8.6 版别
github.com/alibaba/Sen…
[10] 2.2.0 版别
github.com/alibaba/nac…
[11] 发版公告
github.com/alibaba/spr…