写点什么

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:563873
用户头像

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

关注

评论

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

【等保问题解答】信息系统安全等级保护三级一年几次?有法律依据吗?

行云管家

网络安全 等保 等级保护 等保测评

YashanDB 使用 exp 导出数据时报 YAS-00402 错误的处理思路

数据库砖家

数据库

VL 语言:AI 编程的通用语义桥 —— 连接自然语言与机器指令

代码制造者

LLM AI编程

【HarmonyOS 5】App Linking 应用间跳转详解

深海的鲸同学 luvi

鸿蒙 HarmonyOS HarmonyOS NEXT 实践分享

国产操作系统定义以及品牌汇总

行云管家

信创 国产化 国产操作系统

DePIN需要什么样的公链?

PowerVerse

区块链+ Solana DePIN

数据中心里的AI:从幕后工具到智能大脑的蜕变

ScaleFlux

旧貌换新颜:闪迪创作者系列助力修复师用视频为古书画按下‘重启键’

极客天地

合合信息亮相2025中国图象图形大会,聚焦大模型时代的伪造图像检测

合合技术团队

人工智能 算法 图像识别 #大数据

亚洲消费电子展|低成本获客秘籍,助力预算敏感型企业逆袭

AIOTE智博会

Android App 的上线流程

北京木奇移动技术有限公司

软件外包公司 APP外包公司 APP开发公司

Blender 入门教程(三):骨骼绑定

北桥苏

建模 blender

CodeBuddy暴改漏洞实录

VyrnSynx

CodeBuddy首席试玩官

京东拍立淘图片搜索 API 接入实践:从图像识别到商品匹配的技术实现

tbapi

京东API 京东图片搜索接口 京东拍立淘API 京东图片API

BOM都没整明白,就别抱怨生产一团糟了!

积木链小链

数字化转型 BOM 智能制造 生产管理

【HarmonyOS NEXT】多目标产物构建实践

深海的鲸同学 luvi

(WEB CAD API)网页CAD实现圆孔标记功能

WEB CAD SDK

打破算力瓶颈!起底百度智能云高性能存储加速系统如何让昆仑芯3万卡集群火力全开

百度Geek说

YashanDB|使用触发器复制 varchar(4000 char) 数据出现乱码问题的处理方案

数据库砖家

数据库

高性能、高可用的 Lustre 解决方案:使用 xiRAID 4.1 在双节点共享 NVMe 环境下

Sergey Platonov

性能测试 Lustre 高可用性 安装指南

第六章: SEO与交互指标

溪抱鱼

typescript SEO

KET口语考试APP的开发

北京木奇移动技术有限公司

软件外包公司 APP外包公司 KET口语考试

RAG越来越不准?你可能忽略了“元数据”的力量

电子尖叫食人鱼

Java 数据库 前端

YashanDB 报错:YAS-04003 maximum number of open cursors 的处理方法

数据库砖家

数据库

全平台开源即时通讯IM聊天框架MobileIMSDK的服务端开发指南,支持鸿蒙NEXT

JackJiang

鸿蒙 网络编程 即时通讯 IM

联想携手ISV“行业私厨”,让智能体落地实践端上行业“餐桌”

脑极体

AI

因 Druid 配置导致 YashanDB 报 YAS-04003 打开游标数过多的问题分析

数据库砖家

数据库

时序数据库 IoTDB 集成 DataEase,又一可视化交互选择!

Apache IoTDB

SEO与交互指标 二

溪抱鱼

typescript Google SEO

DBeaver 执行多条 SQL 报错 YAS-04209 的解决方式

数据库砖家

数据库

来了!520这场发布会将开启“企业级”迈向大模型时代的大门!

奇点云

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