Medium 网站的技术栈

阅读数:2274 2017 年 6 月 5 日 19:00

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

评论

发布