-
日期: 2025-06-19 | 来源: 码农翻身 | 有0人参与评论 | 字体: 小 中 大
后端
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个实例。- 新闻来源于其它媒体,内容不代表本站立场!
- 住车里程序员被质疑占用公共资源,本人回应
- 大温经纪已被判刑 又因前妻被罚款
- 刚刚法庭获准她收购TheBay3份租约
- 最干净女演员被富商苦追10年才嫁 如今被宠成宝
-
- 造型奇特 温村这独立屋吸引人围观
- 大温连爆勒索商户案!枪杀、威胁人心惶惶
- 宠物坐高铁试点范围扩大 新增20座车站
- 大温著名发廊 美发师都来自于日本
- 一字母之差 加国夫妇梦想假期被毁
- Canadian Online Casinos: Safe & Trusted Guide
-
- 贸易战后美国葡萄酒出口陷入困境
- 应对伊朗危机 川普依赖低调四人组 排除她和他
- 伊朗今晚准备了巨大惊喜?许多媒体可能误会了
- 温哥华汇款/外币兑换 汇率最优安全
- 金灿荣:中国网民嘲笑伊朗"又怂又菜"?!
- 华商讲述轰炸下的德黑兰:很多伊朗人才知道...
-
- 大陆热帖:大战已经开始,下周非常关键...
- 温哥华因此事背锅 加拿大大声否认
- "哈梅内伊去死!" 伊朗民众纷批政权 女生攻占学校
- 伊最高领袖才叫阵"不投降" 以色列再发动空袭
- 没人说赶快打电话给中国!北京破功
- 为什么普京对伊朗的支持只能动动嘴皮?
-
目前还没有人发表评论, 大家都在期待您的高见