系统架构设计师论文--可靠性设计

-- 摘要

      2019年8月,我司承接了某市医疗集团,智慧药房项目,该项目主要为集团下属36家社区卫生服务中心提供药品统一目录管理、药品集中采购、库存管理、处方合理用药审核、药品配发、自动化发药设备驱动提供软件支撑。在该项目中我担任了软件架构设计师一职,主要负责该项目的软件架构设计工作。
 

      本文以智慧药房项目为例,主要论述了可靠性技术在项目中的具体应用, 通过将平台服务层进行集群化部署,数据库分布式主从模式,以及服务器RAID磁盘阵列,对平台服务层、数据库以及硬件存储多维度的容错、容灾机制,提高了项目件硬件的可用性,安全性和可扩展性。通过可靠性技术的应用,提供了软件运行的质量,保障一软件能够7*24小时的稳定运行,最终项目成功上线,并获得了用户的一致好评


-- 背景(所有论文同一个项目)

      根据深化医药卫生体制改革规范药求,推进药品集中采购,增加药品的供应保障能力,严格监督管理,保障药品的用药安全,所有医疗机构开出的处方,必须通过处方审核后,方可进入划价计费环节,未经审核的处方,不得进行计费和配发。2019年8月,我司承接了某医疗集团智慧药房项目,该项目为医疗集团下属36家社区卫生服务中心提供软件支持,主要分为药品供应模块、药房管理模块、处方用药审核模块、药品配发模块、设备协同模块。药品供应模块负责药品库存预警,供社区卫生服务中心药房对药品进行集中采购,并将药品发送到省采招平台;药房管理模块主要进行一些基础信息的维护,及关注药品的库存管理,药品批号跟踪;处方用药审核模块,负责对医生开出的药品进行合理用药审核,将不合理的处方审核结果返回给医生,提醒医生修改处方;药口中配发模块,负责将处方中的药品进行调配,打印用法用量标签,确认发药后扣减相应的库存;设备协同模块主要是驱动药房中的一些自动化发药设备,将要药品信息发给设备上位机,根据设备药品的效期进行排序,通过上位机程序调用下位机,驱动设备出药。在该项目中我担任软件架构设计师职务,主要负责软件的架构设计及中间件等技术的选型工作。
 
 ----中间正文主体 800~1000字左右

      软件可靠性设计主要通过冗余、心跳等技术对软件进行可靠性的设计,确保软件的稳定运行。冗余可以从硬件、软件两个方面着手,硬件可以使用多台服务器做容灾处理,大型项目会应用异地部署服务器的方式,防止因服务器故障、断网、断电或地震等不可抗拒的自然灾害造成服务不可用,给企业和用户造成损失,软件层面可以使用多应用部署群集,确保在一个应用出现异常时,可以继续工作。同时应用负载均衡,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 进行读写分离,在主节点发生故障时,能自动识别新的主节点。微服务开发新业务升级时,不影响现有项目的运行。

 -- 结尾
  项目从2019年8月启动到2020年10月历时14个月,圆满完成,顺利完成验收,并取得了客户的一致好评,该项目运行一年多,也出现过一些小的问题,由于医院使用的是集团内部局域网,与外网隔离,给排查问题及维护增加了困难,一次发药设备上的上位机不心小被药房老师删除后,不会重新安装操作,上报我司后,我们联系医院信息科老师,在信息科的老师协助下,对软件重新进行了安装,此次事件,导致了设备停止工作了几个小时,影响了药房发药效率。后来我司安排了1名售后维护该项目,这一年内也新增了一些发药设备,由于选用了合适的微服务架构,使得设备的接入及服务的扩展变得非常容易,在售后同事的协助下,系统至今运行稳定。该项目的成功,让我意识到了使用了可靠性架构设计的作用和价值,坚定了我对可靠性架构设计应用的信心,合理选择合适的可靠性架构设计,能够大大的提高了软件设计的复用方法,加快开发的进程,在项目中起到事半功倍的作用。经过这次项目,我也看到了自己身上的不足之处,在未来还会不断地更新知识,完善本系统的设计,使系统能够适应国家医改的变化需要,这是作为软件从业的我为之努力的动力和方向。
 
posted @ 2021-12-21 13:39  VipSoft  阅读(2395)  评论(2编辑  收藏  举报