分布式科学计算与Docker

在科学计算领域,早些年的程序语言基本都是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,释放资源给其他计算服务使用。

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

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

- End -

本文来自企鹅号 - Ghostcloud媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Kirito的技术分享

上一个电商项目的反思

加入中科软已经有了一个年头,从去年实习到今年转正,陆陆续续接触了大概四个项目。有电商类,互联网保险类,也经历过管理系统。幸运的是,这些项目都是从零开始,避免了让...

515110
来自专栏DevOps时代的专栏

如何落地全球最大 Kubernetes 生产集群

JDOS 就是京东数据中心操作系统,随着数据中心规模不断的扩大,我们需要对数据中心做综合的考虑。所以一开始就先说数据中心的层面,大家知道数据中心里面有服务器、网...

29620
来自专栏Golang语言社区

容器环境下 go 服务性能诊断方案设计与实现

业务上量以后,对程序进行 profiling 性能诊断对很多后端程序员来说就是家常便饭。一个趁手的工具往往能让这个事情做起来事半功倍。

15450
来自专栏IT 指南者专栏

五月福利,吐血整理,重磅推荐,我坚信总有你需要的

大家都知道,从上个月开始,这个公号「compassblog」每月都会至少送出一次福利,并且这些福利涵盖学习资料、工具推荐、编程资源、抽奖送钱等等,当然啦,抽奖可...

459180
来自专栏SDNLAB

OpenBox项目及相关介绍

知道OpenBox源于SIGCOMM 2016的会议,这个会议的影响力在计算机和通信领域的专家相信都知道,CCF推荐的A类会议,一年接收文章的数量也就在30篇左...

36830
来自专栏IT笔记

关于架构优化和设计,架构师必须知道的事情

近几年来随着互联网的飞速发展,新的架构实践方式不断涌现,但是有一件事情是永恒不变的,那就是-“架构之道”;关于如何设计出灵活、高可用性以及能够快速适应变化的系统...

36870
来自专栏SDNLAB

SDN实战团分享(三十三):Hurricane分布式实时处理系统架构及SDN领域的应用

嘉宾简介:卢誉声,Autodesk软件研发工程师,从事平台架构方面的研发工作。 在此之前,他曾在思科系统(中国)研发中心云产品研发部工作,并参与了大规模分布式系...

39560
来自专栏用户2442861的专栏

教你阅读Python开源项目代码

作者:董伟明 链接:https://zhuanlan.zhihu.com/p/22275595 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,...

62810
来自专栏沃趣科技

翻过那座山,就能看见海|kubernetes让DBA更优雅地管理数据库

标题中的DBA其实包含两层含义:Database Architect 与 Database Administrator,我在这里都简称DBA了。

67080
来自专栏IT 指南者专栏

五月福利,吐血整理,重磅推荐,我坚信总有你需要的

好了,废话就讲这么多,开始进入今天的主题。鉴于大家现在的需求,这个月主要分享以下几个福利:

23460

扫码关注云+社区

领取腾讯云代金券