企业信息化大集中化建设应重回分布式单元架构

开发 架构 分布式
简单来说就是原来各个省,子公司都有的IT系统全部废弃,采用全新构建的一套集中化系统来满足集团所有省公司,专业公司的需求。

本文转载自微信公众号「人月聊IT」,作者何明璐。转载本文请联系人月聊IT公众号。

个人从2009年就开始参与电信运营商的ERP集中化建设。

简单来说就是原来各个省,子公司都有的IT系统全部废弃,采用全新构建的一套集中化系统来满足集团所有省公司,专业公司的需求。

这样建设的好处当前是显而易见的,即从建设成本,运维成本,业务特别是财务管控能力提升各个方面都明显增强。集中化即集约化,不仅仅是成本降低,更加重要的是集团整体管控能力大幅提升。

09年的大集中化建设,基本还是传统的单体应用架构,而且是IOE模式。

即采用EMC集中化存储,Oracle数据库,小型机来完成IT基础设施架构的搭建。这些IT硬件设备虽然昂贵,但是最大的好处就是高可用和高可靠,确保了IT基础设施层足够稳定。

但是集中化建设的系统仍然会面临扩展性的问题。

即从5年到10年的长周期来看,原来的IT基础设施架构是否能够平滑扩展支撑,就是一个关键问题。特别是我前面文章经常谈到的DB数据库能力,DB数据库集群要做到完全水平弹性扩展很难,包括Oracle RAC集群本身也有性能极限,一般来说也就扩展到单点2到3倍能力就是极限。

因此在2012年启动了私有云PaaS平台建设工作,提出了平台+应用的构建模式,并且参考互联网的做法进行去IOE,采用开源软件和X86服务器进行替代。

这个在当前集团信息化建设中相当超前。

不仅仅是去IOE和开源化软件应用,更加重要的是进行了组件化拆分,和当前微服务一个道理。组件化拆分最重要的又是数据库拆分。一个单体应用首先按组件模块进行了一次拆分,拆分为多个数据库。同时为了满足所有省份和组织的使用,又对数据库进行了一次水平拆分和分片操作。

可以看到,引入了如下复杂性。

  • 开源化和去IOE,从IaaS过渡到PaaS层
  • 微服务拆分后的横向集成
  • 消息,缓存等技术服务纵向集成
  • 数据库拆分,包括DaaS层的分布式事务

如此多的复杂性引入,要做好是相对困难的事情。因此整个私有云PaaS平台建设和推进实际并不算太成功。这个不仅仅是技术的问题,还是涉及到业务,组织管控,厂商配合度各个方面的问题需要去解决。

这也再次印证了在合适的时间采用合适的技术的道理。

好了,在这里抛出今天的问题。

即使在集中化建设模式下,为了应对高可用性和扩展性,也会对单体应用进行微服务拆分,同时对数据库进行水平和垂直拆分来满足性能和扩展性要求。但是由于微服务和数据库的拆分,在集成协同,分布式事务处理方面引入大量问题。是否有更好的思路去解决这个问题?

集团的多组织架构谈起

一个集团可能有很多的子公司,集中化建设的思路就是全部上一套系统以方便管控。一套系统就代表固化了一套标准的业务流程和规则,这个思路本身没有错。

但是上一套系统难道就意味着必须所有的数据都存在在一个数据库?

答案显然不是。

即使在传统多组织架构下你也可以看到,集团和子公司之间是有交互,比如全面预算管理,预算下达,财务的管控和统一财务报表。关键是项目的跨组织审批和确认。

但是你会看到实际上集团和各个子公司间的协同点并不多,大部分业务运作往往在子公司内部就可以完成。也就是集团和子公司本身就是一种松耦合关系。

那么在这种情况下日常业务运作并不需要数据大集中。数据大集中更多是为了后续的数据运营和数据分析,这个本身可以后续通过构建类似大数据平台,数据中台来解决。

多套系统能否统一集中管控?

比如集团构建一套SCM供应链系统。

传统集中化做法就是构建一套系统再微服务化拆分,然后统一部署,统一管理和运维。但是集中化本身也带来新问题。

  • 其一是后续谈下扩展很麻烦,或者无法做到弹性扩展。
  • 其二是系统一旦宕机或故障,往往会影响所有组织的业务运作

那么能否既做到所有组织用一套系统,又让各套业务系统完全垂直化独立部署和管控。从应用,中间件,上层业务系统都形成一种分布式的单元模组。

也就是说20个组织。

那么我们开发的SCM系统就独立部署20套,每个组织使用一套独立的系统。当然如果存在小型组织,也可以多个组织使用一套独立系统。

组织和系统间形成一种松耦合,可配置的关系。

对于部署的20套系统又需要做到统一的发布和交付,统一的后续监控运维。在传统模式下你会发现这个很难做到。

但是在当前云原生架构下,基于DevOps的持续集成和持续交付能力完全可以做到。也就是说虽然业务系统有20套,但是整体的管控只有一套,还是能够做到集中化的管控。

在这种模式下,我们唯一需要解决的问题就是。

将涉及到集团和子公司协同交互的能力单独出来,构建一个独立的集中化系统来应对这种少量集成和交付。即使这样也可以看到,这个集中化系统本身不会有太重的业务数据产生,更多的是基于底层业务系统已有的API服务能力进行组合或组装编排。

业务系统按子组织拆分,也不再需要去考虑复杂的DaaS数据层和分布式事务问题。同时也建设了各个子组织之间的相互影响。

能按子组织拆分,坚决不进行微服务拆分

再回来谈下微服务。

从单体应用到微服务,一个重点就是解决传统单体应用的扩展性问题,解决业务系统后续的变更影响问题。同时也方便配合敏捷开发和团队管理思想的推进。

但是微服务带来的巨大问题就是集成和协同的困难,分布式事务等。

比如前面谈到集中化建设,当集中化建设后整个业务系统的并发量,数据量都急剧增加。这个时候你不得不将大的单体进行拆分,以解决扩展性和性能问题。

但是集中化建设完全可以是业务规范流程+IT管控的集中化。

而不是说业务系统一定只能够部署一套。

你完全可以按组织分别部署多套系统,再集中化进行管控。按子组织拆分,自然不会涉及到单个业务系统具体的并发量和性能问题。

当你按组织拆分解决了性能问题后,为何一定要继续拆分微服务呢?

实际上你也可以看到,按组织进行拆分,为每个组织分配一套系统,但是又对系统进行统一管控,这才是最佳的做法。这种成本投入远远小于拆分微服务方式。

统一纳管-DevOps和容器云

传统模式下,要部署和管理20套相同的系统是相对困难的事情。

但是在容器云和DevOps快速发展下,已经具备了持续集成和持续交付的能力,同时可以通过容器云来实现资源的快速扩展。

比如我们可以预留20台计算节点资源,在统一监控20套业务系统,如果发现有明显的性能问题后,可以动态的对某组应用进行资源扩展操作。而这些操作都可以通过k8s来快速完成动态调度和资源分配。

由于云原生下的不可变基础设施,也更加方便了确保多套系统使用同样一套部署版本和镜像,确保了业务系统本身的版本统一性。

当然,我们还可以基于这种分布式单元架构,实现各组系统之间的相互冗余和热备能力。比如将A组织对应的A套系统的数据,异步的准时候同步到B套系统。那么在A套系统发生系统故障的时候,可以快速的通过流量切换将A组织的全部访问切换到B系统上来满足A系统的高可用。

 

 

责任编辑:武晓燕 来源: 人月聊IT
相关推荐

2012-11-14 13:41:17

信息化网络

2011-07-08 19:46:28

中小企业信息化建设

2016-01-29 15:31:37

道普网

2012-06-27 10:31:30

天玑科技企业信息化IT服务

2012-06-29 15:30:24

imo即时通讯信息化

2013-09-11 10:19:12

企业信息化vSphere

2016-06-27 15:58:26

深信服虚拟化劲霸

2012-12-27 13:54:37

企业信息化风险管理风险规避

2013-05-27 10:10:26

信息化企业信息化

2011-07-21 15:48:07

白皮书信息化

2012-08-10 09:53:08

信息化imo即时通讯

2013-03-20 10:03:43

虚拟化案例企业信息化

2014-10-22 13:50:16

天狼CIO

2011-03-07 15:59:43

IBMIT服务信息化推进

2011-11-16 09:39:57

SaaS云计算

2017-07-11 11:03:54

信息化数据大数据

2013-01-30 13:46:09

微信企业移动信息化

2012-08-28 09:53:38

用友信息化

2009-04-07 09:59:04

无线信息化RFID

2011-07-21 16:31:54

白皮书新闻发布会
点赞
收藏

51CTO技术栈公众号