服务器部署邮件功能

Even the best software development teams I work with struggle to solve the problem of completely automated deployments to their production environments. The biggest hurdles to this tend to take the form of:

即使是最好的软件开发团队,我也要竭尽全力解决向其生产环境完全自动化部署的问题。 最大的障碍往往表现为:

  • Production change management that requires manual approval需要人工批准的生产变更管理
  • Even microservices architectures that have dependencies on multiple services being bundled and deployed together甚至依赖于捆绑和部署在一起的多个服务的微服务架构
  • Unable to separate the idea of a version and deployment无法区分版本和部署的想法

There are several strategies we can apply to solve those points individually, but one simple trick to solving all these issues with one pattern is to apply Feature Flags to your code.

我们可以采用几种策略来单独解决这些问题,但是用一种模式解决所有这些问题的一个简单技巧就是将特征标志应用于代码。

终极左移开发实践 (Ultimate Shift-Left Development Practices)

Source资源

It does not matter if you are developing on an older monolithic application or a greenfield microservices architecture application; you can introduce feature flagging into either pattern. In addition, with the industry standard of agile development, it can be near impossible to code an entire net new feature in a single sprint. Using feature flags, we can simply default our new code to “off" and regardless of who asks for what during our sprint, we can package our app and deploy it without worrying about something breaking.

无论是在较旧的单片应用程序还是未开发的微服务体系结构应用程序上进行开发,都无关紧要。 您可以将特征标记引入任一模式。 此外,采用敏捷开发的行业标准,几乎不可能在单个sprint中编写整个网络新功能。 使用功能标志,我们可以简单地将新代码默认设置为“关闭”,并且无论谁在冲刺期间要求什么,我们都可以打包应用程序并进行部署,而不必担心会发生问题。

在生产中进行测试! (Test in Production!)

Yes, you’ve read that right. I am advocating you use feature flags to test in prod! Alright, well, hold on — before you start getting crazy thoughts and think I’ve lost my mind, let me clarify.

是的,您没有看错。 我提倡您使用功能标记在产品中进行测试! 好吧,好吧,坚持下去-在您开始发疯的想法并认为我已经失去理智之前,让我澄清一下。

There are a few areas where we can use feature flags and turn things on in production without causing a major impact to our end-users:

在一些区域中,我们可以使用功能标记并在生产中启用某些功能,而又不会对最终用户造成重大影响:

  • Background load testing: Let's say we have a new feature that we know is going to be pretty chatty. Maybe it's the ability to send real-time messages to other users or real-time collaboration on a document. Instead of trying to simulate user load and action in a QA/performance environment before flipping the switch in production and releasing our shiny new feature, we can actually use real users to simulate the traffic load. This is actually a famous tactic Facebook used before rolling out messaging to its user base. For months, bits of JavaScript were sending messages to your other friends, and unless you had a packet sniffer open, you’d never know!

    后台负载测试 :假设我们有一个新功能,我们知道该功能将非常实用。 也许这是向其他用户发送实时消息或对文档进行实时协作的能力。 我们实际上可以使用真实的用户来模拟流量负载,而不必在生产环境中切换开关并释放闪亮的新功能之前在QA /性能环境中模拟用户负载和操作。 实际上,这是Facebook在向用户群发送消息之前使用的一种著名策略。 几个月以来,JavaScript一直在向您的其他朋友发送消息,并且除非您打开数据包嗅探器,否则您将一无所知!

  • Partial user rollout: This is more akin to a canary deployment but instead, we determine some criteria for a subset of users and roll out the new feature for them while others don’t even have the option to see it. This can be great when you have a large user base. This gives you the ability to ensure the feature you’ve built out is something usable that users will take advantage of, otherwise turn it off and focus on something different. Great for hypothesis-driven development.

    部分用户部署 :这更类似于金丝雀部署,但是,我们为部分用户确定了一些条件,并为他们推出了新功能,而其他用户甚至没有选择看到它。 当您拥有庞大的用户群时,这可能会很棒。 这使您能够确保已构建的功能是用户可以利用的有用功能,否则请关闭功能并专注于其他功能。 非常适合假设驱动的开发。

提供终极的商业价值 (Provide the Ultimate Business Value)

Source资源

Taking a step back for a moment; let’s review the problem we are trying to solve. Too often, our GIT branching strategy is extremely difficult to line up with deployable artifacts. This becomes very apparent in environments between dev and prod. There are several instances where we want QA and full end-to-end testing to take place in pre-production, but our business partners need to demo functionality for critical stakeholders. So do we put manual gates in our CI/CD pipeline? Well, that can be a pain if we don’t have any conflicting interests in a particular environment. However, just like production, if we enable automatic deployment, there are potentially external factors that influence our deployment process that is nearly impossible to account for in the design of our CI/CD pipeline.

退后一会儿; 让我们回顾一下我们要解决的问题。 很多时候,我们的GIT分支策略很难与可部署的工件对齐。 这在开发人员和生产人员之间的环境中非常明显。 在某些情况下,我们希望在预生产中进行质量检查和完整的端到端测试,但是我们的业务合作伙伴需要为关键利益相关者演示功能。 那么,我们是否在CI / CD管道中放置手动门? 好吧,如果我们在特定环境中没有任何利益冲突,那将是一个痛苦。 但是,就像生产一样,如果我们启用自动部署,则潜在的外部因素会影响我们的部署过程,这在CI / CD管道的设计中几乎是不可能解决的。

The only solution for this becomes feature flagging. Feature flags externalize version code from releases. So while we may continue to increase the version of our artifacts, features are no longer tied directly to that artifact. This gives more control to the business to decide when to turn things on (or off) and simplify our pipeline.

唯一的解决方案是功能标记 。 功能标志将版本中的版本代码外部化。 因此,尽管我们可能会继续增加工件的版本,但是功能不再直接与该工件相关。 这为企业提供了更多控制权,以决定何时打开(或关闭)设备并简化我们的流程。

警告:防止意大利面代码 (Warning: Prevent Spaghetti Code)

Source资源

Let me provide a warning right now: feature flags are great, but don’t start developing with this pattern without a plan. Too often, nasty spaghetti code gets implemented without proper review and standardization of this programming paradigm.

现在让我提供警告:功能标记很棒,但是如果没有计划就不要以这种模式开始开发 。 通常,在没有适当审查和标准化此编程范例的情况下,实现了令人讨厌的意大利面条式代码。

Like most things, don’t reinvent the wheel. Take advantage of one of these standard open-source libraries to keep your code clean:

像大多数事情一样,不要重新发明轮子。 利用以下标准开放源代码库之一来保持您的代码干净:

  • FeatureFlags.io

    FeatureFlags.io

  • FF4J

    FF4J

  • Unleash

    发挥

示例功能标志代码: (Example feature flag code:)

结论 (Conclusion)

Feature flags solve a multitude of issues that arise when we try to deploy code to production through automation and as soon as it's ready to ship.

功能标记解决了许多问题,这些问题在我们尝试通过自动化并准备好将其交付时将代码部署到生产中时出现。

We, as developers, stop worrying about “releases" and start simply shipping code letting the business turn on functionality as they see fit.

作为开发人员,我们不再担心“发布”,而只是开始发布代码,使业务按他们认为合适的方式开启功能。

Behind the scenes, we can test features to subsets of users or even test with real users without them knowing to allow us to get the truest understanding of how our application scales.

在幕后,我们可以向用户子集测试功能,甚至可以与真实用户一起测试,而无需让他们真正了解我们的应用程序扩展方式。

Ultimately, it takes a development team with the desire to code in this new paradigm, and business partners who wish to deliver features quicker for their users!

最终,需要一个开发团队以这种新范例进行编码,而业务合作伙伴则希望为其用户更快地交付功能!

翻译自: https://medium.com/better-programming/feature-flags-for-true-continuous-deployment-14175f825ac5

服务器部署邮件功能


http://www.taodudu.cc/news/show-4479915.html

相关文章:

  • 决策树 建模_主题建模到类别树中
  • 我在Flutter的前24小时
  • 消息队列:比较Beanstalkd,IronMQ和Amazon SQS
  • 数据结构和机器学习哪个更难_如何通过更少的数据主动学习来做更多事情
  • emmet之css语法_使用Emmet加快HTML和CSS的生产
  • 面向计算机架构的机器学习
  • 预制体与非预制体_为什么更多的Web设计师应该尝试使用预制网站
  • 【论文翻译】UniT: Unified Knowledge Transfer for Any-Shot Object Detection and Segmentation
  • 【华为昇腾社区、鹏城实验室】中国软件开源创新大赛·赛道二:任务挑战赛(模型王者挑战赛黄金赛段)
  • 【读点论文】EfficientNetV2: Smaller Models and Faster Training 训练感知的神经架构搜索+自适应的渐近训练方法优化训练(TPU,大数据量)
  • 基于Inception v2实现判别mnist手写数据集
  • Go 1.19.3 error原理简析
  • [图形学] 基于物理的渲染(PBR)
  • EfficientNetV2 Smaller Models and Faster Training
  • ROS2编程基础课程--DDS
  • 会话验证调度器_用视力调度建立会话式预订机器人
  • 【美萍超市管理系统】汉码盘点机无缝对接 金蝶盘点机条码数据采集器智能终端PDA
  • (十九)美萍酒店管理系统:系统维护_系统设置_房间设置_添加类型、修改类型
  • 通过ReleaseId创建现有项目的KieContainer的时候,提示Cannot find KieModule
  • mybatis-plus Invalid bound statement (not found)
  • CentOS使用yum命令安装软件失败,报错“Couldn‘t open file /data/ceph/ceph/repodata/repomd.xml“
  • Json Web Token(JWT)
  • mybais-plus出现Invalid bound statement (not found)的解决方案
  • 方队 - 启发式合并 - 主席树
  • Rancher入门到精通-2.0 pening storage failed: block open /prometheus/meta.json: no such file or directory
  • mybatis plus 常见问题Invalid bound statement (not found)
  • mybatisplus报 Invalid bound statement (not found):
  • idea无法识别java文件、Maven下载依赖报错:Cannot resolve...或者Could not find artifact...实测有效
  • [TJOI2013] 单词
  • yandex浏览器_您可以在10分钟内创建自己的任务管理器:Yandex的实践

服务器部署邮件功能_真正连续部署的功能标志相关推荐

  1. 自动发送邮件的服务器,自动邮件发送_任何情况立刻通知你

    原标题:自动邮件发送_任何情况立刻通知你 Python自动邮件发送 在日常工作中,我们经常需要收发邮件,不知大家可曾想过,如果能够实现自动发送,那岂不是爽歪歪~ 就像跑图像检测的模型经常跑一两天,如果 ...

  2. 收藏功能_微信强大的收藏功能,你们用了吗?

    在中国说到即时聊天工具,就得说到微信和QQ了,他们都是腾讯旗下的产品,今天麦叔要和大家聊的是微信,去年官方数据显示微信用户已超过10亿,庞大用户群体在使用它,但它的一些功能并不是每个人都会知道,今天麦 ...

  3. 报时功能_报时这么没用的功能,为什么能卖到258万奢侈的

    在机械腕表领域,大家会经常看到一个词--「复杂功能」.所谓「复杂功能」,就是巨贵.腕表在显示时间之外的其他功能,比如月相.星期月份显示.年历.计时.世界时等等,都可以称为「复杂功能」.也许你会觉得,这 ...

  4. k8s部署jar包_使用Kubernetes部署Springboot或Nginx的详细教程

    1 前言 经过<Maven一键部署Springboot到Docker仓库,为自动化做准备>,Springboot的Docker镜像已经准备好,也能在Docker上成功运行了,是时候放上Ku ...

  5. 宝塔部署node项目_宝塔面板部署 node.js 项目

    安装: Nginx 1.16.1 安装:MySQL 5.5.62 安装:PM2管理器 4.2.3 Nginx 配置如下: user www www; worker_processes auto; er ...

  6. 富文本中添加字体选项功能_扑中的字体功能

    富文本中添加字体选项功能 A little extra help for styling your text 样式设置方面的一些额外帮助 I recently learned about a litt ...

  7. 5.商品分类查询功能_商品品牌分页查询功能

    知识点总结 1.功能:查询全部一级分类商品: 分类表:tb_category 字段: id name parent_id(父级分类) is_parent(是否是一级分类) sort(排序指数,越小越靠 ...

  8. 用python实现计算器功能_使用python实现计算器功能

    # 实现带括号的复杂加减乘除优先级运算 # 主要运用到了正则表达式.while循环.列表的几种方法等. # 为实现要求的运算功能该代码共分为两个部分,一个是实现不带括号的加减乘除运算的函数add_su ...

  9. cms核心功能_如何根据这些重要功能选择合适的CMS

    cms核心功能 by Rachael Ray 瑞秋·雷(Rachael Ray) 如何根据这些重要功能选择合适的CMS (How to choose the right CMS based on th ...

最新文章

  1. 《2019人工智能发展报告》出炉:清华大学-中国工程院知识智能联合研究中心、中国人工智能学会联名发布!...
  2. java--迭代(一)Iterator和Iterable接口
  3. Html转义字符列表
  4. VMware Workstation 10装Mac OS X 10.9
  5. emacs python开发环境_配置Emacs下的Python开发环境
  6. 石墨烯区块链(1)系统架构
  7. HDU-3038-How Many Answers Are Wrong
  8. CentOS 7下宿主机使用virsh console访问KVM的设置
  9. DiscuzToolkit
  10. 计算机基础知识excle,职称计算机基础知识:Excel工作表的复制
  11. 老男孩IT教育在线3期新学员司毅第一期作业
  12. C++关键字--volatile
  13. Bootstrap3 源代码样式
  14. 图片水印工具类java
  15. 单纯形法中大m法_线性规划 第五讲 单纯形法及进一步讲解(大M法).ppt
  16. php mud游戏源码,mud手游源码,mud安卓端源码,谁与争锋mud源码:关于MUD纯文字游戏架设(回答得好加分100)(开源mud游戏框架)-南开游戏网...
  17. 服务器操作系统的特点,服务器操作系统的特点
  18. 【服务器数据恢复】某银行服务器磁盘阵列多块硬盘掉线的数据恢复案例
  19. 更改MySQL数据库root密码
  20. 期货交易中的重仓操作

热门文章

  1. 2022抖音温暖中国年 集年味分7亿玩法攻略
  2. UI优化策略-Shader篇
  3. 飞龙射击(Unity2D入门小游戏)
  4. 什么软件可以剪辑音乐?
  5. 【SCNU课堂笔记】计划任务、进程管理、Linux启动流程(未完待续)
  6. ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ...
  7. 红黑树调整(漫画版)
  8. 【腾讯TMQ】基于模型的自动化测试工具——GraphWalker
  9. solar在linux系统下的部署过程
  10. 华为破除魔咒:任正非的自我革命