系统架构设计师-软件水平考试(高级)-论文-可靠性设计 (2)

首先说冗余设计,冗余包含逻辑冗余,数据冗余,应用冗余等。这里以应用冗余为例。为了提高系统的性能,可靠性,可拓展性等,我们采用了负载均衡技术。常见的负载均衡技术有F5硬件,LVS软件,Nginx服务器配置等。出于便捷与成本的考虑,我们采用了Nginx服务器配置负载均衡技术。通过对Nginx服务器中upstream模块的配置,就可以实现在多台服务器的反向代理家在负载均衡。采用负载均衡后,应用服务器集群存在Session问题无法统一的问题。解决方法有Session Sticky,Session Replication,Session数据集中存储,Cookie Based四个方案。Session Sticky是通过确保同一个会话的请求都在同一个Web服务器上处理实现。Session Replication是增加Web服务器间会话数据的同步来保证不同Web服务器间的Session数据的一致。Cookie Based就是通过Cookie传递Session数据完成。经过考虑,我们采用了Session数据集中存储。Session数据集中存储通过令每台服务器从专门的session服务器获取session数据来解决问题。优点是可靠性,可移植性与可拓展性的大幅提高。缺点是一方面读写Session数据引入了网络操作,对数据读取存在时延和不稳定性,但对于使用内网通信的系统并没有太大影响。另一方面,如果Session服务器或集群出现问题,将会影响整个应用。我们通过双机容错机制解决该问题。除此之外,还有心跳线,看门狗等技术。限于篇幅,不再赘述。

2.降低复杂度设计:

再者就是降低复杂度设计,由于系统的复杂性和综合性,我们决定采用层次架构风格,将系统架构分为接入层,应用层,服务层,数据层四个层次。这里以应用层与服务层为例。应用层分为视图层与业务逻辑层,视图层负责App与网站的表现效果,业务逻辑层负责业务层的逻辑处理。为了解决系统日益复杂,应用日益臃肿问题,我们将系统按照应用横向划分,将系统划分为课件管理系统,课程管理系统等十余个子系统。如课件管理系统负责学员上课所用课件,有课件编辑,课件预览,课件交互等多个功能模块。功能模块需调用服务层的服务支撑,如课件交互模块需要调用stomp通信服务,实现学生与老师间课件的交互功能。另外,课件交互模块通过对账户服务的调用,确立课件双方的身份,从而明确双方在课件交互过程中对课件交互部分的交互权限。该划分使得系统体系变得清晰明了,极大降低系统复杂度,提高系统可靠性。应用层采用基于J2ee的MVC框架-Structs框架,主要通过Servlet和JSP技术实现。另外还有动静分离,动态资源静态化等,这里不再赘述。

服务层提供通用服务。系统在应用层中按照应用横向划分,有效降低系统复杂度。但系统代码仍然存在冗余,比如用户信息的调用在诸多应用子系统中都有相关模块。另外应用的大小依旧十分巨大,复杂,而过小的应用划分会增加数据库连接数负担,故我们提出服务化解决方案。服务化方案就是提取出各个应用的通用服务,如账户服务,Session服务等。出于技术成熟度与技术支持等考虑,我们最终采用了阿里的dubbo服务框架,建立服务层。开发过程中,产生了服务框架部署问题与实现服务框架的jar包和应用自身依赖的jar包冲突的问题。前者,我们通过Tomcat作为Web容器,而服务框架作为容器的一部分来解决。后者,我们通过Java的ClassLoader将服务框架自身用的类与应用的类进行隔离。除此之外,我们通过服务线程池隔离,分布请求合并,服务调用端的流程控制来降低系统复杂度,提高系统可靠性。详情限于篇幅,不再赘述。

最终项目成功上线,正常运行了近一年半,收到各方好评。尤其是H5课件的良好互动性,使得大量业界同行争相模仿,改用H5制作课件。还有我们的服务化方案架构被作为许多传统互联网企业系统重构的经典方案。在系统的架构设计中,我们引入了层次架构的设计思想,有效地降低了维护成本,提高了系统的开放性,可扩展性,可重用性以及可移植性。当然还是存在一些问题的。如H5课件采用http协议,易被非法劫持,嵌入广告,可以将协议修改为https来解决。还有我们采用的负载均衡算法是加权轮转算法,过于简单,常常出现资源分配不合理的现象,可以将算法改为加权最小连接数算法来解决。这些都是我在今后的系统设计和开发中需要注意与改进的地方,也是日后我应该努力的方向。

三,总结

这篇论文的项目,依旧是之前那片论文的项目-在线教育系统。但是其中很多技术,其实在原有项目中是没有涉及的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyygzx.html