美文网首页
10. 开发环境与线上环境等价

10. 开发环境与线上环境等价

作者: MlLance | 来源:发表于2020-03-28 16:37 被阅读0次

X. 开发环境与线上环境等价

尽可能的保持开发,预发布,线上环境相同

从以往经验来看,开发环境(即开发人员的本地 部署)和线上环境(外部用户访问的真实部署)之间存在着很多差异。这些差异表现在以下三个方面:

  • 时间差异: 开发人员正在编写的代码可能需要几天,几周,甚至几个月才会上线。
  • 人员差异: 开发人员编写代码,运维人员部署代码。
  • 工具差异: 开发人员或许使用 Nginx,SQLite,OS X,而线上环境使用 Apache,MySQL 以及 Linux。

12-Factor 应用想要做到 持续部署 就必须缩小本地与线上差异。 再回头看上面所描述的三个差异:

  • 缩小时间差异:开发人员可以几小时,甚至几分钟就部署代码。
  • 缩小人员差异:开发人员不只要编写代码,更应该密切参与部署过程以及代码在线上的表现。
  • 缩小工具差异:尽量保证开发环境以及线上环境的一致性。

将上述总结变为一个表格如下:

<table>
<tr>
<th></th>
<th>传统应用</th>
<th>12-Factor 应用</th>
</tr>
<tr>
<th>每次部署间隔</th>
<td>数周</td>
<td>几小时</td>
</tr>
<tr>
<th>开发人员 vs 运维人员</th>
<td>不同的人</td>
<td>相同的人</td>
</tr>
<tr>
<th>开发环境 vs 线上环境</th>
<td>不同</td>
<td>尽量接近</td>
</tr>
</table>

后端服务 是保持开发与线上等价的重要部分,例如数据库,队列系统,以及缓存。许多语言都提供了简化获取后端服务的类库,例如不同类型服务的 适配器 。下列表格提供了一些例子。

<table>
<tr>
<th>类型</th>
<th>语言</th>
<th>类库</th>
<th>适配器</th>
</tr>
<tr>
<td>数据库</td>
<td>Ruby/Rails</td>
<td>ActiveRecord</td>
<td>MySQL, PostgreSQL, SQLite</td>
</tr>
<tr>
<td>队列</td>
<td>Python/Django</td>
<td>Celery</td>
<td>RabbitMQ, Beanstalkd, Redis</td>
</tr>
<tr>
<td>缓存</td>
<td>Ruby/Rails</td>
<td>ActiveSupport::Cache</td>
<td>Memory, filesystem, Memcached</td>
</tr>
</table>

开发人员有时会觉得在本地环境中使用轻量的后端服务具有很强的吸引力,而那些更重量级的健壮的后端服务应该使用在生产环境。例如,本地使用 SQLite 线上使用 PostgreSQL;又如本地缓存在进程内存中而线上存入 Memcached。

12-Factor 应用的开发人员应该反对在不同环境间使用不同的后端服务 ,即使适配器已经可以几乎消除使用上的差异。这是因为,不同的后端服务意味着会突然出现的不兼容,从而导致测试、预发布都正常的代码在线上出现问题。这些错误会给持续部署带来阻力。从应用程序的生命周期来看,消除这种阻力需要花费很大的代价。

与此同时,轻量的本地服务也不像以前那样引人注目。借助于Homebrewapt-get等现代的打包系统,诸如Memcached、PostgreSQL、RabbitMQ 等后端服务的安装与运行也并不复杂。此外,使用类似 ChefPuppet 的声明式配置工具,结合像 Vagrant 这样轻量的虚拟环境就可以使得开发人员的本地环境与线上环境无限接近。与同步环境和持续部署所带来的益处相比,安装这些系统显然是值得的。

不同后端服务的适配器仍然是有用的,因为它们可以使移植后端服务变得简单。但应用的所有部署,这其中包括开发、预发布以及线上环境,都应该使用同一个后端服务的相同版本。

相关文章

  • 10. 开发环境与线上环境等价

    X. 开发环境与线上环境等价 尽可能的保持开发,预发布,线上环境相同 从以往经验来看,开发环境(即开发人员的本地 ...

  • SaaS应用12原则:(十)开发环境与线上环境等价

    尽可能的保持开发,预发布,线上环境相同 从以往经验来看,开发环境(即开发人员的本地部署)和线上环境(外部用户访问的...

  • 构建 Maven 环境隔离

    实际的项目环境: 本地开发环境(Local) 开发环境(Dev) 测试环境(Beta) 线上环境(Prod) 环境...

  • Lombok与Maven环境隔离

    Lombok注解 Maven环境隔离 本地开发环境(Local) 开发环境(Dev) 测试环境(Beta) 线上环...

  • 10.开发环境

    1.关于开发环境 面试官想通过开发环境了解面试者的经验;开发环境,最能体现工作产出的效率;会以聊天的形式为主,而不...

  • 10.5为网站添加接口之线上HTTP接口调用

    Chapter:10.服务端环境搭建和开发过程 10.5为网站添加接口之线上HTTP接口调用 在企业里很少会用No...

  • Xcode多环境开发

    Xcode多环境开发 在平时开发中经常会遇到多个环境下进行开发,比如说:发布到线上的时候用的的是线上环境,然后开发...

  • git开发指南

    git开发指南 分支目录 线上分支命名-意义 master 正式环境 dev 开发环境 beta测试环境 rele...

  • 环境部署变为新三层

    开发者个人环境(me | local),不再列入环境部署范畴; dev:开发团队的线上协同环境; test:测试团...

  • SpringBoot 使用(三): 配置文件详解

    代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境的配置都不一样,同时要方便各种...

网友评论

      本文标题:10. 开发环境与线上环境等价

      本文链接:https://www.haomeiwen.com/subject/reksuhtx.html