鹤城大发棋牌中心奥巴马都去作客的美国版天涯论坛Reddit的代码部署演变史

  • 时间:
  • 浏览:2
  • 来源:彩神大发快三人工计划

  你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 老会 在Reddit部署代码。每位工程师就有写代码,进行检查,检查,并定期将其推广到生产。 通常情况汇报下每周存在500次,部署通常都要不需要 了10分钟。

  目前这套系统是从push你这俩Perl脚本发展而来的。你这俩脚本诞生的时间与Reddit现在的历史时间有很大不同。当时整个开发团队小的可怜,用一间很小的会议室就不需要 装满了。甚至Reddit还那么了在AWS上。该站点运行在固定数量的服务器上,都要手动添加额外的容量,假如有一天由4个多称为r2的大型单片Python应用进程组成。

  在那么了多年的发展过程中,还那么了变过的一件事就是请求在负载均衡器上进行分类,假如有一天分配给不同的应用服务器的特定“池”。比如,列表页面和评价页面是由单独的服务器池提供的。尽管给定任意的r2进程都不需要 补救任何类型的请求,假如有一天单独的池从流量的峰值再到或多或少的池,假如有一天当它们有不同的依赖关系时,有假如有一天就会补救失败。

  push工具有一套硬编码的服务器列表,假如有一天是围绕着整体的部署进程进行搭建的。它将遍历所有应用进程服务器,SSH到机器,运行预设的命令序列,以通过git更新服务器上的代码副本,假如有一天重新启动所有应用进程进程。本质上(也却励志的话 经过大量的洁净厂房,而就有真正的代码):

  部署是按照顺序逐步进行的。它通过逐个服务器进行工作。听起来好像很简单,但这其实是本身很好的思:它允许使用canary式的部署形式。假如有一天您仅部署到大量的服务器,并注意到老会 跳出了4个多新的异常,你应该就会知道代码里面假如有一天有bug,想要终止部署(快捷键是Ctrl + C),假如有一天在老会 跳出影响时候尽快回滚。假如有一天你这俩部署很简单,假如有一天在生产中能很轻松的发现问提,假如有一天在那么了产生影响时候就是需要 轻而易举的对代码进行回滚。这也是原因分析分析有必要一次就部署一下,以确保新的错误来自本次部署,而就有曾经,假如有一天更容易知道哪些地方时候恢复以及恢复哪些地方。

  时候你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 又招聘了一批新的员工,总工程师变成6位了,看起来似乎都要一间稍微大或多或少的会议室了。在这时候你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 现在时候开始其实都要有更好的合作方式 方式 开发的机制了,尤其是每当事人在邻居家工作的时候。于是你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 便修改了一下push工具,当现在时候开始部署假如有一天现在时候开始部署时,它会通过IRC的聊器人软件通知到每当事人。机器人软件是在IRC里面,也是由它去发送通知的。事实上,部署的形式看上去还是那么了改变,假如有一天现在是系统代替了员工进行工作,假如有一天也是由它去通知当事人你正在做哪些地方。

  也就是从这时候现在时候开始,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 使用了通过聊天去通知部署你这俩工作流程。其其实这段期间你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 使用了全都交流类的软件去管理部署,假如有一天假如有一天你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 使用的是第三方软件IRC服务,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 没方式 全部信任由产品控制的聊天室,假如有一天它仍然是单向信息流。

  随着网站流量的增长,基础设施的支持也显得愈发重要。你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 有时不得不推出一批新的应用服务器并投入使用。这项工作还常的人工化,包括还都要去手工更新push里面的主机列表。

  你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 增加规模时,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 通常是通过一次性增加若干台服务器,从而增加池的数量。其结果是通过顺序的迭代服务器列表,不需要 在同一池子中快速连续地访问多个服务器,而就有错综复杂的组合进行访问。

  你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 使用uWSGI来管理员工的工作进程,假如有一天假如有一天重启它励志的话 ,会是原因分析分析现有的进程被杀掉,假如有一天启动一批新的进程。新的进程需大慨主次时间来准备服务请求,这假如有一天影响到服务请求池的数量。假如有一天你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 把下行速率 到了假如有一天署到服务器就不需要 了。

  你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 对部署工具进行了一次的调整,现在用的是Python开发出来的,假如有一天那么了知道怎样在么在还是叫push。新版本在或多或少功能上做了或多或少改善。

  首先,现在是从DNS去获取所有的主机列表了,而就有在通过硬编码的形式。你这俩调整就补救再老会 跳出那种更新主机列表的时候,忘记去更新部署工具了,这才是4个多基本的服务发现系统。

  为了补救都要按照顺序进行重启的问提,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 在重启时候会打乱主机列表。假如有一天那么了做会使得服务器池变得混乱,曾经就不需要 以放慢的下行速率 回滚,假如有一天部署也就变得放慢。

  最现在时候开始的时候,每次就有通过打乱顺序去补救,但那么了做就增加了快速恢复代码的难度,假如有一天你不需要每次都部署,第一台服务器不假如有一天每次都相同,假如有一天你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 又调整了你这俩机制,使用了seed技术,在恢复代码时,它不需要 在第二次部署的时候重新使用。

  曾经其实小假如有一天全都得劲要的调整点就是始终部署固定版本的代码。你这俩工具的前4个多版本会去更新指定主机的master,假如有一天假如有一天村里人 不小心提交了代码而使得master改变了中期部署的方式 ,会怎样在么在样呢?通过部署特定的git修订而就有分支名称,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 确保了每次部署的时候,无论在生产的哪个环节,都能获取到相同的版本。

  最后,新版本的工具区分了代码(主要针对主机列表和SSHing)和正在运行的命令。它仍然与r2的需求有很大的偏差,但它有了排序的原始的API。这允许r2控制当事人的部署步骤,对建立和发布流的更改更加容易。类事 ,以下假如有一天是在单个服务器上运行的功能。确切的命令是隐藏的,假如有一天序列仍然是特定于r2的工作流程的。

  于是你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 决定使用云端和autoscale(单独博客文章的主题)。这不需要 帮你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 节省一大笔钱,当网站存在那么了大量的访问量时,自动增长不需要 满足意料之外的需求。。

  先前改为从DNS获取主机列表的调整使得这是4个多自然的过渡。主机列表的更改频率比时候更块,但与该工具没哪些地方地方不同。曾经是生活的一主次,只不过现在变成了自动启动autoscaler。

  然而,autoscaling的确是引发了或多或少有趣的边缘案例。就像那么了免费的午餐一样。假如有一天一台服务器运行的并肩,也存在了部署,那么了会产生哪些地方情况汇报呢?你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 都要确保每个新启动的服务器都登记过了,以获取新的代码,假如有一天存在励志的话 。服务器怎样中途部署呢?工具都要做得更智能,以检测服务器何时能 不需要 合理地移除,而就有在部署过程本身中老会 跳出问提的时候才进行提醒。

  自然而然,假如有一天各种各样的是原因分析分析,这次你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 也把uWSG添加了Gunicorn。就部署而言,这并那么了带来哪些地方不同。

  随着时间的流逝,高峰的流量也都要太少的服务器进行支撑。也就是原因分析分析每次部署所都要的时间也那么了长。最糟糕的情况汇报下,正常的部署都要将近4个多小时。这青春恋爱物语糟透了。

  你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 重写了部署工具来并行补救主机。新版本的名称叫rollingpin。旧工具所花的大主次时间是消耗在了初始化连接ssh以及等候命令被执行完的时候,全都在一定的安全数量上进行并行励志的话 是不需要 缩短时间的。部署的时间也立即被降到了5分钟。

  为了降低一次重启多台服务器带来的影响,工具在打乱顺序时也变得更明智了。它将以最大程度地将服务器从每个池中分离出来,而不仅仅是盲目的打乱主机的顺序。曾经做也是有意地减少对网站的影响。

  新工具最重要的调整使部署工具和在每个服务器上的工具之间API定义的更加清晰,并与r2的需求分离了。这最初是为了考虑开源而关注的,但最终在不久时候的确常有用。以下是部署示例,突老会 跳出示的命令是远程执行的API。

  忽然就感觉到好像有全都人一下就使用r2了。这青春恋爱物语太伟大了,当然也是原因分析分析都要更多的部署。在同4个多时间规则下,保持4个多部署下行速率 会变得那么了困难,假如有一天每个工程师都都要在口身后协调你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 会在哪些地方顺序上部署代码。为了补救你这俩问提,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 又新加了4个多功能,就是不需要 自动协调部署队列。工程师将要求部署锁定,并获取或放到去 队列。这能助 维持部署秩序,想要们就有等候的时候放松一下。

  随着团队的发展,曾经重要的补充是在核心部署。你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 修改了部署工具以将指标发送给Graphite,假如有一天很容易将部署与指标更改相关联。

  就像老会 间,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 有第三个小服务上线了。网站的新移动版本正在上线。这是4个多全部不同的堆栈,并有当事人的服务器和构建过程。这是部署工具解耦API的第4个多真正。随着对每个项目不同构建步骤的增加,它保持不变,假如有一天你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 不需要 在相同的系统下管理你这4个服务。

  在接下来的一年中,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 看到了Reddit团队的爆炸性增长。你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 从你这4个服务发展到了二十十几个 ,从4个多团队到十三个小,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 的大主次服务都建立在Baseplate,后端服务框架,或类事 于移动网络的节点应用也就有。基础主次是所有部署的基础,假如有一天会上线太少,假如有一天rollpin那么了乎它的部署内容。这使得你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 不需要 使用熟悉的工具轻松地开发新的服务。

  随着服务器数量的增加,你这俩块也就变得那么了庞大,部署所都要的时间就是多。你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 想要用高并行计数来进行部署,假如有一天曾经做会是原因分析分析应用服务器带老会 跳出大量的的重启。于是,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 降低了规模,对于传进来的请求就是能及时补救,其它的应用服务器也老会 跳出了超载的情况汇报。

  Gunicorn的主进程使用了跟uWSGI相同的模型,也会一次重启所有员工的工作进程。当新的工作进程启动时,您无法满足任何请求。你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 整体的启动时间为10-500秒,这是原因分析分析在此期间,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 将无法提供任何请求。为了补救你这俩问提,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 把Gunicorn的主进程添加了Stripe的工作经理Einhorn,并肩保留了Gunicorn的HTTP stack和WSGI container。Einhorn是通过创建新的进程从而完成重启的,等候它当事人准备好,假如有一天收获老的进程,并重复,直到所有的升级。你这俩机制创建了4个多安全网,并允许你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 在部署期间不需要 响应请求。

  新模式当然也带来了新问提。就像前面提到的那样,它都要500秒的时间完成进程的替代和启动。这也却励志的话 假如有一天的你代码里面有bug,它不需要立即显示,您不需要 回滚多台服务器。为了补救你这俩情况汇报产生,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 引入了本身方式 ,不需要 部署到另一台服务器上,直到所有的进程都重新启动才不需要 。很简单,只都要调整einhorn的情况汇报,假如有一天等到所有的机器都准备好就不需要 了。为了下行速率 ,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 增加了并发,这现在假如有一天很安全了。

  新的机制不需要 想要们都并肩对多台服务器进行部署,部署5000台机器的时间降低到了7分钟,尽管都要额外的等候。

  部署的基础主次是多年的逐步改进积累而来的,绝就有任何一次大的调整是原因分析分析的。在当前系统和过去的任何时能 候,都不需要 看到历史的阴影和每一次选则的权衡。曾经本身演变的方式 是有利弊的:在任何4个多期间,就有需大慨太少的代价,假如有一天你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 最终假如有一天会陷入。重要的是要关注你的发展方向,曾经你就不需要 继续朝着有用的方向前进。

  Reddit的基础主次都要不需要 跟得上团队以及新事物的发展。公司的成长下行速率 达到了Reddit历史上的峰值,与时候相比,你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 所从事的项目也那么了有趣。现在你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 面临的问提有两主次:提高工程师自主权,并肩生产基础设施中的系统安全,以及为你们歌词 歌词 你们歌词 歌词 你们歌词 歌词 搭建更好的网络,想要们都更有信心进行部署。

  推荐: