# The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购

> 原文： [http://highscalability.com/blog/2016/9/13/the-dollar-shave-club-architecture-unilever-bought-for-1-bil.html](http://highscalability.com/blog/2016/9/13/the-dollar-shave-club-architecture-unilever-bought-for-1-bil.html)

![](img/5b7af8042fb8d87998d9de26b181d823.png)

*这是 [Jason Bosco](https://www.linkedin.com/in/jasonbosco) ， [Dollar Shave Club [ HTG12 的核心平台&基础架构工程总监，介绍其电子商务技术的基础架构。](https://www.dollarshaveclub.com/)*

Dollar Shave Club 拥有 300 万以上的会员，今年的收入将超过 2 亿美元。 尽管大多数人都熟悉该公司的市场营销，但是自成立以来短短几年内的巨大增长主要归功于其 45 名工程师的团队。

Dollar Shave Club 工程学的数字：

## 核心统计信息

*   超级碗广告的投放没有停机时间：1

*   每月流量带宽：9 TB

*   通过 Arm 处理的订单：3800 万张订单

*   发现的错误总数：4,566

*   自动化测试成绩：312,000

*   通过语音发送的电子邮件：1.95 亿封电子邮件

*   处理并存储在海马中的 Analytics（分析）数据点：5.34 亿

*   海马中的数据集大小：1.5TB

*   当前已部署的应用程序/服务：22

*   服务器数量：325

## 技术堆栈

*   前端框架的 Ember

*   主要在后端上使用 Ruby on Rails

*   满足高吞吐量后台处理需求的 Node.js（例如：在语音中）

*   用于基础结构软件的 Golang

*   用于基础架构的 Python &数据科学

*   用于 1 个内部应用程序的 Elixir

*   用于测试自动化的 Ruby

*   适用于本机 iOS 应用程序的 Swift 和 Objective C

## 基础结构

*   完全托管在 AWS 上

*   Ubuntu & CoreOS

*   用于配置管理的&地形

*   过渡到基于 Docker 的部署

*   Jenkins 用于部署协调

*   Nginx &清漆

*   快速交付应用程序

*   摘要汇总日志

*   用于安全监视的 CloudPassage

*   HashiCorp 的保险柜，用于秘密存储&设置

## 数据存储

*   主要是 MySQL 托管在 RDS 上

*   托管在 Elasticache 上的 Memcached 用于缓存

*   自托管 Redis 服务器主要用于排队

*   有点 Kinesis，用于处理来自尖峰流量的订单

*   Amazon Redshift 用于数据仓库

## 消息传递&排队

*   Resque 和 Sidekiq 用于异步作业处理&消息传递

*   用于消息传递的 RabbitMQ

*   Kafka 用于流处理

## 分析&商业智能

*   扫雪机&用于网络/移动分析的 Adobe Analytics

*   AWS Elastic MapReduce

*   将 FlyData 从 MySQL 转换为 ETL 数据到 Redshift

*   托管 Spark Databricks

*   Looker 作为 BI 前端

*   用于报告的近实时数据可用性

## 监控

*   岗哨哨兵&用于异常跟踪的 Crashlytics

*   用于自定义应用程序指标的 DataDog &指标聚合

*   SysDig 用于基础结构度量&监视

*   用于应用程序性能监视的 NewRelic

*   Site24x7，用于可用性监视

*   PagerDuty，用于通话提醒

## 质量检查和测试自动化

*   CircleCI 用于运行单元测试

*   Jenkins + TestUnit + Selenium + SauceLabs 用于基于浏览器的自动化测试

*   Jenkins + TestUnit +硒+ SauceLabs 用于大脑自动测试

*   用于 API 功能测试的 Jenkins + TestUnit

*   Jenkins + TestUnit + Appium + SauceLabs 用于原生 Android 自动化测试

*   Jenkins + TestUnit + Appium + SauceLabs 用于本地 iOS 自动化测试

*   Jenkins + TestUnit + Selenium + SauceLabs +用于 BI 测试自动化的代理服务器

*   用于压力，浸泡，负载和性能测试的 SOASTA + Regex 脚本。

## 工程工作流程

*   跨团队交流的松弛

*   Trello，用于任务跟踪

*   具有自定义插件的 Hubot 作为我们的聊天机器人

*   Github 作为我们的代码存储库

*   ReviewNinja 与 Github Status API 集成，用于代码审核

*   连续部署-通常每天进行多次部署

*   转向持续交付

*   用于功能开发的即时沙盒环境

*   目前，使用 Jenkins 的单按钮推送部署正在朝着持续交付的方向发展

*   运行 docker 容器的游民箱= >为新工程师提供的功能齐全的开发环境，第一天

## 架构

*   事件驱动的架构

*   从单一架构转变为通过公共消息总线进行交互的“中型”服务

*   CDN 边缘上基于 VCL 的边缘路由，就像其他任何应用程序一样部署。

*   Web 和移动前端与 API 层进行对话

*   API 层与服务进行对话，聚合数据并为客户端设置格式

*   服务与数据存储和消息总线进行对话

*   预定任务作为一项主任务运行，并在 resque / sidekiq 中分解为较小的任务

*   技术组件包括用于客户服务（Brain），市场营销自动化平台（Voice），履行系统（Arm），订阅计费系统（Baby Boy）和我们的数据基础结构（Hippocampus）的内部工具。

## 小组

*   45 位顶尖的企业家和高技能的工程师在加利福尼亚总部玛丽娜·德尔·雷伊工作

*   工程师与产品经理，设计师，UX 和利益相关者一起参与称为小分队的跨职能团队，以提供端到端功能。

*   团队根据域被垂直划分为前端，后端和质量检查& IT。

*   前端团队拥有 DSC.com &内部工具的 Web UI 和我们的 iOS & Android 应用。

*   后端团队拥有 DSC.com &内部工具，内部服务（计费和履行），数据平台&基础结构的 Web 后端。

*   质量检查团队拥有所有数字产品的测试和自动化基础架构。

*   IT 团队拥有办公室& Warehouse IT。

*   工程师每年参加一次公司赞助的会议。

*   工程师可以购买所需数量的书籍/学习资源。

*   所有人的站立式办公桌。 目前可提供一张跑步机作为飞行员。

*   每周的工程团队午餐。

*   Tech Belly 每隔一周举行一次活动，工程师们在午餐时间就技术主题进行演讲。

*   鼓励工程师尝试最前沿的技术，并通过提案请求（RFC）创建提案。

*   鼓励工程师在有意义的地方开源工具和库。

*   每位工程师都会获得标准版的 15 英寸 Mac Book Pro，27 英寸 Mac Display 和 24 英寸显示器。

*   一台 3D 打印机可用于打印道具和更多 3D 打印机。

## 获得的经验教训

*   当您要扩展的组件由简单的小型服务组成时，扩展将变得更加容易。

*   文档&知识共享对于快速成长的团队至关重要。

*   培养良好的测试套件对于快速发展的系统至关重要。

*   Redis 使用一种近似的 LRU 算法，因此如果您对缓存有明确的 LRU 要求，则不适合使用

*   网络性能至关重要，尤其是在移动设备上-每毫秒都会使我们损失收入

*   可用性&用户体验对于内部工具也很重要：高效的工具=生产力更高的团队

[关于 HackerNews](https://news.ycombinator.com/item?id=12490369)

您为什么决定自己托管 Redis？ 我假设您将在 ElastiCache 上运行 Redis（使用复制组以提高可用性）。 此外，为什么还要在 Elasticache 上托管 memcached？

似乎是一个非常标准的现代堆栈。 很高兴为他们工作！ 真正的问题是，他们向联合利华公司技术堡垒的过渡将是什么样子。

我想我的问题是，为什么您需要 45 名工程师才能完成基本上是一个带有订阅选项的小型目录？

文档首次出现很重要。 您使用什么基础设施和流程来保持其相关性？

为什么这家公司需要运行这么复杂的系统？ 并不是实时地有成千上万个请求的技术公司。 似乎是一种听起来过于酷炫的过度设计的解决方案。 也许他们在做一些我看不到的大而复杂的事情。 所以我很好奇。