分布式计算模型和函数式语言实现 连载1

Posted 计算科学的道与术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式计算模型和函数式语言实现 连载1相关的知识,希望对你有一定的参考价值。

1. 分布式计算的重要性

在传统的序列化得计算模型中,一个任务的完成要等待前一个任务的完成,这样的计算耗时耗力。

不久,在计算机中提出了多进程,多线程,多纤程的协作计算,也就是并发计算模型,

那么这个是极大地提高了计算的效率。

尤其是在有多个cpu,或者一个cpu多个核的时候,可以同时调用多个cpu协作计算完成任务,

即使单核单cpu,也是依赖于线程或者进程的上下文切换,来调度多个计算任务,分片执行,

这样就不会让一些只需要很短时间就可以计算完成的任务等待很长时间。


那么,这些传统的计算模式,已经不足以负担,移动计算端的高并发的水平性能扩展,

那么,就引入了,分布式计算,多个计算机,也就是计算节点,协作计算一个,或者多个计算任务。


这里有一个经典的例子,以前某个机构要计算一个耗时费力的解密任务,于是,科学家把这些计算分散到了

很多个个人的个人电脑,利用这些个人电脑的休眠时间协作计算,最后,只用了几周就把这个计算任务做完了。

当然,是很多个。


这里要提到一些计算机科学的算法复杂度。

一般来说,分布式计算可以把一些NP问题,在可能的时间内求解。

NP问题一般是一些组合问题,都是指数级别的计算复杂度。

比如计算出,某快递的送货路线,所有的可能成本,选取最小的,

这个可以用动态规划求解,但是,在节点过多,比如超过几百,上千的时候,

动态规划还是要历遍所有的可能,计算出最小值。是N!的计算复杂度。


用分布式计算,就可以吧数据切片,分散到很多不同的机器上,分段分组求解,最后合并求解结果,

那么我们说,MR就是一个分布式的最好的计算模型,Map & Reduce ,也就是分组和归并计算。


那么,下一代计算平台是移动计算的时代(Mobile Computation)

移动计算,分为1. Mobile Code 2. Mobile Data, 3. Mobile Device, 4. Mobile User


简而言之,是指用户可以在任何时间,地点,在任何设备,访问任何数据,使用任何平台的计算力。

就是地域无关,设备无关,数据来源无关,用户状态无关。


其实,在这种计算模型下,有一种施乐这家公司在70年代实验的一个计算平台,叫做无处不在的计算。

里面涉及了ContextAware计算,就是上下文感知计算,self-Adaptable计算,随着环境自适应的计算。


这些都是移动计算的重要组成。


举个例子,一位高血压老人,走在路上,天气炎热,高血压复发,她需要及时的医疗援助,这时候,一辆出租车,或者Uber

停在她旁边,然后带她去了最近的医院,让她能够及时获得治疗


另一个例子,在逛街的时候,口很渴,走到一个自动贩卖机旁边,照一下微信2微码,自动贩卖机,自动把最爱喝的饮料送给用户,

自动微信支付完成,完全不需要用户干预。


这些是怎么做到的呢,就是数据收集,分析和移动计算。

这些,是今后社会可以做到非常便利地服务人群,因为用户的这些数据有选择地在不同的地点,地域无关地计算。

计算出一些事件可能发生的概率,然后,通过移动设备,来引导用户完成需要的行为。


第一个例子,老人要晕倒,uber怎么会知道的呢?是可穿戴设备,告诉了医疗中心,老人的心跳和脉搏的参数不对,

这些计算自动完成,然后通过云服务,根据老人穿戴设备的地理位置定位,在老人附近搜索最近的出租车,然后把

一个信息推送到司机的信息平台,司机及时赶到,然后在司机的信息平台告诉司机,要去的医院,一切都是在老人,和司机

医院非感知的状态下完成的。老人不认识司机,司机只知道这个送达任务,医院只知道这位病人需要治疗,会在什么时候出现在哪里,

需要什么样的治疗。


这种计算是无处不在的,但是大家感知不到,但是可以得到最及时体贴的照料。


其实,以前,我说,如果说神创造了什么,那就是概率,只有这个东西是计算机没有办法做到的。所谓概率,就是一种随机性,

计算机大牛Kunth说过,计算机其实不应该能够创造出真正的随机数,也就是概率,因为计算机本来就是设计做出可预测的任务的。

如果一个方法,我的输入是a每次出来的结果都不一样,那么,就不是计算机该做的事情,事实上到现在还是没有设计出真正的随机数,

这个请参见,Kunth的计算科学的艺术这套书,第二卷。这套书,是被誉为计算科学历史上堪比牛顿的经典力学的著作。


Kunth是斯坦福的著名教授,也是世界著名的计算机科学家,当然也是我的男神,也是很多这个IT行业的VP,大牛的男神。


扯远了,那么下面要说到。分布式计算的难点。


1. 首先是数据不共享,

2. 执行顺序不可测。

3. 难以debug和测试




接下来要提到的是,函数式语言其实可以实现任意一种分布式计算模型


分布式计算模型,分为5种

1. Leda 计算模型 2. Pi 计算模型 3. Actor计算模型 4. Join计算模型 5. Mobile ambient移动计算模型


那么下一期,从Leda计算模型开始连载这些模型以及函数式语言的实现,主要使用Scala语言。

以及他们的一些实际应用。


敬请期待下一期。




以上是关于分布式计算模型和函数式语言实现 连载1的主要内容,如果未能解决你的问题,请参考以下文章

大数据之MapReduce分布编程模型之函数式编程范式

函数式语言的计算模型 - Monoids

Rails 类型的 webapp 中的“模型”如何用函数式编程语言实现?

Go语言开发Go语言闭包

译文不要害怕函数式编程

函数式编程语言