【编者按】时下,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. 给 Android 初学者的 Gradle 知识普及

    给 Android 初学者的 Gradle 知识普及:http://gold.xitu.io/entry/5778f8bd165abd0054b443b0/promote?utm_source=bai ...

  2. (转)深入探讨在集群环境中使用 EhCache 缓存系统

    简介: EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider.本文充分的介绍了 EhCache 缓存系统对集群环境的 ...

  3. [Guava学习笔记]Basic Utilities: Null, 前置条件, Object方法, 排序, 异常

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3842433.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  4. OCI-DML-更新数据库中不存在的字段

    用gtest来测试oracle中oci方式的SQL语句操作,在测试update数据库中不存在的异常案例的时候,日志没有报错,但是结束后跳出了数据库连接 gtest也没有给出正常的结果,本身update ...

  5. 转载 C# BindingSource

    1.引言 BindingSource组件是数据源和控件间的一座桥,同时提供了大量的API和Event供我们使用.使用这些API我们可以将Code与各种具体类型数据源进行解耦:使用这些Event我们可以 ...

  6. ToolStripStatusLabel设置时间自动更新

    在使用委托设置界面上ToolStripStatusLabel类型的控件时间是,发现不能使用自定义的委托方法,在往上查找了一下发现不能使用involve来线程调用.因此只能使用原生委托方法. //代理p ...

  7. 静态的html页面想要设置使用浏览器缓存

    设置html页面缓存方法: 静态的html页面想要设置使用缓存: 通过HTTP的META设置expires和cache-control code 1.  <meta http-equiv=&qu ...

  8. jquery返回顶部特效

    <style> p#back-to-top{position:fixed; bottom:100px;right:10px; display: none; } p#back-to-top ...

  9. vhost设定

    vhost设定   http.conf <Directory /> AllowOverride none #Require all denied </Directory>   ...

  10. linux 正则表达式深度解析

    正则表达式的文法分为3种标准:BRE.ERE 和 ARE.其中 BER 和 ERE 属于 POSIX 标准,ARE 则是由各家定义的扩展   简介 大体来讲,正则表达式的文法分为3种标准:BRE.ER ...