IPV6改造实践

1、背景

ipv6作为改进ipv4的下一代ip技术,其目的是为了解决ipv4地址枯竭的问题,同时在网络数据转发效率与安全性方面有很多改进。其第一版协议标准(RFC1883)早在1995年就已发布,但是由于现存ipv4网络升级成本较高以及ipv4自身的改进等种种原因直到最近几年ipv6才开始在全球范围内大规模应用。
      在我国从2018年5月工信部通知贯彻两办文件开始,三大运营商迅速完成移动端IPv6改造,并急速拉升用户量。闲鱼作为阿里巴巴旗下全球最大的闲置交易社区,为响应国家政策同时迎接未来技术的变革,开启了基于ipv6的技术改造。

2、IPV6应用架构分析

要让闲鱼app支持ipv6网络,势必需要理清现在完整的网络应用架构;由于阿里庞大复杂的技术体系,实际上可能很多同学也不太清楚我们的网络应用架构到底是什么样的,在此借此机会梳理了闲鱼完整的app网络应用架构:

闲鱼app网络应用架构



图1

如上图所示,端上发起一次请求后:

  1. 首先请求dns的服务解析域名地址。
  2. 对于图片、js等静态资源直接请求cdn服务获取。
  3. 对于业务接口通过https请求到LVS负载服务,然后转到aserver(类似ngnix的http代理服务器),再通过mtop将http请求转换成rpc调用到达后台服务。

ipv6解决方案

闲鱼的ipv6改造是基于阿里集团的ipv6架构实施的,有了上图的网络应用架构后,ipv6的解决方案看起来就很清晰了:


图2

请求流程:app--->VIP(NAT转换 TOC传递CIP)--->aserver(CIP打包装入Http header)-->mtop服务。
目前的方案是在LVS层通过阿里自研的技术将IPV6通过NAT技术转换成IPV4,然后将client ipv6信息通过http header传入下游服务,减少后端改造工作量;后续应用完全上云后是端到端的ipv6/4双栈支持。

3、改造原则

网络属于基础设施,改造过程中需要非常小心,否则容易引发大故障。在改造过程中我们总结了以下原则供参考:

  • 一定要可测试、可灰度、可实时监控诊断分析、可随时回退。
  • 必需能支持ipv4/ipv6双栈环境,确保ipv6即使出现问题也不影响用户。
  • 改造过程先小模块再全业务;先分支业务再核心业务。
  • 先android再ios;android上架灵活。
  • 上线过程中,先开启主业务服务域名放量,提升ipv6月活用户量,再开启cdn域名放量提升ipv6流量占比。
  • 主要做移动端改造,PC端流量很小,优先级较低。

4、改造上线步骤

整体改造步骤


图3

  1. 调研app端上修改点与后台服务修改点。
  2. app与后台服务基于ipv6改造升级。
  3. 支持ipv6的内侧app,测试版本app进行内部灰度。
  4. 支持ipv6的正式app,集成后线上开始灰度,并逐渐放量发布。
  5. 服务域名ipv6放量:主服务域名通过amdc控制用户ipv6的比例,逐步在各省市放量。
  6. cdn域名ipv6放量:静态页面、图片、视频,通过amdc精细化控制逐步在各省市放量。

具体的改造点

  1. 首先需要确保app集成的网络sdk库是支持ipv6的,如果不支持,需要升级sdk网络库或者应用自行开发。闲鱼使用的集团提供sdk网络库,升级到最新版本就支持ipv6环境了。
  2. 前端页面中使用到ip地址的逻辑需要支持ipv6格式。
  3. 后端业务逻辑中使用ip地址作为参数和数据库存储地方需要修改支持ipv6地址。
  4. 使用ip地址调用获取LBS的服务需要支持ipv6地址库。
  5. 用户画像、搜索、推荐使用到了用户ip的地方支持ipv6地址格式。

测试方法

  1. 需要确保本地ip是双栈环境。以WiFi网络为例:



图4

  1. app端通过专用测试工具测试ipv6网络连接。
  2. 使用web工具通过浏览器直接访问指定域名,统计ipv6访问的详细信息。
  3. 记录日志查看ip相关信息。

5、上线策略与监控

灰度上线:

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java