知识点
相关文章
更多最近更新
更多Instagram 架构分析笔记
2019-03-27 01:20|来源: 网路
Instagram 团队上个月才迎来第 7 名员工,是的,7个人的团队。用户数量超过 1400 万,图片数量:1.5 亿。不得不说,这真他,妈是个业界奇迹。
几天前,Instagram 发布了一篇文章:What Powers Instagram: Hundreds of Instances, Dozens of Technologies,披露了 Instagram 架构的一些信息,足够勾起大多数人的好奇心。读罢做点笔记,各种线索还是有一定参考价值的。能打开原文的建议直接读原文。
Instagram 开发团队奉行的三个核心原则:
Keep it very simple (极简主义)
Don't re-invent the wheel (不重复发明轮子)
Go with proven and solid technologies when you can(能用就用靠谱的技术)
OS/主机
操作系统的选择,在Amazon EC2上跑 Ubuntu Linux 11.04 (Natty Narwhal) ,这个版本经过验证在 EC2 上够稳定。因为只有三名工程师,只有三名工程师,所以自己部署机器到 IDC 是不靠谱的事情。幸好有亚马逊。
负载均衡
此前曾用过两台 Nginx 做 DNS 轮询承载前端请求,这样做会有副作用,现在已经迁移到Amazon的ELB(Elastic Load Balancer),起了三个 Nginx 实例,在 ELB 层停掉了 SSL , 以缓解 CPU 压力。DNS 服务使用 Amazon Route53 服务。
应用服务器
启用了 25 个 Django 实例,运行在 High-CPU Extra-Large 类型的服务器实例上,之所以用 High-CPU Extra-Large 实例是因为应用请求是 CPU 密集型而非 IO 密集型。
使用 Gunicorn 作为 WSGI 服务器。过去曾用过 Apache 下的 mod_wsgi 模块,不过发现 Gunicorn 更容易配置并且节省 CPU 资源。使用 Fabric 加速部署。
数据存储
用户信息、图片元数据、标签等大部分数据存储在 PostgreSQL 中。主要的 Shard 数据库集群有 12个节点。
实践中发现 Amazon 的网络磁盘系统单位时间内寻道能力不行,所以有必要将数据尽量放到内存中。创建了软 RAID 以提升 IO 能力,使用的 Mdadm 工具进行 RAID 管理。
管理内存中的数据,vmtouch 这个小工具值得推荐。
PostgreSQL 设置为 Master-Replica 方式,流复制模式。利用 EBS 的快照进行数据库备份。使用 XFS 文件系统,以便和快照服务充分配合。 使用 repmgr 这个小工具做 PostgreSQL 复制管理器器。
连接池管理,用了 Pgbouncer。Christophe Pettus 的文章包含了不少 PostgreSQL 数据库的信息。
TB 级别的海量图片存储在 Amazon S3 上,CDN 采用的也是 Amazon 的服务,CloudFront。
Instagram 也是 Redis 的重度用户,Feed 以及 Session 信息都用 Redis 处理,Redis 也是以 Master-Replica 方式部署。在 Replica 节点上进行数据备份。
使用了 Apache Solr 承担 Geo-search API 的工作,Solr 简单的 JSON 接口也不错。
缓存使用了 6 个 Memcached 实例,库使用 pylibmc 和 libmemcached。亚马逊也提供缓存服务-Elastic Cache service ,Instagram 也有尝试,不过不便宜。
任务队列/发布通知
队列服务使用 Gearman ,通知系统则使用 pyapns 来实现。
监控
前面提及的服务器实例数量加起来,的确有100多个,有效的监控是相当有必要的。使用 Munin 作为主要监控工具 , 也写了不少定制插件,外部监控用 Pingdom 的服务。通知服务使用 PagerDuty。
对于 Python 的错误报告,使用 Disqus 团队开源的 Sentry 来处理。
几个感想
0) 轻装上阵说起来容易,做起来非常难。这也是 Instagram 团队目前最令人着迷的地方;
1)Python 社区已经足够成熟,各个环节上都已经有不错的解决方案了。
2)如果要问我最大的一个感慨,我要说:Amazon 真是一家伟大的公司,甚至比 Google 还伟大。
–EOF–
文章出处:http://www.dbanotes.net/arch/instagram.html
转自:http://my.oschina.net/u/864891/blog/118659
相关问答
更多-
instagram安卓版怎么注册[2022-03-25]
在国内被屏蔽了,你要在手机上面设置VPN,把IP换成香港或是国外的才可以打开 下载分享给你的51vpn ,这是软件的唯一官网:www.51vpnn.com.cn/ 装上软件后,来到主页面,点击网络加速按钮,变成加速中。 再从网络加速点击进去,选择你想x墙的APP。 这样就可以啦 -
instagram安卓版怎么才能用[2023-03-06]
有啊 有‘’添加到照片地图‘’ 选择之后就出现了 ‘’为此位置命名‘’ 就可以加位置了 -
使用Instagram Ruby Gem处理Instagram'地理'对象(Handling Instagram 'geography' objects using Instagram Ruby Gem)[2021-11-09]
与此同时,我发现了自己: Instagram.process_subscription(request.body.string) do |handler| handler.on_geography_changed do |object_id| # object_id tells you what subscribed geography-object has been updated end end In the meantime I've found it ou ... -
Instagram弹出窗口(Instagram popup)[2022-03-19]
好的,我找到了一种方法: 单击后,此函数将使用模板中使用的类。 var allTagFeed = new Instafeed({ target: 'inst1all', get: 'tagged', tagName: 'mongolia', clientId:'xxxxxxxxxxxxxxx', accessToken: 'xxxxxxxxxxxxxx', limit:'32', template: '< ...我想使用UIRequiredDeviceCapabilities是一种只生成iphone应用程序的方法。 我设置了camera-flash要求 I guess using UIRequiredDeviceCapabilities is a way to make only iphone app. I set camera-flash requirement这似乎是Ink文件选择器中的一个错误。 我们正在努力解决它,我会在解决后更新这个答案。 This appears to be a bug in Ink File Picker. We're working on addressing it and I will update this answer when it is resolved.是的,完全不受支持。 这三个用例非常明确,第19行也非常明确。 除非您可以将您的应用程序的用例设置为适合三种用例之一并遵守这些策略,否则您运气不佳。 Instagram已经威胁要撤销正在尝试做你正在尝试做的事情的流行应用程序的API访问权限。 我的建议是不要浪费时间试图击败系统。 弄清楚您的应用程序如何在遵守Instagram的API政策的情况下取得成功。 以下是您的案例研究: Crowdfire决定删除关系管理功能 。 请注意,他们是如何从应用程序中完全删除功能的,并将其替换为“报告卡”。 报告卡与记分卡 ...Android Instagram(Android Instagram)[2022-02-13]
很久以前有人问。 但明确的答案不在这里。 这就是为什么,我也想回答。 我一直在使用下面的代码,它的工作。 它直接重定向到裁剪instagram的屏幕。 (当然,Instagram应用程序必须安装在设备上。) ... Intent intent = createInstagramIntent("file://" + filePath); startActivity(intent); ... 和 private Intent createInstagramIntent(String uriString) { ...Instagram和oAuth(Instagram and oAuth)[2021-11-23]
你可能想要一个像https://github.com/Instagram/python-instagram这样的模块, 该网站的一个例子 from instagram.client import InstagramAPI api = InstagramAPI(client_id='YOUR_CLIENT_ID', client_secret='YOUR_CLIENT_SECRET') popular_media = api.media_popular(count=20) for media in popu ...您无法从其他应用程序将图像发布到Instagram。 以下是最底层的一些文字: http : //instagram.com/developer/endpoints/media/ 目前,无法通过API上传。 我们有意识地选择不添加此内容,原因如下: Instagram是关于你在旅途中的生活 - 我们希望鼓励应用程序内的照片。 但是,将来我们可能会根据具体情况授予白名单访问个人应用程序的权限。 我们想要打击垃圾邮件和低质量的照片。 一旦我们允许从其他来源上传,就很难控制Instagram生态系统中的内容。 所 ...