系统架构设计师论文--可靠性设计
-- 摘要
本文以智慧药房项目为例,主要论述了可靠性技术在项目中的具体应用, 通过将平台服务层进行集群化部署,数据库分布式主从模式,以及服务器RAID磁盘阵列,对平台服务层、数据库以及硬件存储多维度的容错、容灾机制,提高了项目件硬件的可用性,安全性和可扩展性。通过可靠性技术的应用,提供了软件运行的质量,保障一软件能够7*24小时的稳定运行,最终项目成功上线,并获得了用户的一致好评
-- 背景(所有论文同一个项目)
软件可靠性设计主要通过冗余、心跳等技术对软件进行可靠性的设计,确保软件的稳定运行。冗余可以从硬件、软件两个方面着手,硬件可以使用多台服务器做容灾处理,大型项目会应用异地部署服务器的方式,防止因服务器故障、断网、断电或地震等不可抗拒的自然灾害造成服务不可用,给企业和用户造成损失,软件层面可以使用多应用部署群集,确保在一个应用出现异常时,可以继续工作。同时应用负载均衡,CDN等技术进行用户请求分流,保证用户访问性能的同时,对应用进行减压,数据库一般可以采用主从复制的方式部署。
--简介--中间过度作用
本文以智慧药房项目为例,将从集群化部署、数据库主从、软件冗余部署方面论述了可靠性架构设计在项目中的应用。
--介绍三种的应用
集群化部署:项目为了防止一台服务器出现故障,导致应用系统不可用,采用了多服务器冗余方式,以N+1的标准选了三台服务器做冗余,并且对服务器磁盘做了RAID5阵列,项目采用前后端分离的方式,前台采用Vue.js,后端平台服务采用的Java语言开发,前端Web应用系统分别在服务器上部署了三个节点,并且通过使用Nginx做反向代理,使得应用不直接对外暴露,提高了安全性,同时配置了集群模式,将用户请求进行分流,提交了系统的可靠性同时也提高了性能,平台服务层以Docker的方式进行发布,并且通过K8S进行管理,同时引入了SkyWalking对接口链路进行监控,并且通过Spring Admin 对服务节点进行监控,一旦链路应用节点发生故障,立马发送邮件给运维人员,让其及时干预,Java服务采用SpringCloud做微服务架构,通过 Nacos 进行服务注册与发现,通过网关将服务暴露给前端Web层调用。
数据库主从:项目中数据层采用了关系型数据库MySQL,以及NoSQL 非关系型 MongoDB同进为了减轻数据库的压力,引入了Redis缓存。MySQL主要存放一些业务数据,如医生开出的处方数据,以及药品目录,ymtlwyth以及采购订单,配送入库单等,这些数据的特点是使用频率不同,但极其重要,采用了主从复制的方式对MySQL进行了冗余,在Redis中使用了哨兵主从进行三个节点部署,当Master发生故障时,哨兵从新选出一个主节点,Redis主要存放药品库存信息,在医生开处方时会检查药房药品库存信息,药房将药品发现时会扣除相应的库存,对同一个药品的数量变化频率相当高,而且要及时,否则医生将药开出来后,患者到药房取药时,取不到药,增加医患矛盾,,影响医生开处方的效率及数据一致性及库存及时性。因此引入了Redis缓存,在审方模块中18万种药品的相互作用关系数据量以迪卡尔积的量级存在,因些采用了适合处理大数据的MongoDB,MongoDB在配置文件中同样做了主从方式。
程序容错设计:程序设计及开发中需要考虑容错机制,否则出现错误后可能导致不可用的情况发生,首选在获取对象属性时,要做异常判断,我们采用了阿里的Java契约插件,可以描述出一些可能出现异常的代码,实现方式,加入了 try catch 异常处理机制,对于数据访问层,通过Spring Data中的Redis Template 以及 MongoDB 的 Template 进行主从连接配置,对于MySQL采用 MyCat 进行读写分离,在主节点发生故障时,能自动识别新的主节点。微服务开发新业务升级时,不影响现有项目的运行。
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/15714889.html