【编者按】时下,VagrantDevOps 软件开发商广泛作为开发阶段的本地软件开发环境,而在本文,CERT Division高级研究员介绍的 Otto 则是 Vagrant 开发团队 Hashicorp 的又一力作。本文系 OneAPM 工程师翻译。

在搭建运行在笔记本之上的开发环境时,Vagrant 的表现非常优秀。不过在将程序迁往生产环境之时,在 Vagrant 的配置文件中所存储的配置环境 Vagrantfile 就不能直接用在生产服务器之上了。Otto 在 Vagrant 基础上进行了有效的拓展,允许使用单个配置文件对开发与生产环境进行定义、配置与部署。

Otto 在管理基于微服务的应用时,解决了服务依赖关系上的重大挑战。在微服务架构中,系统被拆分为许多独立可展开的部件,而不是作为单个庞大的应用。也就是说,我们必须部署许多小型应用,而不是单个的大型应用,这样一来管理复杂性也增加了。图一展示了有多个依赖的应用。要加速本地开发环境,开发人员必须了解所有的依赖,并配置相应的 Vagrant 环境。通过遍历依赖层次结构,构建适应所有依赖关系的 Vagrant 环境,Otto 简化了基础设置配置。如果程序所依赖的服务有依赖,Otto 会自动解决、获取与构建这些依赖。

扩展Otto以解支撑代理

Otto 的入门指南包括工具的安装,构建简单 Ruby web 应用的开发环境,配置与部署 AWS 环境的方法。Otto 底层使用了 Vagrant,自动生成用来配置本地开发环境的 Vagrantfile。生成的 Vagrantfile 是一个运行时构件,用户无法修改。只有创建自定义程序,并与主要的 Vagrantfile 合并,用户才能对 Vagrantfile 的生成产生影响。

根据入门指南,在配置本地开发环境时,由于所有出站流量必须通过公司的代理服务器,这里遭遇了瓶颈。所有在开发 VM 上的 apt-get 安装都失败了。根据下面这些步骤,可以设法利用 Otto 所产生的 Vagrantfile 来解决代理配置。

第一步:首先,创建一个名为 otto-proxy 的目录,包括定义 vagrant-proxyconf 配置的 Vagrantfile 片段,参见图二。

if Vagrant.has_plugin?("vagrant-proxyconf")
config.proxy.http = "http://proxy.cmu.edu:8080"
config.proxy.https = "http://proxy.cmu.edu:8080"
config.proxy.ftp = "http://proxy.cmu.edu:8080"
config.proxy.no_proxy = "localhost,127.0.0.1,localaddress"
end

图二:Vagrantfile 片段的内容定义了 vagrant-proxyconf 配置。

第二步:接下来,我创建了定义自定义程序的 Otto Appfile,如图三所示,自定义部分定义了一个可合并的Vagrantfile片段。

application {
name = "otto-proxy"
type = "custom"
}
customization "dev-dep" {
vagrantfile = "./Vagrantfile"
}

图三:这个 appfile 定义了一个简单的自定义程序,简单指出了配置开发环境时需要合并的 Vagrantfile。

第三步:最终,修改了 Otto 入门指南中样例项目的 appfile。修改后的 appfile 见图四。增加的代码以黄色标出。

application {
name = "otto-getting-started"
type = "ruby"
dependency {
source = "../otto-proxy"
}
} project {
name = "otto-getting-started"
infrastructure = "otto-getting-started"
} infrastructure "otto-getting-started" {
type = "aws"
flavor = "simple"

图四:修改后的 otto-getting-started appfile,包括 otto-proxy 应用。

目前,在运行 otto 开发命令来配置本地开发环境时,Vagrant 虚拟机上的软件包管理器通过公司代理服务器搭建了出站连接。

点击这里查看 otto-proxy 项目的源代码,点击这里查看修改后的 otto-getting-started 项目。

需要注意的是:Otto 在现有的 infrastructure-as-code 工具之上增加了新一层抽象。但是通过 appfile 中自定义的依赖关系与自定义标签,如果必要的话,开发者可以控制底层工具的运作方式。Otto 还处于初始阶段,目前是 0.1 版本,除了特殊情况,一般可能无法满足生产环境使用,不过很有希望成为自动化环境配置与部署的一线工具。

原文链接:Developing with Otto: A First Look

OneAPM 是应用性能管理领域的新兴领军企业,能帮助企业用户和开发者轻松实现:缓慢的程序代码和 SQL 语句的实时抓取。想阅读更多技术文章,请访问 OneAPM 官方博客

Otto开发初探——微服务依赖管理新利器的更多相关文章

  1. Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务

    Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具:Spr ...

  2. 利用 istio 来对运行在 Kubernetes 上的微服务进行管理

    尝试在一个准生产环境下,利用 istio 来对运行在 Kubernetes 上的微服务进行管理. 这一篇是第一篇,将一些主要的坑和环境准备工作. 内容较多,因此无法写成手把手教程,希望读者有一定 Ku ...

  3. EMIS快速开发平台 - 微服务版技术选型

    http://demo.zuoyour.com/system/login EMIS快速开发平台 - 微服务版技术选型 开发框架:Spring Boot 2.1.3.RELEASE 微服务:Spring ...

  4. 清晰架构(Clean Architecture)的Go微服务: 事物管理

    为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个. 事务很容易在Go中实现,但很难做到正确地实现. 需求: 将业务逻辑与事务代码分开. 在编 ...

  5. 基于容器微服务的PaaS云平台设计(二)通过kubernetes实现微服务容器管理

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 上一章描述了基于spring cloud的微服务实例(实 ...

  6. 清晰架构(Clean Architecture)的Go微服务: 日志管理

    良好的日志记录可以提供丰富的日志数据,便于在调试时发现问题,从而大大提高编码效率. 记录器提供的自动化信息越多越好,日志信息也需要以简洁的方式呈现,便于找到重要的数据. 日志需求: 无需修改业务代码即 ...

  7. zooland 新开源的RPC项目,希望大家在开发的微服务的时候多一种选择,让微服务开发简单,并且容易上手。

    zooland 我叫它动物园地,一个构思很长时间的一个项目.起初只是觉得各种通信框架都封装的很好了,但是就是差些兼容,防错,高可用.同时在使用上,不希望有多余的代码,像普通接口一样使用就可以了. 基于 ...

  8. 使用Hystrix进行微服务降级管理

    前言:目前我们的项目是微服务架构,基于dubbo框架,服务之间的调用是通过rpc调用的.刚开始没有任何问题,项目运行健康.良好.可是过了一段时间,线上总有人反应查询订单失败,等过了一段时间才能查到.这 ...

  9. 微服务学习一 微服务session 管理

    集群和分布式架构中: session管理有三种方法: 1: Cookie: 将Session对象保存在Cookie,保存在浏览器端.浏览器发送请求的时候,会把整个session放在请求里一起发送到se ...

随机推荐

  1. 转(C#)Winform中MD5加密

    MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data securi ...

  2. Insert data from excel to database

    USE ESPA Truncate table dbo.Interface_Customer --Delete the table data but retain the structure exec ...

  3. ios swift reduce Method

    Swift’s API includes many functions and instance methods that reflect its functional programming her ...

  4. Contoso 大学 - 4 - 创建更加复杂的数据模型

    原文 Contoso 大学 - 4 - 创建更加复杂的数据模型 原文地址:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using- ...

  5. UIViewSubviews多个views之间的关系

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  6. 逻辑推理:在一个100条语句的列表中,第n条语句是“在这个列表中,恰有n条语句为假”,可以得出什么结论?

    <离散数学及其应用>第六版1.1练习题第43题的个人分析 题目:在一个100条语句的列表中,第n条语句是"在这个列表中,恰有n条语句为假"..........      ...

  7. C#中委托和事件的区别实例解析

    这篇文章主要介绍了C#中委托和事件的区别,并分别以实例形式展示了通过委托执行方法与通过事件执行方法,以及相关的执行流程与原理分析,需要的朋友可以参考下 本文实例分析了C#中委托和事件的区别,分享给大家 ...

  8. 永远的月亮 2007? (献给L之二)

    文/安然 您是我心中永远的月亮 已经走远在曾年少的梦想 但是,蒙胧而明亮的月光永远珍藏 夜夜升起般不忘…… 多年后的路上依旧会有迷茫 梦中,又一次回到您的课堂 感受您暴躁的激情和无言深情的期望 当又一 ...

  9. random between [a,b]、(a,b]、[a,b)

    #include <iostream> #include <ctime> #include <cstdlib> using namespace std; ; /*c ...

  10. Spark Streaming揭秘 Day26 JobGenerator源码图解

    Spark Streaming揭秘 Day26 JobGenerator源码图解 今天主要解析一下JobGenerator,它相当于一个转换器,和机器学习的pipeline比较类似,因为最终运行在Sp ...