引言
在瞬息万变的 IT 环境中,实现高可用性和现代化至关重要。企业必须适应不断变化的市场动态,同时确保其应用程序和系统始终可用并符合最新技术。本文将探讨关键的高可用性实现方案,以及它们在现代化 IT 格局中的作用。
高可用性概念
高可用性是指系统或应用程序能够持续提供服务,即使遇到故障或意外情况。实现高可用性对于企业至关重要,因为它可以减少停机时间、提高客户满意度并保护收入。
现代化 IT 格局
- 云计算和分布式系统
- 微服务和容器化
- DevOps 和持续交付
- 大数据和人工智能
这些变化对高可用性的实现方式提出了新的挑战和机遇。
高可用性实现方案
实现高可用性的关键方案包括:
-
冗余
冗余是指在关键组件(例如服务器、网络设备和存储)中创建备用副本。如果一个组件出现故障,备用副本可以接管,确保服务不会中断。
-
负载均衡
负载均衡通过将流量分布到多个服务器或资源来提高应用程序或系统的吞吐量和可用性。它有助于防止单个服务器或资源过载,从而导致停机。
-
故障转移
故障转移是一种将应用程序或系统从发生故障的服务器或资源自动转移到备用服务器或资源的机制。它有助于快速恢复服务,同时最大限度地减少停机时间。
-
弹性
弹性是指系统能够根据变化的负载或条件自动扩展或缩减其资源。它有助于确保应用程序或系统能够应对流量高峰或其他意外事件。
云中的高可用性
云计算平台提供了实现高可用性的强大工具:
- 云计算提供商负责冗余和弹性,从而减少企业管理和维护基础设施的负担。
- 云服务可以轻松地进行自动故障转移,缩短恢复时间。
- 云平台支持弹性服务,可以自动扩展以满足变化的需求。
微服务和高可用性
微服务架构通过将应用程序分解成独立且松散耦合的服务,可以提高高可用性:
- 微服务可以独立部署和管理,从而简化故障隔离和恢复。
- 容器技术可以轻松地实现微服务的弹性,允许在需要时进行自动扩展和缩减。
DevOps 与高可用性
DevOps 实践通过自动化和持续交付过程,可以提高高可用性的可靠性和速度:
- 自动测试和部署有助于快速识别和修复问题,减少停机时间。
- 持续交付流程允许频繁更新和修补,提高系统的总体稳定性和可用性。
大数据和人工智能的高可用性
大数据和人工智能平台提出了高可用性的独特挑战:
- 大数据集的冗余和可靠存储至关重要。
- 人工智能模型的训练和部署需要高可用性基础设施,以确保模型始终可用并准确。
专门的大数据和人工智能平台提供了内置的高可用性功能,例如数据副本、故障转移和弹性处理。
结论
在不断变化的 IT 格局中,高可用性与现代化密不可分。通过实施冗余、负载均衡、故障转移、弹性和云技术,企业可以提高应用程序和系统的可用性和可靠性。微服务架构、DevOps 实践以及大数据和人工智能平台的采用为实现高可用性提供了额外的机遇和挑战。通过拥抱现代化方法,企业可以适应不断变化的 IT 格局,同时确保其 IT 系统和服务始终可用。
如何开发高可用的IT系统
我认为要想构成每一层的高可用性,三个点缺一不可,但在我们的实际系统运营建设中,却往往只会关注可以实现高可用性的系统架构,认为有一个完善的高可用性架构就能一劳永逸,“实现”了系统的高可用性,这是错误的想法,因为不存在永不发生故障的系统的。
但没有不发生故障的系统并不意味着无计可施,如何缩短故障处理时间是靠高可用性的另外两个支架支撑的:保障手段和运维制度。
通过保障手段监控到故障发生,而不是靠使用者投诉系统不可用,就可以大幅缩短故障对业务的影响,如果架构很合适,切换到备用系统上,甚至可以让用户感觉不到故障的发生。
通过运维制度将影响系统高可用性的隐患纳入到日常管控中,从根本上避免故障的发生,这其中包括要对故障解决手段定期进行演练等。
下面就一层层论述自己的认识。
基础设施层:简单地说,就是硬件,包括网络设备、存储设备、计算设备等等。
这一层上,架构设计的要点是——冗余,比如尽可能多的在线设备,比如在磁盘阵列上采用raid0+1等,一方面分担负荷,另一方面也防止设备故障后,修复时中断系统运行,但从投资的角度而言,少有公司把自己的硬件设备会一模一样的复制出一套来,因此如何权衡、如何最终消除单点隐患是在这一层架构设计的核心;这一层的保障手段,从我接触到维护人员多采用定时巡检手段,如观察设备的显示灯,抓取系统日志等,发现设备出现某些告警和损坏,尽快安排备品备件进行更换等,而监控系统在这一过程中发挥的作用有限,在故障发生时,往往采用重启,甚至是断电重启的方式恢复设备运行;这一层的运维制度除了安排好定时巡检,对于基础设施的信息要通过CMDB进行管控,收集设备的告警信息进行分析,及时调整设备的运行状态等。
操作系统层:我有时认为这个层面可以和基础设施层合并,因为无论是网络设备还是存储设备,其实都是有操作系统的,只是被固化到硬件上(这是否是“固件”一词的来历?),所以从架构设计而言,这一层的冗余是和设备同步进行的,但随着虚拟化和云资源池的使用,这一层也有一些变化,限于篇幅不赘述。
在保障手段上,对操作系统的监控就成熟许多了,成熟的操作系统都开放了标准接口,可以让第三方监控系统进行监控,但操作系统的故障解决手段只能是重启,甚至是断电重启;这一层的运维制度则是安排好作业计划,根据监控及时对系统核心目录,如IO操作目录等进行管理,在官方发布补丁包后及时更新,并在CMDB中登记等,要关注安全。
第三方软件层:这一层是产品化的软件,如数据库、中间件等。
这一层上,架构设计的要点还是冗余和备份,只是由于软件产品的特点,其冗余方式更容易进行,但也更受应用系统层面的影响,因此,这一层的架构设计需要应用软件的系统架构师、数据库架构师等全面考虑,充分利用产品化软件的特点合理设计架构,由于数据库在这一层上,并且对于IT系统而言,数据是绝不能丢失的,因此架构设计上一定要考虑数据备份;在保障手段上,监控系统的作用发挥更大,对于数据库的表空间、核心进程监控都很成熟了,要充分利用监控系统,合理设定告警值,当故障发生时,如果确认是本层的软件产品引发的,故障解决手段也多采用重启软件产品,或者通过恢复初始设置来解决等;在维护制度上,要利用监控系统安排作业计划,要及时更新软件产品的版本、补丁包等,要将软件产品的各种参数保存到CMDB中,要做好完善的数据备份。
应用系统层:这一层才是我们提供给使用者使用的系统,没有前面各层的高可用性支撑,这一层的高可用性绝对是空中楼阁。
应用系统层的高可用性架构设计往往是根据应用决定的,有的系统是基于中间件产品,那它可以和第三方软件层在架构设计时结合考虑,但也有的系统是自行搭建了应用架构,如何通过从架构上确保高可用性没有定论,但主导思想依然是冗余;在保障手段方面,仍然是通过监控系统,有些较为成熟的应用软件系统会配套监控系统,有的定制软件则可以开放系统进行监控,但监控对象主要是业务数据流,无论产品软件还是定制软件,故障发生后,重启已经没有太大作用,往往需要维护人员定位故障进行解决,尤其是一些大公司使用的定制软件,除了功能性bug,还有数据错误引发的故障,这往往需要专业维护人员进行处理解决;在维护制度上,主要是对需求变更管理更为严格,避免程序更新如果没有经过仔细的测试和验证就上线,对于知识库更新、维护人才队伍的培养与下三层不一样。
软件架构设计之高可用(High Availablity,HA)
行业实际业务所使用的软件系统,根据不同业务场景对软件系统可用性及可靠性需求的不同,高可用性/高可靠性成为评估软件系统非功能性需求的重要指标。
提高软件系统高可用性拥有多种解决方案,包括灾备、冗余等。
“两地三中心”容灾解决方案,其“两地三中心”一般指一个生产数据中心、一个同城灾难备份数据中心、一个异地灾难备份数据中心。
生产数据中心的数据同步地复制到同城灾难备份数据中心,同时,生产中心的数据异步地复制到异地灾难备份数据中心。
两地即本地与异地,三中心即本地数据中心、本地容灾数据中心与异地备份数据中心。
若只有主数据中心承担用户请求,而同城备、异地备数据中心不承担,则数据只需要同步或异步单向复制即可。
同城数据中心通过存储阵列进行同步镜像方式来同步复制数据,而异地数据中心则进行异步复制,只作为冷备,平常不处理用户请求。
若三中心均承担用户业务请求,则中心间数据同步复杂,需要双向同步,且需解决数据一致性问题。
冗余模式分为热备(主备)、冷备(主备)、双活、主从等。
热备(主备)模式下,只有主数据中心承担用户业务,在不停机情况下进行备份,主数据中心故障时,备中心可切换为主中心。
冷备(主备)模式则在停机情况下进行备份,主数据中心故障时,备中心切换为主中心。
双活模式下,主备数据中心同时承担用户业务,互为备份,实现实时备份,主数据中心负载可能稍多。
主从模式类似读写分离,主数据中心和备数据中心同时承担用户业务。
在数据中心层面实现冗余的同时,单个数据中心内部的业务系统和数据库也应采用冗余方式提高可用性,如同一系统服务部署多个节点,节点间可实现热备、冷备、双活、主从、负载均衡等冗余模式。
磁盘阵列RAID是提高数据存储性能与可靠性的重要技术,由多块硬盘组成,多块硬盘并行工作。
通过RAID配置形成不同性能与可靠性组合,包括RAID 0-6、RAID 10、RAID 01、RAID 50及非标准RAID级别如RAID 7、RAID 1E、RAID S等。
Oracle RAC是分布式数据库解决方案,允许多个Oracle数据库实例在多台服务器上共享存储空间,通过集群保证高可用性和容错性。
Oracle RAC由多个数据库实例组成,节点间通过网络通信实现数据共享,当有节点故障时,连接自动切换到其他节点。
如何衡量系统的高可用性?
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
对于系统高可用这个概念,基本功是程序异常处理,仅能在正常情况下运行的程序不叫高可用,在异常情况下仍然可用才行。
另外是机房容灾,即当个别机器损坏,或者个别机房网络割接时,仍可正常运作。
当遇到性能瓶颈时,系统容易扩展,可横向扩展解决,比如多部署几个程序即可解决,无需更改代码最后无需过多的人工干预,7*24都能工作,遇错自动调整,不必投入人力时刻关注程序的状态。