资讯专栏INFORMATION COLUMN

【效率专精系列】Beta环境不需要,本地联调拯救开发效率

cc17 / 1799人阅读

摘要:目前团队中前后端联调是较之个人多带带开发相对耗时的一个环节,主要体现在环境下的部署时间较长。本文的目的是通过将联调本地化,减少部分枯燥劳动以及无效的等待时间,提高团队的开发效率。不需要更改的为外部,保持即可。

目前团队中前后端联调是较之个人多带带开发相对耗时的一个环节,主要体现在:

beta环境下的部署时间较长。首先部署beta需要经过push分支、合并冲突、build、部署四个步骤。在不考虑分支冲突的情况下,由于白天CI服务器压力较大,以商户后台应用为例,build耗时约1-2min,部署耗时约3-5min。本地的build则相对快得多,冷部署时间则和beta服务器差不多。

代码迭代过程中等待时间所占比例较多。迭代具体指代码更新 - 编译&部署 - 验证 - 代码更新的开发循环,而在beta编译和部署时间则是这个循环的大头,包括切换CI页面的时间、操作push&update的时间、等待build的时间、等待部署的时间,每一步都需要肉眼确认,无法自动化。虽然人脑上下文切换的时间如果熟练之后也挺快的,但是beta部署不像本地部署可以应用热部署技术,beta部署的时间代价无法缩减。

其他分支可能的干扰。由于beta上存在其他并行开发的分支,如果存在分支冲突,根据冲突行数和对业务代码的了解程度的不同,则存在极不确定的merge时间,但是实际上merge步骤应该放到联调后和上线前,以保证不会因为分支上线时间的调整导致merge工作量的浪费。

本文的目的是通过将联调本地化,减少部分枯燥劳动、以及无效的等待时间,提高团队的开发效率。

业务团队目前开发的API基本是两种形式:WebAPI和RpcAPI,WebAPI通常是指以超文本传输协议(HTTP/HTTPS)为基础的API,是现代流行的对外部第三方开发者提供服务的方式。例如Github API,它的编码风格——特征状态转移(Rest)被大家视为经典;RpcAPI则是通过各类RPC协议为基础的API,各个公司的组件有所不同,团队中用的是Pigeon。

下文将分为相应的两个部分阐述。

基于Tomcat的WebAPI

为了做到本地联调,只需要确保前端能访问到后端Tomcat上的应用即可。以macOS为例,我收集了相关的资料,有些步骤是实验证明不必要的,有些步骤则是必须的。

防火墙权限和端口映射配置

【不需要】关闭系统偏好设置-安全性与隐私-防火墙

【需要】设置防火墙的端口转发和访问本机外网IP的权限。具体的设置方法不再赘述。

# 对本地IP的Tomcat默认端口8080访问重定向到80端口,这样就可以直接使用域名访问了,避免有些应用会禁止非80端口的访问。
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080
rdr pass on en0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080

# 类似的,允许外部机器通过外网IP(172.22.54.89)访问本机,顺便把8080端口重定向也设置了
rdr pass on lo0 inet proto tcp from any to 172.22.54.89 port 80 -> 172.22.54.89 port 8080
rdr pass on en0 inet proto tcp from any to 172.22.54.89 port 80 -> 172.22.54.89 port 8080
Hosts配置

配置文件位于/etc/hosts

【不一定需要】将beta域名的DNS地址重定向到本地

#127.0.0.1    web-application.dev.meituan.com
IP地址配置

【不一定需要】双方机器的IP切换到不同路由器下。

这是因为无线热点配置了AP隔离的安全特性:挂在同一Wifi AP下的机器禁止通过路由机(其实是交换机)本身相互访问。

ID 机器 SSID IP
1 mac mtdp 172.22.54.89
2 mobile mtdp_tech 172.22.38.121
3 mobile mtdp 172.22.50.98

1号机访问2号机的traceroute回显,可以看到正常访问。

1号机访问3号机的traceroute回显,可以看到网络包在网关这一层就被丢弃了。这也就解释了mac和手机处于mtdp时,Charles抓包失败的情况。

Tomcat的配置

配置文件位于%TOMCAT_HOME%/conf/context.xml

【不需要】设置如下的IP过滤器,保持默认即可。



【不需要】更改Engine的defaultHost为外部IP,保持localhost即可。

【不需要】更改Host的name为外部IP,保持localhost即可。

基于Pigeon的RpcAPI

【需要】配置相同的泳道。

Pigeon是公司内部的Rpc组件,支持泳道特性,大大简化了配置过程。配置了泳道,所有的请求也会被隔离起来了,在A泳道里的请求只会发送给A,而不会发送给B。利用该特性,我们可以把Rpc上下游的服务都加入到同一个泳道中,使双方的IP位于服务发现列表的第一位。

上下游双方编辑本地文件/data/webapps/appenv,在文件末尾新添加一行swimlane=XXX,此处的值可以是任意的,尽量不要和其他人配置相同就可以了。然后双方各自启动服务,在test.pigeon.sankuai.com中或者访问ServiceIP:4080/services确认已位于统一泳道。

Reference

【二层隔离技术漫谈】“一:为什么要二层隔离”&“二:端口隔离技术”

泳道配置

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70463.html

相关文章

  • 效率专精系列】我有一个梦想:提高开发效率,晚上回家吃鸡

    摘要:效率专精系列善用统一描述语言提升开发效率分钟搞定环境配置与使用考虑到篇幅较长的文档反复修改的情况,要快速找到修改点比较困难。 之前零零散散写了几篇文章,主要是实际开发过程中一些效率痛点和相应的改善方法。今天抽空温故知新,把之前的内容串起来,做了个小总结,即《效率专精系列》小系列的总集篇。 回顾项目开发流程 开发一个新项目时,开发流程大概分成以下几步: 设计方案,并落地成设计文档 设计...

    zhaot 评论0 收藏0
  • 效率专精系列】善用API统一描述语言提升RestAPI开发效率

    摘要:其标准为前身是,提供强大的在线编辑功能,包括语法高亮错误提示自动完成实时预览,并且支持用户以格式撰写导入导出转换文档。 团队内部RestAPI开发采用设计驱动开发的模式,即使用API设计文档解耦前端和后端的开发过程,双方只在联调与测试时耦合。在实际开发和与前端合作的过程中,受限于众多因素的影响,开发效率还有进一步提高的空间。本文的目的是优化工具链支持,减少一部分重复和枯燥的劳动。 现状...

    tianyu 评论0 收藏0
  • 效率专精系列】几种常见的JVM热部署技术及实现难点浅谈

    摘要:而热部署技术能够帮助开发人员减少重新部署的等待时间。本文的目的为调研热部署的技术现状及其对开发效率的帮助,并简单梳理其技术实现的难点。热部署技术总结热部署目前有多种技术实现官方开源商业。 开发、自测、联调期间代码可能会被频繁地修改,通常即使只增加了一行代码,都需要重启容器以检查执行效果。而热部署技术能够帮助开发人员减少重新部署的等待时间。本文的目的为调研热部署的技术现状及其对开发效率的...

    dongfangyiyu 评论0 收藏0
  • 效率专精系列】善用插件提升MyBatis开发效率

    摘要:通过插件更优雅地生成和的样板代码通过插件不污染地实现优雅分页。使用步骤引入依赖,在或的配置中进行配置。提供语法提示自动补全错误提示导航功能。该插件提供了类似的功能,根据接口的方法名推断含义,然后在中直接生成对应的。 团队使用Mybatis作为数据库访问框架。不同于Hibernate这种采用经典面向对象思想设计的ORM框架,Mybatis是面向过程的,它只做了过程到SQL语句的映射。两者...

    Kylin_Mountain 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<