写点什么

Shopify 的 Docker 使用经验

  • 2014-12-01
  • 本文字数:1255 字

    阅读完需:约 4 分钟

Shopify 是一个电子商务平台,提供专业的网上店面。目前的客户超过 12 万,包括 GE、特斯拉汽车、GitHub 等。作为首家市值超过 10 亿美元的加拿大网络公司,Shopify 在欧美市场的影响力也与日俱增。Shopify 是一个大型的 Ruby on Rails 应用,其产品服务器能通过给 1700 个处理核心和 6TB RAM 分配任务来完成每秒处理 8000 多个请求。Shpify 为了更加便捷、跨平台跨版本地进行分包任务,采用了时下炙手可热的 Docker 封装技术。近日,Shopify 在其博客上分享了自己的 Docker 技术使用经验

关于封装格式的选择,Docker 提供很多封装格式,从轻量级的单进程容器到重量级的富应用容器,一应俱全。Shopify 的开发者选择“纤薄”路径的容器,并隔绝外部影响,目的就是为了减少 CPU 和内存的负担。不过虽然运行纤薄容器,但还有一个初始化进程 (PID=1) 使得监测工具、保密管理和服务能够紧密集成。除了初始化进程,还添加了一个在每个容器内占用 PID=2 并且简单启动应用进程(PID=3)的 ppidshim。有该 ppidshim,应用程序不会直接从 (i.e. ppid != 1) 继承。除此以外还提供了健康检查,以保证其正常运行。

有一个要特别注意的一点,Shopify 称之为“容器的 100 定律”。在选择将何种服务放入容器中时,假设一台主机中运行 100 个小容器,评估是需要运行一个给定服务 100 次,还是共享一台主机的服务更好。用于最佳效率的选择,这个评判标准在实际中很有用处。100 定律的使用需要一定的灵活性。一些情况下,仅仅需要写一下组件的“黏合器”,也可以通过配置来达到目的。最终,你应该获得一个容器,内含你的应用程序运行所需的东西,以及一个提供了 Docker 托管和共享服务的主机环境。

关于 Debug,没有特别需要注意的,容器内运行应用在绝大多数情况下和他们未封装时行为相同,而且,大多数标准的 Debug 工具和技术在 Docker 主机上能正常运行。所以开发者只需照常调试。

命名方面。选取容器名称的时候,尽量描述其工作内容(例如:unicorn-1, resque-2),为了便于追溯,还要结合主机名(例如 unicorn-1.server2.shopify.com.)。在使用过程中,将 Docker 的主机名标签也传入容器中,方便问题的追踪。

注册和部署。使用 GitHub 的提交挂钩触发一个容器生成每一个主推,并提交状态,表明构建是否成功。使用 Git 的提交 SHA 来 Docker tag 容器,如此可以一目了然容器中的代码是什么版本。还把 SHA 放入 (/app/REVISION) 文件夹,容器内的文件夹更容易进行 debug 和脚本使用。一旦构建成功,希望把容器推到一个中央注册处。开发者选择运行自己数据中心的注册表以加速部署和尽量减少外部依赖。运行 Nginx 的反向代理,可以缓存 GET 请求背后的标准 Python 注册表的多个副本。大型网络接口(10Gbps)和反向代理能有效处理“惊群效应”。代理方式也使我们能够运行多个注册,并在注册中断时提供自动故障切换。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-12-01 00:563896
用户头像

发布了 268 篇内容, 共 131.2 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

发挥CODING 敏捷开发能力,腾讯云加速提升国产芯片研发效率

科技热闻

WAIC 2022 | 洞见科技在可信AI论坛联合发布《可信人工智能产业生态发展报告》

洞见科技

2022服贸会 | 洞见科技姚明:从智能化到密态化,数据科技向善升级

洞见科技

使用 CRD 开启您的 Ingress 可观测之路

观测云

ShareSDK Android端主流平台分享示例

MobTech袤博科技

an'droid

【xShell 7】强悍的Linux远程链接工具、终端模拟器

淋雨

Linux 运维 xshell

java基础学习:java中的反射

Java快了!

java;

用过这个API接口工具后,确实感觉postman有点鸡肋......

Liam

Java Postman swagger API开发 API调式

观测云&亚马逊云科技「可观测性体验日」北京站圆满落幕

观测云

前端食堂技术周刊第 51 期:pnpm v7.10.0、8 月登陆网络平台的新内容、重新思考流行的 Node.js 模式和工具、打包 JavaScript 库的现代化指南

童欧巴

chrome Node React Chrome开发者工具 pnpm

与紧张为友,享受紧张

宇宙之一粟

读书笔记 个人成长 演讲 9月月更 享受紧张

lodash 在vue3+vite中按需加载

木叶🐱

vite Vue3 lodash

Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架

阿里巴巴中间件

阿里云 云原生 Koordinator

无代码开发平台怎么选?选择合适无代码平台的13个关键步骤

优秀

无代码平台

由循环开始的前端学习杂谈话事录-sam9029

Sam9029

前端 个人博客 成长笔记 9月月更

ShareSDK iOS端微信如何获取authcode值

MobTech袤博科技

微信 iOS SDK

对jdbc的讲解

楠羽

JDBC 笔记 9月月更

Xshell 7 安装激活与换机转移许可证教程详解

淋雨

Linux xshell #运维

五分钟了解 Databend 全新 SQL 类型系统

Databend

开源项目 sql 开源社区 SQL分析

设计模式的艺术 第七章原型设计模式练习(在某销售管理系统中设计并实现了一个客户类Customer,其中包含一个名为客户地址的成员变量,客户地址的类型为Address。用浅克隆和深克隆分别实现Customer对象的复制)

代廉洁

设计模式的艺术

面向对象分析与设计的底层逻辑

阿里巴巴中间件

阿里云 云原生

MobLink后台基本配置

MobTech袤博科技

android 开发者 iOS SDK

WAIC 2022 | 洞见科技王湾湾出席BPAA第二届应用算法实践典范,共话前沿算法产业发展

洞见科技

「工作小记」小程序开发的喜怒哀乐

叶一一

小程序 前端 9月月更

「工作小记」关于业务组件的思考

叶一一

前端 React 组件开发 9月月更

Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?

Java快了!

Java并发 java;

Dragonfly 基于 P2P 的文件和镜像分发系统

SOFAStack

容器 云原生 镜像 日志 文件

验证一个小小的问题

艾小仙

Java MySQL 编程 程序员 compact

mysql查询 limit 1000,10 和limit 10 速度一样快吗?如果我要分页,我该怎么办?

Java快了!

MySQL

蓝凌OA

科技云未来

Dubbo Mesh:从服务框架到统一服务控制平台

阿里巴巴中间件

阿里云 微服务 云原生 dubbo

Shopify的Docker使用经验_语言 & 开发_张天雷_InfoQ精选文章