首页 >> 芳纶盘根

Instagram成功背后的工程技术电动绞肉机

发布时间:2022-07-21 17:06:27 来源:慕勒五金网

Instagram成功背后的工程技术

Instagram成功背后的工程技术 2012年07月12日 来源: 作者:annieInstagram是许多创业公司的楷模,十几个人的公司,从刚开始的默默无闻到最后被Facebook重金收购。这么一家公司,从最开始的操作系统选择,服务器到数据库选择,消息推送,都是如何进行的?本文编译自Instagram工程博客,告诉你Instagram的技术“秘密”。在选择一个系统的时候,我们的核心原则就是:尽量简单;不做重复工作;尽量采用经过验证的靠谱的技术。操作系统/托管因为当时我们只有三个人,而且需求也不是很多,还没有到自己建立服务器的地步,所以考虑托管,采用的是 Amazon EC2上的UbuntuLinux 11.04 (Natty Narwhal)系统,以前版本的Ubuntu在EC2上面跑的时候如果遇到高流量会莫名其妙地死机,但是Natty(Ubuntu的一个版本代号)就没问题,可能随着应用发展以及使用的增加,我们会建立自己的服务器。负载平衡每个发送到Insagram的请求都要通过负载平衡器,当时我们用2台nginx服务器以及DNS轮叫调度承载前端请求,这种方法的负面影响就是,如果一台机器瘫痪,DNS就得花时间进行更新,于是最近我们使用亚马逊的弹性负载均衡器(ElasticLoadBalancer),我们也在ELB曾停掉了SSL,减小NGINX上CPU压力,DNS服务则使用亚马逊的Route53,最近AWS提供了非常不错的GUI工具。 应用服务器接下来就是请求的处理,启用的是亚马逊 High-CPU Extra-Large中的Django框架,随着使用的增加,Diango数量从最开始的几个增加到超过25个。同时我们采用http://gunicorn.org/ 作为WSGI服务器,通常我们都习惯使用 mod_wsgi和Apache,后来发现Gunicorn更容易配置,而且是CPU密集型,如果要同时运行多个实例指令,我们就采用Fabric(最近增添了几个有用的平行模式)。 数据储存我们的大多数数据(用户信息,照,标签等等)都存在 PostgreSQL中,我们曾写过关于如何在不同Postgres实例之间共享,我们的主要共享集群包含12个 Quadruple Extra-Large内存实例。我们发现亚马逊的网络磁盘系统(EBS)的每秒寻道能力不足,所以就将数据尽量保存到内存中,为了达到合理的IO性能,我们在使用Mdadm工具的RAID软件中启用EBS驱动。 后来发现vmtouch这种内存数据管理软件很好用,尤其是在将故障从一台设备转到另一台机器时候,表现很不错,这是我们我们对vmtouch运行的分析脚本,以及为了与现在的内存状态相匹配而对应的vmtouch输出指令,为了将数据库与我们的应用服务器相连,我们采用 Pgbouncer,照片本身会直接分享到亚马逊的S3,利用亚马逊的CloudFront作为我们的CDN以节省图片载入时间。另外,我们还使用Redis,但由于所有Redis数据都需要与内存匹配,所以我们就停止运行一些Quadruple Extra-LargeMemory案例,只在一些特定的子系统中分享一些Redis实例。 对于我们的geo-search API,已经使用PostgreSQL 几个月了,不过如果分享了媒体入口,就会使用 ApacheSolr,我们这个API还有一个非常简单的JSON接口,对于我们的应用来说,这相当于另一个API。最后,和任何现代Web服务一样,我们使用 Memcached 来进行缓存,现在我们有6个 Memcached实例,然后用pylibmc& libmemcached进行连接(亚马逊最近还推出了一个Elastic Cache)。任务队列/消息推送当有用户将Insagram图片分享到Twitter或者Facebook的时候,或者当我们想要知道用户何时上传图片的时候,我们就用Danga开发的任务队列系统German来处理,这样一来,不用同时处理任务队列,上传媒体文件就非常快。关于消息推送,我们找到的最节约成本的方案就是>

邵东县廉桥镇沪东针织内衣厂

佳木斯市中天汽车销售有限公司

海南坤和律师事务所

乌鲁木齐浩丝物资供应中心

秦皇岛市移通通讯设备有限公司文化南路分公司

上海克约通信科技有限公司

泉州货运公司

白洋淀荷花

宁波江东宏缘工艺蜡业礼品厂

洛阳古洛玻璃有限公司

友情链接