并发计算模型BSP与SEDA

1    BSP批量同步并行计算

BSP(Bulk Synchronous Parallel)批量同步并行计算用来解决并发编程难的问题。名字听起来有点矛盾,又是同步又是并行的。因为计算被分组成一个个超步(super-step),超步内并行计算并且结点间不能通信。在超步之间设置同步栅栏(barrier synchronization),计算完成后相互通信,全部完成后才能继续下一个超步。

2 SEDA阶段式事件驱动架构

SEDA(staged event-driven architecture)分阶段的事件驱动架构。它不同于经典的基于线程的并发处理架构,也区别于现今流行的事件驱动。

?  基于线程的并发:资源使用率高(上下文切换,锁争夺),过多的线程难以实现高吞吐量、低响应时间。传统做法是限制总的线程数。

?  事件驱动的并发:用少量事件处理线程配合许多状态机(FSM),提供高效和可扩展的并发性能。FSM间没有错误和性能隔离,并且FSM代码不能阻塞。

事件驱动的有限状态机在Web服务器中很常见。

接下来要说的就是SEDA了,它具有以下特点:

?  将服务分解为用队列分隔开的阶段

?  每阶段执行请求处理的一部分

?  阶段内事件驱动(非阻塞的)

?  队列的引入方便了执行边界的隔离

?  每阶段包含一个线程池

?  然而线程不对应用程序暴露

?  线程池的大小根据需要会自动扩张或收缩

可以看出关键词有三个:阶段、队列、线程池。

队列

首先,通过队列我们能够实施一些控制策略(admission control policy)。例如通过阀值、速率控制是否入队还是阻塞(将压力反弹回去, backpressure)、服务降级、丢弃

其次,各个线程只在阶段内执行,实现了性能隔离、模块化和独立的加载管理。

最后,显式的事件分发使应用程序能够追踪事件流,监控队列长度来检测瓶颈。

线程池

观察输入队列长度,动态添加线程,或移除空闲线程。观察输出速率,找到高吞吐量与低响应时间的平衡点。

吞吐量与响应时间的关系

计算机系统的总体性能标准是吞吐量和响应时间。

吞吐量是对单位时间内完成的工作量的量度。示例包括:每分钟的数据库事务;每秒传送的文件千字节数;每秒读或写的文件千字节数;每分钟的 Web 服务器命中数

响应时间是提交请求和返回该请求的响应之间使用的时间。示例包括:数据库查询花费的时间;将字符回显到终端上花费的时间;访问 Web 页面花费的时间

这些度量之间的关系很复杂。有时可能以响应时间为代价而得到较高的吞吐量,而有时候又要以吞吐量为代价得到较好的响应时间。在其他情况下,一个单独的更改可能对两者都有提高。可接受的性能基于合理的吞吐量与合理的响应时间相结合。

通常,平均响应时间越短,系统吞吐量越大;平均响应时间越长,系统吞吐量越小。但是,系统吞吐量越大, 未必平均响应时间越短。因为在某些情况(例如,不增加任何硬件配置)吞吐量的增大,有时会把平均响应时间作为牺牲,来换取一段时间处理更多的请求。

举个例子:一个理发店,只有一个理发师、一把理发椅子、一张方便客人等待的长凳。理发师一次只能处理一个客户,其他等待的用户显得很不耐烦,外面打算进来理发的人也放弃了在这家店理发的打算……有一天,理发师有钱了,他多买了2把理发椅子。这样他可以同时给3个人理发:当其中一个人理到一定阶段需要调整或定型的时候,他就转向另外一个客户为其服务,依次类推。这样,他发现一天内他可以理的人数比以前增多了,但是还会有一些后来的客户抱怨等待时间太长。后来,理发师招了2名学徒帮他一起干活。他发现这样一来每天的理发效率增加了将近2倍,而且客户的等待时间也明显减少。但是成本增多了,理发用具、洗发水、发工资,这让他觉得开个理发店也要精打细算。“

以上面Web服务器中的事件驱动有限状态机为例,通过SEDA改造后,其架构就变为:

FSM中的各个状态被划分成一系列的阶段,由不同的队列隔离开。每个阶段能被独立管理,并且阶段间可以或串行或并行或两者组合的方式地执行。

参考资料

1 The Staged Event-Driven Architecture for Highly-Concurrent Server Applications

2 SEDA: An Architecture for Scalable, Well-Conditioned Internet Services

时间: 2024-08-07 03:19:22

并发计算模型BSP与SEDA的相关文章

NOSQL(六)集群并发计算模型Map-Reduce

<NoSQL精粹>读书笔记,转载请注明出处<jiq?钦's technical Blog> 面向聚合的数据库能够兴起,很大程度上是由于集群的增长.集群不仅改变了数据存储的规则,还改变了数据计算的方式. 集中式数据库通常两种方式处理计算逻辑:一种是在数据库服务器上执行数据计算.一种是在客户端计算机上执行数据计算.把数据库放到集群之后,采用的计算方式是将计算分布到多台计算机上,同时为了尝试减少网络传输的数据量,把节点所需的数据尽可能多地放到该节点上执行.这就是所谓的"Map-

大数据图数据库之离线挖掘计算模型

/* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/            author: 张俊林 节选自<大数据日知录:架构与算法>十四章,书籍目录在此 对于离线挖掘类图计算而言,目前已经涌现出众多各方面表现优秀而各具特点的实际系统,典型的比如Pregel.Giraph.Hama.PowerGraph.GraphLab.GraphChi等.通过对这些系统的分析,我们可以归纳出离线挖掘类图计算中一些常见的计算模型. 本节将常见的计算模型分为两类,一类是图编程模型,另一类

说说阿里增量计算框架Galaxy :增量计算模型 (二)

背景 在前一篇文章中,介绍到了Galaxy的增量计算性质,其state是框架内部管理的,以及与Storm的简单对比.这篇文章将讲述更多Galaxy增量模型的事情,并介绍这套增量模型之上实现的Galaxy SQL和Galaxy Operator,同时会从增量角度对比Spark Streaming. Galaxy MRM增量与Spark Streaming MRM模型全称为MapReduceMerge,比MapReduce做了一个Merge操作.merge阶段可与state交互,读写某个key的ol

MapReduce计算模型二

之前写过关于Hadoop方面的MapReduce框架的文章MapReduce框架Hadoop应用(一) 介绍了MapReduce的模型和Hadoop下的MapReduce框架,此文章将进一步介绍mapreduce计算模型能用于解决什么问题及有什么巧妙优化. MapReduce到底解决什么问题? MapReduce准确的说,它不是一个产品,而是一种解决问题的思路,能够用分治策略来解决问题.例如:网页抓取.日志处理.索引倒排.查询请求汇总等等问题.通过分治法,将一个大规模的问题,分解成多个小规模的问

程序员必知的七种并发编程模型

1.线程与锁线程与锁模型有很多众所周知的不足,但仍是其他模型的技术基础,也是很多并发软件开发的首选. 2.函数式编程 函数式编程日渐重要的原因之一,是其对并发编程和并行编程提供了良好的支持.函数式编程消除了可变状态,所以从根本上是线程安全的,而且易于并行执行. 3.Clojure之道——分离标识与状态 编程语言Clojure是一种指令式编程和函数式编程的混搭方案,在两种编程方式上取得了微妙的平衡来发挥两者的优势. 4.actor actor模型是一种适用性很广的并发编程模型,适用于共享内存模型和

深度学习计算模型中“门函数(Gating Function)”的作用

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 看深度学习文献,门函数基本上已经是你必然会遇到的一个概念了,最典型的就是LSTM,首先上来你就得过得去"遗忘门""输入门""输出门"这三个门.门函数本身是个独立概念,不过LSTM使用多个门函数来组合出一个带有状态记忆的计算模型而已.随着LSTM大行其道,各种计算模型开始在计算过程中引入门函数的概念,相信这些论文你也没少看,其实这也是一种研究模式,比如

matlab(5) : 求得θ值后用模型来预测 / 计算模型的精度

求得θ值后用模型来预测 / 计算模型的精度 %% ============== Part 4: Predict and Accuracies ==============% After learning the parameters, you'll like to use it to predict the outcomes% on unseen data. In this part, you will use the logistic regression model% to predict

Java多线程-并发编程模型

以下内容转自http://ifeve.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9E%8B/: 并发系统可以采用多种并发编程模型来实现.并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业.不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同.这篇并发模型教程将会较深入地介绍目前(2015年,本文撰写时间)比较流行的几种并发模型. 并发模型与分布式系统之间的相似性 本文所描述的并发模型类似于分布式系统中使

matlab(8) Regularized logistic regression : 不同的λ(0,1,10,100)值对regularization的影响,对应不同的decision boundary\ 预测新的值和计算模型的精度predict.m

不同的λ(0,1,10,100)值对regularization的影响\ 预测新的值和计算模型的精度 %% ============= Part 2: Regularization and Accuracies =============% Optional Exercise:% In this part, you will get to try different values of lambda and % see how regularization affects the decisio