ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 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) ![](https://img.kancloud.cn/af/d5/afd5390c0ab1589e1c5b6027a7338732_207x285.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 名工程师才能完成基本上是一个带有订阅选项的小型目录? 文档首次出现很重要。 您使用什么基础设施和流程来保持其相关性? 为什么这家公司需要运行这么复杂的系统? 并不是实时地有成千上万个请求的技术公司。 似乎是一种听起来过于酷炫的过度设计的解决方案。 也许他们在做一些我看不到的大而复杂的事情。 所以我很好奇。