0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于ARM体系架构构建云服务

架构师技术联盟 来源: 架构师技术联盟 2023-12-06 10:00 次阅读

1、概述

随着IT技术的不断演进,公有云、专属云、混合云、云原生等相关技术概念层出不穷,云计算已经有了广泛应用,成为数字经济、政企数字化转型的新型基础设施。 在云计算时代,由于功耗低、高性能以及指令集的优势,越来越多的云厂商开始选择基于ARM体系来构建云服务。从AWS发布的Graviton2,到Apple的M1芯片,到中国电子云十年磨一剑的“PK架构”,再到华为鲲鹏体系,ARM体系成为了未来的趋势方向。 对于企业数字化转型来说,应用上云是必经之路。从狭义来说,上云是将运行在物理机上的应用系统搬迁到云上。从广义上看,上云会涉及到跨架构适配、虚拟化、容器化、云原生等一系列的技术升级和重构。 上云的不同阶段,所依赖的技术并不同。从左至右,应用对云的依存度也越来越高。

wKgZomVv1gCAAKiMAACqI8JOSqk436.png

下文对几个阶段涉及到的技术做简单阐述。

阶段1:跨架构适配

传统应用大部分是基于X86架构来开发和运行。面对ARM架构越来越流行的今天,越来越多的云计算厂商开始围绕ARM架构构建云应用生态。并据此引发了大量的适配测试需求。X86和ARM体系架构的差异对于应用有哪些影响?X86应用向ARM体系迁移会碰到哪些技术难题?对于不同编程语言实现的应用来说,迁移的难度是否有区别? 本文将针对以上问题开展分析。

阶段2:虚拟化

计算虚拟化能力是云计算提供的核心能力。截至到今天,很多行业用户的上云还是停留在这个阶段。虚拟化的最大用途是使得应用与物理机器解耦,将资源池化,按需分配资源,并因此获得弹性伸缩和迁移能力。这个阶段的上云,往往会涉及到P2V和V2V这两种主要场景。前者是从物理机向虚拟机迁移(Physical to Virtual Migration)),后者是虚拟化的跨云迁移(Virtual Machine to Virtual Machine)。

阶段3:容器化

容器化是将应用程序及其所需的库、框架和配置文件打包在一起的过程,以便可以在各种计算环境中高效运行它。得益于Docker等技术的流行,应用容器化更进一步促进了应用的配置、依赖以及镜像的标准化,使得应用交付、运维等领域有极大的提升。这个阶段的上云,对于软件开发过程有一定的要求,需遵循相应的容器化规范。

阶段4:云原生

云原生时代的到来,是容器化后的必然阶段。通过Kubernetes、devops、微服务等技术的不断发展,尤其是对有状态应用支撑能力的不断增强,云原生已然成为新一代应用开发的事实标准。 技术的发展有天才工程师的灵光一现,其背后同样也需要遵循客观自然规律。下文将从阶段1入手,尝试从底层技术进行解构,或许能帮助我们更清晰的看到本质。

2、跨越CPU架构

纵观计算机技术的发展史,软件系统是一个不断抽象,不断叠加的过程。操作系统的出现,解决的是单机硬件多样性的难题,为上层应用软件提供一致的底层运行环境。云计算的出现,解决的是分布式架构引入的多样性问题,为应用提供跨机器、跨地域的一致运行环境。 我们先从CPU指令集的差异对比开始。

2.1 CPU指令集对比

在计算机体系结构的发展过程中,诞生了CISC(复杂指令集)和RISC(精简指令集)这两大流派,它们采用了不同的设计理念和方法,CISC采用单条复杂指令完成特定复杂功能,提高了存储器访问效率;RISC则采用多条精简短指令完成特定复杂功能,提高了处理器运行速度。基于这两类指令集,产生了两种主流的CPU架构:X86架构,采用的是CISC复杂指令集,而ARM架构则采用了RISC精简指令集。 CISC指令集指令系统庞大,指令数目、指令格式和寻址方式复杂,指令字长不固定,各种指令执行周期和访问频率相差很大,采用微指令码控制单元的设计。 RISC指令集选取使用频率最高的精简指令,避免复杂指令,将指令数目、指令格式和寻址方式种类减少,指令长度固定,大多数的指令都可以在一个机器周期里完成。以控制逻辑为主,不用或者少用微指令码控制。

2.2对应用迁移的影响

应用本质上是一种程序,程序在运行态是由一系列进程组成,而进程可以说是计算机科学最重要和最成功的概念之一。进程的运行依赖操作系统对CPU、内存的调度和管理,操作系统保持跟踪进程运行所需的所有状态信息。比如寄存器、PC计数器、逻辑单元ALU等。 综合来说,X86 和ARM属于不同的架构。X86属于复杂指令集,而ARM属于精简指令集, X86 上的程序根本不可能毫无阻碍地就可以在ARM上使用,必须经过适配迁移。 从另外的角度来看,应用选择不同的编程语言,会有不同的跨架构能力。下面分析下主流的C++Java应用在不同架构下的差异表现。

2.3.1 C/C++语言

众所周知,C/C++程序是计算机系统级别最为成功的语言之一。业界存在大量的知名开源软件基于C/C++构建,比如Windows/Linux操作系统自身,以及使用广泛的分布式存储系统Ceph。 在C/C++世界里,从源代码演变成运行中的进程,需要经历编译、汇编、链接、运行等一系列过程。

a) Step 1编译

编译是将源代码经过处理,转变成汇编语言的过程。这一过程的关键工具是编译器。有了编译器的存在,现代编程语言(如C++)的源代码一般能做到架构无关,通过不同平台编译器(如GCC)的处理,可以得到不同体系结构下的汇编代码。 举例如下源代码:

wKgaomVv1gCAbkfCAABU13E2KFw379.png

在X86平台编译器编译后,得到汇编代码如下:

wKgaomVv1gCAHZrJAAFc9YFyyM4298.png

备注:以上mov、push等均为X86体系架构汇编指令。 在ARM平台编译后,得到汇编代码如下:

wKgaomVv1gCANMqLAAILDdSy_uo062.png

备注:以上mov,STR,LDR均为ARM架构汇编指令。 汇编指令的简单对比如下:

wKgZomVv1gCAadniAAANomL90Is444.png

仅从常用指令集名称来看,两者比较相似,但实际大相径庭。

举例说明,在ARM指令中,MOV与ADD之间需要通过STR和LDR两条指令完成数据从内存往寄存器的加载,其原因是ARM算术指令只能运行在寄存器,而X86则无此限制。

其他差异本文不再一一分析。

由此可以看出,X86和ARM架构的指令集差异很大,对于C++语言来说,编译器帮我们搞定这些差异,但需要从源代码重新编译。

b) Step 2 汇编

汇编是将汇编代码转变成机器代码的过程。以上汇编代码在X86平台下,得到的机器代码如下:

wKgZomVv1gCAJm86AAOiAdQHVp0272.png

备注:以上为局部截图。 而在ARM平台下,得到的机器代码会完全不同。

c) Step 3 链接

链接在C++语言特有的处理机制,将OS里的链接库与程序进行链接的过程。这一过程的输出物即为可执行程序。最终的运行,对于C++和Java来说,通常都有Main函数作为程序的运行入口(某些框架会对其进行封装,如Java Spring框架)。

综合以上,对于C/C++开发的应用程序来说,向ARM架构迁移需要完成重新完成编译、汇编、链接的全过程,应用跨架构迁移的难度较大。

2.3.2 Java语言

Java语言在Web应用开发占据绝对的主导地位。Java是基于虚拟机的语言,也是所谓提供跨平台运行能力的语言。Java应用从源代码到运行,需经历编译、运行两个环节。 **

a) Step 1 编译

使用javac命令进行编译,通常得到java字节码文件,以.Class后缀命名的文件。

以下面的代码为例。

wKgZomVv1gCAF1YAAABi1CqFTOM362.png

X86环境编译得到的字节码如下:

wKgaomVv1gCAbcH8AARUIqXmw3w290.png

备注:以上为局部截图。

ARM机器上编译,得到如下字节码:

wKgZomVv1gGAEPMqAASAgD9vQQg828.png

经比较,会发现两者得到的字节码基本一致。

b) Step 2 执行

Java体系为X86和ARM分别提供了不同的JVM。在运行时,JVM通过类加载器执行以上字节码文件。

备注:实际运行时,JVM会将字节码转换成机器码来运行,这个过程暂且忽略不表。

综合来看,对于Java应用来说,X86和ARM架构的差异完全由JVM层屏蔽,应用跨架构迁移的难度很小。

上文主要从CPU架构差异、编程语言差异的角度来分析对应用的影响。下面结合中国电子云的实际上云案例来做进一步的阐述。

3、蓝信上云实践

蓝信是中国电子云上运行的重量级应用之一,作为中国电子云“一云一端”的战略组成部分,提供安全可靠的企业消息通讯、视频会议和协同办公能力,在政企市场有着广泛的应用场景。

3.1 蓝信对中国电子云的适配过程

蓝信原生是构建在X86体系架构下的,针对中国电子云底层采用PKS架构,需要做整个系统的适配,主要工作体现以下几点:

1)针对体系架构改变的适配

代码级重新编译以适配ARM架构,由于目前流行的开发语言早已对ARM体系进行过适配(例如,golang,java,c/c++, python等)这部分工作难度不大。

2)数据库的适配

数据库部分,蓝信需要从MySQL迁移到达梦数据库,由于达梦数据库对MySQL语句的良好支持,只有部分语法存在兼容性问题,仅需在数据层进行适配,业务层并不需要改动,整体适配可在一个月内完成,其中主要成本集中在适配后的全量功能测试上。

3)基础设施及中间件的适配

蓝信依赖的基础设施及中间件也需要适配,例如etcd,k8s,redis,kafka,mongoDB等,这部分工作由于大部分基础组件已经有了ARM版本,直接使用即可,极个别的组件,需要进行源码级的编译。

4、总结和思考

在当前数字产业大发展的背景下, 对ARM架构的关注必然会不断升温,各行业会出现大量应用从X86向AMR架构迁移,也催生了大量的应用跨架构适配测试需求。 通过前文的分析,我们可以得出如下结论:

1、X86架构和ARM架构的确存在较大差异。两者在指令集、寄存器等方面均有很大的不同,但对于应用系统的移植来说,并非是不可逾越的鸿沟;

2、应用开发采用的不同编程语言,会导致跨架构移植难度绝然不同。C/C++等系统级语言所编写的应用程序,其移植需要经过重新编译、链接、运行等全过程,难度相对较大;而以Java为代表的虚拟机语言则具备良好的跨平台移植性;而对于Python、JavaScript等脚本型语言来说,移植难度会更小。从这个角度来看,在云计算环境下开发应用程序,建议优先选择跨架构友好的编程语言。

3、在大型应用系统迁移实践中,需要深入分析系统架构,有针对性的设计迁移方案。

完成跨CPU架构迁移只是一小步,对于应用来说,如何借助云计算实现更好的可部署性、可伸缩性、便捷运维以及高并发带来的性能挑战,值得不断的探索。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8651

    浏览量

    361816
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206564
  • 云计算
    +关注

    关注

    38

    文章

    7347

    浏览量

    135716
  • X86
    X86
    +关注

    关注

    5

    文章

    285

    浏览量

    42979

原文标题:从X86到ARM,跨越CPU架构鸿沟

文章出处:【微信号:架构师技术联盟,微信公众号:架构师技术联盟】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    网络安全体系基础架构建

    网络安全体系基础架构建设知识    
    的头像 发表于 09-11 09:36 1316次阅读
    网络安全<b class='flag-5'>体系</b>基础<b class='flag-5'>架构建</b>设

    arm体系架构和stm32的理解

    ARM处理器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。ARM全称为Acorn RISC Machine。ARM处理器本身是32位设计,但也配备1
    发表于 12-04 10:31

    基于阿里数加MaxCompute的企业大数据仓库架构建设思路

    建设,各集市之间是垂直构建的,需要能够快速试错,深度挖掘数据价值。 基于阿里数加搭建大数据仓库 基于阿里数加搭建大数据仓库的整个业务流程如下所示: 阿里的数加
    发表于 03-15 12:43

    Arm芯片引领国产服务器逆袭?

    观察,Arm架构服务器CPU是最有希望在短期内实现x86替代的选择,成为打破一家垄断的最强劲的力量。Arm架构
    发表于 06-03 13:20

    阿里弹性计算Apsara Block Storage正式发布 构建企业级分布式块存储服务平台

    摘要: 6月13日,阿里宣布弹性计算Apsara Block Storage产品正式发布,为企业级客户量身打造,构建高性能、弹性、可靠的大规模分布式块存储服务平台。 Apsara Block
    发表于 06-14 17:09

    阿里推出内部操作透明化服务 为用户提供全栈数据保护体系

    产品和服务中,帮助企业提升整体安全水位,构建时代的企业安全架构。“随着数字经济时代越来越多的企业上,每个企业都会基于云原生安全能力构筑下
    发表于 09-29 15:27

    如何对ARM+DSP体系架构进行调试?

    ARM+DSP系统体系结构是怎样的?ARM+DSP系统工作流程及特点是什么?如何对ARM+DSP体系架构
    发表于 04-28 06:29

    基于ARM和Linux的嵌入式Web服务器的构建及应用

    摘要:本文主要研究了基于ARM和Linux的嵌入式Web服务器的构建及应用.随着互联网的飞速发展,越来越多的信息化产品需要接入互联网并通过Web页面进行远程访问和控制,嵌入式Web服务
    发表于 11-05 06:07

    ARM体系架构基本概念

    1.基本概念ARM体系架构版本:即其所使用的指令集的版本。ARM架构支持32位ARM指令集和1
    发表于 01-25 06:14

    求一种在Arm服务器上Robox安卓容器的构建与使用方案

    1、在Arm服务器上Robox安卓容器方案的构建编译过程和使用方法随着计算相关产业蓬勃发展,用户对移动设备的弹性需求推动出手机、云游戏等
    发表于 06-17 14:34

    了解体系结构 - 介绍 Arm 体系结构

    Arm 架构为处理器或内核的设计提供了基础,我们称之为处理元件 (PE)。Arm 架构用于一系列技术,集成到片上系统 (SoC) 设备中,例如智能手机、微型计算机、嵌入式设备、
    发表于 08-01 14:35

    ARM服务器基础系统体系结构7.1平台设计文档

    服务器基本系统体系结构(SBSA)指定了基于ARM 64位体系结构的硬件系统体系结构,服务器系统
    发表于 08-09 07:49

    ARM领域管理扩展(RME)系统架构介绍

    本章介绍Realm Management Extension(RME)系统架构。RME架构是在[1]中指定,并且被定义为Armv9体系结构的A轮廓的扩展。 RME体系结构定义了符合
    发表于 08-09 07:52

    ARM9系列微处理器软件体系架构工具

    本内容提供了ARM9系列微处理器软件体系架构工具
    发表于 04-29 16:50 187次下载
    <b class='flag-5'>ARM</b>9系列微处理器软件<b class='flag-5'>体系</b><b class='flag-5'>架构</b>工具

    米尔科技ARM处理器体系架构介绍

    ARM 体系结构是构建每个 ARM 处理器的基础。ARM 体系结构随着时间的推移不断发展,其中包
    的头像 发表于 11-20 10:04 1145次阅读
    米尔科技<b class='flag-5'>ARM</b>处理器<b class='flag-5'>体系</b><b class='flag-5'>架构</b>介绍