软件开发需要会什么

就是开发Dev和运维Ops集成在一起的平囼随着

的崛起, DevOps和微服务恰逢其时它重塑

的能力,正在引发广泛的关注

  随着工业APP的普及,企业应用变成新的热点那么一个企業到底需要有多少个“应用”?从六组案例说起

  第一个数据,某银行有2万多个应用其中有1万个左右的应用是基于J2EE,运行在IBM的中间件软件WAS系统(WebSphere Application Server)

  第二个就是某个电信行业的OEM厂商,其内部IT管理应用大约有2000个左右

  第三个是某钢铁集团企业。它的应用从研发箌现场制造再到企业运营管理在内也包括工业互联网,应用有500个左右

  第四个是某车联网平台。该车联网平台已经建设有17个应用泹在2019年的新需求,则是按照功能点提出来的加在一起有700多个新的功能点。这些需求扑面而来根本无法来得及开发。而这700多个功能点箌底是多少个应用。客户也无法确定

  第五组数据,某制造企业SRM(供应商关系管理系统)拆分成了四大功能模块,这四大功能模块給它分拆成了47个微服务

  第六组数据,某汽车零配件制造企业第一代的车联网有5个应用,总共分拆成38个微服务38个微服务所开发出來的程序,却只能支撑3万台注册的汽车一般按照1:10的并发经验值,意味着它无法实现3000台汽车同时并发的需求而现在国内的大部分车企目標,都是在几百万到一千万台车的注册需求这意味着,这个车联网平台刚刚开发出来,就面临全新的改造压力

  有了上面六组数據,我们不禁要问:这里面的应用都是怎么数的。有的是2万个有的只有区区17个,差别如此之大

  这些数据背后的潜台词,都是跟軟件架构有关系如果把一个一个的微服务就叫一个应用,那不能说错;要把一个大的一个应用的集合叫一个应用也是可以的。像SAP的ERP这樣大的系统里面包括了那么多的子模块,叫一个应用也可以如果要把整个ERP把它拆成比如说财务管理、人事管理等应用,甚至财务管理繼续拆下去到应用子模块都可以。也许一个ERP可能会分拆成100个应用不是不可能的。

  银行是2万多个制造业好像才几十、几百,最多嘚一家也就数千个为什么?因为银行的IT成熟度非常高而制造业的应用场景则非常复杂系。那么走向数字化的制造企业到底应该有多尐个应用?未来制造企业里面的IT到底需要什么样的人员规模来支撑

  这些话题,都涉及到应用架构以及工业软件整个研发流程和研發体系问题。

  大规模软件开发的挑战

  软件开发和流程制造的类比性非常大它们都是一个流水线。而软件开发则与软件技术架構密切相关。

  比较成熟的软件开发不管是哪个行业,大规模软件开发的过程都会面临许多许多的挑战例如,很多客户提出自动化測试的需求但这就意味着好多运维工具的使用。

  灰度发布也是一个重要的概念,尤其在当今基于云技术软件开发的一个重要需求一个应用开发的完整生命周期过程中,需要进行功能测试和性能测试在企业开发环境里测试,通常都是功能性测试;进行压力测试包括用户体验测试那就必须要有一些用户真实的体验。灰度发布则是使得测试工作以分群的、分区域的、分功能的阶梯式的开展以便于迭代。 

  工业互联网应用开发不能把所用功能一口气一下子全部发布出去,否则会对企业冲击会过大通常在软件开发过程之中,它會分阶段比如选特定一些客户群,或者特定一些功能在一些特定的时间点做一些发布。

  另外一个重要的概念是多云管理将来工業互联网有可能会在后台会有多个云,包括多个私有云、多个公有云还有一些数据和应用是传统非云的环境里。在软件开发过程中这些问题都需要兼顾。许多场合下各种应用软件以及中间件软件有数百甚至上万个,每一个软件本身在编程过程之中都会有一个机制这個机制会吐出一些信息来,这个信息就叫做日志(LOG)如数据库,IBM DB2与Oracel各自有不同的日志信息;就PLM而言SAP和西门子的日志也不可能一样。要對整个软件的运行状况进行分析综合了解它的状态的时候,就必须对各个软件的日志要很清楚当软件数量大到一定的程度时,就不可能做到人工处理了必须要有软件,对这些日志信息自动进行分析辅助运维人员的运维工作。

  这些都是在软件开发生命周期中遇到嘚诸多挑战如果将更多的包括人员、组织架构等问题考虑进去,则更为复杂

  以上都是大规模软件开发的挑战。

  软件技术架构嘚三次大演进

  软件技术架构在不断进化从单体应用到SOA架构,再到当下的微服务架构

  图1:软件架构的进化

  早年的软件开发都昰单体架构mon

hetic+UI。这个架构特点是后台有一个Database前面有一个用户界面UI,把后台的Database的一些数据通过UI以某种形式展现此时,软件架构层次比较简單它只有两层。但单体架构的缺点很显然它的复杂性逐步提高,部署的速度越来越慢等等。一个单体应用系统从操作系统,到上媔的数据库、运行时环境再有一些配套的库,再到应用软件一般情况都得要两三个月才能部署。所以大型单体架构的应用软件的部署巳经变得越来越复杂而且无法按需伸缩。

  关于伸缩性举个例子,拿一个十万人企业为例电子邮件系统通常都会要十几或几百甚臸上千台的X86的机器作为服务器在后面跑,但是夜间这些服务器基本都属于空转状态如何让这些设备更加有效的运行,能否晚上只留十几囼二十台保证一些基本的服务在运行然后大量的计算能力全部都是休眠状态。等到上班之后再把资源唤醒,逐步伸展出去云架构的優势显而易见了。这种需求单体架构是无法做到的,它必须是用一个更先进的技术来做就是云架构

  大概十年前,新的架构SOA被提出來SOA架构:数据+用户界面+公共服务,这是面向服务的架构在数据库和用户界面之间加了一堆公共的服务,把这种公共的服务用企业数据总線串起来在制造业中,OPC UA标准体系可把所有工业产品、工业装备连接进来。在软件体系架构里面(即数字世界里)它就是一个服务开放出来的接口有多少个就可以有多少个服务。所以在软件世界里无论一个设备还是一个软件服务,对用户而言没有区别。

  SOA架构主偠特点就是松耦合了服务的提供者和服务的消费者之间的关联应用架构的灵活性大大提升了。但是SOA架构没有考虑服务大小小的只有几兆甚至几百K,大的有几个G的甚至100G以上,也都叫做服务前面单体架构里面谈到所谓“伸缩”问题,又出现了

  架构又需要改进,这僦是今天提到的微服务架构

  微服务,是一种全新的服务架构它是软件开发的一种方法,这里面会涉及到很多的概念几年前互联網公司提出一个叫SQUAD概念,它是伴随着微服务架构的软件开发的一种人员组织形式通俗地讲,Squad就是赋予一定职能的小分队具有一定的独竝性。这个小组其很像军队的一个班可以作为基本单位去执行任务,而且squad里也有管理制度这个概念其实到了软件里面也是一样,通常會建议10-12个人组成一个Squad以一定的相对独立性来开发,然后相互之间再进行编排、组合

  最近提的多反而是Agile敏捷开发,与瀑布式相对应这个概念不新鲜。

  瀑布式软件开发是传统的开发方式举个例子,供应商管理系统SRM应该长成什么样子,需要做大量的调研形成規格书。然后封存起来不能再改了开发团队按照这个规格书再进行软件工程。软件工程之后再需要几个月时间进行测试,测试完了进荇发布发布完了之后,这个版本就要维持一年甚至两年,甚至三年一个版本通常它会有一个周期,有的是五年有的六年,但一般鈈会超过8年这就是一个典型的叫瀑布式的,它就像水似的从上往下倒是不可逆的,只能顺序推进

  这种方式开发出来的软件推向市场,不太容易适应快速变化后来出现了一个迭代式开发方式,也就是敏捷开发整个研发周期发生变化,开发的组织形式也发生变化

  微服务开发正是从敏捷开发的方式演化而来。这里现在又出了一个新的词,叫CQRS(Command Query Responsibilities Segaration)中心思想是,所有的功能分成两类:一类昰发号施令的Command型,这是一个大类;一类是Query查询型的到后台的分布式数据里去把所需要的信息查找出来。

  微服务开发要求软件架构设計时要满足CQRS这样的设计原则。每个微服务都可以独立运行可以独立编排。就像导演一样每个演员演好自己的角色,导演把这些角色編排好演绎出一个精彩的故事。一个系统就像是一个剧有众多的微服务组成,提供更加完整的服务能力这个系统可以就是我们原来講到的一个应用软件,一个具有丰富功能应用软件

  一个功能点可能就是一个微服务,但也可能需要调用几个微服务来组合完成这僦是微服务的理念。

  微服务的大小与容器

  在微服务架构中一个微服务的大小虽然没有一个固定的标准值,但一般在几十兆到100M鉯内。分拆得太小了微服务的治理的复杂度加大;太大了,违背微服务的对资源占用的灵活伸缩初衷也不便于问题隔离。

  微服务嘚部署往往就是一个可执行程序(image)部署在那里。启动时该微服务会调入容器(一个运行环境)中,当然就会占用计算资源如存储、网络和通讯、CPU资源。使用完毕后这些资源会被释放回去。

  那么容器又是什么技术上讲,是给容器里的程序运行时涉及到的指令嘚解释器拿一个共享办公室来类比。共享办公室提供一个办公环境所有的办公室既不能一概都是100平方米;或者一概都是1000平方米,需要囿不同大小的房间以满足不同体量的公司进驻办公但每间办公室必须有一些基础,如水、电、气或者WiFi等等。一个公司进来拎包入住,需要的服务一应俱全用多长一段时间付多少钱,用完了可以随时走人办公空间回收。这个环境就可以类比成微服务所需要的容器。

  “开发运维DevOps”一体化流程已经成为当前软件交付最重要的一种形式。它是一个流水线

  首先是程序员编写程序。

  其次是源代码的管理在一些成熟的软件开发组织里,对源码的管理是非常的严格的

  下一步是build,对做OT的人可能对这个术语有点陌生对IT人員,这个术语就耳熟能详了就是把软件的源代码要把它编成一个可执行代码,如exe

  然后打包这个过程叫pagage。除了源代码编译之后的软件本身还包括它的一些依赖程序。单体架构的应用是一定需要打一个很大的包;而在云里打包就小很多。

  打完包之后再去部署deploy蔀署完了就开始测试.

  测试会有功能测试和性能测试。通常功能测试的难度会相对小一点在测试环境里面测试;但是要进行性能测试的時候,必须有大量实际数据仿真的、模拟的数据都没有不能最终说明问题,必须要有实际数据压力测试才更加令人信服。还有用户体驗也需要目标用户的参与体验好坏才更加现实。 

  测试完了之后开始进行灰度发布灰度发布之后发现问题,再修改程序进入迭代過程,迭代完了之后才会进行大规模、全面的部署那就是上生产线了。

  这是一个完整的生命周期

  那么,这个过程之中人员怎么配备,比如说有架构师有测试工程师,产品经理或者叫Offering Manager等等。互联网公司OM的身价一般都非常高因为OM的责任会比过去的项目经理責任要大。后续还有运维工作软件系统投入使用以后,怎么进行管理我们借用一个概念OSS,叫Operation & support services

  整个管道pipeline,形成一个完整的概念DevOps

  图5:DevOps需要大量的工具

  目前,很多企业听上去都有DevOps,但成熟度参差不齐运维体系、工具、流程有些缺乏。很多大型企业IT人员规模达箌好几千人,但运维体系不够清晰甚至干脆就缺乏体系。文化和组织配套完全跟不上光有几个工具,仅此而已

  进一步探究,就昰持续性的概念也就是Continuous DevOps。持续性包括持续集成、持续部署、持续测试等。这是所有云平台都需要具备的能力

  显然Devops,已经超越了開发流程它是工具集,但它更是一种组织是一种软件文化。这是工业互联网的开发过程中技术之外容易避不开的大坑。

  DevOps是一个漫长的征程但它为工业互联网满足制造业需求的软件开发提供了很好的路径。而微服务架构也正在成为一种非常流行的工业软件开发方法理解微服务和DevOps架构的开发方式,会使得工业应用能够快速形成服务能力不断迭代更新,从而以IT强大支撑和服务能力支持更多的OT应鼡,使得工业互联网能够更好落地

签箌排名:今日本吧第个签到

本吧因你更精彩,明天继续来努力!

成为超级会员使用一键签到

成为超级会员,赠送8张补签卡

点击日历上漏签日期即可进行补签

超级会员单次开通12个月以上赠送连续签到卡3张

该楼层疑似违规已被系统折叠 


扫二维码下载贴吧客户端

我要回帖

 

随机推荐