【摘要】 首先,和大家先聊聊的是为什么微服务、DevOps和云计算会在各个产业大行其道;其次,再谈谈微服务架构设计有那些自己独特的设计思想,和传统的SOA有什么区别;最后,我们再一起看一看在工业领域云平台和微服务应用的一些实践。

很高兴今天能够和大家一起分享富士康云上的一些实践,我负责的是富士康云平台和工业互联网相关产品与解决方案。首先,和大家先聊聊的是为什么微服务、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使用和好的流水线过程。

来源:华为云社区

华为云MVP:来自工业制造领域的微服务与云平台实践相关推荐

  1. GAIR 2020 工业互联网专场演讲实录:腾讯云人工智能在工业互联网领域的实践

    2020年8月7日-9日,第五届CCF-GAIR全球人工智能与机器人峰会于上周五正式在深圳开幕. CCF-GAIR 2020将延续过去的强大阵容,在新基建机遇下,CCF-GAIR 2020 设立了 1 ...

  2. 数字孪生技术在工业制造领域的研究与实践

    随着物理世界和虚拟世界之间深度融合的技术条件日趋成熟,数字孪生作为突破性的应用技术框架,将会成为实现CPS乃至智能制造的基础,值得深入.全面地研究其内在机理和应用模式. 数字孪生技术在工业制造领域开始 ...

  3. 快收藏!52篇25万字,微服务、云原生、容器、K8S、Serverless精华文章集锦

    2017正在走远,新年之初,小数精选过去一年阅读量居高的技术干货,从容器.K8S 到微服务.云原生.Service Mesh,汇集成52篇精华集锦,充分反映了这一年的技术热点走向. 此文值得收藏,方便 ...

  4. 从分布式应用架构看 SOA、微服务和云原生

    从十余年前的各种分布式系统研发到现在的容器云,从支撑原有业务到孵化各个新业务,企业的发展离不开统一的.与时俱进的技术架构.本篇文章从企业分布式应用架构层面介绍了云原生计算架构带来的变化,希望能够帮助更 ...

  5. (二)spring cloud微服务分布式云架构 - 整合企业架构的技术点

    spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢? 下面我针对于spring cloud微服务分布式云架构做了以下 ...

  6. Spring Cloud企业微服务分布式云架构技术点整合

    spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构... 下面我针对于spring cloud微服务分布式云架构做了以下技术总结,希望可以帮助到大家: ...

  7. 面向领域的微服务架构

    近来,一些关于面向服务架构的话题,特别是针对微服务架构的弊端这个话题上进行了大量的讨论.虽然在几年前,微服务架构受到很多人的青睐,因为它们提供了许多好处,如独立部署的灵活性.明确的所有权.系统稳定性的 ...

  8. 50篇经典珍藏 | Docker、Mesos、微服务、云原生技术干货

    概念篇 全方位探(tian)索(keng)Mesos各种存储处理方式 老肖有话说@Mesos User Group第四次约会 技术实践 | Mesos 全方位"烹饪"指南 回顾 J ...

  9. Spring Cloud微服务笔记(一)微服务与云概念

    微服务与云概念 一.微服务 一.什么是微服务架构 微服务,是一个小的.松耦合的分布式服务. 为什么需要微服务: 1)单体系统部署在一个进程中,修改了一个小功能,为了部署上线就会影响其他功能. 2)单体 ...

最新文章

  1. 使用TextInputLayout分分钟构造一个酷炫登录框架
  2. Science审稿人谈中国首次实现量子优越性:「九章」到底打了谁的脸?
  3. 外观模式(Facade)
  4. android选项菜单xml,使用 XML 定义选项菜单
  5. Preferences偏好设置
  6. swift学习之元组
  7. lIUNX如何加载U盘,光盘
  8. word插入公式为灰色解决办法
  9. QT跨平台使用libvlc播放视频
  10. Kettle Spoon字段拆分
  11. 语句摘抄——第26周
  12. win10怎么打开网络计算机,Win10怎么启用网络发现?
  13. seo外包公司可以为企业带来什么好处
  14. Civil 3d 路线之固定图元(AlignmentEntity)部分分析
  15. 聊一下Node.js中NAPI的napi_value
  16. 北京筑龙CTO吴英礼受邀在清华大学互联网产业研究院做分享
  17. 青蛙与蚊子——C++练习题
  18. 2019最新计算机毕业设计-题目汇总大全-系列4
  19. 更改文件类型方法(文本文档改为lic文件)
  20. 响应式精美列表商城发卡源码

热门文章

  1. ufei pe安装linux,制作UEFI(64位)下的WinPE + Ubuntu + Acronis多启动U盘
  2. linux驱动大全,linux驱动
  3. java链表集合_Java底层基于链表实现集合和映射--集合Set操作详解
  4. python shutil_Python shutil模块
  5. 旋翼机自主着陆-主要技术难点
  6. linux虚拟串口及远程访问
  7. Visual studio docker build no such file or directory
  8. ViewBag ViewData
  9. 20155216 Exp6 信息搜集与漏洞扫描
  10. spring + hibernate + 实体类 注解配置代码