当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-11-28 09:32:05 175观看
导读大概是2009年,我和两个好哥们聊天,觉得智能手机可能是风口,商量着要弄一个照片分享网站。用户可以用手机把随手拍的照片放到网上分享,名称都起好了,叫InstantPost。可是我们的执行力太差了,聚了两次,做了一点儿技术验证,就没

大概是2009年,我和两个好哥们聊天,觉得智能手机可能是风口,商量着要弄一个照片分享网站。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

用户可以用手机把随手拍的照片放到网上分享,名称都起好了,叫InstantPost。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

可是我们的执行力太差了,聚了两次,做了一点儿技术验证,就没有下文了。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

过了几年,我看到美国一个叫Instagram的火了,不由地一拍大腿:卧槽!这不就是我们当年要做的事儿吗?!MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

图片图片MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

后来我看到Instagram初期的故事,他们也是三个程序员,从2010年10月到2011年12月,在一年多的时间内,就把用户数量从0增长到了1400万!MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

看完他们的架构设计,我就释然了,抛开执行力,在2009年那个时间点,我们确实不行。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

Instagram制定的架构指导准则是:MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

1.保持简单MGH28资讯网——每日最新资讯28at.com

2.不要重新发明轮子MGH28资讯网——每日最新资讯28at.com

3.尽可能使用经过验证的可靠技术MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

所以早期的Instagram跑在云上,使用EC2和Ubuntu Linux 11.04(“Natty Narwhal”)。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

接下来,站在一个用户会话(Session)的角度,来看看Instagram的处理过程。MGH28资讯网——每日最新资讯28at.com

前端

MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

Session:用户打开了Instagram APP。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

2010年,Instagram开发了一个iOS app,正式推出。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

因为这时候Swift还没有发布,他们用了Objective-C,UIKit等技术。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

图片图片MGH28资讯网——每日最新资讯28at.com

负载均衡

MGH28资讯网——每日最新资讯28at.com

Session:打开App后,会向后端发起一个请求(获取主界面的“信息流”),这个请求会首先到达Instagram的负载均衡。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

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

MGH28资讯网——每日最新资讯28at.com

后来他们选择了Amazon的Elastic Load Balancer,这里有三个NGINX实例,可以换入换出。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

图片图片MGH28资讯网——每日最新资讯28at.com

后端

MGH28资讯网——每日最新资讯28at.com

Session:负载均衡会把请求转发给应用服务器MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

Instagram用Django作为后端服务,运行在 Amazon High-CPU Extra-Large 上,因为这三个程序员发现,后端服务是CPU密集型的。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

用Gunicorn做WSGI Server。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

图片图片MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

应用运行在超过25台亚马逊虚拟机中,这些应用都是无状态的,可以在需要的时候进行扩展。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

为了在多台机器上运行命令(例如部署代码),Instagram使用了Fabric,它有一个很好用的并行模式,部署只需要几秒钟。MGH28资讯网——每日最新资讯28at.com

数据存储

MGH28资讯网——每日最新资讯28at.com

Session: 用户请求到达了应用服务器,接下来它需要获得这些数据:MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

1.最新的Photo IDsMGH28资讯网——每日最新资讯28at.com

2.这些Photo ID对应的实际照片MGH28资讯网——每日最新资讯28at.com

3.这些照片的用户数据MGH28资讯网——每日最新资讯28at.com

Database: PostgreSQL

MGH28资讯网——每日最新资讯28at.com

Session: 应用服务器从PostgreSQL获取最新的Photo ID,这里保存着用户和照片的元数据。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

大部分的数据,如用户,照片元数据,标签等都保存在PostgreSQL数据库中。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

因为数据量不小,每秒钟有25个照片上传,并且有90个赞,Instagram对数据做了分片。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

分片系统由数千个逻辑分片组成,这些分片在代码中被映射到少得多的物理分片,用这种办法,可以从少量的数据库开始,扩展到更多的数据库。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

当扩展时,只需要把逻辑分片从一个数据库“指向”另外一个即可,无需挪动任何数据。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

一个挑战是:Instagram如何解决Photo ID问题,因为需要能按时间排序,而无需获得有关照片的更多信息,理想情况下,ID应该是64位的。MGH28资讯网——每日最新资讯28at.com

后来的解决方案是这样的:MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

41位:记录毫秒时间MGH28资讯网——每日最新资讯28at.com

13位:逻辑分片IDMGH28资讯网——每日最新资讯28at.com

10位:自动增长的序列,模数1024,这意味着每毫秒,每个分片可以生成1024个IDMGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

最终结果是个64为整数,可以被PostgreSQL排序,找到最新的照片。MGH28资讯网——每日最新资讯28at.com

照片的存储:S3 和Cloudfront

MGH28资讯网——每日最新资讯28at.com

Session: 获取了Photo ID以后,应用服务器要获取真正的照片,快速发给用户MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

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

缓存

MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

Instagram 需要将大约 3 亿张照片(ID)和创建它们的用户ID的映射保存起来,以便知道查询那个分片。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

他们选择了Redis后发现,为了保存这些映射,Redis需要21GB内存,这已经大于 Amazon EC2 上的 17GB 实例类型。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

后来他们向Redis的核心开发人员Pieter Noordhuis求助,Pieter建议使用Redis Hash,最终通过巧妙的设计,这些映射仅需不到5G的内存。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

对于其他缓存(如session),Instagram使用Memcached,当时有6个实例。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

图片图片MGH28资讯网——每日最新资讯28at.com

数据备份

MGH28资讯网——每日最新资讯28at.com

无论是PostGreSQL还是Redis,都会使用Amazon EBS经常性进行数据备用MGH28资讯网——每日最新资讯28at.com

通知和异步任务

MGH28资讯网——每日最新资讯28at.com

Session: 用户关闭了App,但是朋友发送了一张照片,需要发送一个通知。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

Instagram的推送服务用的是 pyapns, 这是一个开源的、通用的苹果推送服务提供商,运行非常稳定,为Instagram处理了超过10亿条推送通知。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

Session:用户非常喜欢这张照片! 他决定在Twitter何Facebook上分享。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

在后台, 任务被推送到了Gearman, 这个任务队列会保存任务,Instagram有大约200 Python workers 来处理这些任务。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

图片图片MGH28资讯网——每日最新资讯28at.com

监控

MGH28资讯网——每日最新资讯28at.com

Session: Uh oh! 服务器端发生了错误,Instagram崩溃了,那三个程序员需要收到告警,马上进行处理。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

Instagram 使用 Sentry这个开源的应用来实时监控Python错误。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

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

MGH28资讯网——每日最新资讯28at.com

对于外部服务的监控,使用了Pingdom ,PagerDuty 用于处理事件和通知。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

最终的架构

MGH28资讯网——每日最新资讯28at.com

图片图片MGH28资讯网——每日最新资讯28at.com

反思

MGH28资讯网——每日最新资讯28at.com

2009年,我们三个都在比较传统的软件公司,互联网技术用得比较少。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

像负载均衡、分库分表、缓存也是刚刚开始接触,还没有在生产系统中大规模使用的经验。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

iPhone还没在国内上市,我们仨手头都没有,还在用诺基亚的“智能机”做测试。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

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

MGH28资讯网——每日最新资讯28at.com

如果执行力强的话,InstantPost应该能做出来,但肯定会遇到很多的坑,想取得一年1000多万用户肯定是痴心妄想。 MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

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

MGH28资讯网——每日最新资讯28at.com

我想说的是,很多看起来是风口的东西,我们是抓不住的,因为:MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

我们不是局内人。MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

参考资料:MGH28资讯网——每日最新资讯28at.com

MGH28资讯网——每日最新资讯28at.com

https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million (本文主体内容的来源)MGH28资讯网——每日最新资讯28at.com

https://instagram-engineering.com/what-powers-instagram-hundreds-of-instances-dozens-of-technologies-adf2e22da2adMGH28资讯网——每日最新资讯28at.com

https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5cMGH28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-34555-0.html三个中国程序员 vs三个美国程序员,不得不承认,差距太大了!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Vue3 学习笔记,Vue 简介及如何引入 Vue3 框架

下一篇: Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能

标签:
  • 热门焦点
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • 从零到英雄:高并发与性能优化的神奇之旅

    从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 一文搞定Java NIO,以及各种奇葩流

    一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • Temu起诉SHEIN,跨境电商战事升级

    Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

    外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top