要做好整个企业的云原生体系建设,需要有个总体的视角,不谋全局者,不足以谋一域。我们将企业的架构进行全方面的梳理,并给出云原生体系建设总图,这个图当然不是一蹴而就就能建设完毕的,而是根据业务需求不断迭代演进出来的,但是我们要知道目标在哪里。1、企业架构的五个方面企业架构不仅仅是技术问题,还有流程问题和组织问题,总得来说分为五个方面,业务架构、技术架构、数据架构、研发流程和组织架构。 ...
以制造业为例子,如图所示,企业外采了CRM,MES,ERP,HR,PLM,SCM等系统,但是各自独立,各有各数据库,各有各的权限管理。
这样的架构使得企业的各个部门无法协同,例如公司生产两种工业品A和B,其中A需要原材料A1和A2,B需要原材料B1和B2,突然有一天,销售人员发现市场情况有所变化,原来客户喜欢A和B是1:1的比例,现在突然B的需求量大了起来,变成了1:2的关系,这些信息,销售人员都将一个个客户的需求登记到CRM里面,可是工厂并不知道这件事情,于是还是按照1:1的来生产,这样A就会滞销,B就会脱销,这就需要销售部门的老大根据报告,看到这种情况,给生产部门老大说,改变生产的比例,但是这又牵扯到原料,如果A1和A2,B1和B2还按照原来的数量采购,那没有原料,A和B也生产不出来,所以生产部门的老大要同供应链的老大去说。另外还有不同车间的人员比例,明显生产B所需要的人才要多了,而且生产B的人要配备相应的绩效,这些HR都不知道,所以要有人告诉HR。另外市场发生变化之后,对于公司的收入和利润有什么影响,这也是两眼一抹黑。等这些都理清楚,那几个月都过去了,市场可能又发生变化了。
为了解决这个问题,在多年之前,很多企业就采购了企业服务总线ESB和数据交换工具,将不同的流程打通,做到信息拉通,数据集成,协同管理。
企业消息总线可以实现不同系统之间不同接口的调用,哪怕这些接口格式,协议都不一样,有的是SOAP,有的是Restful,有的是RPC,有的是私有协议,他可以做协议的转换。使得一个系统发生的事情,另一个系统可以通过接口调用得到结果。也有的功能没有暴露接口,那可以通过数据交换工具,将一个系统的数据库里面的数据定时的导出来,放到另一个系统里面去,也实现了数据的拉通。
虽然这个体系结构比较原来的架构有了改进,但是仍然有问题,就是无法支撑业务快速创新。
1.2、技术架构:物理机及虚拟化
在第一阶段,在传统架构下,基础设施层往往采取物理机或者虚拟化进行部署,为了不同的应用之间方便相互访问,多采取桥接扁平二层机房网络,也即所有的机器的IP地址都是可以相互访问的,不想互相访问的,多采用防火墙进行隔离。
无论是使用物理机,还是虚拟化,配置是相对复杂的,不是做过多年运维的人员,难以独立的创建一台机器,而且网络规划也需要非常小心,分配给不同业务部门的机器,网段不能冲突。例如使用Vmware,可能需要考一个特别有含金量的证书,才能很好的配置他。所有这一切,都需要运维部门统一进行管理,一般的IT人员或者开发人员既没有专业性,也不可能给他们权限进行操作,要申请机器怎么办,走个工单,审批一下,过一段时间,机器就能创建出来。
传统架构数据库层,由于系统由外包公司独立开发,或者不同开发部门独立开发,不同业务使用不同的数据库,有用Oracle的,有用SQL Server的,有用Mysql的,有用MongoDB的,各不相同。
传统架构的中间件层,每个团队独立选型中间件,可能会多种多样。
1.3、数据架构:数据抽取与统计分析
这个阶段没有所谓的数据架构,由于业务是离散的,业务数据库里面的数据也是离散的,没有统一标准,虽然有了数据交换工具,会使得同一个数据很多份,各自分析。当然公司的领导和部门的领导都想看到当前企业的运行情况的,往往会有一个分析师的团队,从业务系统里面导出数据来,形成excel,然后利用自己对于流程和行业的理解进行分析,做出各种表格,图形,变成报告,交给公司领导或者部门领导看,领导肯定会根据报告进行讨论,然后根据运行情况调整战略和策略。
研发流程:测试与发布手工化及脚本化
在物理机上部署,由于机器数目比较小,可以使用手动测试和发布的方法。无非是丢上去一个安装包,然后重启一下Tomcat,发布就结束了。
后来上了虚拟化,机器的数目多了起来,服务数目也多了,再手动的一个个部署,工作量就比较大了,这个时候多采取脚本化的部署方法,写shell,或者写Ansible脚本等,进行自动化的发布与上线。