【摘要】虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos 、Docker 和 Go 配合带来的强大破坏力,如何通过 300 行代码打造一个比特币开采系统。

时下,对于大部分 IT 玩家来说, Docker 和 Mesos 都是熟悉和陌生的:熟悉在于这两个词无疑已成为大家讨论的焦点,而陌生在于这两个技术并未在生产环境得到广泛使用,因此很多人仍然不知道它们究竟有什么优势,或者能干什么。近日, John Walter 在 Dzone 上撰文 Creating a Distributed System in 300 Lines With Mesos, Docker, and Go,讲述了 Mesos、Docker 和 Go 配合带来的强大破坏力,本文由 OneAPM工程师编译整理。

诚然,构建一个分布式系统是很困难的,它需要可扩展性、容错性、高可用性、一致性、可伸缩以及高效。为了达到这些目的,分布式系统需要很多复杂的组件以一种复杂的方式协同工作。例如,Apache Hadoop 在大型集群上并行处理 TB 级别的数据集时,需要依赖有着高容错的文件系统( HDFS )来达到高吞吐量。

在之前,每一个新的分布式系统,例如 Hadoop 和 Cassandra ,都需要构建自己的底层架构,包括消息处理、存储、网络、容错性和可伸缩性。庆幸的是,像 Apache Mesos 这样的系统,通过给分布式系统的关键构建模块提供类似操作系统的管理服务,简化了构建和管理分布式系统的任务。Mesos 抽离了 CPU 、存储和其它计算资源,因此开发者开发分布式应用程序时能够将整个数据中心集群当做一台巨型机对待。

构建在 Mesos 上的应用程序被称为框架,它们能解决很多问题: Apache Spark,一种流行的集群式数据分析工具;Chronos ,一个类似 cron 的具有容错性的分布式 scheduler ,这是两个构建在 Mesos 上的框架的例子。构建框架可以使用多种语言,包括 C++,Go,PythonJava,Haskell 和 Scala。

在分布式系统用例上,比特币开采就是一个很好的例子。比特币将为生成 acceptable hash 的挑战转为验证一块事务的可靠性。可能需要几十年,单台笔记本电脑挖一块可能需要花费超过 150 年。结果是,有许多的“采矿池”允许采矿者将他们的计算资源联合起来以加快挖矿速度。Mesosphere 的一个实习生, Derek ,写了一个比特币开采框架(https://github.com/derekchiang/Mesos-Bitcoin-Miner),利用集群资源的优势来做同样的事情。在接下来的内容中,会以他的代码为例。

1 个 Mesos 框架有 1 个 scheduler 和 1 个 executor 组成。scheduler 和 Mesos master 通信并决定运行什么任务,而 executor 运行在 slaves 上面,执行实际任务。大多数的框架实现了自己的 scheduler,并使用 1 个由 Mesos 提供的标准 executors 。当然,框架也可以自己定制 executor 。在这个例子中即会编写定制的 scheduler,并使用标准命令执行器( executor )运行包含我们比特币服务的 Docker 镜像。

对这里的 scheduler 来说,需要运行的有两种任务—— one miner server task and multiple miner worker tasks。 server 会和一个比特币采矿池通信,并给每个 worker 分配 blocks 。Worker 会努力工作,即开采比特币。

万事大吉!通过努力,这里在 Apache Mesos 上建立一个正常工作的分布式比特币开采框架,它只用了大约 300 行 GO 代码。这证明了使用 Mesos 框架的 API 编写分布式系统是多么快速和简单。

原文链接:Creating a Distributed System in 300 Lines With Mesos, Docker, and Go

完整版见:http://blog.oneapm.com/apm-tech/93.html

最新文章

  1. centos下升级mysql后遇到的小问题
  2. python笔记7:日期和时间
  3. 转[开发环境配置]在Ubuntu下配置舒服的Python开发环境
  4. 使用 FocusPoint.js 实现图片的响应式裁剪
  5. TYVJ 矩阵取数 Label:高精度+dp
  6. 红帽Linux 配置VNC桌面远程工具
  7. python 在不同层级目录import 模块的方法
  8. C++一些特殊的类的设计
  9. C++实现ping功能
  10. 第十六篇、MBprogressHUD的使用和获取当前的控制器
  11. CURD 例子
  12. OGC 的WCS WFS 及WMS 服务
  13. C# 基础问答
  14. MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM
  15. 第一章 odoo的配置(centos7 版)
  16. SSL连接并非完全问题解决
  17. 智能指针unique_ptr
  18. 在全志平台调试博通的wifi驱动(类似ap6212)【转】
  19. Oracle10g 连接 sqlserver hsodbc dblink 方式 非透明网关
  20. MySQL:数据库的基本操作

热门文章

  1. 大数据学习——JAVA采集程序
  2. Python+selenium常用方法(Webdriver API)
  3. POJ-1861,Network,最小生成树水题,,注意题面输出有问题,不必理会~~
  4. smartctl---查看硬件接口
  5. POJ3528移石头
  6. 公路修建(Prim)
  7. (在线工具)JSON字符串转换成Java实体类(POJO)
  8. DatePickerDialog
  9. Object-C Xcode 编译提示 note: please rebuild precompiled header ZWYLPrefixHeader
  10. ***apache做301重定向的方法