华为云MVP许舟平:来自工业制造领域的微服务与云平台实践
很高兴今天能够和大家一起分享富士康云上的一些实践,我负责的是富士康云平台和工业互联网相关产品与解决方案。首先,和大家先聊聊的是为什么微服务、DevOps和云计算会在各个产业大行其道;其次,再谈谈微服务架构设计有那些自己独特的设计思想,和传统的SOA有什么区别;最后,我们再一起看一看在工业领域云平台和微服务应用的一些实践。
-- 从福特T型车谈起 --
这张图片来自于1913年亨利福特的T型车,熟悉福特汽车历史的朋友会知道,这些福特汽车都是从一些钢板通过流水线一步一步制造出来的。今天,Uber、特斯拉等企业改变了人们的出行习惯,我们也可以看到在工业制造领域,大量的智能机器人代替人工来使用。
其实,工业互联网已经在慢慢改变着目前的产业格局。从福特到丰田再到埃隆玛斯克,每个工业时代都有自己鲜明的特点。福特是通过规模化降低成本,保证相应的产品质量,丰田精益制造的创始人大野耐一在二战以后提出的精益生产和按需生产对丰田汽车和整个制造业的改变非常巨大,埃隆玛斯克的精益生产也对特斯拉有很大的提升。
过程管控、精益制造以及九十年代开始的瀑布式模式,CMM这些使用的改变都是线性的、逐步递增的,而随着云计算、敏捷开发、DevOps和微服务的不断兴起,这些新兴技术其实对我们业务的改变是非常巨大的,我们已经到了一个软件定义世界的时代。敏捷开发颠覆了传统软件开发的瀑布式模式,通过快速迭代,保证开发人员可以尽可能快地把我们的产品原型迭代开发出来。DevOps文化、流程和工具的实践,打通了从研发到运维的各种部门墙,让持续交付流水线可以真正的走到生产环境,灰度发布更是在众多企业中得到广泛使用。
-- 云时代的应用架构特点和设计思路 --
云原生应用改变的是什么?就是改变我们对传统的一体式软件架构设计的方法和理念。为什么这样去做?传统架构都有自己很好的优势,相对服务的设计和基于此的实现方式以及部署,八十年代到九十年代,包括在银行的很多主机系统应用都是一体式架构。我们知道互联网的发展以及分布式和在云上面的服务划分,微服务就在这种场景启动。Amazon、Google这种国外的互联网巨头其实都是用微服务的方式设计和应用。
有了相应的设计,如何运行应用呢?可以看到云从传统的数据中心到按需提供服务的公有云、私有云和混合云的架构,包括服务器层面的实现。通过这种技术的更新,可以看到业务特点,怎么保证业务在线能够7×24×365不断做好相应的升级,尤其是以前的制造业以及银行业的应用,一定是有相应的服务时间。包括工业级的应用和业务敏捷性的支持,都是基于业务的不停顿,可以保证相应的新的功能的上线对原有应用的稳定性,这些都是微服务的应用架构。
怎样去做项目开发和实践?我们来看康威定律。第一条是任何组织设计的系统都是其自身本身组织架构的父本,可以发现企业组织相应的特点。第二条是时间再多,一件事情也不可能做得完美,但总有时间做完一件事情。
之后的十二要素法则也是比较好的应用。和对应体系架构和设计过程当中,看一看哪些能够帮助我们做好相应的技术实践。可以参照一下我们在做相应的设计、开发和部署的过程当中有没有做好设计,比如一套基础架构的部署,需要在相应的环境当中推出相应的服务。基于微服务的设计理念,我们去把相应的进程做好,怎样去做项目划分。
立方体模型是我们常见的对服务的切分和设计原则:X轴的横向扩展关注的是水平的数据和服务的汇总,其实在容器上做的服务扩展实现的是需要有相应的服务注册机制,并且需要进行驱动分享,通过这种有状态和无状态的分离来做好服务的划分。所以新的应用设计都是基于这方面来做分层,然后来做状态保持。Y轴的扩展就是相对功能分解的智能划分,其实也是采用相应的驱动设计方法,通过业务能力对服务进行划分,所以为什么经常能够看到我们微服务都是六边形的形状,避免相应的传统服务的混合性,也是尽可能由小团队来做。数据的使用能够保障我们在横向以及纵向的扩展,针对数据的分区做好相应的设计,通过微服务保护好我们分布式数据是关键。
横向扩展基于前后端的分离是至关重要的,如何实现去中心化?微服务和传统的SOA设计有很大的区别,是否存在中心化是非常关键的一点。微服务设计中一定是去中心化的设计思想,有状态和无状态,前后端的隔离是关键。所以基于传统的MVC模式进行改造,包括通过端口绑定来对外提供服务,管理进程也是作为一种后端进程提供服务等等,这是我们横向扩展当中开展设计非常重要的因素。
纵向划分就是通过功能分解,例如,我们抽取核心订单的项目功能作为项目基础服务,国内大量的互联网公司都是通过这种方式来做,包括金融行业以及制造行业都是通过这种方式来做功能分解,再以数据分区做好每一项服务,包括高可用性的定义都有不同的设计在里面。
我们尝试通过领域驱动设计构建项目应用,为什么领域驱动设计这么火?这个概念推出已经非常久了,但是基于原生项目划分,这种概念更多的是面向业务的角度,所以我们可以看到驱动设计和普通对象视角有很大的区别,就是需要站在相应的应用业务视角来做相应划分,比如工业应用,每一项应用场景对于物和物、物和人的连接,包括基于此开展的客户使用,就是通过相应的驱动设计进行。
驱动设计其实是一个很大的范围,最底层的Infrastructure,包括业务对象的持续化需要我们在这个层面来做相应的实现,软件系统的核心层,具有相应的状态和持久化,相应的细节是由底层来做实现,再往上的Application在做前后分离划分的时候并不包含相应的业务逻辑和业务对象,这样再做横向扩展的时候可以非常方便,User Interface就是负责相关交互,也是驱动设计的相应方法。
-- 工业互联网领域实践 --
有了这些东西,我们看一看实际应用项目的工业领域场景。
很多朋友问我,工业互联网和物联网IoT有什么区别?这是我们总结的基于我们理解的工业互联网的核心模型。前面曾经讲过,这种架构就是基于核心的通用互联网平台,所以可以看到云的基础包括移动端的使用都是列入通用的互联网技术,无论是国内的阿里云、腾讯云还是其它基于基础的状态,5G应用很大程度上是2B的案例。工业领域的IoT场景是在物联网的层面,就是基于通用互联网技术来做相应的实现,工业互联针对工业数据分析和工业系统模型的建立是保障我们针对数据采集以后再上一层去做相应的大数据分析很重要的应用,再往上就是工业互联网平台、微服务的划分和APP的设计,包括平台生态集群。
项目模型当中,我们做过一个Overview的架构设计,包括边缘层。工业互联网为什么相对比较难做?就是因为工业级的产品不多,比如GE的Predix在支持其核心产业能源、医疗、航天都是基于工业互联网平台。工业互联网平台中的边缘计算和数据采集非常关键。因为我们知道物和物相连,想要做好相应的数据,尤其是工业级的数据,这种数据量非常巨大,要是不进行分析,并且在边缘层来做数据的话,直接进入云端,其实从技术难度和运营成本上来说都是很高的,并且即便上了云,也可能会有很多问题。我们基于硬件,在边缘层把数据计算做好处理。现在云的平台已经比较成熟了,无论是基于工业云还是私有云。
我们认为计算层面公有和私有都有相应的设置,所以我们更关注的是上层的相应应用,所以多云的策略一定是工业互联网当中最基础的,包括我们去做整个流程,还有基于工业的模型库,真正产生价值的地方在于基于PaaS平台来做SaaS应用,这些都是真正面向工业场景和实际应用,包括刚才展示的工业机器人、SMT、AGV等技术都是在这个层面产生。
我们需要一个开发者平台提供流水线支持,可以把基于工业的模型应用,包括可以在云端,如果是私有云就部署在企业内部,如果是公有云就在企业组织进行共享,包括基于工业的微服务建模抽取出来,然后进行标准的打包、发布以及上线部署,建立一套完整的流程,也是方便我们做好DevOps开发,完成工业互联网的生态建设。
这些就是我们基于富士康的云平台建立的完整生态,也有很多项目应用都是基于数据做好工业模型的设计,并且在人工智能领域做好这种算法划分,下面来看我们在其它方面的项目实践。
首先就是组织架构,任何一个企业的能力都是和组织架构直接相关的,但是想做微服务设计是很难的事情。前端都有相应的产品设计、开发、测试、运维这种项目划分,包括市场销售技术支持,所以这些都是相应的尝试。我们要做科技转型要把组织扁平化,然后去做相应的尝试,能够通过去中心化构建是至关重要的。
有了这些以后设置OKR目标非常关键,每个组织定好目标都是非常关键的,基于工业项目的场景需要平台,每个团队都知道我们的目标在哪里,这样大家才能努力去做,所以这是基于OKR的项目划分。
再做技术项目选型,Cloud Native云原生是我们的方向,具体要看场景,我们希望能够真正解耦,就是微服务架构过渡,因为微服务和基于DevOps这样的方式会让我们的业务发展做得更长久。
我们希望能够重新定义失败,为什么这样去做?失败并不可怕,可怕的是如何定义失败,并且利用失败获得经验。我们也希望避免犯错误,具体要在工业互联网去做这些产品很难,所以建立起学习氛围是关键,我们要把失败看成一种学习的机会。如何能够在失败当中学习,这个项目氛围非常重要,也是搭建业务团队过程当中非常看重的。我们希望快速地、低成本地试错,所以我们要做团队产品划分,快速看到原型,不是等到最后一刹那才知道不行。
微服务我们项目成功的要素,形成一个标准的黄金三角。中心就是以客户为中心,还有三个项目要素:微服务的架构设计、敏捷组织划分、DevOps使用和好的流水线过程。
- 点赞
- 收藏
- 关注作者
评论(0)