高品质的音视频能力是怎样的? | Qcon 全球软件开发大会·上海站邀请函 了解详情
写点什么

Medium 网站的技术栈

  • 2017-06-05
  • 本文字数:978 字

    阅读完需:约 3 分钟

Medium 是一个在线发布平台,最初由 Twitter 联合创始人 Evan Williams 开发。该平台于 2012 年启动,现在每个月有 6000 万独立访客。该网站部署在 AWS 上,使用 NodeJS Go 作为应用程序和服务的开发语言,使用 DynamoDB 作为数据存储,并使用 Amazon Redshift 作为数据仓库。

Medium 的前工程主管 Dan Pupius 曾经在博客上公布了网站的技术栈,这些技术为网站的访问量暴涨提供了良好的支持。

他们现在的环境部署在 AWS VPC (虚拟私有云)上,使用 Ansible 来配置底层的基础设施。应用程序则运行在 EC2 上。

他们在十几个服务上采用了面向服务架构。对于新的功能来说,是为它们创建新的服务还是把它们集成到已有的服务中,完全取决于它们的耦合度和内聚性。

NodeJS 是他们最主要的开发语言,这门语言主要的优势在于可以共享服务器端和客户端的代码。他们通过运行多个实例来解决单线程事件循环机制的性能问题。重要的请求被路由到特定的实例上,避免其他请求被挂起。

Pupius 还在博客中提到,他们使用 Go 语言来开发辅助服务,因为打包、构建和部署都很方便。他例举了 Go 语言的类型安全和简洁性这两大特点,这也是他们选择 Go 语言的原因。

个人而言,我喜欢在团队里使用具有强约束的开发语言。因为它能够带来更多的一致性,降低不确定性,而且可以尽量避免给自己挖坑。

Pupius 说,虽然 DynamoDB 是主要的数据存储,但一直以来都存在一些问题,比如 hotkey 问题。在使用分布式数据库时,某些节点承担了密集的查询负载,数据分区所带来的性能优势也就大打折扣了。Medium 使用 Redis 作为缓存,减少了大量的数据库查询。他们现在正在尝试使用 Amazon Aurora 作为新的数据存储。

对于关系数据,比如用户之间的关系、文章和标签之间的关系,他们使用 Neo4J 来保存。目前有一个主节点和两个从节点。他们使用 Amazon Redshift 作为数据仓库,并使用 Apache Spark 来查询数据。

他们使用了集成工具 Jenkins ,staging 环境的测试、构建和部署可以在 15 分钟之内全部完成。每天进行差不多 5 次生产环境部署:

我们拥抱持续集成和持续交付,尽可能让一切快速地进入正常状态。

Medium 的团队是跨功能的,也就是说,每一个工程师都能胜任任何一部分工作。Pupius 相信这样可以培养出强大的工程师。

Pupius 的博文可以在这里找到,他在博文里提到了更多有关技术栈的细节。另外,Medium 是可以免费使用的。

查看英文原文: The Technology Stack at Medium

2017-06-05 19:002930
用户头像

发布了 321 篇内容, 共 123.5 次阅读, 收获喜欢 132 次。

关注

评论

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

新书上市 | 连接组,向人类科学的最终前沿进军

图灵社区

神经网络 大脑 脑科学

企业级npm仓库搭建

龙之幽谷

前端 nexus NPM仓库

开发者有话说 | 一位工作十余年工程师的成长之路

矜辰所致

个人成长 经历分享 9月月更 成长感悟

自定义form表单验证

测吧(北京)科技有限公司

测试

Golang死信队列的使用

测吧(北京)科技有限公司

测试

Eclipse Theia技术揭秘——脚手架源码分析

龙之幽谷

开发工具

如何建设前端物料平台?

龙之幽谷

前端 组件化

MobSDK 客户端API

MobTech袤博科技

API an'droid

Eclipse Theia技术揭秘——构建桌面IDE

龙之幽谷

开发工具

架构实战营模块1作业

乖乖IvyShine

Shell 进程通过 ContentProvider 实现跨进程通信

测吧(北京)科技有限公司

测试

如何提取 IOS Runtime Headers

测吧(北京)科技有限公司

测试

leetcode 572. Subtree of Another Tree 另一棵树的子树 (简单)

okokabcd

LeetCode 数据结构与算法

Spring boot 之 RestTemplate访问

测吧(北京)科技有限公司

测试

运维学网络安全还是云计算好?哪个更有前景?

行云管家

云计算 运维 网络安全

刘奇:能否掌控复杂性,决定着分布式数据库的生死存亡

PingCAP

#TiDB

Pytorch GPU 训练环境搭建

测吧(北京)科技有限公司

测试

gitlab 服务端 hook, 拦截糟糕的提交到仓库

测吧(北京)科技有限公司

测试

认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)

矜辰所致

ESP32-C3 9月月更 ESP-IDF

Eclipse Theia技术揭秘——初识Theia

龙之幽谷

开发工具

Eclipse Theia技术揭秘——自定义布局

龙之幽谷

开发工具

一种能有效缓解环境噪声对音频质量干扰的方案

测吧(北京)科技有限公司

测试

新书上市 | 连接组,向人类科学的最终前沿进军

图灵教育

神经网络 大脑 脑科学

企业级前端组件建设

龙之幽谷

前端 组件库

JS基础——JS数据类型

龙之幽谷

前端 js

VSCode技术揭秘(一)

龙之幽谷

vscode 开发工具

利用 rpush 和 blpop 实现 Redis 消息队列

测吧(北京)科技有限公司

测试

医疗卫生机构应该多久进行一次等保测评?

行云管家

网络安全 信息安全 等保测评 等级测评

用 nodejs 搭建脚手架

coder2028

node.js

使用 ReportLab 绘制 PDF

测吧(北京)科技有限公司

测试

Medium网站的技术栈_架构_Andrew Morgan_InfoQ精选文章