【编者按】时下,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. Red Hat Enterprise Linux 5安装序列号

    为了保证安装的组件和订阅相匹配,红帽企业 Linux 5 需要输入一个安装号.它被用来配置安装程序来提供正确的软件包.安装号码包含在你的订阅里. 如果您没有输入安装号码,只有核心服务器或 Deskto ...

  2. C# winform滚动字幕

    private void timer1_Tick(object sender, EventArgs e)//用Timer来控制滚动速度 { label1.Left -= 2;//设置label1左边缘 ...

  3. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(五)图解通过Fiddler加速开发

    Fiddler是Windows底下最强大的请求代理调试工具,监控任何浏览器的HTTP/HTTPS流量,窜改客户端请求和服务器响应,解密HTTPS Web会话,图4.44为Fiddler原理示意图. 图 ...

  4. 创建featureclass,为它赋别名,并移动到数据集下

    if (pOutFtrClass == null) { //continue; //创建featureclass //得到规范的字段集 IFields pFields = pFeatureClass. ...

  5. 30分钟搭建一个小型网站框架(python django)

    最近因为要做一个小型的网站,需求很简单有点像公司内部的管理网站,和室友一起倒腾,发现了一些坑.我自己之前没有接触过python 但是发现真的非常好上手. 我们没人会前端,所以最怕修改网页,一开始选择了 ...

  6. 解决ionic在ios无法使用focus,ios focus失效的问题

    最近也偷懒,很久没有写博客了.今天在项目中遇到了这个奇葩的问题,基于ionic的ios的hybird APP 无法使用focus()获取焦点和键盘的问题. 问题:基于ionic的ios的hybird ...

  7. 利用WeX5集成百度地图

    最近做一个地图类的app经过几天的摸索,终于完成百度地图集成的界面先看效果:1.加载完成之后,页面加载制定位置的地图2.顶部能够输入地图的关键字,地图显示符合条件的下拉列表3.用户选择了相应的选项后, ...

  8. [Interview][CodingExam]

    這次去Interview, 其中有一個公司 把我列為 2/25的考慮對象, 在Final 的 1/2, 我被刷掉了. 因為第一輪的程式,我稍微google了一下,參考了既有的寫法. 即使第二輪我用完全 ...

  9. 6个好用的Web开发工具

    在过去的几年间,涌现出了很多Web开发工具,它们大多还是比较吸引人的,方便了我们的工作.我们可以学习一下这些新东西,短时间就可以拓宽思路(PHP100推荐:学习10分钟,改变你的程序员生涯).这些应用 ...

  10. discuz!X2.5技术文档

    discuz!系统常量: DISCUZ_ROOT //网站根目录 TIMESTAMP   //程序执行的时间戳 CHARSET     //程序的编码类型 FORMHASH    //HASH值 其余 ...