数百万代码迁移,174个依赖库重译,历时四月的软件迁移

2020 年 7 月 08 日

数百万代码迁移,174个依赖库重译,历时四月的软件迁移

每一家小企业都有一个成为巨头的梦,但成为巨头后也都有自己烦恼的地方,一个典型的问题就是大型项目的迁移。对于巨头企业而言,开放出来商用的项目大多数都需要经历内部研发、内部使用、发展成熟之后才会真正开放商用,但对外商用和自家使用所面临的环境截然不同,这难免就需要大规模的应用代码迁移了。


那么在大规模的应用代码迁移中,究竟应该注意哪些事项呢?华为开放过诸多由内部孵化而出的大型项目,而每一次项目的开放都可能需要大规模的应用代码迁移。此前出于规模化商用目的,华为需要将自家的一个内部项目由原来的 x86 平台迁移到基于鸿蒙处理器的平台之上,这场迁移的工程量便超乎太多人的想象。要知道,x86 处理器和华为鲲鹏处理器所使用的 CPU 指令全然不同,x86 的指令是变长的,包括 24 位和 16 位的指令,而鲲鹏上的指令则是定长 32 位。并且,二者所用的寄存器也不一样,因此在这场迁移中不仅需要迁移主体业务,连代码和依赖库都需要改变。


此次迁移主要经历了 5 个迁移步骤:


  • 迁移准备:收集软件栈信息,以便于后续迁移计划和策略制定的输入,这其中包括了当前使用的芯片、服务器信号等硬件信息,以及OS、中间件、各类软件等软件信息;

  • 迁移分析:根据迁移的软件种类,如开源软件、自研软件、商用软件等进行分析,敲定运行环境并准备迁移环境;

  • 编译迁移:这其中主要包括代码迁移和软件包迁移,其主要内容在于软件的编译打包和验证基本功能,这是迁移的核心,也最为耗费时间;

  • 性能调优:在经过综合评估后建立调优目标,通过压力测试记录数据变化,探知到测试瓶颈后,根据瓶颈点进行针对性的优化并记录,最终完成后重启压力测试并监测优化效果;

  • 测试与认证:当完成了以上几步之后,便可以进行层层测试,以保障业务高性能稳定运行。


华为在此次的迁移代码规模巨大,包括了 C/C++代码 272 万行、Java165 万行、Python 17 万行和 JavaScript10.8 万行 ;同时,140 个 Java 及 C++的依赖库也需要全部迁移,其中 C/C++语言相关的 34 个;迁移的同时还需要对原有的部分内容进行修改,此次迁移过程中 174 个依赖库进行了重新编译,实现代码归一和构建脚本归一。此外如汇编指令替换、编译选项修改、数据类型修改等更是不计其数。最终在四个月的忙碌过后,华为的这一项目终于在基于鲲鹏处理器的平台中成功实现商业化。


这场迁移背后,还有太多的故事。而 7 月 11 日,华为《 DevRun 开发者沙龙 :18 城鲲鹏创新中心开发者创享日贵阳专场》会将这些故事与开发者共同分享。本次沙龙中,你还可以通过华为技术专家的讲述,了解相关技术原理、实践经验和对应方法论。通过华为的技术案例来提升自己的开发效率,最终在 ARM 架构鲲鹏处理器的基础上打造更出具优势的商业化价值解决方案。


课程内容


本次课程包含 5 个子章节:


  • 软件迁移概述

  • C/C++代码迁移

  • Java/Python代码迁移

  • Maven软件构建

  • RPM软件迁移


参会收益


  • 从企业应用到开发者实践,全方位了解华为鲲鹏在产业各领域下的产业布局;

  • 通过了解应用代码迁移相关技术原理、实践经验和对应方法论,能够快速实现业务迁移;

  • 丰富的案例讲解和落地经验分享,能够帮助开发者在ARM架构鲲鹏处理器的基础上,打造更具优势的商业化解决方案;

  • 熟悉鲲鹏软件调优工具套件的使用,能够先人一步快速发挥出鲲鹏先进算力的真正力量;

  • 奖金丰厚,机会超多的华为鲲鹏开发者大赛即将开启,参与者将提前了解大赛详情。



温馨提示


观看方式:线上直播


直播时间:2020 年 7 月 11 日 14:00~16:25


直播链接:添加小 Q(微信:infoq123)备注“华为鲲鹏 + 报名时填写姓名”获取直播通道


超大规模的迁移背后,是技术的体现,也是经验的汇聚。如果你也想体验这种大规模应用代码迁移的风起云涌,点击此链接,开启报名吧!


2020 年 7 月 08 日 09:50806

评论

发布
暂无评论
发现更多内容

第三周总结

晨光

Zookeeper的数据剖析

tunsuy

zookeeper 日志分析 事务 快照 数据恢复

第三周手写单例模式(饿汉模式)

吴建中

极客大学架构师训练营

抖音、腾讯、阿里、美团春招服务端开发岗位硬核面试(完结)

aoho

面试 后端 阿里

架构师训练营第三周作业和小记

tuuezzy

架构师 极客大学架构师训练营

Zookeeper集群模式启动

tunsuy

zookeeper 源码分析 socket 分布式集群

极客大学架构师训练营 框架开发 第三次作业

John(易筋)

极客时间 设计模式 极客大学 极客大学架构师训练营 框架开发

第三周作业

晨光

良心推荐 | LeetCode(力扣),算法、数据结构的学习良伴

YoungZY

算法

[架构师训练营] Week01 -学习总结

谭方敏

架构师训练营 第三周 命题作业

RZC

rodert单排学习redis进阶【白银一】

JavaPub

Java nosql redis

太赞了!一份适合程序员的精选面试题清单。

JackTian

GitHub 编程 程序员 面试题 开源项目

架构师训练营第四周

Melo

架构训练营第四周 - 作业

无心水

极客大学架构师训练营

一个汉字占几个字节你真的记住了吗?

Java旅途

面向对象设计模式课程小结

行下一首歌

极客大学架构师训练营

架构师是怎样炼成的-3-2-设计模式

闷骚程序员

组合设计模式编码&手写单例模式

吴建中

极客大学架构师训练营

区块链改变数字营销与广告市场

CECBC区块链专委会

区块链技术 广告业 精准投放 去中介 公开透明

Zookeeper通信协议详解

tunsuy

zookeeper TCP/IP 通信协议

【非原创】微服务设计

Arthur

架构师训练营第三周学习总结

lwy

架构师训练营 第三周 学习总结

RZC

极客大学架构师训练营 框架开发 模式与重构 JUnit、Spring、Hive核心源码解析 第6课

John(易筋)

spring 极客时间 极客大学 极客大学架构师训练营 JUnit

架构师训练营第三周命题作业

lwy

极客大学架构师训练营

架构师训练营第四周-总结

无心水

极客大学架构师训练营

基于阿里云服务网格(ASM)的GRPC服务部署实践

韩陆

Kubernetes gRPC Service Mesh

第三周-设计模式-学习总结

吴建中

极客大学架构师训练营

Oracle SQL调优系列之看懂执行计划explain

Nicky.Ma

sql

极客大学架构师训练营 系统架构 第7课 听课总结

John(易筋)

极客时间 系统架构 高并发 极客大学 极客大学架构师训练营

数百万代码迁移,174个依赖库重译,历时四月的软件迁移-InfoQ