【华为云技术分享】华为云鲲鹏云服务移植指南和实践案例(上)

【摘要】 从应用语言出发,分享应用鲲鹏移植理论和方案,基于应用移植案例,分享鲲鹏应用移植成功经验。

主讲人:华为云鲲鹏云服务与解决方案架构师 王龙江

一、鲲鹏云服务解决方案回顾

前期,在上一次直播,我们的同事应该已经给大家分享过了华为云的鲲鹏云服务以及鲲鹏云服务解决方案,本次,我们先来回顾一下。因为有些朋友可能是第一次听,所以,给大家简单回顾一下华为云的<a>鲲鹏云服务以及解决方案</a>。

其实本质上来说华为的云服务从最底层来说,我们是基于华为公司自己研发的鲲鹏920的这样一个高性能的CPU,然后完成了以后,我们之后还做成了华为自己的云服务器,在服务器之上,我们构建了自己的一个云的操作系统,我们把它叫做瑶光。然后完成了以后基于云的操作系统之上,我们把基于华为云的鲲鹏920这个CPU,做成了各种各样的云服务,我们有我们的弹性云服务器的服务,我们有裸金属服务器的服务,我们有鲲鹏的服务器服务,鲲鹏的数据库服务,鲲鹏的缓存服务以及后面我们的鲲鹏的微服务平台,鲲鹏的大数据服务,等等这样一个鲲鹏系列的云服务。

在鲲鹏系列的这样一个云服务之上,我们现在也在积极的孵化一些解决方案,包括我们现在的高性能计算解决方案,大数据+AI的解决方案,一些基于鲲鹏架构的原生方案以及一些企业应用,或者说国产应用的一个联合的解决方案,做华为云这样一个平台,我们现在也在积极的拓展多样化的生态。我们现在主要是从技术这一个维度的生态,产业生态,以及开发者的生态这三个维度在积极拓展我们鲲鹏云服务的生态。从这些图上大家可以看到对于华为云,我们不只是单单有芯片或者设备,我们是努力的基于鲲鹏做成一个全栈的这样一个云服务的解决方案。这是鲲鹏云服务的大致的介绍背景的内容,这和上次我们的同事介绍的内容应该是一致的。

![image.png]()

二、鲲鹏云服务移植流程

接下来,我们会重点介绍一下干货。就是说对于鲲鹏云服务,因为大家知道华为的这个鲲鹏云服务是兼容ARM架构的,然后,它有别于传统的x86的架构,那么如何去使用,或者说如何把应用移植到华为的鲲鹏云服务上呢?之前有些朋友可能不是很了解,所以会觉得这个东西会不会很难或者说会不会有一些坑。关于鲲鹏云服务,我们有一个概念,但其实,我想真正给大家介绍一下鲲鹏的这种移植流程,大家可以通过这样一个移植流程去进一步的了解到原来鲲鹏云服务其实和大家正常使用的这种弹性云服务器,物理服务器或者数据库服务器其实是一样的。

其实在华为云上只有三个元素,大家能够强烈的感知到这是鲲鹏云服务,那么是哪三个服务呢?就是我们的弹性云服务器,我们的裸金属服务器服务,还有我们的容器服务。因为这三个服务都是直接的运行的应用程序,但是在其它的鲲鹏云服务,比如基于鲲鹏芯片的云存储服务,基于数据库服务器的服务,其实大家更关心的是,例如,我们购买了一个MySQL5.6的计算实例,但是其实大家不太关心这个数据库底层运行的是x86还是鲲鹏,但是对于刚才我们所说的我们的弹性云服务器,也就是我们的ECS服务,我们的裸金属服务,我们的容器来说,因为我们底层的这个CPU的架构,是有别于传统的x86的这样的架构,我们底层的架构,是华为自己的鲲鹏架构,虽然我们也兼容一个ARM的应用架构,但是,我们在做应用移植的时候我们就需要根据应用的特点来区分怎么样去移植。首先其实我们比较好的一个切入维度,就是我们应用所使用的语言作为第一个切入维度,去分析我们这个应用合不合适跑在鲲鹏云服务器上。

语言的话,我们做了一个简单的分类,主要是分成三大类,第一大类是解析性语言,它的代表语言是Java,Python,还有Go语言,其实这三类语言本身就是能够支持跨平台运行的,所以说这三个语言,对我们来说,只要运行环境是可以的,例如Java,只要我们能很好的支持jdk这样的语言的运行环境,那么这语言本身就是跨平台的,无论底下是x86也好,鲲鹏也好,我们其实是基本上可以做到没有困难地迁移到华为云的这个鲲鹏云服务器上面去。如果说是C或者是C++这样的编译型语言,因为这些语言的交互还是会和底层的CPU有一定的关系, CPU架构和指令集架构是有一定的关系的,所以,我们需要去区分这些应用程序的来源,如果是开源的一些软件,我们华为云其实可以连同一些社区去做协同,然后你做相应应用语言的重新编译来做到与鲲鹏云服务器的适配。如果说是自研软件的话,我们一些合作伙伴自己研发的软件,我们可以支撑我们的合作伙伴在云服务器上重新编译一次,然后来做鲲鹏云服务的一个应用适配。

但是确实也会遇到一些商业的闭源软件,商业闭源软件的话,我们可以通过商业合作的这样一个方式去做重新编译,或者说暂时商业闭源软件重新编译需要一定时间的话,华为云上我们其实也是可以考虑x86和鲲鹏云服务器的混合部署的一个方案。当然,实话实说,目前如果是基于windows操作系统的一些开发语言,例如像.net这样一些语言,我们现在暂时还是不能够支持的,所以,现在我们会推荐鲲鹏云服务和x86混合应用的方案,因为华为的云服务,既有x86的计算平台,也有鲲鹏的计算平台。所以通过从语言入手,其实我们就已经很清晰的解释了哪一类应用比较容易上鲲鹏云服务器,其实就是基于Java,Python,Go等解析语言的,因为它天生就是跨平台的。对于C++的,我们就需要重新去编译一次。

![image.png]()

除了上一页以外,其实我们还有一些更详细的介绍。其实对我们来说,有一部分,特别是C和C++,特别是需要涉及到一些汇编的话,这些相应的应用程序,我们确实是需要一定的工作量,然后我们需要重新去编译,或者说重新去做一些代码级别的修改,这也是有可能会产生的一些工作量,但是如果是Java类的这种语言或者说Python或者Go,本质上来说我们在安装好了的这样一个公共版本的JVM的话,我们就可以直接支持相应的这样一个语言的软件的移植。

![image.png]()

这里简单的举两个例子,就是类似像解释性语言的这种开发环境,我们大概去做这样一个应用程序的更新的话其实比较简单。以Java为例,第一步,我们需要把语言的这种环境安装好,CentOS上面像Java的openjdk,其实只要简单的操作,因为我们现在能够支持的操作系统有CentOS,有华为自己的欧拉操作系统,后面我们会支持一些国产的操作系统,例如中标、银河麒麟等国产操作系统,这些操作系统本质上已经带好了这种支撑,能够支持鲲鹏架构的基础的一些运营环境,一些相关的依赖的软件的环境。所以现在在CentOS上面,我们可以直接用样本命令行去安装openjdk,我们把这个装好以后,需要把这个相应的Java程序代码拷上来,然后完成以后,如果需要组件的话,我们需要把相关的应用组件安装上,例如我们常用的一些MySQL、Nginx、TomCat这种组件,都可以在鲲鹏云服务器上做安装部署。安装部署完成以后,我们就可以很好的去把相关的应用在鲲鹏云服务器上做性能测试和兼容性测试。

![image.png]()

如果是基于编译型语言的话,其实大家都知道,例如像C和C++这样的语言的应用程序,我们可以把源码下载下来,下下来了以后,我们可以去做一个相应的编译的工作,熟悉C语言编译的朋友应该会知道,标准的编译执行就是configure,make,make install等,这种方式和x86的服务方式是一样的,然后如果我们把这个程序在我们的鲲鹏的云服务器上面重新做一次编译的话,我们也能做到基于C语言的这种相关的应用程序能够在鲲鹏云服务器上的适配。

![image.png]()

现在,基于我们的一些成功经验,其实大量的应用程序,它的物理架构,大多数都还是比较简单的,但这种比较简单的应用程序的物理架构是什么样的呢?是负载均衡作为接入,然后加上我们的应用服务器,加上数据库服务器的这样一个物理架构,那么它对我们的一些要求就是我们的鲲鹏云服务器应该支持什么,我们要支持相应的Haproxy,Nginx,Apache,我们要支持Redis,Memcrched这种缓存,以及一些数据库,例如MySQL数据库,PostgreSQL数据库,还要支持数据库的一些HA,例如Keepalived这种工具性的组件。像这些组件的话,我们画在图上的相应的组件,其实现在华为的鲲鹏云服务都已经能够支持了,所以绝大多数上市的这种应用系统,或者说咱们绝大多数企业所使用到的相关的这些应用软件,在我们的这个鲲鹏云服务器上面,都已经能够很好的适配了,后面,我们也会介绍我们其实把相关的组件适配以后,都放在了我们的华为云官网上线的鲲鹏的开发者社区里面,后面我会给大家展示一下。

![image.png]()

然后完成了以后,用这些相应的组件,我们就可以去支撑相应的一些Web服务或者Web应用,像论坛、电商、网站这类的应用在华为的鲲鹏云服务器上的运行,其实我们这些组件,还是可以支持我们的一些设备,不管是虚拟机,还是我们的裸金属服务器,还是我们的容器,我们都是可以去支持的。但是这一块,实话实说,之前会有一些朋友产生一些困扰,就是我如果把我的应用部署在容器平台里面,我只要有容器的镜像,我是不是就不用关心底层用的是鲲鹏也好,用的x86也好,但实际上确实是因为我们底层的CPU架构的指令集的不同,如果是容器平台的这种传统的x86的这种镜像的话,也需要做一次鲲鹏云服务器的适配。只有我们在鲲鹏云服务器上打包好了这样一个镜像,才能在鲲鹏的容器平台上很好的运行。之前我们会有一些朋友产生一些误解,当然,我们刚才上一页讲到的主要都是一些开源的组件,我们现在也能够支持一些商业版本的国产的组件,例如东方通中间件,金蝶天燕的中间件,中标麒麟的操作系统,银河麒麟的操作系统,我们也能够支撑国产的一些数据库,像达梦数据库,南大数据库,都是我们鲲鹏云服务器现在已经能够支撑的国产的商业级服务。

![image.png]()

这里给大家举一个例子,这个例子是我们之前的一个合作伙伴,他做一个智慧消防的应用,然后能成功移植到华为的鲲鹏云服务器上面的这样一个例子。为什么用这个应用来举例子呢?因为这个应用是非常有代表性的,它对外提供的是一个智慧消防的数据呈现的一个应用平台,但本质上来说它其实是一个Web服务,他用到了TomCat,也用到了Nginx,他外部缓存用的是Redis数据库,用的是MySQL,他下面的语言是Java和PHP都用了一部分,其实他们做华为云服务的这样一个移植,是非常非常简单的,那么这个怎么做呢?其实第一步是先把组件安装好,比如我们把openjdk安装好,剩下的我们可以把一些组件例如TomCat,Redis等yum install一下。但是有一些组件暂时还不能通过操作系统直接做yum install操作,例如MySQL,我们可以做到支持客户和合作伙伴的自己去编译,我们现在已经有MySQL这样一个最佳实践了。通过这个实践,我们可以做到支撑MySQL的自己编译的这样一个部署。只要我们把数据库MySQL部署好,Nginx和Redis部署好,然后把Java的运行环境部署好,把客户的应用程序上传,然后传完了以后就可以做相应的启动。

![image.png]()

现在大家也知道,包括华为云,我们现在也在积极的支持我们的很多的合作伙伴,还有我们的很多的客户去发展这样一个鲲鹏的生态,所以我们现在也构建了一个非常完善的服务体系,来支撑我们的鲲鹏生态,我们能够帮助到我们的合作伙伴或者我们的客户,来做相应的鲲鹏应用的移植的可行性分析,来帮助指导我们的移植方案设计,如果在移植过程中有一些重大的困难点,我们可以做一些重难点攻关,包括一些专家的攻关,或者说对一些我们现在的能力的不满足,我们可以基于我们现在的合作伙伴的需求,重新做一些新的需求。我们能够支持一些合作伙伴应用系统的性能调优,然后调优以后,如果还是不满足,我们可以有专家再支持攻关,我们也可以支持合作伙伴做相应的上云的方案设计,因为我们做完了应用移植,最终还是希望能够真正的有终端的用户去使用我们基于鲲鹏云服务器的相关的方案,所以我们就会去支持合作伙伴,或者帮助客户去做单元的方案的设计。不只是说部署方案,我们还要帮助设计迁移、容灾、混合云的方案,而且我们能够支持所相应的公有云、专属云、HCSO等多种方案以及安全性的设计。最后我们其实是有相应的运维和服务来给客户和合作伙伴提供相应的后续服务。

![image.png]()

这里其实我们也准备了很多相关的材料,来提供给我们的合作伙伴和客户,其实根据我们相关的材料和指导文档,大家都可以做到去鲲鹏云服务器上去做应用移植和编译。其实现在华为鲲鹏云服务发展的也非常快,所以我们也准备了一些为了方便沟通的客户信息调研或者伙伴软件信息调研的表,如果在华为云鲲鹏云服务器上,做完了一个应用测试,后面想加入华为云的鲲鹏凌云计划,想成为华为的合作伙伴,一些应用想通过华为云的鲲鹏云服务的兼容性认证,我们都准备好了测试报告的模板。其实只要大家后续提出加入我们这个鲲鹏凌云计划,我们都会有同事来联系大家,去做相应的信息收集以及方案评估。

戳→视频

以上文字内容由【内容众创小组-栀】整理

![]()

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。