【摘要】 首先,和大家先聊聊的是为什么微服务、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. 黑少微服务商店之Iron Cloud微服务开发云

    近日,由黑少微服务研发团队推出的Iron Cloud微服务开发云已经正式对外提供服务,这是国内第一家基于云端操作的微服务专业开发工具. Iron Cloud 微服务开发云(www.ironz.com) ...

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

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

  3. 分布式系统的应用程序性能监视工具,专为微服务、云本机架构和基于容器(Docker、K8s、Mesos)架构而设计。 SkyWalking

    Apache SkyWalking™ | SkyWalking Teamhttp://skywalking.apache.org/zh/ Application performance monitor ...

  4. UBer面向领域的微服务体系架构实践

    介绍 最近,人们对面向服务的系统架构和微服务系统架构的缺点进行了大量的讨论.尽管仅仅在几年前,由于微服务体系架构提供了许多好处,如独立部署的灵活性.明确的所有权.提高系统稳定性以及更好地分离关注点等, ...

  5. 【分布式微服务企业快速架构】SpringCloud分布式、微服务、云架构快速开发平台源码

    鸿鹄云架构[系统管理平台]是一个大型 企业.分布式.微服务.云架构的JavaEE体系快速研发平台,基于 模块化.微服务化.原子化.热部署的设计思想,使用成熟领先的无商业限制的主流开源技术 (Sprin ...

  6. protobuf / Consul / 边缘计算 / MEC / CDN / Serverless / GraphQL / 微服务 / 网关 / 云原生 / Serverless (真能造概念啊!!!)

    技术概念层出不穷,学吧!记录下自己多这些概念的理解 protobuf: 数据结构而已,类比XML, JSON consul 解决的只是微服务里的服务注册与发现,健康检查等. 边缘计算:可以理解为是指利 ...

  7. 云享专家倪升武:微服务架构盛行的时代,你需要了解点 Spring Boot

    [摘要] 微服务架构的本质在于分布式.去中心化. 随着互联网的高速发展,庞大的用户群体和快速的需求变化已经成为了传统架构的痛点. 在这种情况下,如何从系统架构的角度出发,构建出灵活.易扩展的系统来快速 ...

  8. 构建Spring Cloud微服务分布式云架构

    大型企业分布式微服务云架构服务组件 实现模块化.微服务化.原子化.灰度发布.持续集成 commonservice zipkinSpring 日志收集工具包,封装了Dapper和log-based追踪以 ...

  9. Java云原生崛起微服务框架Quarkus入门实践

    @ 目录 概述 定义 GraalVM简介 为何使用 特性 官方性能 实战 入门示例 步骤 安装GraalVM 创建quarkus工程 Idea导入项目 Idea运行和调试 打包成普通的Jar 打包成依 ...

随机推荐

  1. 消息中心 - Laravel的Redis队列(一)

    前言 Laravel的队列可以用在轻量级的队列需求中.比如我们系统中的短信.邮件等功能,这些功能有一些普遍的特征,异步.重试.并发控制等.Laravel现在主要支持的队列服务有Null.Sync.Da ...

  2. Java学习总结之方法重载和方法重写

    在学习方法的阶段我学习了方法重载(Overload),而在学习面向对象三大特性之继承的时候我又学习了方法重写(Override).   概念: 方法重载:在同一个类中,允许存在一个以上的同名方法,只要 ...

  3. 零基础Linux入门学习方法--如何做好笔记及长效知识复习记忆

    “工欲善其事必先利其器”. 此次学习的0基础教材为刘遄(Liu Chuán)老师的<Linux就该这么学>.学习目的是通过RHCE认证.有关RHCE认证介绍会在认识Linux及红帽认证中记 ...

  4. 爬虫学习--Day3(小猿圈爬虫开发_1)

    爬虫基础简介 前戏: 1.你是否在夜深人静的时候,想看一些让你更睡不着的图片 2.你是否在考试或者面试前夕,想看一些具有针对性的题目和面试题 3.你是否想在杂乱的网络世界中获取你想要的数据 什么是爬虫 ...

  5. SpringBoot 源码解析 (一)----- SpringBoot核心原理入门

    Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point for building all Sp ...

  6. linux shell脚本语法笔记

    1.&,&&,|,|| &:除了最后一个cmd,前面的cmd均已后台方式静默执行,执行结果显示在终端上,个别的cmd错误不影响整个命令的执行,全部的cmd同时执行 &a ...

  7. 大宇java面试系列(一):jvm垃圾回收

    1. 说一下 JVM 有哪些垃圾回收算法? 标记-清除算法:标记无用对象,然后进行清除回收.缺点:效率不高,无法清除垃圾碎片. 标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除 ...

  8. php的精度计算问题(bcadd和bcsub)

    一.前言 我们在进行php开发的时候经常会遇到浮点型的问题,特别是涉及金额的部分,常常需要进行加减运算.当小数点的位数比较多的时候,往往容易犯一些很低级的错误.这里记录一下php的精度计算和封装的小d ...

  9. nyoj 77-开灯问题 (倍数遍历)

    77-开灯问题 内存限制:64MB 时间限制:3000ms 特判: No 通过数:13 提交数:24 难度:1 题目描述: 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍 ...

  10. package.json文件内容介绍

    概述 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文件, ...