2019独角兽企业重金招聘Python工程师标准>>>

【编者按】时下,Vagrant 被 DevOps 软件开发商广泛作为开发阶段的本地软件开发环境,而在本文,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 官方博客。

转载于:https://my.oschina.net/oneapmofficial/blog/517473

Otto开发初探——微服务依赖管理新利器相关推荐

  1. 微服务架构开发实战日志与监控:微服务日志管理将面临的挑战

    微服务的日志与监控:微服务日志管理将面临的挑战 日志来自正在运行的进程的事件流.对于传统的JavaEE应用程序而言,有许多框架和库可用于日志记录.Java Logging (JUL)是Java自身所提 ...

  2. 【关于分布式系统开发和微服务架构自我心得小记

    一.一个完整项目为何要分布式开发? 完整项目业务实现是相当庞大,程序员在修改一个业务程序的的代码时,可能会影响整个项目的启动和部署,项目代码一个地方修改会产生很多问题,不利于程序的开发,同时项目的启动 ...

  3. 开源推荐-C++开发的微服务框架Tars

    Tars项目于2017年4月开源,BSD3协议,至今已有5年.在软件层面,社区的版本保持稳定的迭代,支持了多语言微服务的开发和治理:在硬件层面,也移植到Arm生态上.Tars可以帮助开发人员和企业,以 ...

  4. golang微服务框架对比_Go语言开发的微服务框架,你了解多少?

    Go语言开发的微服务框架 1.项目名称:Istio 项目简介:Istio是由Google.IBM和Lyft开源的微服务管理.保护和监控框架.使用istio可以很简单的创建具有负载均衡.服务间认证.监控 ...

  5. SpringCloud + kafka + ELK 搭建微服务日志管理平台

    SpringCloud + kafka + ELK 搭建微服务日志管理平台 2019-12-31,写在前面的话 今天是2019最后一天了,最近几天都在搞这块微服务日志管理的事情,有很多种方案实现,每种 ...

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

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

  7. 适用于Java开发人员的微服务:管理安全性和机密

    关于麦洛 麦洛是 Java 开发者和技术爱好者. 对 Java 相关技术特别感兴趣,包括 javaee. Spring系列. 微服务等 作者:Andrey Redko 原文:Microservices ...

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

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

  9. 从敏捷开发到微服务,maybe再到中台

    -- 先说下准备这个的背景: 本来是想让我分享下敏捷开发,可能是听我说为as**搭建并完善了敏捷开发体系的原因吧. 我一般分享一个东西,希望大家能真的理解,而不只是知道. 我不大相信有万能的东西,不希 ...

  10. 微服务架构的四大金刚利器

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 Photo @Christopher Campbell 文 | 孔 ...

最新文章

  1. 最长连续序列—leetcode128
  2. Layout布局(补充)
  3. 基于Server-Sent Event的简单在线聊天室
  4. vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误的解决方法
  5. 中关村win11 32位全新官方版镜像v2021.07
  6. maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
  7. 从iPhone SE到产品精神——一个科技记者的自述
  8. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_4_方法引用_通过super引用父类的...
  9. paip.LUA脚本的开发调试总结..
  10. android倒计时功能,Android 倒计时的五种实现方式
  11. feign接口返回泛型设置属性为null问题
  12. 2018-03-25-利用动态二进制加密实现新型一句话木马之.NET篇
  13. 漫谈程序员系列 软件开发的十八般乐趣
  14. 使用python依次比较两个pcap文件中的每个报文
  15. An assembly specified in the application dependencies manifest
  16. Linux 30岁啦,这些历史你知道多少呢?
  17. 关于接口幂等性问题的简单总结
  18. C#SpinWait和volatile一点温习
  19. Objective C 常用代码片段制作(code snippet library)
  20. 光纤软件测试,20m光纤速度怎么测试 20m光纤速度测试方法【详解】

热门文章

  1. php二分查找法实例
  2. log4j日志输出配置
  3. Centos7 卸载自带的OpenJDK
  4. 如何避免后台IO高负载造成的长时间JVM GC停顿(转)
  5. 491 Increasing Subsequences 递增子序列
  6. 从键盘输入n个整数,求它们的最小公倍数
  7. linux中的sed指令
  8. phpcms v9二次开发之模型类的应用(2)
  9. [Linux] 通过shell给unix socket发送数据
  10. MongoDB lsm降低 disk lantency