工业自动化
系统架构设计通用方案(上)

发布于:2023-09-25 00:52:41  来源:工业自动化  点击量:14次

  客户层主要是我们应用的客户端,如手机APP、PC浏览器端访问方式,主要承接系统与用户之间的桥梁。

  应用层又分控制层、业务逻辑层、基础服务层;通过这样的分层设计,能轻松实现分散关注、松散耦合、逻辑复用、标准定义的良好软件架构,模块划分清晰,便于在开发时实现模块间相互协调,既利于开发者的分工合作,有利于今后的独立维护。

  采用Mysql或者Oracle关系型数据库存储结构化数据,使用JPA和Hibernate技术与数据库进行交互。

  REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,能够更好的降低开发的复杂性,提高系统的可伸缩性。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。REST 定义了一组体系架构原则,能够准确的通过这些原则设计以系统资源为中心的web服务,包括使用不相同语言编写的客户端如何通过 HTTP 处理和传输资源状态。REST 近年来慢慢的变成了最主要的 Web 服务设计模式。REST 对 Web 的影响非常大,由于其使用相当方便,已经普遍地取代了基于 SOAP 和 WSDL 的接口设计。

  Spring的轻量,控制反转等特征使研发人员能够编写更干净、更可管理、并且更易于测试的代码, Spring与其他框架具有非常好的整合性。

  Spring Cloud是一个微服务工具包,为开发者提供了在分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等开发工具包。

  Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。Spring 并没有重复制造轮子,它只是将目前各家公司开发的很成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装、屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

  Hibernate在本项目中将使用Hibernate作为ORM工具。Hibernate是目前开源领域最好的一个面向Java环境的对象/关系数据库映射工具。 Hibernate不仅仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。

  EhCache是一个纯Java的进程内缓存框架,具有快速和轻量级、可伸缩性 、可扩展性、基于标准、分布式缓存等特点,是Hibernate中默认的CacheProvider,快速和轻量级表现在它是最快的Java缓存之一。

  JPA(java 持久性API)作为EJB3.0的重要组成部分,实现了Java 持久化的统一标准。JPA采用纯POJO的方式实现,采用Java 5注释(Annotation),利用 Java语言特性中的注释和对象/关系映射,为数据持久化提供了更简单、易用的编程方式。几乎所有的主要的ORM供应商都提供对JPA的支持。JPA能够准确的通过需要在EJB容器之中或者于容器之外运行。 JPA具有标准化、对容器特性的支持(支持大数据集、事务、并发等容器级事务)、简单易用集成方便、可媲美JDBC的查询能力、支持面向对象的高级特性。

  JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。JUnit最初是由Erich Gamma(GoF之一)和Kent Beck(xp和refactor的先驱之一)编写的,需要说明的是JUnit一般是用来进行单元测试的,因此就需要了解被测试代码的内部结构(即所谓的白盒测试),另外junit是在xp编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大幅度的提高开发的效率。

  Vue(读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。 Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能为复杂的单页应用提供驱动。Vue目前是市面上最火的前端技术之一。

  Apache Cordova是一个开源的移动开发框架。允许你用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发。 应用在每个平台的具体执行被封装了起来,并依靠符合规定标准的API绑定去访问每个设备的功能,比如说:传感器、数据、网络状态等。

  Vant是由有赞开发维护的轻量、可靠的移动端H5组件库。50+ 个经过有赞线上业务检验的组件,单元测试覆盖率超过 90%,完善的文档和示例,支持 babel-plugin-import,支持 TypeScript,支持 SSR。

  通过应用当前最流行的前端技术组件和设计理念,结合技术团队历经多年业务领域的经验积累和技术储备,力求系统界面布局合理友好,功能模块划分清晰,归类属性合理,易于查找使用,操作便捷,打造最优的系统用户体验。

  建议采用Html5混合模式开发,混合模式需结合原生壳一起应用,建议使用Cordova框架制作原生壳,集成AngularJS前端框架,Vant组件库。

  数据容灾技术,又称为异地数据复制技术,按照其实现的技术方式来说,主要可大致分为同步传输方式和异步传输方式(各厂商在技术用语上可能不一样),另外,也有如“半同步”这样的方式。半同步传输方式基本与同步传输方式相同,只是在Read占I/O比重比较大时,相对同步传输方式,可以略微提高I/O的速度。而根据容灾的距离,数据容灾又可以分成远程数据容灾和近程数据容灾方式。下面,我们将主要按同步传输方式和异步异步传输方式对数据容灾展开讨论,其中也会涉及到远程容灾和近程容灾的概念,并作相应的分析。

  在数据容灾的基础上,在异地建立一套完整的与本地生产系统相当的备份应用系统(可以是互为备份)。建立这样一个系统是相对来说还是比较复杂的,不仅需要一份可用的数据复制,还要有包括网络、主机、应用、甚至IP等资源,以及各资源之间的良好协调。主要的技术包括负载均衡、集群技术。数据容灾是应用容灾的基础,应用容灾是数据容灾的目标。

  在选择容灾系统的构造时,还要建立多层次的广域网络故障切换机制。本地的高可用系统指在多个服务器运行一个或多种应用的情况下,应确保任意服务器出现任何故障时,其运行的应用不能中断,应用程序和系统应能迅速切换到其它服务器上运行,即本地系统集群和热备份。

  在远程的容灾系统中,要实现完整的应用容灾,既要包含本地系统的安全机制、远程的数据复制机制,还应具有广域网范围的远程故障切换能力和故障诊断能力。也就是说,一旦故障发生,系统要有强大的故障诊断和切换策略制订机制,确保快速的反应和迅速的业务接管。实际上,广域网范围的高可用能力与本地系统的高可用能力应形成一个整体,实现多级的故障切换和恢复机制,确保系统在各个范围的可靠和安全。

  集群系统是在冗余的通常可用性系统基础之上,运行高可靠性软件而构成。高可靠性软件用于自动检验测试系统的运作时的状态,在一台服务器发生故障的情况下,自动地把设定的服务转到另一台服务器上。当运行服务器提供的服务不可用时,备份服务器自动接替运行服务器的工作而不用重新再启动系统,而当运行服务器回到正常状态后,按照使用者的设定以自动或手动方式将服务切换到运行服务上运行。备份服务器除了在运行服务器发生故障时接替其服务,还可以执行其他应用程序。因此,一台性能配备充分的主机可同时作为某一服务的运行服务器和另一服务的备份服务器使用,即两台服务器互为备份。一台主机可以运行多个服务,也可作为多个服务的备份服务器。

  MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大限度上保证数据的一致性,以达到真正意义上的高可用。

  该软件由两部分所组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一个独立的机器上管理多个master-slave集群,也可以部署在一台节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master发生故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

  MHA主要支持一主多从的架构,要搭建MHA集群,要求一个复制集群中必须最少有两台数据库服务器。

  Atlas是由Qihoo 360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。Atlas是一个位于前端应用与后端MySQL数据库之间的中间件,它使得应用程序员无需再关心读写分离、分表等与MySQL相关的细节,能专注于编写业务逻辑,同时使得DBA的运维工作对前端应用透明,上下线DB前端应用无感知。

  本次数据库集群升级测试环境采用Atlas读写分离+MHA主从故障切换相结合的方式实现;

  对于敏感性的数据,如用户密码,客户信息,交易数据等信息,一定要通过二重MD5算法加密后存储。

  权限系统可控制菜单级别以及功能级别(接口),权限系统可控制界面菜单的动态显示。

  权限控制模块所牵扯用户登录对接第三方应用接口,涉及隐私信息加密采用第三方系统要求的规范进行加密。

  记录应用运行时的提示信息包括出错代码,供代码调试和运行监控使用。通过log4j框架实现,能够最终靠修改log4j配置文件来调整输出日志的粒度(DEBUG/INFO/WARN/ERROR)和输出格式。