摘要
2021年6月,我所在的公司中标某集团保险大数据平台一体化研发项目,该项目总投资2000万人民币,项目周期为2年,通过该项目,搭建该集团保险大数据平台,一方面将全国所有保险业务全部入库并保存,另一方面将全国使用该集团的网站系统、app客户的行为日志全部入湖并保存,通过分析用户的行为日志以及购买记录,为集团业务人员提供精准营销、挖掘潜在客户,帮助集团实现保险业务的快速增长。我有幸作为此次项目的负责人以及架构师参与了项目的搭建以及开发过程。该项目时间紧、任务重、涉及人员组织多,直接相关集团保险公司内部40个部门共计400多人。该项目于2023年5月完成系统上线,2023年6月通过最终验收,得到了用户的一致好评,顺利达成了既定目标。本人重点结合项目实际经验,以该项目为例,主要论述软件的可靠性设计在项目中的实际运用。
正文
2021年6月,我作为项目负责人以及架构师,主持了某集团全国保险大数据搭建项目。该项目历时2年,时间紧、任务重,具有相当大的挑战。一是需要配合改造的部门多,所有保险种类的平台都要接入我们大数据平台,任何用户的操作行为以及产生的订单都需要入湖并进行保存,我们需要定义统一的数据格式以及规范,还要跟集团各个保险应用沟通,沟通成本大大提高。二是技术含量高。该集团保险数据每年都在进行递增,且有些数据入湖之后还要进行大量的解析,并且这些数据也需要存储,用户操作行为的日志每天都是几百个G,极限的情况下每天的处理量能达到1000G左右。这对于数据存储来说是极大的挑战。所以,对于该系统来说,如何保证系统的可靠性成为该系统的一个主要技术难点。
查阅大量的资料得知,目前业界比较主流的软件可靠性设计主要有软件容错技术、检错技术、降低复杂度设计等技术。
常用的软件容错技术主要有3种,分别是恢复块设计、N版本程序设计、冗余设计。恢复块设计就是选择一组操作作为容错单元设计,从而把普通的程序块变成恢复块。一个恢复块包含若干个功能相同、设计差异的程序块文本,每一时刻有一个文本处于运行状态。一旦该文本出现故障,则用备份文本加以替换,从而构成“动态冗余”。N版本程序设计是一种静态的故障屏蔽技术,其设计思想是用N个具有相同功能的程序段同时执行一项计算,结果通过多数表决来执行。其中N个版本的程序必须由不同的人独立设计,使用不同的方法、开发语言、开发环境和工具来实现,其目的是减少N个版本在表决点上相关错误的概率。冗余设计实现的原理是在一套完整的软件系统之外,设计一种不同路径、不同算法或不同实现方法的模块或系统作为备份,在出现故障时可以使用冗余的部分进行替换,从而维持软件系统的正常运行。
检错技术实现的代价一般低于容错技术和冗余技术,但有一个明显的缺点,就是不能自动解决故障,出现故障后如果不进行人工干预,将最终导致软件系统不能正常运行。检错技术常见的实现方式,最直接的一种实现方式时判断返回结果,如果返回结果超出正常范围,则进行异常处理;计算运行时间也是一种常用技术,如果某个模块或函数运行时间超过预期时间,可以判断出现故障;还有置状态标志位等多种方法,自检的实现方式需要根据实际情况来选用。
降低复杂度设计的思想就是在保证实现软件功能的基础上,简化软件结构,缩短程序代码长度,优化软件数据流向,降低软件复杂度,从而提高软件可靠性。
参照上面主流的软件可靠性设计技术,结合项目实际情况,我们在项目中主要使用了以下措施来提高软件的可靠性:
1.采用集群容错技术。
为了提高系统的可靠性,我们在系统中大量的采用了集群容错技术。这里的集群容错技术应用到了多个组件当中,包括负载均衡nginx集群技术、前端服务器集群、后端服务器集群(因为我们采用的是前后端分离项目)、中间件kafka集群技术等,基本上每种组件我们都提供了集群,以确保某一个节点挂了之后,另外一个节点可以马上接管,提供程序24小时不间断运行。
2.数据库采用了多主多从容错技术。
我们在大数据平台对数据进行解析之后,会将一些有用的数据存储在mysql中,供业务人员使用、分析、查询和修改,当业务发现某些解析的数据不对时,可以支持手动修改该笔数据。在面对大量业务人员操作的场景,我们使用了多主多从的架构,即多个主节点,多个从节点,并在多主多从的架构上,实现了读写分离,主节点主要负责写入数据,从节点主要负责读数据,节点之后不相互影响。当系统在运行时,如果某一个主节点或从节点挂掉时,可以由另外一个主节点或从节点替换,从而提高系统的可靠性。
3.冗余技术。
在具体的数据湖接入框架中,我们引入了Hadoop框架,利用Hadoop的高容错性,提高了系统的可靠性。HDFS(Hadoop分布式文件系统)是Hadoop的核心组件之一,也是Hadoop的默认文件系统。Hadoop是一个分布式计算框架,而HDFS则是Hadoop用于存储和管理大规模数据集的分布式文件系统。在本次项目实施过程中,我们使用到了HDFS的纠删码技术。纠删码技术是一种数据保护技术,最早用于通信行业中数据传输中的数据恢复,是一种编码容错技术。他通过在原始数据中加入新的校验数据,使得各个部分的数据产生关联性。在一定范围的数据出错情况下,通过纠删码技术可以进行恢复。默认的纠删码策略可以节省50%的存储空间,同时还可以承受更多的存储故障。同时,对于一些重要的数据,我们也使用了数据备份技术,将数据备份到云服务端,保障系统在发生不可抗力的时候数据丢失的情况。运用这两种技术,成功提高了分布式存储系统的可靠性,使得系统更加稳定、高效的运行。
4.降低复杂度设计
在项目具体实施过程中,我们使用了降低复杂度设计,将一些模块进行合理的划分,尽量保证软件的各个模块之间实现高内聚、低耦合,优化软件结构,并通过具体的异步、批处理、多线程等技术手段实现某些复杂的功能,从而提高软件的可靠性。
经过我和团队的不懈努力,历时2年,项目终于于 2023年6月顺利通过了验收,并得到了一致好评,运行至今,用户反馈良好,集团公司的再保险业务运营水平得以提升。但是,在实施过程中,也暴露了一些具体问题,例如HDFS上面存储过多的小文件,一方面会大量占用NameNode的内存空间,另一方面就是元数据文件过多,使得寻址索引速度变慢,影响机器性能等等,这些问题通过应急处理和协调,都得到了妥善解决,没有影响到项目的总体进度。我们已经把这些经验和教训,总结到了工作总结里面,向其他技术人员分享,为今后系统架构设计提供帮助。相信通过不断持续学习改进,加强自己的系统分析与设计能力,努力工作,提升工作水平,为社会和公司多贡献一点自己的价值。