COBOL和Java在SaaS应用程序中交互时遭遇多线程挑战

回到云岛:所有 SaaS 用户都很高兴。因为他们能获得快速响应。因为这些用户惟一拥有的控制权就是对访问应用程序的控制,他们不担心应用程序是否有多线程例程;也不担心在云中有多少核心用于并行加速多线程的处理。问题应用程序被成功地从内部多线程 COBOL 遗留系统中迁移出来。

当然,有一天,SaaS 应用程序的速度会慢下来,而且越来越慢;直到用户无法忍受。他们这时才发现:

只有一个核心在正常运行,其余核心都发生了故障。 SaaS 订阅仅限于两个核心,而不是所有四个核心。 SaaS 应用程序近来升级出现了多线程缺陷。 故障转移计划失败。

同时,在岛上的功能部门,开发团队的人们聚在一起思考各种解决方案,想让系统再次恢复运转。

本文帮助您探索多线程的性能问题,文中介绍了我第一次遇到多线程时的遭遇(简言之,我会尽力将损失降至最低)。然后,本文查看了多线程控制模型云用户是否在 Java 和 COBOL 中进行访问,并创建一个简洁的内置多线程支持。本文旨在向您展示供应商能够采取哪些积极措施来停止伤害、解决问题、恢复系统和通知客户。

多线程性能

CPU 中的核心越多,在执行程序代码指令时,多线程的表现就会越好,但是使用的核心数量不是决定多线程软件执行情况的惟一因素。另一个因素是:对于某个任务或者进程,使用一个算法来完成完整的线程并行并不总是可行的。某些线程的计算已经在之前的步骤中并行化了,可能得到一个连续的结果。

考虑到应用程序分散在模块中,每个都被设计用于完成一个任务或者进程。在一个模块中,可以有 6 个几乎并行的单一线程。我们假设:

a 是线程 1,b 是线程 2,c 是线程 3,d 是线程 4,e 是线程 5,f 是线程 6

结果 r0、r1 和 r2 分别作为两个独立线程的组合并行线程进行计算,如下所示:

r0 = a + br1 = c + dr2 = e + f

然而,添加所有三个并行线程结果(r0,r1 和 r2)会得到连续结果 g — 这并不是一个新并行线程,如下所示:

g = r0 + r1 + r2

所有连续的部分都必须等待上一步中并行化的线程发出准备好的信号。程序中的连续部分越多,从多核中获得的好处就越少。

其他影响多线程算法的因素包括:

COBOL 的 THREAD 编译器选项限制。 Java 的多线程程序的限制。 将紧耦合 COBOL 程序中的缺陷分解到松耦合 SaaS 应用程序中。 云用户控制。 多线程阈值缺失。

我第一次遭遇线程

十几年前,在我第一次使用主机 COBOL 时,我考虑用非 COBOL 语言与其交互。我与一位教授进行了有关的讨论,计划将此作为有关 COBOL 界面性能的论文主题。我分享了关于在程序代码中并行化线程来获得子程序的想法。

为了弄清楚什么会影响性能,我根据 “Fortran 界面适用于 CODASYL 数据库任务组规范”对迷你 COBOL/Fortran 界面进行了实验。Fortran 是当时的流行语言。那个时候,COBOL 还不像我们现在这样拥有 THREAD 选项。与如今我们见到的大型处理器相比,当时最大容量的处理器也非常小。

在我的实验中,我发现部分 COBOL 数据类型没有 Fortran 等同物。当应用程序不再需要的数据或者对象存在于磁盘上时,我根据需要调用子程序绕开了内存限制,然后在不需要数据或者对象时释放它们并自动删除不再需要的数据。

每个子程序执行一个或者多个任务。在某些任务中,几个线程作为一个并行线程进行计算(r0 = 线程 a + 线程 b)。所有连续部分都在等待上一步中的并行化线程发出准备好的信号。等待很短暂。

如果当时我们有云,就可以使用运行在多核虚拟机上的平台即服务 (PaaS) 上的多线程例程来开发一个 SaaS 应用程序。

多线程控制的模型云用户

多线程阈值的用途就是设置某个任务可以并行执行的线程数限制。在达到阈值时,完成自己工作的线程可以从其他线程队列中获取工作。

模型用户对多线程阈值的控制取决于:当他们进行以下操作时,可以从云供应商获得多少控制:

按需访问 SaaS。 使用 PaaS 构建应用程序。 使用基础架构即服务 (IaaS) 虚拟机

我们会详细说明以上每一项。

按需访问 SaaS

用户拥有最少的控制,而供应商拥有最大控制。

最终用户控制:最终用户拥有的惟一控制就是从移动设备或虚拟台式计算机访问 SaaS 应用程序,无论它是私人的、企业的(中小型)还是政府机构的。SaaS 应用程序示例包括船只到达和离开的时间表、客户关系管理、人力资源以及电子数据表。 SaaS 供应商控制:至少,供应商可以通过限制授权用户的数量来管理访问控制,正如用户阈值策略中所述,授权用户能够同时访问多线程应用程序。供应商控制运行 SaaS 应用程序所需的核心、操作系统、服务器和网络基础架构。 多线程阈值控制:SaaS 最终用户没有多线程阈值的控制。供应商可能会将多线程的阈值限制为最大核心数,应用程序可用于并行处理线程。供应商设置的最大值取决于 SaaS 最终用户选择的订阅率。

使用 PaaS 构建应用程序

PaaS 开发人员拥有更多的控制,而供应商只有较少的控制。

开发人员控制:开发人员控制并保护整个业务生命周期内的所有应用程序,这些应用程序是使用 PaaS 创建的。开发人员将多线程阈值设置为在构建应用程序时可用于并行处理线程的核心数。开发人员可能会设置用户和虚拟桌面线程阈值的级别。 PaaS 供应商控制:供应商至少可以控制运行 SaaS 应用程序、开发新应用程序或测试在云中运行多线程所需的核心、操作系统、服务器和网络基础架构,以及应用程序的可扩展性。供应商可以设置资源、数据请求、社交媒体和负载平衡的阈值级别。 多线程阈值控制:开发人员可以根据应用程序中线程算法的
复杂程度设置多线程的阈值。供应商将开发人员设置的阈值限制为开发人员执行线程时可能使用的最大核心数。

使用 IaaS 虚拟机

IaaS 基础架构或者网络专家拥有最多的控制。

网络专家控制:基础架构或者网络专家在虚拟级别控制核心、操作系统、网络设备和部署的多线程应用程序。基础架构专家能够扩大或者缩小虚拟服务器或者存储区域块,他们利用社交媒体工具与其他 IaaS 专家、PaaS 专家和供应商进行通信。基础架构专家可能会设置用户、负载平衡和虚拟桌面阈值级别。 IaaS 供应商控制:供应商至少可以控制位于虚拟机底层的传统计算资源的基础架构、分配给基础架构或者网络专家的最多核心数,以及应用程序访问 IaaS 所需的应用程序。供应商可以设置用户、资源、数据请求、社交媒体和负载平衡的阈值级别。 多线程阈值控制:基础架构专家可能会设置多线程阈值。供应商可能会就各个虚拟服务器上的最大核心数与基础架构专家进行磋商。

Java 编程语言拥有内置的多线程支持。我们一起来了解一下。

时间: 2024-11-02 03:15:04

COBOL和Java在SaaS应用程序中交互时遭遇多线程挑战的相关文章

java javase socket-最近学java,在socket 程序的测试时搞不懂,求指点

问题描述 最近学java,在socket 程序的测试时搞不懂,求指点 我最近在学java,刚好学到了socke程序,我按照教程上写了服务端和客户端的程序,但是在进行联合俩个程序进行通信的时候却测试不了了. 服务端代码: package severDemo; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public cla

Asp.Net在Web应用程序中执行计划任务(多线程)

asp.net|web|程序|多线程|执行 在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务.实现计划任务的方法也有很多,可以采用SQLAgent执行存储过程来实现,也可以采用Windows任务调度程序来实现,也可以使用Windows服务来完成我们的计划任务,这些方法都是很好的解决方案.但是,对于Web应用程序来说,这些方法实现起来并不是很简单的,主机服务提供商或者不能直接提供这样的服务

利用Java Beans在应用程序中创建组件

JavaBeans模块使开发人员能够创建称之为组件的软件单元(也就是我们熟知的beans).你可以把beans加载在更复杂的组件.Java小型应用程序(applets)或应用程序上.JavaBeans广泛应用于IDE应用程序,使你能够很容易地可视化组合组件并动态修改它的属性. Beans是动态的,允许你改变和定制它.在JavaBean Builder Tool里的设计模块中,你能利用 Bean的属性窗口来可视化定制和保存(持久)bean.你也可以从toolbox中选择一个bean,把它拖拽到窗体

Java在Web应用程序中如何使用嵌入式数据库H2

一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含了使用JDBC方式连接H2数据库时使用的驱动类,将"h2-1.4.183.jar"加入到[H2DBTest]项目中,如下图所示: 1.2.开启H2数据库 进入到h2bin目录,如下图所示: 确保H2数据库使用的8082端口没有被其他应用程序占用,正常启动之后输入"http://l

简单对比C#程序中的单线程与多线程设计_C#教程

多线程概念 1.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括多个线程.线程是操作系统分配处理器时间的基本单位 2.应用程序域是指进行错误隔离和安全隔离,在CLR中运行,每个程序域都是单个线程启动,但该程序域中的代码可以创建附加应用程序域和附加线程 3.多线程的优点在于一个线程阻塞的时候,CUP可以运行其他的线程而不需要等待,这样大大的提高了程序的执行效率.而缺点在于线程需要占用内存,线程越多占用的内存就多,多线程需要协调和管理,所以需要占用CPU时间以便跟踪线程,线程之间对共享

怎么用java实现程序中内置浏览器,并且能通过软件向浏览器的页面中输入字符谢谢

问题描述 怎么用java或者C++实现程序中内置浏览器,并且能通过软件向浏览器的页面中输入字符谢谢​需要用到哪些类,以及大致思路是什么?比如说,我想实现申请邮箱,可以不在浏览器上输入账号密码,想通过软件导入文本,然后自动在文本框出现导入的账号和密码,自己输入验证码后,点击确定,内置浏览器的页面上就出现了账号和密码,和验证码了,再点击提交,是点击软件上的,不点击浏览器上的,就能提交这些数据了,谢谢了!第一次发帖,想做的几个软件都是这样的..或者谁告诉我用其他的什么语言能做出来呢.谢了哈 解决方案

在构建 SaaS 应用程序时定义一个多线程阈值

回到云岛:所有 SaaS 用户都很高兴.因为他们能获得快速响应.因为这些用户惟一拥有的控制权就是对 访问应用程序的控制,他们不担心应用程序是否有多线程例程:也不担心在云中有多少核心用于并行加速多线 程的处理.问题应用程序被成功地从内部多线程 COBOL 遗留系统中迁移出来. 当然,有一天,SaaS 应用程序的速度会慢下来,而且越来越慢:直到用户无法忍受.他们这时才发现: 只有一个核心在正 常运行,其余核心都发生了故障. SaaS 订阅仅限于两个核心,而不是所有四个核心. SaaS 应用程序近 来

启用Web应用程序中的后退导航

用 Webflow Navigation Manager Framework 改善用户体验 Web 应用程序的导航与静态 Web 站点的导航有很大的不同.当在一个静态 Web 站点 中导航时,可以使用浏览器的后退(Back)和前进(Forward)按钮,从一个页面跳转到 另一个页面,或者将喜欢的页面保存为书签,以便随时返回到该页面.通过浏览器的后 退按钮,可以在 Web 站点中后退导航,而且浏览器可以放心地缓存 Web 页面,因为显 示的页面不必反映服务器端应用程序的当前状态. 然而,当在 We

SaaS应用程序存安全隐患 或泄露敏感数据

据国外媒体报道,近期发表的一篇研究论文称,SaaS(软件即服务,Software-as-a-service)交付应用程序可能会导致数据的泄露. 这份由微软研究院和印第安纳大学学者发表的论文,提供了SaaS交付应用程序的操作细节及其如何通过网络导致"侧通道"泄露,并可能引发严重的安全隐患的过程:即使在SaaS加密的情况下,攻击者也可能获取到最敏感的数据. 论文中称:"明确地说,我们发现许多非常详细而又敏感的信息正在通过医疗保健.税收.投资及网络搜索等备受关注的网络应用程序泄露出