分布式部署下的报表调用 API调用 权限问题以及性能方案
背景描述:
客户的实际情况是需要在具体系统构架前,通过与厂商讨论确定最终的系统架构方案。
需求是客户自己有管理系统,希望建立一个独立的报表服务器,该报表服务器可以对多个管理系统提供报表服务,不知道润乾产品可以提供多少种报表的调用方式可以选择。
其次,希望可以通过API调用报表的某些功能,但是不知道服务器间访问如何调用API接口。
第三,报表访问时,需要防止直接拷贝url访问。而且其他系统调用报表时,也可以配置报表的授权情况。
相应解答:
由于客户需要的并非一个明确的技术答复,而是希望厂商给予架构部署时的参考意见,所以首先需要告诉客户的是润乾报表的基本技术规格,即润乾报表是以J2EE架构下的Servlet形式封装的一种服务类产品,因此所有适合于Servlet部署的方案都可以采用在润乾报表身上。此外,润乾报表的前端输出的可选方式是Taglib、以及调用API输出流两种主要方式,其中Taglib又包括文件方式和Bean方式。此三种方式都可以对应不同的报表调用技术和权限控制技术。
当客户明白润乾报表从底层到底是怎样的一种构成时,就可以引导客户进一步探讨各种技术方案的利弊和可行性,首先从跨服务器调用报表这种需求看,服务器端的选择基本上可以确定为一个Application Server部署润乾报表即可,所以重点是在于作为Client端的其他应用以何种方式来调用,这与其他应用的架构有关,经过了解,可能存在的应用有Java的,.net的以及C/S架构的。应此从调用方式上推荐采用HTML字符流式引用,这样可以以一种标准在多种应用下被调用。
采用流程调用的另外一个特点是适合于客户权限以及API调用的需求。首先在报表服务器上建立登录服务、调用服务、通用JSP接口、报表发布及下载接口以及标准JAVA
RMI的stub以及skeleton。同时设计各种技术体系下访问上述服务的客户端代理(RMI只能在JAVA应用下使用)。其向对应的关系如下:
1、报表服务登录客户端代理—-》报表登录服务
每个需要调用报表的客户应用,在Login过程加入报表服务登录客户端代理调用。
2、报表调用客户端代理—-》报表调用服务
每个需要调用报表的客户应用,在自己系统内部完成权限验证后,调用客户端代理,读入HTML字符流。或者通过客户端代理传入标准身份信息,由报表调用服务完成身份验证。
3、JS直接引用—-》通用JSP
此方式的好处是修改JSP不需要重新打包发布WAR,便于维护。但输出接口方式不够灵活,只能以WEB层进行引用。
4、报表调用客户端代理—-》通用JSP
此方式与上面的好处相同,而且可以封装报表服务器的URL。缺点也与上一方式相同。
5、润乾的RMI客户端stub—-》报表服务器的RMI
skeleton
完成跨服务器的API调用,最灵活的方式。
结合灵活性、安全性、便利性(如尽量减少报表服务器的重部署频率,修改尽量集中在一两个可覆盖文件上)等综合因素,优先考虑的是通用JSP方式以及配套的服务–客户端代理方式。
此外,该架构还要考虑各系统使用者的责权分担问题,大家都希望在一定程度上各自负担自己系统部分的建设,但有不能部署那么多报表服务器,而且还需要有集中管控。所以可以考虑的两种方式,一、在同一服务器上并行部署多个报表应用,各应用将来的维护以及报表的增改都由各系统负责人管理,但这样一些共性修改会涉及到大量的重复工作,而且集中管控难度还是比较大的。二、同一到一个应用中,对外发布不用访问路径以及报表读写通用接口,各系统维护自己的对外接口和报表存放目录,其他的统一管理,这种方式比较理想,但需要各部分先协调完成共性部分,例如对可控项的整理(打印属性、样式集、权限控制点等等)。
最后,性能方案推荐采用专业版的管理控制台进行管理、采用动态并发控制以及集群技术,并在前期设计时考虑将来集群扩充的便利性。
分布式部署下的报表调用 API调用 权限问题以及性能方案的更多相关文章
- HBase伪分布式环境下,HBase的API操作,遇到的问题
在hadoop2.5.2伪分布式上,安装了hbase1.0.1.1的伪分布式 利用HBase的API创建个testapi的表时,提示 Exception in thread "main&q ...
- Apsara Clouder专项技能认证:实现调用API接口
一.API 简介 1.API 的概念 API(Application Programming Interface应用程序编程接口)是一些预定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访 ...
- 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习
反射实现Model修改前后的内容对比 在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...
- Delphi - Windows系统下,Delphi调用API函数和7z.dll动态库,自动把文件压缩成.tar.gz格式的文件
项目背景 应欧美客户需求,需要将文件压缩成.tar.gz格式的文件,并上传给客户端SFTP服务器. 你懂的,7-Zip软件的显著特点是文件越大压缩比越高,在Linux系统上相当于我们Windows系统 ...
- Android微信SDK API 调用教程1
最近一直在调用微信的API,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官方里的文档也只是写得很模糊,说是按三步走. 1.申请App_ID 2.填写包名3. 获取程序签名的md5值, 这三 ...
- Android微信SDK API 调用教程
最近一直在调用微信的API,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官方里的文档也只是写得很模糊,说是按三步走. 1.申请App_ID 2.填写包名3. 获取程序签名的md5值, 这 ...
- Android微信SDK API 调用教程【转】
原文:http://blog.csdn.net/worker90/article/details/8211451 最近一直在调用微信的API,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官 ...
- sphinx调用API参考(官方手册)
API的参考实现是用PHP写成的,因为(我们相信)较之其他语言,Sphinx在PHP中应用最广泛.因此这份参考文档基于PHP API的参考,而且这节中的所有的代码样例都用PHP给出. 当然,其他所有A ...
- Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...
随机推荐
- iOS 枚举讲解
枚举增强程序的可读性,用法上还是需要注意的 1.C语言的写法 enum XMPPReconnectFlags { kShouldReconnect = 1 << 0, // If set, ...
- 多线程编程,CPU是如何解决多线程内存访问问题的
CPU对内存变量的修改是先读取内存数据到CPU Cache中,然后再由CPU做运算,运算完成后继续写入到内存中 在单核CPU中,这完全没有问题,然而在多核CPU中,每一个CPU核心都拥有自己独立的Ca ...
- IIS web证书申请与安装
数字证书一般是由权威机构颁发的,操作系统会携带权威机构的根证书和中级证书.如果操作系统没有携带权威机构签发的根证书,浏览器会报警,如www.12306.cn,需要安装铁道部根证书后,才能正常访问. 证 ...
- django第二课 网页继承
第一步 创建项目(有问题可以看我的第一个博客) C:\Python36\Scripts\django-admin.py startproject *** (我的写法,仅供参考) 第二步 创建文件夹,同 ...
- Failed to instantiate [java.util.List]: Specified class is an interface
错误信息提示: Failed to instantiate [java.util.List]: Specified class is an interface; 错误信息意思:参数错误,参数封装出了问 ...
- spring boot日志管理配置
spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J,Log4J2和Logback.每种L ...
- spring boot的静态资源加载
1.spring boot默认资源处理 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. spring boot默认加载文 ...
- xampp启动失败 Apache shutdown unexpectedly
我知道是端口被我的虚拟机占用,但是我的虚拟机也要同时打开,所以 我需要修改xampp的端口 1, 2修改二个配置文件 修改httpd.conf 修改httpd-ssl.conf 4,重启xampp
- 快速获取 json对象的长度
JSON对象的长度,也就是k-v的个数(这里不包含隐式属性 ). 通过 Object.keys(obj) 获取到 keys组成的数组, 再获取length. var obj = { a:1, b ...
- 用imageMagick合成图片添加图片水印
用imageMagick合成图片的方式大致有三种, 使用convert命令加 +append或-append参数 使用convert命令加 -composite参数 直接使用composite命令来完 ...