分布式科学计算与docker

作者:Ghostcloud-谢斌

在科学计算领域, 早些年的程序语言基本都是C/C++或者FORTRAN
的天下, 是因为科学计算本身非常耗时, 选择一门运行速度比较快的语言能大大的节约对数据的计算时间. 但是在保证速度的之后, 语言的通用性和易用性又成了一大问题. C语言虽然语法简单明了, 执行速度快. 但是它的开发难度却是所有语言中最大的. 面向对象的变成方法需要借助比如structure这一类的特性来实现. 并且也没有太多的第三方库可供使用. 所以在开发复杂系统的时候, 需要很强的规划能力. 而C++或者其他语言, 又因为学习成本高, 往往只是少部分专业程序员能用到滚瓜烂熟. 一个算法实现不好便会大大的降低运行速度. 我相信很多做过程序员的朋友都有这样的体会, 即便是用C来写一个算法, 如果实现的不够精妙, 往往运行速度还不如ruby, perl这些脚本语言的第三方库. 因为这些第三方库虽然有先天的劣势, 但是这些相关的函数确是从算法上精心锤炼过的. 设计不好的算法+先天的编译优势vs精炼的算法+解释型语言, 谁的速度快其实更多的, 就是看运气了.

所以是否有一种方法, 有C的快速,Ruby的动态,Java的通用,R般在统计分析上得心应手,Perl的处理字符串处理,Matlab的线性代数运算能力. 易学又大碗呢.

Python作为一门通用的面向对象的程序设计语言, 已经越来越多的应用在各个领域. 包括金融业, 制造业以及数据信息产业. 基于python的程序库也是越来越多并且功能越来越强. Python的通用性和易上手性以及不用讨论了, 现在很多非科班程序员出身的哥们儿以及能在基于python的各种库中实现自己想要的功能. 做金融数据分析的, 做图像识别的, 做自动化的. 几乎每一个专业都能在python上找到自己相关的专用库. 前几天还听说python会纳入小学课程. 也不知道是段子还是真的. 但是从目前的情况来看. Python确实已经融入到了生产环节的方方面面.

目前科学计算比较流行的方法是用python作为胶水, 再把c, c++这些高速语言实现的计算库进行实际的数学计算. 比如著名的Tensorflow, pandas, numpy等等这些使用宽泛的库. 程序的逻辑又python控制, 数据在各个库里面计算, 输入和输出. 这样的话, 程序本身的性能和易用性得到了最大化的提升.

科学计算的速度除了之前说的和语言相关, 还包括另外2个关键要素, 第一个是分布式, 第二个是系统资源的限制(包括CPU, Memory和Storage).

语言和运行平台的问题, 我们可以通过python+计算库来实现, 但是分布式和系统资源呢.

首先, 如果我们要实现科学计算的分布式, 除了在程序里面自己实现之外, 还有很多相关的开源框架, 比如hadoop + hive这类的大数据现成框架. 但是这一类的系统偏大偏重, 且升级更新不够自动化和轻量.

其实有一种更为轻量级的方式, Docker+K8s实现分布式计算和资源自动划分.
原理很简单, 我们在实现算法的时候, 并不要求实现分布式的架构, 只需要能读取数据, 计算分析数据, 然后输出数据到文件即可. 在实现算法的程序之后, 我们将程序和依赖环境封装成docker镜像. 并且放到docker的镜像仓库里面. 使用k8s对镜像进行自动化的调度, 我们可以设置规则说, 每一个物理主机只能运行一个容器或者运行多个容器. 然后把每一个容器的输出结果定向到共享存储. 只需要简单的几步, 基本上一个有自动调度功能, 资源划分功能, 高可用功能和运行状态监控功能的一个分布式计算系统就已经搭好了.

之后, 我们只需要加入负责计算的节点, k8s会自动根据CPU/Memory的阈值自动做负载均衡. 举个例子来说, 我们甚至不用指定说哪些容器运行在哪些主机上, 只需要启动pod并且指定并发数量, k8s就会自动将这个计算程序的镜像分布到每一个可用的计算节点上. 并且自动负载均衡. 当计算完成之后, K8s的检查到pod没有使用的情况. 会自动删除相关的pod, 释放资源给其他计算服务使用.
K8s自带健康检查功能, 所以我们可以使用这个功能来实现对容器运行状态的监控. 一旦发现job出了问题, 我们可以选择重启, 终止, 或者路由到其他计算节点上面.

并且根据Docker轻量级的特性, 我们可以用devops实现其计算镜像的快速部署. 只需要在编译好代码后更新镜像仓库里面对应的镜像. K8s会自动升级所有有关的pod, 让运行的程序始终是最新的.

Docker和科学计算的结合, 其主要优势在于快速部署和计算资源的统一管理. 相对比较轻. 且对环境要求不高. 老旧机器, 新机器, 都可以加入到计算集群. 以实现资源的最大化利用.

时间: 2024-10-03 01:10:56

分布式科学计算与docker的相关文章

云计算能够改变科学计算吗?

日前,云计算专家汤姆·威尔基提供了两个例证,科学数据集的增长推动向云计算进军,另外,这将深刻地改变科学计算. 今年一月初,伦敦韦尔科姆基金会邀请生命科学领域的一些研究人员参会,对于一个新的私有学术云进行数据分析初步的结果进行评定,而这个私有学术云是由七个学术研究机构组成的emedlab联盟成立的.而几个月前在大西洋的另一边,美国国家科学基金会(NSF)宣布将为Aristotle云联盟中的三个大学的私人学术云连续5年赠予500万美元的研究资金. 私有云和联合云都试图解决同样的两个科学问题:如何利用

Python多版本切换工具-Pyenv\virtualenv及Anaconda科学计算环境的配置

为了安装Anaconda科学计算环境,控制好python版本,今天上午总算折腾好了. 学习python有时希望在python2.7环境下,有时希望在python3.4环境下,该怎么办呢? Anconda的包也不知道适合在什么环境下工作? 解决多python环境下,python版本切换的工具--pyenv应运而生.同时,另外一个工具virtualenv则提供了一种功能, 就是将一个目录建立为一个虚拟的python环境, 这样的话, 用户可以建立多个虚拟环境, 每个环境里面的python版本可以是不

棱镜-分布式实时计算的跟踪校验系统

该文章来自于阿里巴巴技术协会(ATA)精选文章. 摘要:*目前,各种分布式实时计算系统已经在各大互联网公司得到了广泛应用.但是,这些实时系统的计算过程多不进行持久化,如果出现消息丢失等异常情况,通常很难定位问题出现的位置和具体原因,更无法做到主动发现消息丢失.对于广告营销等对消息准确性要求较高的业务场景来说,这种消息丢失的代价通常很高,即便很低的消息丢失率也会造成大量的财物损失.为此,阿里妈妈开发了一套面向分布式实时计算框架storm的实时跟踪校验系统--棱镜系统,棱镜系统实时记录每条消息在st

Android计算器,在不销毁活动的前提下,简单模式和科学计算模式之间的变化用什么实现好?

问题描述 Android计算器,在不销毁活动的前提下,简单模式和科学计算模式之间的变化用什么实现好? 7C 就是点击变换计算模式按钮,就会变成科学计算器,但是并不会销毁重建活动. 解决方案 使用两个布局叠加,显示隐藏操作即可 解决方案二: 重写setContentView即可

在VS.net下安装使用blitz++科学计算库

我做图像处理经常要用到矩阵运算,最常用到的工具就是matlab.不过matlab也就只能用在实验,真正做程序的时候,好多东西都要自己写,很麻烦.在网上搜了一下科学计算库,找到了三个,gsl.blitz++和MTL,没时间仔细研究哪个效率更高了,听了Oscargreat的推荐,开始用blitz++.       blitz++的代码下载下来发现,只是适合linux下编译,幸好在网上搜到了几篇不错的文档,在其指导下顺利的编译了blitz.lib. 体验:VC++ .NET 2003 –安装和使用Bo

Linux科学计算平台:使用Sage和Python计算数字

Linux 在科学团体中占有重要地位,这一点也不奇怪.解决方案种类繁多,从高性能计算集群到可视化软件都包含其中.甚至还有一个基于 Red Hat Enterprise Linux 且针对科学计算的完整 Linux 发行版,它被相应地命名为 Scientific Linux. Sage 和 Enthought Python Distribution 本文介绍使用 Linux 工作站进行科学计算的两种不同方法.第一种方法是 Sage 开源数学系统,第二种方法是 Enthought Python Di

Python科学计算环境推荐——Anaconda_python

Anaconda是一个和Canopy类似的科学计算环境,但用起来更加方便.自带的包管理器conda也很强大. 首先是下载安装.Anaconda提供了Python2.7和Python3.4两个版本,同时如果需要其他版本,还可以通过conda来创建.安装完成后可以看到,Anaconda提供了Spyder,IPython和一个命令行.下面来看一下conda. 输入 conda list 来看一下所有安装时自带的Python扩展.粗略看了一下,其中包括了常用的 Numpy , Scipy , matpl

c#-C#中如何把一个double转换成一个byte[],需要用到科学计算么?

问题描述 C#中如何把一个double转换成一个byte[],需要用到科学计算么? C#中如何把一个double转换成一个byte[],需要用到科学计算么? 解决方案 BitConverter.GetBytes(你的double)

开源科学计算软件 Scilab 5.5.0 重磅来袭

开源科学计算软件 Scilab 5.5.0 已于2014年4月11日发布.Scilab 忠实粉丝应该知道,自从 Scilab 5.4.0 以来,这款强大的开源数值计算软件在用户界面上有重大改进,此版本延续了先前的风格,继续向便捷操作进军. 5.5.0 主要有以下新功能: 新的GUI创建扩展函数,为用户提供绝佳的UI渲染能力: 新的图形显示效果,为用户提供最优的交互能力: MPI (The Message Passing Interface) 功能: 与 JAVA 等外部对象进行直接交互: 以及更