zoukankan      html  css  js  c++  java
  • 信息领域热词分析-质量属性重构

    关于易用性的分析已经在之前的一篇博客中提及到了:https://www.cnblogs.com/halone/p/12392526.html

    这里就不再对六大质量属性之一的易用性进行分析了。

    之前完成的信息领域热词分析的一个系统,里面对于当前信息领域的热词进行了简单的分析并给出对应的词云图和来源。但是在编写的时候还没有上过软件体系架构这门课,所以今天就自己之前编写的这个系统,对其中的一些想法进行阐述。

    对于之前的信息领域热词分析。

    先从可修改性分析:

    在领域热词实现上,可修改性主要是体现了在代码后期维护过程中的便利程度,在信息领域热词的这个系统上实现可修改性的过程,我的想法是对其进行模块特定化的通用性划分,在编写具体类别的时候,实现接口单一责职的原则,同时让功能单一化耦合性尽量减低。这样能保证一个类是一个通用的类别,而不是依赖在此系统上的特定类别。在粒度较小的情况下,主要是对于一个类别的类编写的时候尽量让编写的方法更加通用,让这个类即使脱离了这个环境,在基本上任意的环境中都能做到使用,在这种情况下是对小粒度方面的可重用性的实现。对于可修改性,是在实现上述的基本上,对环境这些特定的类中的特定函数进行修改。例如实现一个热词分析类,这个类不仅仅能够适用在当前的信息领域的热词。里面能够分析出现频率最高的词语,分析两个词语之间的相似度,一篇文章中,出现词语频率的列表等工呢,诸如此类的。这样编写的过程既能实现小粒度的可重用性,又能在此基础上修改特定的功能。主要是从类的责职要单一方面和通用的函数方面入手。

    性能分析方面:

    热词分析系统在之前的搜索热词和获取对应热词的信息的过程相对而言比较缓慢,搜索一个信息领域的热词形如手机,需要2-3秒。为了解决这个问题,首先从数据的获取方面,原本的数据储存在对应的数据库中,数据库中单独存取的信息是未加索引的。在获取对应的信息的过程中,由于没有加上索引,多次读取数据库获取信息的过程相对而言较慢,造成了获取信息的时间较长,因此若想加快获取信息的时间可以从建立索引方面入手。另一方面就是数据处理的过程,这个过程可以通过后台服务器的分析来加速数据的处理过程,在这里可以使用spark交互式的数据处理来加速处理数据的时间,数据获取完之后,由于数据量相对而言较为庞大,在实际过程中处理的时间占了较大的比重,在搭建起一个分布式的spark对数据进行交互运算之后,其页面的响应时间大大降低。

    从并行方面上讲,上面那些是对于数据分析的过程的加速。而实际使用系统的过程中会遇到的不仅仅是单个用户访问网页的情况,往往可能会同时有多个用户访问数据。在这种情况下,可以对网页访问进行一个分压,有一个服务器专门用来分配连接,并搭建起一个多服务器的分布式并行访问,当某一连接的连接数量超过当前系统同时访问的处理极限之后(需要实现进行压力测试分析),有专门分配连接的服务器将网址重定向到对应的压力较小的服务器上,这样就能将压力平摊到每一个热词分析服务器上。

    安全性方面:

    热词分析系统在起初设计的时候安全性上没有做过多的考虑,当用户搜索对应热词后,对应的信息会传递到数据处理层上进行分析,但是分析之前并没有对数据进行过滤,这里的话可以用sql语法的通配符实现全部对比造成服务器的瘫痪。这是在安全性分析的过程中发现的一个问题,所以在搜索之前加上了一个字符过滤的功能,对对应搜索信息的一些非法字符进行了简单的替换处理,从整体上看,用到的是javaweb,有一些jsp网页上写了java的语句,这里的前后端混用的问题让信息领域热词的结构相对混乱,在这里让前后端分离也增强了其可修改性和安全性,由于jsp上可能会存在一些漏洞让jsp界面的源码可能会直接暴露在用户的界面上,因此最好是让前后端的页面进行分离,这样能够大大提高对应的页面的安全性。而具体的算法上,因为没有涉及到用户的登录注册等信息,在这里并没有对其分析。

    可测试性:

    由可修改性上的方案可以看出,系统中编写的各个类之间的方法都是独立的,而且对应的责职单一性自始而终。因此,在可测试性上,该系统上的每个类都能独立进行单元测试,在一些构建系统的类中,则是将这些类之间的相互配合都封装好成特定的函数。这样在进行集成测试的时候,就能看出各个模块之间的调用是否符合系统的运行需要了。所以这个系统因为经过可修改性的设计方案了之后,在可测试性上也有了优秀的表现。而且最终的测试表示也相对于特定系统的特定类而言清晰很多。

    可用性:

    系统热词分析在稳定性运行方面并没有出现太大的问题,当然这仅仅只是在编写的主机上运行的结果,而实际项目的测试不可能在如此轻量级的环境中来使用。但就仅仅单机运行的稳定性上来说没有出现太大的问题。主要在对故障的处理,之前单纯为了编写而编写,并没有考虑故障的处理,故障的处理恢复上,首先是对于数据库信息的保存。众所周知,一个系统的数据是及其重要的,这都是系统的命脉所在。一旦发生了错误丢失数据,损失往往是惨不忍睹的。为了防止这种情况的发生,对于用户的操作要进行日志的记录,同时对数据要求每隔一段时间进行自动备份,这个时间选择在用户相对访问网页比较少的时间,而当数据出现错误的时候,这样就能从之前的备份文件中恢复信息了。

  • 相关阅读:
    创建基于 SQL Server 表的外部内容类型
    symfony入门之 app/console 命令
    git上传代码到github
    ubuntu下配置apache虚拟主机
    ubuntu14.04下解决编辑器无法输入中文
    PHP把域名解析为站点IP
    mysql平常总结
    php防sql注入函数
    常用的正则检测总结
    redis缓存注意事项
  • 原文地址:https://www.cnblogs.com/yishaui/p/13111147.html
Copyright © 2011-2022 走看看