外企也半夜发布上线吗?

0 别把问题想得太复杂

  • 如果有灰度发布的能力,最好白天发布;
  • 如果没有灰度发布,只能在半夜发布。

即使有灰度发布能力,也不要沾沾自喜,好好反思一下你们的灰度发布是否真的经得起考验,还是仅仅是装装样子。

回滚方案最好在上级环境中使用生产数据演练,避免在0.1%的情况下需要回滚时,发现无法简单地通过发布上一版本服务来回滚,届时会非常尴尬。

同时,服务类型也需要考虑,比如大型网络游戏(如《王者荣耀》),都是在午夜时间停服维护,这其实说明了问题。

1 形式上,必须凌晨!

必须得在凌晨上线。程序员的工作有一个“原罪”,就是别人很难看出来你有多努力,尤其是管理层。如果你不上班搞凌晨发布,管理层看不到你的努力,尤其是部门的整体表现。既然能选择凌晨上线,那就凌晨上线!

如果有加班费或者调休补偿,凌晨上线大家嗑着瓜子儿,吃着零食,公司提供的外卖和饮料,像开派对一样,和乐融融地等待凌晨。如果有领导或者HR路过,大家一个个愁眉苦脸,盯着屏幕苦苦思索,心里想,怎么还不结束呢。

即使上线跟你没关系,也要来,大家要在一起,部门派对。技术上早就不需要这么干了,但我们这里就是喜欢看苦情戏,必须得凌晨,只是这种凌晨非彼凌晨,一起开party~

2 说点实际的

外企的发布流程

对于外企来说,发布流程相对规范:

  1. 项目规模小,客户不多: 这种情况下,随时可以上线,比如一些管理系统或新项目的上线。

  2. 项目规模大,用户量大: 这种情况下,通常选择访问量较少的时间上线,一般是凌晨,有时甚至是周末的凌晨。

  • 年底会确定下一年的上线日期(release day),每个上线日之间会间隔一个半月,这个周期相当于敏捷开发中的迭代周期。如果业务组有需要,可以通过流程,在规定的上线日之外进行发布。
  • 每年都有代码冻结期(code freeze period),通常是12月冻结一个月,因为圣诞假期维护人员放假,处理问题不方便,所以这个月不允许发布。如果需要发布,需要高级别领导批准。
  • 发布环境分为测试、集成测试和生产环境。测试环境每个组可以自由发布,集成测试环境需要邮件通知支持组进行发布,生产环境只能在发布日发布。发布通常是一键部署(one click deployment),开发组提前在Jenkins或Udeploy等部署工具中写好脚本,经过支持组审核后,由支持组在发布日进行实际操作。
  • 发布日前一周的周五会封闭集成测试环境,各开发组应该提前一周将代码部署到集成测试环境并通过测试,确保发布时风险最小。如果在发布周内发现问题,需要重新部署测试,需要部门领导审批。
  • 发布日一般在美国时间周五下午9点(中国时间周六上午9点),各组提前填写发布申请报告,通过审批后通知支持组进行发布。发布完成后,各组需要在生产环境上确认,没有问题则表示发布成功。

小公司的发布流程

一些小公司的发布流程类似于上述流程,都是敏捷开发流程,发布前在测试环境上测试代码,发布前代码会封版,确保代码质量。

互联网公司发布流程

对于包含高并发组件(如Redis集群、Kafka等)的互联网公司,发布过程更加复杂,不仅需要管理代码,还需要重启中间件,或使用中间件清洗或导入数据。如果能在面试中证明自己参与过发布,并解决过发布中的问题,那么一定能有效证明自己的商业项目经验。

结论

无论是大公司还是小公司,凌晨发布都是为了确保用户影响最小化,同时也是为了在特殊情况下能快速响应并回滚。理解并掌握发布流程,能够帮助开发人员更好地应对上线过程中的各种问题。

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都技术专家,多家大厂后端一线研发经验,在分布式系统、和大数据系统等方面有多年的研究和实践经验,拥有从零到一的大数据平台和基础架构研发经验,对分布式存储、数据平台架构、数据仓库等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化

  • 活动&优惠券等营销中台建设

  • 交易平台及数据中台等架构和开发设计

  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化

    目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

  • 编程严选网

    本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/644062.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

区块链技术和应用二

前言 学习长安链的一些基本原理 官网:长安链开源文档 b站课程:区块链基础与应用 一、共识算法 1.1 POW工作量证明 最长链共识,没听明白 1.2 51%攻击 二、区块链的发展 2.1 区块链1.0到3.0 2.2 共有链、联盟链、私有链 2.3 发展趋势 2.4 扩…

Spring Boot Interceptor(拦截器使用及原理)

之前的博客中讲解了关于 Spring AOP的思想和原理,而实际开发中Spring Boot对于AOP的思想的具体实现就是Spring Boot Interceptor。在 Spring Boot 应用程序开发中,拦截器(Interceptor)是一个非常有用的工具。它允许我们在 HTTP 请…

Unity修改Project下的Assets的子文件的图标

Unity修改文件夹的图标 示例: 在右键可以创建指定文件夹。 github链接 https://github.com/SeaeeesSan/SimpleFolderIconCSDN资源的链接 https://download.csdn.net/download/GoodCooking/89347361 去GitHub下载支持原作者哦。重要的事情 截图来自GitHub 。 U…

文件编码格式查看和转换

1、查看文件编码格式 记事本:打开文件后,点击“文件”--“另存为”,可查看文件的编码格式。**Notepad**:打开文件后,即可在右下角查看文件的编码格式。vim:打开文件后,输入“:set fileencoding…

网络安全基础技术扫盲篇 — 名词解释

网络模块基础(网络拓扑图、网络设备、安全设备) 用通俗易懂的话说: 网络拓扑图:它就像一张网络世界的地图,它展现了我们数不清的网站、服务器和设备是如何相互连接的。用简单的话说,它就是给我们指路、告…

人工智能 框架 paddlepaddle 飞桨 使用指南 使用例子 线性回归模型demo 详解

安装过程&使用指南&线性回归模型 使用例子 本来预想 是安装 到 conda 版本的 11.7的 但是电脑没有gpu 所以 安装过程稍有变动,下面简单讲下 conda create -n paddle_env117 python=3.9 由于想安装11.7版本 py 是3.9 所以虚拟环境名称也是 paddle_env117 activa…

C语言 | Leetcode C语言题解之第111题二叉树的最小深度

题目: 题解: typedef struct {int val;struct TreeNode *node;struct queNode *next; } queNode;void init(queNode **p, int val, struct TreeNode *node) {(*p) (queNode *)malloc(sizeof(queNode));(*p)->val val;(*p)->node node;(*p)->…

【pyspark速成专家】7_SparkSQL编程1

目录 一,RDD,DataFrame和DataSet对比 二,创建DataFrame 本节将介绍SparkSQL编程基本概念和基本用法。 不同于RDD编程的命令式编程范式,SparkSQL编程是一种声明式编程范式,我们可以通过SQL语句或者调用DataFrame的相…

编程实现标题栏窗口摇动——显示桌面的未公开细节研究

目录 前言 一、“窗口摇动”功能内部原理 二、explorer.exe 中的 “窗口抖动” 实现 三、“切换到桌面” 功能所扩展的内部细节 四、概念验证 五、进一步研究如何自定义保留窗口列表 原文出处链接:[https://blog.csdn.net/qq_59075481/article/details/139204…

ELK 日志监控平台(二)- 优化日志格式

文章目录 ELK 日志监控平台(二)- 优化日志格式1.日志输出要点2.优化应用的日志格式2.1.确定日志输出要点来源2.1.1.服务名称2.1.2.服务环境2.1.3.日志级别2.1.4.日志输出时间2.1.5.日志内容2.1.6.日志输出对象2.1.7.线程名称 2.2.logback.xml修改日志输出…

win10安装rabbitmq

安装 第一步:下载并安装erlang RabbitMQ服务端代码是使用并发式语言Erlang编写,因此首先需要安装Erlang下载地址:http://www.erlang.org/downloads采用默认安装即可,选择适合的安装路径 添加环境变量 第二步:下载并…

【DevOps】深入了解RabbitMQ:AMQP协议基础、消息队列工作原理和应用场景

目录 一、核心功能 二、优势 三、核心概念 四、工作原理 五、交换机类型 六、消息确认 七、持久性和可靠性 八、插件和扩展 九、集群和镜像队列 十、客户端库 十一、管理界面 十二、应用场景 RabbitMQ是一个基于AMQP协议的消息队列中间件,提供高可用、可…

【数据结构与算法 刷题系列】移除链表元素

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:数据结构与算法刷题系列(C语言) 期待您的关注 目录 一、问题描述 二、解题思路 三、源代码实现 一、问题…

Qt for android 获取USB设备列表(二)JNI方式 获取

简介 基于上篇 [Qt for android 获取USB设备列表(一)Java方式 获取], 这篇就纯粹多了, 直接将上篇代码转换成JNI方式即可。即所有的设备连接与上篇一致。 (https://listentome.blog.csdn.net/article/details/139205850) 关键代码…

UTC与GPS时间转换-[week, sow]

UTC与GPS时间转换-[week, sow] utc2gpsgps2utc测试参考 Ref: Global Positioning System utc2gps matlab源码 function res utc2gps(utc_t, weekStart)%% parameterssec_day 86400;sec_week 604800;leapsec 18; % 默认周一为一周的开始if nargin < 2weekStart d…

HarmonyOS-MPChart绘制一条虚实相接的曲线

本文是基于鸿蒙三方库mpchart&#xff08;OpenHarmony-SIG/ohos-MPChart&#xff09;的使用&#xff0c;自定义绘制方法&#xff0c;绘制一条虚实相接的曲线。 mpchart本身的绘制功能是不支持虚实相接的曲线的&#xff0c;要么完全是实线&#xff0c;要么完全是虚线。那么当我…

VTK 数据处理:特征边提取

VTK 数据处理&#xff1a;特征边提取 VTK 数据处理&#xff1a;特征边提取原理实例 1&#xff1a;边界边提取实例 2&#xff1a;模型特征边提取实例 3&#xff1a;利用 vtkFeatureEdges 提取的边界补洞实例 4&#xff1a;利用 vtkFillHolesFilter 补洞 VTK 数据处理&#xff1a…

[C语言]自定义类型详解:结构体、联合体、枚举

目录 &#x1f680;结构体 &#x1f525;结构体类型的声明 &#x1f525;结构的自引用 &#x1f525;结构体变量的定义和初始化 &#x1f525;结构体内存对齐 &#x1f525;结构体传参 &#x1f525;结构体实现位段&#xff08;位段的填充&可移植性&#xff09; &a…

企业异地网络组网:SD-WAN解决方案的优势

在当今全球化的商业环境中&#xff0c;企业的业务扩展已不再局限于本地或单一国家。随着分公司和子公司的不断增加&#xff0c;企业总部与这些分支机构之间的数据通信和资源共享变得尤为重要。然而&#xff0c;传统的网络访问方式&#xff0c;如点对点电路和多协议标签交换&…

17.7K星开源产品分析平台:Posthog

Posthog&#xff1a;开源洞察&#xff0c;产品优化的得力助手 - 精选真开源&#xff0c;释放新价值。 概览 PostHog是一个全面开源的平台&#xff0c;旨在帮助团队构建更好的产品。它提供了从产品分析到会话回放、功能标志和A/B测试等一系列工具&#xff0c;支持自托管&#x…