`
Goldice
  • 浏览: 107710 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Travis CI : 最小的分布式系统(一)

 
阅读更多

(本文翻译自http://www.paperplanes.de/2013/10/18/the-smallest-distributed-system.html,由@金斌_jinbin 翻译)

 

Travis CI一开始仅仅是个想法,在当时甚至还有些理想化。在这个项目启动之前,开源社区还没有一个可用的持续集成系统。

随着作为开源协作平台的Github越来越被人认可,Github也非常需要可以持续对贡献代码进行测试的服务,来保证一个开源项目始终处于稳定健康的状态。

Travis CI开始于2011年初,而且很快得到了一些试用客户。到了2011年夏天,我们每天进行700次构建。所有这些构建都是在一台构建服务器上进行的。Travis CI跟Github完美集成,目前Github还是Travis CI的主要平台。

Travis CI在持续集成领域并没有惊天动地的大动作,但它的确重新定义了一些原有的概念,并增加了一些新的想法。其中一个就是你可以在你的测试运行过程中,接近实时的看这个项目的构建日志流。

最重要的一点,Travis CI允许你通过源码里的文件(.travis.yml)来对构建过程进行配置,而不是复杂的用户界面。


Travis CI一开始的架构很简单。通过Web组件可以让项目和它的构建过程可见,同时,只要一个新的commit提交到了项目,Travis CI就可以接收到来自Github的消息,从而触发构建。

另外一个叫做hub的组件,是负责处理新的提交,将他们转化成一次构建,并且处理构建任务运行和结束时产生的结果数据。

这两个组件都是跟PostgreSQL数据库打交道。

第三部分就是用来控制构建任务本身的线程集合,它们可以用来在虚拟机实例上执行一系列的命令。

本质上,hub会显得比其他部分稍微复杂一些。当hub处理构建日志时,它需要与RabbitMQ进行消息传递。日志会以chunks流的形式从控制构建任务的线程中得到。

Hub更新数据库中的日志和构建结果信息,并且hub推送他们到Pusher。通过Pusher,Travis CI可以在构建开始或结束的时候更新用户界面。

这样的架构一直维持到了2012年,当时我们每天进行7000个构建任务。我们欣喜的看到Travis CI在开源社区越来越广泛的使用,并且开始支持11种语言,包括PHP,Python,Perl,Java 和 Erlang。

随着越来越多的使用,Travis CI越来越像是一个开源项目的必备服务了。但是不幸的是,这个系统从一开始构建的时候就没有考虑过监控。


 

过去,总是来自社区的用户通知我们系统没有正常运行,构建任务遇到异常,或是任务信息没有被处理好。

那可真是令人尴尬。我们的第一个挑战就是给系统增加监控,数据指标和日志,让Travis CI从一个业务爱好的项目转变为一个重要的商业平台。我们准备发布Travis CI的正式生产版本。

被用户告知系统没有正常运行直到今天仍然是我最大的噩梦,我们不得不努力工作建设好数据监控,以使系统能够在出现问题的一开始就及时通知。

如果没有任何数据记录或者良好的日志,我们根本不可能去搞清我们这个小分布式系统到底发生了什么。无论是从哪个方面看,Travis CI都已经是一个分布式系统了。

加入监控指标和日志是一次循序渐进的学习过程,但是最终,它们让我们可以了解这个系统正在做什么,无论是通过图表还是日志。

这对我们而言是一个巨大的提升。可见性对于运行一个分布式系统是非常重要的。

当你写一个系统时,考虑好如何监控它。

做好监控会有助于你的系统更好的在生产环境运行,而不仅仅是通过测试。

关键是,更多的监控不仅仅是让你可以对系统更了解,你也会发现那些你以前未曾想到或见到的问题。系统更高的可见性带来更多的责任感。现在我们需要去面对这样的事实:我们对系统的错误有了更多的了解,所以我们必须更有效的工作来减少这些错误所带来的影响。

 

 

  • 大小: 25.1 KB
  • 大小: 31.1 KB
  • 大小: 13.2 KB
  • 大小: 38.5 KB
分享到:
评论

相关推荐

    凤凰架构:构建可靠的大型分布式系统.pdf

    在线阅读可以通过提供的网址进行,文档被部署在GitHub Pages上,并利用Travis-CI进行持续集成和CDN加速。离线阅读则需通过克隆文档源码、安装依赖后进行编译。文档的PDF导出功能支持自动生成PDF文件,而技术演示工程...

    BarSocial-SD:UFLA分布式系统最终工作的原型

    8. **持续集成/持续部署(CI/CD)**:项目可能使用Jenkins、Travis CI或GitHub Actions等工具实现自动化构建和部署,以保证代码质量和快速迭代。 9. **安全性**:对于用户隐私和数据安全,系统可能实施了身份验证、...

    Integracao:集成GitHub com Travis Ci

    在这个场景中,我们将探讨如何将GitHub与Travis CI集成,以实现一个基于Python项目的自动化CI流程。 1. **GitHub概述** GitHub是一个面向开源及私有软件项目的托管平台,它基于分布式版本控制系统Git。开发者可以...

    TeamAmerica:流星分布式黑客马拉松2015

    10. **持续集成/持续部署(CI/CD)**:可能使用GitLab CI/CD、Travis CI或Jenkins实现自动化测试和部署,保证代码质量和项目流程的顺畅。 总的来说,"TeamAmerica"在"流星分布式黑客马拉松2015"中很可能展示了他们对...

    agile-parent:Agile 分布式微服务架构综合脚手架

    7. **持续集成/持续部署(CI/CD)**:为了保证快速迭代和高质量交付,项目可能集成了Jenkins、GitLab CI/CD或Travis CI等工具,实现代码提交自动触发构建和测试,确保每次变更都可靠。 8. **监控与日志**:为了监控...

    CI规范的管理制度(CI系列)

    7. **集成服务器**:配置如Jenkins、Travis CI或GitHub Actions等集成服务器,自动化执行构建、测试和部署任务。 8. **持续反馈**:快速反馈机制对于CI至关重要。一旦构建失败,所有相关人员应立即收到通知,以便...

    Api-Auditoria:在分布式软件体系结构一文中开发的项目。 它是模拟审核的Api

    此外,使用持续集成工具(如Jenkins、Travis CI)可以自动化测试和部署流程。 总结来说,Api-Auditoria项目是一个在分布式系统中实现API审计的工具,采用C#编程语言,涵盖了API设计、安全、监控、日志等多个方面,...

    vagrant-travisci:示例项目,显示如何使用VirtualBox在TravisCI上运行Vagrant

    Travis CI 是一款云托管的持续集成服务,广泛应用于GitHub等版本控制系统。它监听仓库的代码提交,当有新的代码推送到仓库时,Travis CI会自动拉取代码、构建项目、运行测试,并将结果报告给开发者。这对于团队协作...

    UC_Sistemas:资料库,目的是介绍在UC-分布式系统中进行的活动

    10. **持续集成/持续部署(CI/CD)**:在JavaScript项目中,Jenkins、Travis CI或GitLab CI/CD可以自动化构建、测试和部署流程,这对于保证分布式系统在多环境中的一致性非常有帮助。 通过深入研究这个UC_Sistemas...

    yun:分布式云盘项目

    同时,采用CI/CD工具(如Jenkins、GitLab CI/CD或Travis CI)自动化构建、测试和部署过程,确保代码质量和快速迭代。 总之,【yun: 分布式云盘项目】是一个涵盖了分布式系统设计、文件存储、数据安全、并发控制、...

    mqant是一款基于Golang语言的简洁,高效,高性能的分布式微服务框架-mqant.zip

    8. **版本控制与持续集成**:mqant-master这个文件名可能暗示了项目采用Git进行版本控制,并且可能支持与常见的持续集成工具(如Jenkins、Travis CI等)集成,实现自动化测试和部署。 9. **扩展性**:mqant作为一个...

    大型分布式网站架构设计与实践.带目录书签.完整版

    10. **持续集成与持续部署(CI/CD)**:Jenkins、GitLab CI/CD和Travis CI等工具帮助实现自动化测试、构建和部署,以确保快速迭代和高质量的代码发布。 通过《大型分布式网站架构设计与实践》这本书,读者可以全面...

    PyPI 官网下载 | travis-cargo-0.1.7.tar.gz

    结合以上信息,我们可以推测`travis-cargo`可能是一个用于集成Travis CI(一个持续集成/持续部署服务)和Apache ZooKeeper的Python库,它可能帮助开发者在云环境中更便捷地管理和协调分布式系统。使用这个库,开发...

    pluto-server:分布式游戏服务器使用c ++和python

    - **持续集成**: 如Jenkins或Travis CI,自动化测试和部署流程。 - **日志系统**: 如`log4cpp`或`logging`,用于收集和分析运行时信息。 ### 8. 性能优化 - **负载均衡**: 分布式系统中的节点可以动态调整负载,...

    测试归档集合.zip

    - Travis CI:云基础的CI服务,常用于GitHub项目。 5. **静态代码分析工具**: - SonarQube:用于代码质量管理,发现潜在的代码问题和漏洞。 - ESLint:JavaScript代码风格和错误检查工具。 6. **测试文档和...

    AWS-app-web:AWS应用nodejs,结合travis,显示来自S3的文件并上传文件到S3,添加数据到SQS队列和simpleDB

    SQS 是 AWS 的一个无服务器、完全托管的消息队列服务,用于解耦和扩展分布式系统。在这个应用中,当用户触发某些操作时,比如文件上传,数据会作为消息被添加到 SQS 队列。这样,后台处理程序可以从队列中取出这些...

    Ruby-Kochiku一个分布式自动化测试平台

    它与Ruby社区常用的工具如GitHub、Jenkins、Travis CI等可以无缝协作,为整个开发流程带来更高的自动化程度和质量保障。 从提供的`kochiku-master`文件来看,这很可能是Kochiku项目的源码仓库。如果你打算部署和...

    开源项目-matroskin13-babex.zip

    5. **持续集成/持续部署(CI/CD)**:为了快速迭代和确保质量,项目可能包含了Jenkins、GitLab CI/CD或Travis CI等工具的配置文件,用于自动化构建和部署流程。 6. **日志和监控**:微服务需要良好的日志记录和监控...

    基于Python分布式爬虫打造搜索引擎源码.zip

    10. **测试与持续集成**:确保代码质量和稳定性,项目可能包含单元测试、集成测试,甚至使用Jenkins或Travis CI等工具实现持续集成,自动化构建和测试过程。 以上就是基于Python分布式爬虫打造搜索引擎涉及的主要...

    baobaodistsys

    11. **持续集成/持续部署(CI/CD)**:"baobaodistsys"可能利用Jenkins、GitLab CI/CD或Travis CI等工具实现自动化构建和部署流程,以提高开发效率。 12. **微服务架构**:如果"baobaodistsys"是一个大型项目,它...

Global site tag (gtag.js) - Google Analytics