中电金信:我们为什么需要单元化架构?

导语:随着数字化时代的不断发展,金融企业计算机系统也经历了多次变革,从辅助类单机单库系统到全分布式的数字化企业架构。经过十几年的高速发展,金融企业的系统架构建设无论是在性能方面还是在复杂度方面都产生了巨大的变化。而在探索建设金融企业系统架构的道路上,很多金融企业都不约而同的选择了单元化架构。

为什么需要单元化架构?什么是单元化架构?金融企业又该如何搭建单元化架构呢?本文作者带来了自己的看法与见解,期待与各位同仁共同探讨交流。

01·为什么需要单元化架构·

在金融行业,为了增强系统性能,业界通常会采用同城热备份和异地冷备份两种策略。然而,这两种方案需要大量的硬件资源,但其利用率却不高,会浪费大量成本。因此,同城双活架构被引入,通过在两个同城机房之间分配流量负载,可以充分利用计算资源处理服务请求,以更有效地利用资源。但是,由于存储技术的限制(即数据的双写同步问题),系统的整体性能往往受到存储性能的制约。尽管在分布式系统中,数据存储问题可以通过分库分表或分布式数据库来缓解,但随着数据量的增加,仍然会面临性能瓶颈。因此,单元化架构就应运而生。

随着金融行业新业务的不断扩展,集中式架构的弊端逐渐显现出来,比如小型机虽然性能足够强大,但是面对突增的业务,处理能力往往很难快速提升。而在单元化架构下,因为主要业务服务都按照单元分区,系统故障影响效果可以控制到很低。例如同城双活情况下,可以保证一半数据服务完全不中断,相对以往的方案整个系统需要短暂停顿来切换数据库主备,单元本身也可实现多机房互备,在一个机房发生事故后可以实现较短的时间恢复故障服务。

02·什么是单元化架构·

2.1 单元化架构的定义

通俗的来讲,单元化架构其实就是把单元作为系统部署的基本单位,在全站所有机房中部署数个单元,每个机房里的单元数目不定,任意一个单元都部署了系统所需的所有的应用,数据则是全量数据按照某种维度划分后的一部分。在单元化架构中,每一个单元都是一个能完成所有业务操作的自包含集合,在这个集合中包含了所有业务所需要的所有服务,以及分配给这个单元的数据。

在实际应用中,单元化架构可以将主要的业务数据以固定的业务字段做分片,这种形式与数据分表的方式类似,但是单元化不只是数据层面,应用所用的计算资源也成了分片分区的一部分。每个单元都有自己可以处理的数据和独享的计算资源,所有单元可以同时处理业务,既提升了系统整体的吞吐量,也使资源得到了最大化利用。 

2.2 单元化架构现在面临的问题

虽然单元是个逻辑概念,但是从资源管理角度看,各单元所使用的资源都是隔离的,只有所有单元合在一起的数据才是完整的数据。与单体系统转分布式系统一样,架构的更新迭代虽然能够解决一些现有的问题,但也会带来新的问题。

■单元数据聚合:因为单元数据类似数据库数据分片,在不包含分片关键字段的查询时,需要遍历查询所有分库和分表,整体性能受限很大,而且单一动作会占用更多的资源(网络、计算)。

■新旧系统切换:如今大多数系统不是由0到1,而是从1开始到2或更高。怎样将旧架构平稳过度到新架构也是一个不小的难题。

■运营维护体系支撑:应用发布、资源管理等,都会对单元化架构产生一定的影响。

03·如何搭建单元化架构·

3.1 搭建单元管理平台

近年来,中电金信在如何建设单元化架构这条路上做了很多探索,并基于源启金融级数字底座成功构建了企业级单元化架构平台。对于金融企业来说,想要搭建单元化架构,首先需要一个可以支持搭建单元化架构的单元管理平台。这个平台需要能够支持后期所有的单元化架构规划,例如单元定义、单元定位策略、单元与数据关系建立、单元管理等能力。

■ 单元定义:单元可分为两大类,一种是可以按照一定规则分区的单元,称之为分片单元;另一种是不可以按照分区单元规则分区的单元,称之为非分片单元。分片单元与数据分片类似,它会定义一个业务标识的字段作为分区标准,目前实践较多的字段有“机构号”“客户号”,这种就是“单元分片标识”。需要特别说明的是,单元一旦定义就不可以轻易变动,因为它会涉及到单元定位、单元数据分区等一些列操作,如果单元定义有变动的话就相当于整体架构都要调整。

■ 单元定位策略:通常来说,单元定位都是根据交易请求信息内容、一定的规则和算法得出的当前交易应该去哪个单元执行。但是由于交易的多样性,里面也可能不一定包含能够直接进行定位的单元分片标识信息,所以还需要维护一个与单元分片标识有映射关系的数据,以此来适应更多的业务场景。

■ 单元与数据关系:用于划分单元的单元分片标识也可以作为数据存储分片的分片键,为了实现数据弹性架构以及数据备份转移,需要建立数据分片与单元的关系管理。

3.2 创建出单元实例

实际上,单元化架构规划的规程其实就是一种建模的过程,金融企业在完成单元化架构规划以后,还需要再创建出单元实例。当单元实例与数据中心建立关系,企业就可以勾勒出单元化架构的雏形了。

那么怎样才能让应用实现单元化呢?我们在进行应用部署的时候,要将那些需要进行单元化部署的应用与单元实例建立关系。这样在应用部署后它们就会包含单元属性,实现应用的单元化,并且完全不用感知单元的存在。为了更高效地管理集群内的应用节点,所有单元内的能力要保持一致,单元间的差异只是处理的数据不同。非分片单元不受此规则限制,因为其本身就是不可拆分的数据,集中的服务集群。

3.3 获得技术平台关键中间件支持

想要构建一个完整的单元化架构体系,只有单元管理的能力是不够的,还需要获得技术平台关键中间件的支持才行。

■ 分布式网关:分布式服务系统关键组件,外部交易请求的单元定位都是由它完成的,包括应用发布时的流量控制。所以需要在其控制与执行层面引入单元概念,并与单元实例建立关系,这样才可以保证后期能够执行单元定位策略。

■ 服务治理:包含内部服务的注册与发现、服务访问、服务流量等多种服务管理职能。在单元化架构下,服务治理组件需要感知单元,并可以基于单元维度管理服务。服务注册时需要标注单元标签,可以根据服务访问策略定位需要处理的业务所在单元,是单元化架构下服务集群系统的关键组件。

■ 消息中间件:在单元化架构下,基于消息系统处理业务的服务也需要考虑单元化的影响,因为消息生产方要处理的任务所在单元并不一定就在本地,也可能在其他单元。所以消息中间件不仅需要可以被所有单元的消费者可以访问到,同时还要配合单元定位标识出单元位置,这样才能保证单元消费者拿到对应的消息在本单元内处理。

■ 批量调度平台:在单元化架构下异步处理任务、定时调度服务等业务也需要感知单元,可以通过单元维度管理批量任务,并能够从单元视角查看整个集群批量任务运行情况。

■ 运维监控系统:应用在发布时与单元建立关系,这时应用的日志就已经带有单元标签,运维系统可以通过日志采集、接收数据上报等手段获得单元信息。可以从单元视角查看整个系统运行情况。

04·总结·

通过上述内容的阐述,我们可以看到单元化架构可以适应未来大规模分布式服务需求,并在高可用、性能保障等方面具有得天独厚的优势,但相应的是单元化架构所产生的问题往往也需要企业去投入更大的成本来解决。

对于金融企业来说,是否要使用单元化架构需要“具体问题具体分析”,企业应当在充分评估当前自身系统现状的基础上,并根据企业的现状与未来的发展规划来决定是否要选择单元化架构。中电金信也会在今后的实践中继续探索,不断寻找更高效的架构解决方案与技术支撑能力,帮助企业达到降本增效的目标,协助金融企业创造出更多的价值。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 00:48:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 00:48:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 00:48:03       87 阅读
  4. Python语言-面向对象

    2024-03-17 00:48:03       96 阅读

热门阅读

  1. Git笔记

    Git笔记

    2024-03-17 00:48:03      38 阅读
  2. 从Docker容器内部访问宿主的IP地址

    2024-03-17 00:48:03       47 阅读
  3. Oracle EBS R12 SLA子分类帐会计 核心标准表(Table)

    2024-03-17 00:48:03       36 阅读
  4. Redis

    Redis

    2024-03-17 00:48:03      37 阅读
  5. Android 固定WIFI热点路由IP

    2024-03-17 00:48:03       43 阅读
  6. Spring中@Controller和@RestController的区别

    2024-03-17 00:48:03       43 阅读
  7. CMake官方教程11--加入导出设置

    2024-03-17 00:48:03       32 阅读