2022年下半年---系统架构师论文,论高可靠系统中软件容错技术的应用 3

简介: 2022年下半年---系统架构师论文,论高可靠系统中软件容错技术的应用3

目录


论高可靠系统中软件容错技术的应用

范例

摘要部分

正文部分:



论高可靠系统中软件容错技术的应用

容错技术是当前计算机领域研究的热点之一,是提高整个系统可靠性的有效途径,许多重要行业(如航空、航天、电力、银行等)对计算机系统提出了高可靠、高可用、高安全的要求,用于保障系统的连续工作,当硬件或软件发生故障后,计算机系统能快速完成故障的定位与处理,确保系统正常工作

对于可靠性要求高的系统,在系统设计中应充分考虑系统的容错能力,通常,在硬件配置上,采用了冗余备份的方法,以便在资源上保证系统的可靠性。在软件设计上,主要考虑对错误(故障)的过滤、定位和处理,软件的容错算法是软件系统需要解决的关键技术,也是充分发挥硬件资源效率,提高系统可靠性的关键。

请围绕“高可靠性系统中软件容错技术的应用”论题,依次从以下三个方面进行论述

  1. 简述你参与设计和开发的、与容错相关的软件项目以及你所承担的主要工作
  2. 具体论述你在设计软件时,如何考虑容错问题,采用了哪几种容错技术和方法
  3. 分析你所采用的容错方法是否达到系统的可靠性和实时性要求

范例

摘要部分

2018年5月,我所在旅游集团公司组织研发旅游集成平台项目,该平台项目主要是集成供应商、集团产品、经销商三方的产品、上架、下架、价格、库存变更、下单操作的自动化流程。我在该项目中担任系统架构师,主要负责系统整体的架构设计工作,本文以该平台为例,主要论述了软件容错技术和方法在该系统中的具体应用。通过采用以集群化的形式进行应用部署;通过主备形式的数据库部署进行软件容错;通过程序设计方面进行软件的容错与避险。事实证明,以上软件的容错技术的应用对于系统的可用性、安全性和扩展性方面起到了很好的效果,满足了该系统的性能需求,并且该平台从上线到目前一直稳定运行,得到了各业务线负责人和公司高层领导的认可和赞赏。


正文部分:

由于集团公司旅游产业的快速发展,各个业务线迫切需要实现自动化旅游的产品、库存、价格变更以及下单流程的自动化项目系统,避免业务人员的干预导致的不及时以及人为产生的问题,于是公司决定开发一套从不同供应商旅游产品,统一打包成标准化的旅游产品,用于公司旅游平台以及经销商的平台上面进行售卖处理,实现旅游产品从上架、下架、库存、价格的动态化管理,以及订单从经销商或者集团官网上面下单之后,自动同步到供应商平台进行结算,一整套的流程实现自动化的操作。

2018年5月,我所在集团公司组织的开发旅游平台项目中,我作为该平台的架构设计师,主要负责该系统整体的架构设计工作。平台主要划分供应商产品集成服务、最小价的处理服务(由于供应商是多家公司提供同一类的产品,这个时候需要根据最小价的算法,在官网或者经销商平台上显示报价最低的产品)、订单服务、公共服务等等。其中对应下单的接口服务必须要满足7*24小时的稳定运行,对软件的可靠性要求非常高,这就要求在软件架构中必须要考虑到软件兼容技术的应用。

提高软件系统可靠性技术主要分为容错技术和避险技术,容错技术的主要方式为冗余,冗余又分为结构冗余、时间冗余、信息冗余、冗余附加。结构冗余又分为静态冗余、动态冗余和混合冗余。软件容错技术主要有N版本程序设计,恢复块方法,和防卫式程序设计。结合互联网软件的性质,我主要采用了集群技术、数据库主从技术方式,和程序设计方面来进行软件的容错与避险处理。下面就从以上三个方面详细讨论我所采用的容错技术和方法。

通过集群技术来容错,平台的所有服务如果在运行时部署在一台服务器上,那么当服务器发送故障,整个平台将不能再提供任何服务。所以一般非常小规模的应用才会采用这样的部署方式,像互联网应用这样的支付平台来说必须采用多台机器同时部署的方式,防止单台服务器宕机或者服务进程Crash导致整个平台不能提供服务的问题。通过多机同时部署的方式,当一台服务出现问题时,可以很容易替换一台新服务器进行重新部署生效,通过服务客户端的软负载均衡功能,可动态剔除不可用服务机器,动态发现新加入集群的服务器,使平台在出现故障时可以平滑过渡,达到容错的目的。另外平台中各个服务当首次获取到不易变的静态数据会将其存入非本地缓存中,例如采用了redis cluster技术,可以很好的保证写入缓存中的数据获取的高可靠性,恰当使用缓存不但会提升平台性能,同时还可以起到容错的效果,例如当某个服务所依赖的后端存储发生了短时的故障或者网络抖动,在这个时候大量的并发请求发现存储获取失败直接从缓存中获取将数据返回给调用方,起到了很好的容错效果。

通过数据库主从部署方式来容错,对于该平台来说,所依赖的后端数据库存储的稳定性是非常非常重要的,所有的旅游产品订单,交易、账户等等数据将直接存储到数据库中。如果数据库在运行过程中频繁宕机,那么带来的问题将是不能容忍的,因为会造成订单丢失,交易丢失,账户余额出错等等问题,所以在这里就要求数据库存储要具有非常高的可靠性,同时具有很强的容错性,在这里我主要采用了数据的部署结构作为主从方式,要求部署在不同服务器上,在不出题的情况下对于一些时效性要求不是很高的场合从库可以负责承担一部分读流量,当主库发生读写问题时,可快速由其他的主从升级为主库,继续服务,达到容错的效果。在这里我还采用了要求数据库宕机加报警的方式来防止宕机的主从数据库实例过多,导致在并发高的情况下没有可用的从库升级为主库提供服务,通过这样的方式也提高了整个平台的高可靠性。数据库的数据文件存储这里我也要去采用了RAID磁盘容错技术来防止单块磁盘损坏导致的数据文件丢失的问题。

通过程序设计方面进行软件的容错和避险,根据以往的架构经验,那么系统的不可靠大部分是由于程序内部的设计或者网络请求参数的配置或者连接池参数的配置不当导致的。所以通过程序设计方面进行了软件的容错是非常重要的。在程序设计方面容错用的最普遍的就是防卫式程序设计,例如平台中的一键支付聚合服务,当在支付的过程中调用账户服务来进行账户金额扣减的时候,势必会调用账户服务传递请求对象来处理,如果说账户服务在被调用的这一刻网络抖动或者丢包的情况下,这个时候一键支付聚合服务必然会收到抛出的错误信息,如果没有通过恰当的容错处理,那么这次一键支付必然会给用户显示支付失败,不太友好,在这里采用了try cache机制加3次重试的容错处理机制,就解决了该支付因网络抖动导致的支付失败问题。平台采用的是微服务的架构风格,那么在服务之间的通讯过程中涉及到数据的传递,这里我采用了在数据传输协议的头部加CRC码来做到对错误数据处理的避错。

通过采用以上容错技术的方法和措施后,平台最终于2019年3月份成功上线,各个服务运行状态良好,通过日志分析来看,支付成功率很高,得到了公司高层领导和各业务线负责人的赞赏和认可。但在我看来还有如下两点不足。1.各个服务之间调用事务一致性问题的容错处理。针对该问题,目前只能保证事务的最终一致性,因为根据CAP理论,要解决该问题确实存在一定的难度,很后面我准备研究一下TCC事务处理方式,争取在不损失性能的前提下最大限度解决分布式事务的一致性问题。2目前所采用的最大努力推送型事务服务依赖于MQ重复消息的问题。针对该问题我采用了一张消息处理表来解决,当收到消息的时候,先查询该消息是否已经处理,如果没有处理直接进行处理并将其进行记录,防止重复处理导致支付数据出错。

软件容错技术对软件的稳定性起到至关重要的作用,尤其是针对互联网性质的软件并发高存在流量峰值等问题,软件容错技术的应用的重要性就不言而喻。经过这次我所采用的软件容错技术的方法和措施的实施效果后,使我也看到了自己身上的不足之处,我会在今后的架构设计过程中,不断更新自己的知识,不断完善自己的架构设计领域,设计出更好的软件架构,更好的支撑业务平台的运行,提高公司的竞争力,为公司为社会尽一份绵薄之力。

相关文章
|
9天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
7天前
|
存储 分布式计算 关系型数据库
架构/技术框架调研
本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。
|
10天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
29 7
|
11天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
7天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
41 4
|
9天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
24 3
|
8天前
|
运维 Kubernetes Cloud Native
云原生技术在现代应用架构中的实践与挑战####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在实际项目中的应用案例,分析了企业在向云原生转型过程中面临的主要挑战及应对策略。不同于传统摘要的概述性质,本摘要强调通过具体实例揭示云原生技术如何促进应用的灵活性、可扩展性和高效运维,同时指出实践中需注意的技术债务、安全合规等问题,为读者提供一幅云原生技术实践的全景视图。 ####
|
9天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
9天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
9天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
下一篇
无影云桌面