Otto开发初探——微服务依赖管理新利器
【编者按】时下,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 官方博客。
Otto开发初探——微服务依赖管理新利器的更多相关文章
- Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务
Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具:Spr ...
- 利用 istio 来对运行在 Kubernetes 上的微服务进行管理
尝试在一个准生产环境下,利用 istio 来对运行在 Kubernetes 上的微服务进行管理. 这一篇是第一篇,将一些主要的坑和环境准备工作. 内容较多,因此无法写成手把手教程,希望读者有一定 Ku ...
- EMIS快速开发平台 - 微服务版技术选型
http://demo.zuoyour.com/system/login EMIS快速开发平台 - 微服务版技术选型 开发框架:Spring Boot 2.1.3.RELEASE 微服务:Spring ...
- 清晰架构(Clean Architecture)的Go微服务: 事物管理
为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个. 事务很容易在Go中实现,但很难做到正确地实现. 需求: 将业务逻辑与事务代码分开. 在编 ...
- 基于容器微服务的PaaS云平台设计(二)通过kubernetes实现微服务容器管理
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 上一章描述了基于spring cloud的微服务实例(实 ...
- 清晰架构(Clean Architecture)的Go微服务: 日志管理
良好的日志记录可以提供丰富的日志数据,便于在调试时发现问题,从而大大提高编码效率. 记录器提供的自动化信息越多越好,日志信息也需要以简洁的方式呈现,便于找到重要的数据. 日志需求: 无需修改业务代码即 ...
- zooland 新开源的RPC项目,希望大家在开发的微服务的时候多一种选择,让微服务开发简单,并且容易上手。
zooland 我叫它动物园地,一个构思很长时间的一个项目.起初只是觉得各种通信框架都封装的很好了,但是就是差些兼容,防错,高可用.同时在使用上,不希望有多余的代码,像普通接口一样使用就可以了. 基于 ...
- 使用Hystrix进行微服务降级管理
前言:目前我们的项目是微服务架构,基于dubbo框架,服务之间的调用是通过rpc调用的.刚开始没有任何问题,项目运行健康.良好.可是过了一段时间,线上总有人反应查询订单失败,等过了一段时间才能查到.这 ...
- 微服务学习一 微服务session 管理
集群和分布式架构中: session管理有三种方法: 1: Cookie: 将Session对象保存在Cookie,保存在浏览器端.浏览器发送请求的时候,会把整个session放在请求里一起发送到se ...
随机推荐
- linux中sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
- Oracle 硬解析查询
-- 硬解析的 parse count (hard) select * from v$sysstat where name like '%parse%'; select a.value,b.name ...
- selenium Grid(一)
selenium grid Quick Start selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成.hub用来管理各个代理节点的注册 ...
- 第三十九篇、NavBar动态隐藏、设置透明、毛玻璃效果
1.动态隐藏 - (void)viewDidLoad { [super viewDidLoad]; if ([self respondsToSelector:@selector(automatical ...
- iOS开发——开发者官网注册新设备
1.第一步登陆苹果开发者中心官网,进入证书栏后如下图:点击All 或者如果是iPhone设备直接点击iPhone也行. 然后点击右上角的[+]号
- OC5_NSFileManger
// // main.m // OC5_NSFileManger // // Created by zhangxueming on 15/6/19. // Copyright (c) 2015年 zh ...
- reduce + Promise 顺序执行代码
本文地址: http://www.cnblogs.com/jasonxuli/p/4398742.html 下午的太阳晒得昏昏沉沉,和上周五一样迷糊,看一段代码半天没看明白,刚才不知不觉眯了几分钟,醒 ...
- [zz] 使用ssh公钥密钥自动登陆linux服务器
目录 .生成密匙对 .拷贝公匙到远程机 .启动登陆代理 这种方法处理后每次需要运行命令:ssh-add ~/.ssh/id_dsa 作为一名 linux 管理员,在多台 Linux 服务器上登陆进行远 ...
- OpenCV基本架构[OpenCV 笔记0]
最近正在系统学习OpenCV,将不定期发布笔记,主要按照毛星云的<OpenCV3编程入门>的顺序学习,会参考官方教程和文档.学习工具是Xcode+CMake,会对书中一部分内容更正,并加入 ...
- HTML5+J2EE实现文件异步上传
P.S. HTML5经过了W3C的8年努力,终于正式推广了.这次升级最大的就是升级了XMLHTTPRequest,让它变成了XMLHTTPRequest Level II(这有啥奇怪的?).这个对象现 ...