写点什么

SaaS 平台上的多线程控制与故障处理

  • 2013-08-16
  • 本文字数:2145 字

    阅读完需:约 7 分钟

资深工程师 Judith M. Myerson 结合自己的实际经历,讲述了内部部署的 COBOL 程序成功地转化为基于 Java 的软件即服务 (SaaS) 应用程序,开发人员应该小心提防多线程问题。

Judith 提出了“多线程控制的模型云用户”概念:

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

他分别比较了不同云平台上的控制粒度。

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

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

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

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

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

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

接着,Judith 谈到了自己对 Java 多线程使用的理解:

为了使用 Java 语言创建线程,可以实例化一个 Thread 类型(或者一个子类)对象,然后向它发送一个 start() 指令。线程将继续运行,直至 run() 返回主程序。这时线程将终止。大多数应用程序需要使用线程与其他进行通信,并同步其行为。要在 Java 程序中完成这项任务,至少需要使用锁。为了避免多次访问同一个线程,在使用资源前,线程可以获得和释放锁。试图获取某个正在使用中的锁的线程会陷入休眠状态,直到占用这个锁的线程将其释放。释放锁后,休眠线程就会移到准备运行的队列中。

锁的使用也会带来多线程的问题,包括死锁(两个或者多个相互竞争的操作等待其中一个完成工作,却导致无论哪个操作都无法完成。在计算机科学中,涉及两个相互竞争操作的死锁称为僵局 (deadly embrace))。工作无法完成,因为很多线程都在等待永远无法释放的锁。局部引用无法在线程间传递,只在用来创造它们的线程中有效。如果传递局部引用,则无法在不再需要它们时将其释放。您应该经常将局部引用转化为全局引用,因为多线程有可能用到同一个引用。

另一个问题是,如果被调用的 COBOL 程序在执行中遇到 THREAD 编译器选项问题,那么使用设计良好的多线程程序调用 Java 程序将会失败。

对于多线程 SaaS 故障场景,Judith 认为主要从以下 4 个方面来解决问题:

  • 中止损害:为了中止损害,供应商应该提前计划,准备采用 SaaS 应用程序作为自动故障恢复的实例。根据 SaaS 订购者和供应商之间的协议,SLA 应该准备就绪。通知 SaaS 客户,在供应商解决问题时,应该同时在另一数据中心继续进行服务。请记住,将客户置于混乱的情况下往往会导致对您的不利。
  • 解决问题:测试 SaaS 应用程序是否存在死锁和其他多线程问题。 设置各个语言界面(COBOL 和 Java)的多线程阈值。 安装多线程 SaaS 应用程序实例,允许将故障从一个数据中心转移到另一个数据中心。定期检查备用磁盘是否工作正常,并且没有错误。
  • 恢复系统:下线数据中心已崩溃的系统。 将多线程 SaaS 应用程序迁移到恢复系统。然后测试恢复后的系统恢复力,确保将故障相对顺畅地转移到另一数据中心。在将它移动到生产环境中之前,应备份一个已恢复系统的副本。
  • 通知客户:只要在故障数据中心恢复 SaaS 应用程序,供应商就应该通知客户恢复已经完成,SaaS 应用程序已经移动到生产环境,SLA 条款(无条件信用、退款和一个终止机会)正如与 SaaS 订阅者协商的那样在继续执行。
2013-08-16 21:232118
用户头像

发布了 501 篇内容, 共 272.3 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

鹏城原生力量,2024鲲鹏原生开发伙伴圈层活动·深圳站成功举办

极客天地

AI教育软件的开发流程

北京木奇移动技术有限公司

AI教育 软件外包公司 AI听力练习

鲲鹏原生:助力安超云管理平台3.0开发、发布及高效运行

极客天地

云开发 AI 实战—基于云开发 Copilot快速开发陕西家乡小程序实战

申公豹

小程序

原生APP开发的优点

北京木奇移动技术有限公司

软件外包公司 原生APP开发

自动排产系统:如何实现生产计划优化的关键策略

万界星空科技

mes 万界星空科技mes 自动排产 智能排产

深度解析 Whisper:深度学习驱动下的超智能语音处理神器

测试人

人工智能 软件测试

淘宝天猫API接口深度解析:商品详情与关键词搜索商品列表的使用方法及代码示例

代码忍者

淘宝API接口、

分布式系统架构:服务容错

不在线第一只蜗牛

数据库 架构 分布式

KubeEdge助力边缘AI应用,实现GPU算力加速

华为云原生团队

云计算 容器 云原生

从5天到1天,某大型国有集团的数智化转型经历了什么?

袋鼠云数栈

【连载 05】自定义线程池(上)

FunTester

CST如何查看I求解器的近场分布

思茂信息

cst 电磁仿真 仿真教程

AI语法和写作App的开发功能

北京木奇移动技术有限公司

软件外包公司 AI写作 AI语法

AI英语词汇评测系统的功能

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI评测

深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业

袋鼠云数栈

人工智能算法背后的故事:从启发到创新

天津汇柏科技有限公司

AI 人工智能

深度解析 Whisper:深度学习驱动下的超智能语音处理神器

测吧(北京)科技有限公司

测试

峰会快讯:Doris Summit Asia 2024 圆满落幕!

SelectDB

数据仓库 数据分析 Doris 大数据 开源 技术峰会

阿里巴巴1688 API接口深度解析:如何高效获取商品详情与关键词搜索商品数据

代码忍者

1688API接口

NocoBase vs Salesforce:谁才是你的理想 CRM?

NocoBase

开源 低代码 CRM 无代码 Salesforce

AppCrawler 自动遍历测试实践(二):定制化配置

测试人

软件测试

测试开发 | AppCrawler 自动遍历测试实践(二):定制化配置

测吧(北京)科技有限公司

测试

苹果M4芯片能玩《黑神话:悟空》吗?黑神话悟空新手入门攻略

阿拉灯神丁

CrossOver Mac下载 PD虚拟机激活秘钥 Mac游戏分享 CrossOver 24 黑神话悟空

SaaS平台上的多线程控制与故障处理_服务革新_崔康_InfoQ精选文章