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

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

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

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

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

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

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(1)

二、鲲鹏云服务移植流程

接下来,我们会重点介绍一下鲲鹏云服务移植流程。大家知道华为的这个鲲鹏云服务是兼容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 的应用,我们就需要重新编译一次。

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(2)

对我们来说,有一部分应用程序,特别是C和C 这样的需要涉及到一些汇编的应用程序,确实需要一定的工作量,我们需要重新编译,或者重新做一些代码级别的修改,但如果是Java这种语言或者Python或Go,本质上来说安装好了公共版本的JVM的话,我们就可以直接支持相应软件的移植。

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(3)

这里简单地举两个例子,类似解释性语言这种开发环境,我们做应用程序的更新其实比较简单。以Java为例,第一步,我们需要把语言的环境安装好,例如CentOS上面Java的openjdk,只要简单的操作。

我们现在能够支持的操作系统有CentOS,有华为自己的欧拉操作系统,后面还会支持一些国产的操作系统,例如中标、银河麒麟等国产操作系统,这些操作系统本质上已经带了这种支撑,能够支持鲲鹏架构的一些软件的基础运营环境。

所以在CentOS上面,我们可以直接用样本命令行安装openjdk,把它装好以后,需要把相应的Java程序代码拷上来,完成以后,如果需要组件,我们要把相关的应用组件安装上,例如我们常用的一些MySQL、Nginx、TomCat的组件,都可以在鲲鹏云服务器上做安装部署。安装部署完成以后,我们就可以很好地在鲲鹏云服务器上对相关的应用做性能测试和兼容性测试。

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(4)

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

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(5)

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

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(6)

之后,用这些相应的组件,我们就可以支撑一些Web服务或者Web应用在华为的鲲鹏云服务器上的运行,例如论坛、电商、网站这类应用。我们这些组件,还可以支持一些设备,不管是虚拟机,还是裸金属服务器,或是容器,都是可以支持的。

之前会有一些朋友产生一些困扰,如果把我的应用部署在容器平台里面,只要有容器的镜像,我是不是就不用关心底层用的是鲲鹏还是用的x86。但实际上,因为我们底层CPU架构的指令集的不同,如果是容器平台的传统的x86的镜像,也需要做一次鲲鹏云服务器的适配。只有在鲲鹏云服务器上打包好了镜像,才能在鲲鹏的容器平台上很好地运行。

上一页讲到的主要是一些开源的组件,我们现在也能够支持一些商业版本的国产组件,例如东方通中间件,金蝶天燕的中间件,中标麒麟的操作系统,银河麒麟的操作系统,我们也能够支撑一些国产的数据库,像达梦数据库,南大数据库,都是鲲鹏云服务器现在已经能够支撑的国产商业级服务。

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(7)

这里举一个例子,这是我们之前的一个合作伙伴做的一个智慧消防的应用能成功移植到华为的鲲鹏云服务器上面的例子。之所以用这个应用来举例子,是因为这个应用是非常有代表性的,它对外提供的是一个智慧消防的数据呈现的应用平台,但本质上来说它其实是一个Web服务,用到了TomCat,也用到了Nginx,外部缓存用的是Redis数据库,用的是MySQL,下面的语言是Java和PHP都用了一部分。

他们做华为云服务的移植,是非常简单的,那么要怎么做呢?第一步是先把组件安装好,比如我们把openjdk安装好,然后我们可以把一些组件例如TomCat,Redis等yum install一下。但是有一些组件暂时还不能通过操作系统直接做yum install操作,例如MySQL,我们可以做到支持客户和合作伙伴去编译,现在已经有一个MySQL的最佳实践了。通过这个实践,我们可以做到支撑MySQL重新编译的部署。只要把数据库MySQL部署好,Nginx和Redis部署好,然后把Java的运行环境部署好,把客户的应用程序上传,就可以做相应的启动了。

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(8)

我们现在也在积极地支持我们的很多合作伙伴和客户去发展鲲鹏的生态,所以我们也构建了一个非常完善的服务体系,来支撑鲲鹏生态。

我们能够帮助我们的合作伙伴或者我们的客户做相应的鲲鹏应用移植的可行性分析,帮助指导移植方案设计,如果在移植过程中有一些重大的困难点,我们可以做重难点攻关,包括一些专家攻关,或者基于我们现在的合作伙伴的需求,针对现在能力的不满足重新做一些新需求。我们能够支持合作伙伴应用系统的性能调优,调优以后,如果还是不满足,我们有专家再支持攻关,我们还可以支持合作伙伴做上云的方案设计。因为我们做完了应用移植,是希望最终能够真正的有终端用户去使用我们基于鲲鹏云服务器的相关方案,所以我们会支持合作伙伴或者帮助客户做单元的方案设计。

不只是部署方案,我们还帮助设计迁移、容灾、混合云的方案,而且我们能够支持相应的公有云、专属云、HCSO等多种方案以及安全性的设计。最后我们有相应的运维和服务来给客户和合作伙伴提供后续服务。

如何快速搭建一个云服务器(最佳实践如何基于鲲鹏云服务器)(9)

视频链接:https://huaweicloud.bugu.mudu.tv/watch/noxg0pm8

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

,