网易首页 > 网易号 > 正文 申请入驻

3个中国程序员 vs 3个美国程序员,不得不承认,差距太大了!

0
分享至

大概是2009年,我和两个好哥们聊天,觉得智能手机可能是风口,商量着要弄一个照片分享网站。

用户可以用手机把随手拍的照片放到网上分享,名称都起好了,叫InstantPost

可是我们的执行力太差了,聚了两次,做了一点儿技术验证,就没有下文了。

过了几年,我看到美国一个叫Instagram的火了,不由地一拍大腿:卧槽!这不就是我们当年要做的事儿吗?!

后来我看到Instagram初期的故事,他们也是三个程序员,从2010年10月到2011年12月,在一年多的时间内,就把用户数量从0增长到了1400万!

看完他们的架构设计,我就释然了,抛开执行力,在2009年那个时间点,我们确实不行。

Instagram制定的架构指导准则是:

1.保持简单

2.不要重新发明轮子

3.尽可能使用经过验证的可靠技术

所以早期的Instagram跑在云上,使用EC2和Ubuntu Linux 11.04。

接下来,站在一个用户会话(Session)的角度,来看看Instagram的处理过程。

前端

Session:用户打开了Instagram APP。

2010年,Instagram开发了一个iOS app,正式推出。

因为这时候Swift还没有发布,他们用了Objective-C,UIKit等技术。

负载均衡

Session:打开App后,会向后端发起一个请求(获取主界面的“信息流”),这个请求会首先到达Instagram的负载均衡。

Instagram 最早使用2个Nginx并在它们之间进行DNS Round-Robin,这种方法的缺点是,如果某一个机器出现故障,DNS的更新需要时间。

后来他们选择了Amazon的Elastic Load Balancer,这里有三个NGINX实例,可以换入换出。

后端

Session:负载均衡会把请求转发给应用服务器

Instagram用Django作为后端服务,运行在 Amazon High-CPU Extra-Large 上,因为这三个程序员发现,后端服务是CPU密集型的。

Gunicorn做WSGI Server。

应用运行在超过25台亚马逊虚拟机中,这些应用都是无状态的,可以在需要的时候进行扩展。

为了在多台机器上运行命令(例如部署代码),Instagram使用了Fabric,它有一个很好用的并行模式,部署只需要几秒钟。

数据存储

Session: 用户请求到达了应用服务器,接下来它需要获得这些数据:

1.最新的Photo IDs

2.这些Photo ID对应的实际照片

3.这些照片的用户数据

Database: PostgreSQL

Session: 应用服务器从PostgreSQL获取最新的Photo ID,这里保存着用户和照片的元数据。

大部分的数据,如用户,照片元数据,标签等都保存在PostgreSQL数据库中。

因为数据量不小,每秒钟有25个照片上传,并且有90个赞,Instagram对数据做了分片

分片系统由数千个逻辑分片组成,这些分片在代码中被映射到少得多的物理分片,用这种办法,可以从少量的数据库开始,扩展到更多的数据库。

当扩展时,只需要把逻辑分片从一个数据库“指向”另外一个即可,无需挪动任何数据。

一个挑战是:Instagram如何解决Photo ID问题,因为需要能按时间排序,而无需获得有关照片的更多信息,理想情况下,ID应该是64位的。

后来的解决方案是这样的:

41位:记录毫秒时间

13位:逻辑分片ID

10位:自动增长的序列,模数1024,这意味着每毫秒,每个分片可以生成1024个ID

最终结果是个64为整数,可以被PostgreSQL排序,找到最新的照片。

照片的存储:S3 和Cloudfront

Session: 获取了Photo ID以后,应用服务器要获取真正的照片,快速发给用户

照片保存在Amazon S3中 ,存储了几个TB的数据,通过使用CDN(Amazon CloudFront ),照片可以快速分发给世界各地的用户(例如日本,是Instagram第二大受欢迎的国家)

缓存

Instagram 需要将大约 3 亿张照片(ID)和创建它们的用户ID的映射保存起来,以便知道查询那个分片。

他们选择了Redis后发现,为了保存这些映射,Redis需要21GB内存,这已经大于 Amazon EC2 上的 17GB 实例类型。

后来他们向Redis的核心开发人员Pieter Noordhuis求助,Pieter建议使用Redis Hash,最终通过巧妙的设计,这些映射仅需不到5G的内存。

对于其他缓存(如session),Instagram使用Memcached,当时有6个实例。

数据备份

无论是PostGreSQL还是Redis,都会使用Amazon EBS经常性进行数据备用

通知和异步任务

Session: 用户关闭了App,但是朋友发送了一张照片,需要发送一个通知。

Instagram的推送服务用的是 pyapns, 这是一个开源的、通用的苹果推送服务提供商,运行非常稳定,为Instagram处理了超过10亿条推送通知。

Session:用户非常喜欢这张照片! 他决定在Twitter何Facebook上分享。

在后台, 任务被推送到了Gearman, 这个任务队列会保存任务,Instagram有大约200 Python workers 来处理这些任务。

监控

Session: Uh oh! 服务器端发生了错误,Instagram崩溃了,那三个程序员需要收到告警,马上进行处理。

Instagram 使用 Sentry这个开源的应用来实时监控Python错误。

使用Munin来绘制各种系统指标的图表,如果有任何情况超出正常范围,就会向程序员发出异常告警。Instagram 有一堆自定义 Munin 插件来跟踪应用程序级别的指标,例如每秒发布的照片、每分钟注册人数等。

对于外部服务的监控,使用了Pingdom ,PagerDuty 用于处理事件和通知。

最终的架构

反思

2009年,我们三个都在比较传统的软件公司,互联网技术用得比较少。

像负载均衡、分库分表、缓存也是刚刚开始接触,还没有在生产系统中大规模使用的经验。

iPhone还没在国内上市,我们仨手头都没有,还在用诺基亚的“智能机”做测试。

国内市场也没有很好的云服务作为基础设施,当时李彦宏表示,云计算只不过是新瓶装旧酒,15年来没有新东西,马化腾则认为云计算要像水电一样用还为时尚早。

如果执行力强的话,InstantPost应该能做出来,但肯定会遇到很多的坑,想取得一年1000多万用户肯定是痴心妄想。

当然,这仅仅说明我们三个比较菜,不是中国程序员不行,中国程序员在互联网时代也创造了很多优秀的产品,甚至杀到了美国大本营。

我想说的是,很多看起来是风口的东西,我们是抓不住的,因为:

我们不是局内人。

(强烈推荐这篇文章《》)

全文完,觉得不错的话点个赞或者在看吧!

参考资料:

https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million (本文主体内容的来源)

https://instagram-engineering.com/what-powers-instagram-hundreds-of-instances-dozens-of-technologies-adf2e22da2ad

https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
香港著名童星近况曝光,模样与童年差距明显,昔日甜美形象不再

香港著名童星近况曝光,模样与童年差距明显,昔日甜美形象不再

笑饮孤鸿非
2026-02-21 18:39:43
闲鱼不愧是全国最大的黑市,网民:只有你想不到,没有你买不到

闲鱼不愧是全国最大的黑市,网民:只有你想不到,没有你买不到

小熊侃史
2026-01-16 07:40:07
乌克兰在扎波罗热击落俄军苏34战机

乌克兰在扎波罗热击落俄军苏34战机

桂系007
2026-02-21 08:23:36
回婆家过年,婆婆却让我和孩子打地铺,我没吵,次日婆婆傻眼了!

回婆家过年,婆婆却让我和孩子打地铺,我没吵,次日婆婆傻眼了!

热心市民小黄
2026-02-21 15:53:23
陕西一加气站附近多辆半挂车起火,现场浓烟冲天,当地应急局:正在调查,无人员伤亡

陕西一加气站附近多辆半挂车起火,现场浓烟冲天,当地应急局:正在调查,无人员伤亡

大象新闻
2026-02-21 16:44:06
张艺谋瘦得脱相,陈婷美得像没生过孩子,二十七年到底怎么过的

张艺谋瘦得脱相,陈婷美得像没生过孩子,二十七年到底怎么过的

动物奇奇怪怪
2026-02-21 18:21:42
在国外踢球挣8万,来中国直接赚3600万,现恢复秘鲁国籍不愁吃穿

在国外踢球挣8万,来中国直接赚3600万,现恢复秘鲁国籍不愁吃穿

趣文说娱
2026-01-03 16:10:35
新加坡混双签位落定!莎头&栋曼缺席,国乒04后小将扛大梁冲冠

新加坡混双签位落定!莎头&栋曼缺席,国乒04后小将扛大梁冲冠

乒谈
2026-02-21 18:30:31
【新春看市场】健康年货旺销成潮流

【新春看市场】健康年货旺销成潮流

中国经济网
2026-02-21 07:25:05
影帝和美人鱼假装不认识!九亿姐替大佬生孩子!

影帝和美人鱼假装不认识!九亿姐替大佬生孩子!

八卦疯叔
2026-02-21 11:49:53
嫁黎明4年败光7亿家产,离婚后再嫁美国富豪,如今胖成大妈不敢认

嫁黎明4年败光7亿家产,离婚后再嫁美国富豪,如今胖成大妈不敢认

往史过眼云烟
2026-02-13 19:43:23
“见过最廉价的兜底”,家长让儿子在购物车里吃烤鸡,被全网嘲笑

“见过最廉价的兜底”,家长让儿子在购物车里吃烤鸡,被全网嘲笑

妍妍教育日记
2026-02-13 16:34:42
特鲁姆普:我不抽烟不吸毒,家人把我教育得太好

特鲁姆普:我不抽烟不吸毒,家人把我教育得太好

懂球帝
2026-02-20 23:44:06
聂凤智怒喝:谁敢开炮直接毙!小战士不服软:我非开一炮给军长看看

聂凤智怒喝:谁敢开炮直接毙!小战士不服软:我非开一炮给军长看看

老杉说历史
2026-01-30 23:25:14
八连败!女排队长留洋遇阻,五局仅7分,存在感低,球队稳坐倒一

八连败!女排队长留洋遇阻,五局仅7分,存在感低,球队稳坐倒一

跑者排球视角
2026-02-21 16:42:18
特斯拉又一车型宣布降价!

特斯拉又一车型宣布降价!

电动知家
2026-02-21 17:19:43
孩子过年收2万压岁钱,妈妈要求上交,孩子:是长辈给自己的,应由自己保管,法院:父母可为孩子代为保管,但不得随意使用

孩子过年收2万压岁钱,妈妈要求上交,孩子:是长辈给自己的,应由自己保管,法院:父母可为孩子代为保管,但不得随意使用

大象新闻
2026-02-20 09:48:03
04年,北京阿姨给小伙20元救急钱,18年后小伙千里报恩:还您19元

04年,北京阿姨给小伙20元救急钱,18年后小伙千里报恩:还您19元

叹为观止易
2026-02-21 16:32:57
就在今天!2月21日,新加坡大满贯传来孙颖莎 王曼昱 蒯曼新消息

就在今天!2月21日,新加坡大满贯传来孙颖莎 王曼昱 蒯曼新消息

皮皮观天下
2026-02-21 15:29:13
殷秀梅:遗憾没生孩子,一心培养弟弟,替弟弟养女儿值吗?

殷秀梅:遗憾没生孩子,一心培养弟弟,替弟弟养女儿值吗?

细品名人
2025-12-11 07:16:50
2026-02-21 19:28:49
码农翻身 incentive-icons
码农翻身
有趣且硬核的技术文章
227文章数 627关注度
往期回顾 全部

科技要闻

智谱上市1月涨5倍,市值超越京东、快手

头条要闻

美大法官"大战"总统撕开财政千亿黑洞 特朗普闪电反击

头条要闻

美大法官"大战"总统撕开财政千亿黑洞 特朗普闪电反击

体育要闻

冬奥第一"海王"?一人和13国选手都有关系

娱乐要闻

镖人反超惊蛰无声拿下单日票房第二!

财经要闻

一觉醒来,世界大变,特朗普改新打法了

汽车要闻

比亚迪的“颜值担当”来了 方程豹首款轿车路跑信息曝光

态度原创

亲子
本地
数码
教育
公开课

亲子要闻

邻居家开舞会,宝蓝穿着公主群打扮的很漂亮去参加~

本地新闻

春花齐放2026:《骏马奔腾迎新岁》

数码要闻

架构将进行颠覆性重构!Zen 6处理器推迟至2027年发布但绝对值得等

教育要闻

新春走基层 | 慢飞天使捏出 “年的形状”

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版