百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

多层架构设计与实践(多层结构模型设计)

ccwgpt 2025-05-08 17:10 5 浏览 0 评论

一、现有架构的问题

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

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

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

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

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

相关推荐

机器学习框架TensorFlow入门(tensorflow框架详解)

ensorFlow是一个广泛使用的开源机器学习框架,由GoogleBrain团队开发。它支持广泛的机器学习和深度学习任务,并且可以在CPU和GPU上运行。下面是一个使用TensorF...

合肥高新区企业本源发布量子机器学习框架VQNet 开辟量子机器学习的新领域

近日,高新区企业合肥本源量子计算科技有限责任公司通过研究混合实现变分量子算法和经典机器学习框架的可能性,全新开发了量子机器学习框架VQNet,可满足构建所有类型的量子机器学习算法,实现量子-经典混合任...

如何使用 TensorFlow 构建机器学习模型

在这篇文章中,我将逐步讲解如何使用TensorFlow创建一个简单的机器学习模型。TensorFlow是一个由谷歌开发的库,并在2015年开源,它能使构建和训练机器学习模型变得简单。我们接下...

机器学习框架底层揭秘:PyTorch、TensorFlow 如何高效“跑模型”

在使用PyTorch或TensorFlow时,你是否想过:这些深度学习框架底层到底是怎么运行的?为什么我们一行.backward()就能自动计算梯度?本篇将用最简单的语言,拆解几个关键概念...

2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?

这篇文章主要是从项目来讲的,所以,从以下几个方面展开。怎么介绍项目?怎么介绍项目难点与亮点?你负责的模块?怎么让面试官满意?怎么介绍项目?我在刚刚开始面试的时候,也遇到了这个问题,也是我第一个思考的问...

基于SpringBoot 的CMS系统,拿去开发企业官网真香(附源码)

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可...

【网络安全】关于Apache Shiro权限绕过高危漏洞的 预警通报

近日,国家信息安全漏洞共享平台(CNVD)公布了深信服终端检测平台(EDR)远程命令执行高危漏洞,攻击者利用该漏洞可远程执行系统命令,获得目标服务器的权限。一、漏洞情况ApacheShiro是一个强...

开发企业官网就用这个基于SpringBoot的CMS系统,真香

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服。开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。...

这款基于SpringBoot 的CMS系统,开发企业官网确实香(附源码)

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可...

【推荐】一款基于BPM和代码生成器的 AI 低代码开源平台

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍JeecgBoot是一款基于BPM和代码生成器的AI低代码平台,专为Java企业级Web应用而生。它采...

云安全日报200819:Apache发现重要漏洞 可窃取信息 控制系统 需要尽快升级

ApacheHTTPServer(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软...

基于jeecgboot框架的cloud商城源码分享,兼容单体和微服务模式

3年时间里,随着关注java单商户商城系统的朋友越来越多,对cloud版本的商城呼声也越来越高。因此今年立项了cloud版本的开发,目前已发gitee开源,目前也基本测试完毕,欢迎大家体验以及提出宝贵...

SpringBoot + Mybatis + Shiro + mysql + redis智能平台源码分享

后端技术栈基于SpringBoot+Mybatis+Shiro+mysql+redis构建的智慧云智能教育平台基于数据驱动视图的理念封装element-ui,即使没有vue的使...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)

前言zheng项目不仅仅是一个开发架构,而是努力打造一套从前端模板-基础框架-分布式架构-开源项目-持续集成-自动化部署-系统监测-无缝升级的全方位J2EE企业级开发解...

取消回复欢迎 发表评论: