多层架构设计与实践

IT知识
408
0
0
2022-08-28
标签   架构设计

一、现有架构的问题

大型应用系统项目在安全性保障、灵活可扩展性、服务组件可管理可重用等方面提出了较高要求,而现有应用系统架构还不能满足这些需求,有待提升完善。先分析一下系统架构现状,物理架构和逻辑架构如下图所示:

多层架构设计与实践

多层架构设计与实践

由上图我们可看出这种架构主要有以下问题:

1、Web服务器安全性问题

现有应用系统的后台服务程序安装部署在一台Web应用服务器上,也就是MVC的Action/Serivce/DAO三层都在一个War包中。Web应用服务器部署在DMZ区,通过JDBC接口访问内网中的数据库服务器。一旦这台服务器被黑客攻击及获取了系统权限,则很容易通过SQL/JBDC接口侵入内网数据库,窃取、篡改甚至销毁关键数据资料。因而,从安全性考虑,需要将接入/交互层与应用服务(含DAO)层进行物理架构分离、分区部署,以保障数据库系统安全。

2、紧耦合性问题

现在的架构方式虽然在开发上已经有分层,现在也按MVC的方式进行构架,但在应用服务组件化、Web services松耦合性方面欠缺架构设计,为团队分工开发、局部功能模块优化升级、分布式部署带来了一些制约问题。

3、应用服务扩展性问题

在现有架构基础上进行应用服务扩展,从界面到DAO层都要有改动,各层都有牵制影响。因而,需要基于SOA松耦合架构设计思想,将应用服务(含DAO层)分离出来实现服务组件化,基于服务注册/发现机制以及服务总线ESB协调,实现动态服务扩展、灵活组合调用。

二、架构改进设计方案

1、合理分层设计

现有的架构设计已经有了清晰的分层设计,只是在部署及代码组织结构上耦合的比较紧,我们就在这二个方面进行封装后解耦合。在物理部署上,将接入/交互层与应用服务(含DAO)层进行拆分,如下图所示:

多层架构设计与实践

为了增强系统安全性和接入服务性能,引入接入/交互服务器,在这个服务器上专门用来部署与UI相关的应用(War包),包括HTML/CSS/JS和具有安全策略功能(防SQL注入、防篡改)的Action(JavaBean)。

通过对代码结构进行调整后,接入/交互服务器有多种调优方式,比如可加入页面静态化处理提升性能,增加缓存机制,提高用户体验。在配置上也比之前安全和轻很多,有关数据库访问方面的配置都放到内网的应用服务器上。

现有系统按下图方式重新组织构建,即可实现接入/交互层、应用服务层的物理分离及分服务器部署;服务请求方统一以HTTP/JSON接口调用RESTful Web Services服务。

多层架构设计与实践

建议使用Maven多模块主从架构方式构建WAR(Action) JAR(Server) JAR(DAO)

远程调用实例参考如下:其中Action和 Service分别布署在不同的服务器上。

多层架构设计与实践

注:这种方式适用于现有基于Spring框架构建的应用系统;若是异构系统,建议使用SOAP协议实现WebServices方式发布服务。

2、安全机制设计

我们可以借鉴WSDL和SOAP的Web Service安全规范来指导RESTful Web服务实现认证、授权、身份管理等安全需求。

为保证RESTfulWeb服务的安全性,设计考虑:

对客户端做身份认证;

l对敏感的数据做加密,并且防止篡改;

l身份认证之后的授权。

对客户端做身份认证,有几种常见的做法:

1)在请求中加签名参数:

l为每个接入方分配一个密钥,并且规定一种签名的计算方法。要求接入方的请求中必须加上签名参数;

l在实际项目中一般是设计动态加密种子数生成动态密钥,使每一次URL访问都有安全签名,很好的防止一个URL信息在不同的浏览器中可用。

2)对敏感的数据做加密,并且防止篡改,做法如下:

l部署SSL基础设施(即HTTPS),敏感数据的传输全部基于SSL。仅对部分敏感数据做加密(例如用户编号+密码),并加入某种随机数作为加密钥,以防范数据被篡改;

l身份认证之后的授权,主要是由应用来控制。通常应该实现某种基于角色+用户组的授权机制,可采用Shiro框架实现授权,也可以自定义来实现相关功能。

三、基于SOA架构的服务发布注册/查找机制

基于SOA架构设计理念,实现应用服务组件化并达到服务组件最大化重用目的,这就需要设计一套服务管理平台功能,包括服务发布/注册、服务查找、服务监控等功能。

下图描述了服务发布及注册、服务查找及服务调用的过程:

多层架构设计与实践

在此架构中有三类角色:服务提供者、服务注册中心、服务消费者。

1、服务提供者

服务提供者作为服务提供方,将自身的服务信息注册到服务注册中心,服务信息包含:

l隶属于哪个系统

l服务的IP,端口

l服务的请求URL

l服务的权重等

2、服务注册中心

服务注册中心主要提供所有服务注册信息的中心存储,同时负责将服务注册信息的更新通知实时Push给服务消费者(主要是通过zookeeper的Watcher机制来实现的)。

3、服务消费者

服务消费者主要职责如下:

1、服务消费者在启动时从服务注册中心获取需要的服务注册信息;

2、将服务注册信息缓存在本地;

3、监听服务注册信息的变更,如接收到服务注册中心的服务变更通知,则在本地缓

存中更新服务的注册信息;

4、根据本地缓存中的服务注册信息构建服务调用请求,并根据负载均衡策略(随机负载均衡,策略负载均衡等)来转发请求;

5、对服务提供方的存活进行检测,如果出现服务不可用的服务提供方,将从本地缓存中剔除。

服务消费者只在自己初始化以及服务变更时会依赖服务注册中心,在此阶段的单点故障通过zookeeper集群来进行保障。在整个服务调用过程中,服务消费者不依赖于任何第三方服务。

四、总结

本文从提高系统安全性以及实现应用服务组件化的角度出发,提出了应用系统多层架构设计方案及实践方法,并对Web服务安全、服务发布注册/查找机制提出了实现方法建议,供产品设计开发和项目实施人员参考。

文章为原创,欢迎点赞或收藏。如需转载请注明或联系我。如有大数据爱好者,欢迎共同探讨。

关于IDEADATAIDEADATA专注于从数据到信息的有效管理与应用,是领先的商业信息服务技术提供商,是数据仓库及大数据技术和应用的先行实践者。微信关注:IDEADATA大数据视界新浪微博:iDEADATA大数据视界公司官网:www.ideadata.com.cn

作者:头条号 / IDEADATA大数据

链接:

http://www.ideadata.com.cn/wisdomAction/readWisdom.do?id=77

来源:头条号(今日头条旗下创作平台)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。