像facebook这样的公司如何缓慢地向其部分用户群发布功能?

时间:2012-01-30 20:24:53

标签: agile production-environment release-management

我喜欢facebook如何逐步发布功能,而不是一次性发布给整个用户群。我知道,如果语句在整个代码中都很清楚,那么可以使用一堆语言进行复制,但需要有更好的方法来执行此操作。也许这就是他们所做的一切,但这似乎相当不优雅。有没有人知道架构是否有行业标准,而不是可以逐步向用户群的某些部分发布功能?

在同样的说明中,我感觉他们的所有员工都看到了完全不同的网站测试版。因此,他们似乎能够将其网站的某些部分视为测试版,将其他部分视为制作,并拥有某种访问控制列表来指导人们看到的内容?这似乎很慢。

谢谢!

3 个答案:

答案 0 :(得分:1)

Facebook拥有大量服务器,因此他们只能在其中一些服务器上应用新功能。他们还有一些服务器,他们在投入生产之前测试新功能。

答案 1 :(得分:0)

更优雅的解决方案是使用gargoyle (in python).等系统的 var PDF_FILES_DIRECTORY = "", PDF_FILES = ['pdf2.pdf']; var CURRENT_FILE = {}; $.each(PDF_FILES, function (index, pdf_file) { PDFJS.getDocument(PDF_FILES_DIRECTORY + pdf_file).then(function (pdf) { for(idxPage = 1 ; idxPage < pdf.numPages ; idxPage++) { pdf.getPage(idxPage).then(function (page) { var viewport = page.getViewport(1); var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; var renderContext = { canvasContext: ctx, viewport: viewport }; page.render(renderContext).then(function () { ctx.globalCompositeOperation = "destination-over"; ctx.fillStyle = "#fff"; ctx.fillRect(0, 0, canvas.width, canvas.height); var img_src = canvas.toDataURL(); var $img = $("<img>").attr("src", img_src); var $thumb = $("<div>") .attr("class", "thumb") .append($img); $thumb.appendTo("#thumbnail"); canvas.remove(); }); }); // end of getPage } }); // end of getDocument }); // end of each 语句和功能标记

使用这样的系统,您可以执行以下操作:

if

在Web界面中,您可以隔离描述系统所拥有的用户,请求或任何其他关键对象,并将功能提供给他们。实际上,通过请求,您可以执行诸如将X%的流量直接指向新功能,从而执行A / B测试和收集分析等操作。

答案 2 :(得分:0)

采用分层架构的方法是将身份验证层交给产品层。

用户输入产品URL并将其解析为将其定向到身份验证服务器群集。这些服务器处理身份验证,然后将会话移交给产品服务器集群。

使用这种方法,您可以:

  • 将您的产品服务器分离到运行不同版本的应用程序的“区域”
  • 在您的身份验证服务器上运行逻辑,决定将会话路由到哪个区域

例如,您可以让A区运行最新的生产代码,B区运行Beta代码。在登录时,身份验证服务器将每个用户名以a-m开头的用户发送到A区,将n-z发送到B区。这样,大约有一半的用户在beta产品上运行。

根据您在登录时提供的信息,您甚至可以做一些比这更复杂的事情。例如,您可以定位特定的用户人口统计信息(例如年龄范围,性别,位置等)。