- 浏览: 2653464 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
刚被Facebook以10亿美金收购的著名手机照片分享应用Instagram 最近吸引了无数人的眼球,Android版本 登陆Google Play不到一个月下载量就突破1000万,总用户数即将超过5000万。Instagram联合创始人Mike Krieger说他们用了8周时间打造了最初的Instagram ,但现在的系统肯定已经今非昔比。Instagram技术团队曾发表过一篇文章 ,介绍了Instagram背后的技术,日前Mike Krieger在名为Scaling Instagram 的演讲里,又介绍了更多细节,让人们能了解到5名技术人员是如何支撑起整个系统的。
一张照片上传的过程是这样的:
- 采用同步的方式写入媒体数据库
- 如果照片上有地理位置标签,则以异步的方式将照片提交给Solr 进行索引
- 将照片的ID加入每个关注者的列表里,该列表保存在Redis之中
- 在显示Feed时,选取一小部分照片ID,在Memcached里进行查询
在设计系统时,Instagram的设计哲学是简单、为最小化运维负担进行优化并监控一切内容;其核心原则是保持简单,不要重复发明轮子,尽可能使用经过验证、稳定可靠的技术。
由于只有5名技术人员(其中仅2.5名后端工程师),精力有限,选择Amazon的云服务 是个不错的选择。目前他们使用了超过100个EC2 实例用于提供各种服务,运行的操作系统是Ubuntu 11.04,之前的一些版本在高流量时表现不够稳定。在负载均衡方面,他们使用Amazon的Elastic Load Balancer 实现负载均衡,后端运行了3个Nginx实例,SSL只到ELB上为止,降低了Nginx上的CPU负载。DNS和CDN分别由Amazon的Route 53 和CloudFront 提供,所有的照片都存放在S3 上,目前已经有几TB的规模了。
用于处理请求的应用服务器运行于Amazon High-CPU Extra-Large Instance 之上,由于他们的请求更多是CPU密集型的,因此这能更好地平衡CPU与内存。采用的开发框架是Django ,WSGI服务器是Gunicorn ,通过Fabric 在所有机器上进行并行部署,一次部署仅需几秒钟。
大多数数据都存放在PostgreSQL里,主分片集群运行于12个High-Memory Quadruple Extra-Large Instance (68.4GB内存)上,另有12个位于不同可用区里的副本,通过repmgr 以Streaming Replication 的方式进行同步。由于Elastic Block Store 的磁盘IOPS不高,因此需要将正在使用的数据都加载到内存里,vmtouch 能帮助管理内存中的数据。他们在EBS上使用mdadm 实现了软件Raid,以此提升写吞吐量;数据库的文件系统用的是XFS,在从库获取快照时,会先冻结RAID阵列,保证快照的一致性。
应用程序在连接数据库时,由Pgbouncer 建 立连接池。目前,Instagram的数据按照用户ID进行分片,某些分片可能会超出物理节点的容量上限,为此他们将数据分成了很多个逻辑分片,映射到少 数几个物理节点之上;当一个节点被填满之后,可以将某些逻辑分片移到别的节点上,以缓解该节点的压力。随着数据量的增长,以后他们也会进行垂直分 区,Django DB Router能让一切轻松不少。
Instagram也大量使用Redis 来存放复杂的对象(对象的大小做了一定的限制),用于主Feed、活动Feed、会话系统 及其他相关系统 。因为要将Redis的所有数据都放在内存里,此处同样也用了High-Memory Quadruple Extra-Large Instance ,并对数据做了分片。当Redis实例的请求达到4万/秒后,它渐渐成为了瓶颈,于是Redis也做了主从复制,副本的数据会经常导出到磁盘上,通过EBS快照进行备份。
除了Redis,他们还使用Memcached来做缓存,目前运行了6个实例,应用服务器通过pylibmc 和libmemcached 进行连接。虽然Amazon提供了Elastic Cache服务,但该服务的价格并不便宜,相比之下,还是运行自己的Memcached实例比较划算。异步任务队列使用的是Gearman ,目前有大约200个工作进程来处理各种任务,比如把照片分享到Twitter和Facebook,通知用户有新照片等等。Pyapns 已经处理了十亿的推送通知,非常稳定,他们还自己开发了基于Node.js的node2dm ,用于向Android设备发送推送通知。
监控方面,Instagram使用Munin 以图形化的方式呈现整个系统的运行状况,还通过Python-Munin 定制了一些插件,用来显示业务数据;网络守护进程Stated 可以实时收集数据并做汇总;Dogslow 会监控进程,一旦发现运行时间过长的进程,便会保存该进程的快照,以便后续分析,比如响应时间超过1.5秒的请求,通常都是卡在Memcached的set()和get_many()方法上。对于Python的错误,只要登上Sentry 就能实时获取错误信息。
HighScalability 上还根据整理Mike Krieger的演讲整理了一些值得借鉴的经验,比如:
- 找那些你熟悉的技术和工具,在简单的使用场景里先做一些尝试
- 不要使用两个工具来处理同样的任务
- 事先准备降级方案,以便在需要时降低负载
- 不要过度优化,或者希望能事先知道站点要扩展,对于一个初创的社交站点而言,没什么扩展性问题是解决不了的
- 如果一个办法不行,赶快换下一个
如果您想进一步了解Instagram背后的技术细节,可以访问其技术团队的博客 。
发表评论
-
python读取图片exif信息
2014-11-06 10:53 2400f = open("/home/admin/tlo ... -
Python程序的执行原理
2014-04-14 15:44 17231. 过程概述 Python先把代码(.py文件)编译成字 ... -
如何创建一个短链服务
2013-12-26 16:23 0参考: http://stackoverflow.com ... -
python 解析命令参数(argument)组件argparse
2013-12-11 17:35 1400参考: http://youngsterxyf.githu ... -
pyhon命令行工具optparse
2013-11-10 16:27 1028使用python optparse 可以创建命令行工具,下面 ... -
Python在豆瓣的应用
2013-10-21 10:46 1194Python在豆瓣的应用,hongqiangning分享 ... -
用python爬虫抓站的一些技巧总结
2013-10-10 14:12 1681学用python也有3个多月了,用得最多的还是各类爬虫 ... -
python小技巧
2013-10-10 11:50 7341. 声明长度256的数组 a=[0]*256 ... -
使用tesseract-ocr破解网站验证码
2013-10-09 10:25 1212原文:使用tesseract-ocr破解网站验证码 ... -
和豆瓣CMGS交流
2013-06-20 17:36 5838蒋云鹏: 在?CMGS: 在蒋 ... -
python乱码问题('ascii' codec can't encode character u'\u4e2d' in position 0)
2013-05-20 19:03 4245>>> k = u'中' >> ... -
python shell 交互模式
2013-04-28 22:17 1628python 通过code模块可以很容易的进入交互模式: ... -
jython和gunicorn性能测试对比
2013-04-13 13:03 1294helloworld,笔记本上: gunicorn ... -
python的mysql客户端-MySQLdb
2013-04-04 10:13 1159平时的主要编程语言是Java,开发时也主要用Mysql,经常 ... -
Python几种并发实现方案的性能比较
2013-03-18 21:14 2956原文:http://www.elias.cn/P ... -
python汉字和Unicode码(utf-8)之间的转换(Pack/Unpack)
2013-03-18 21:13 1643保证你要转换的字符串编码为UTF8,如果不是,请iconv ... -
python反序列化的坑
2013-01-06 18:06 1278今天遇到python一个坑,调用memcached的get_m ... -
sqlalchemy connection pool.py 源代码
2012-12-29 22:58 2236把 sqlalchemy pool源代码copy下来,有空看看 ... -
SQLAlchemy简单介绍
2012-12-28 22:41 0文档参考:http://docs.sqlalchemy.org ... -
pymysql简单使用
2012-12-28 12:38 2118import pymysql conn = pymysq ...
相关推荐
综上所述,设计一个类似Instagram的图片分享社区数据库是一项涉及多方面技术和策略的任务,从基础架构到性能优化,再到用户体验,每个环节都需要精心设计和实施。通过“camera-jiegou.sql”和“camera-all.sql”这两...
总的来说,Instagram克隆项目是一个全面的实践机会,涵盖了JavaScript及其生态系统中的许多核心概念和技术。通过这个项目,开发者不仅可以提高编程技能,还能了解社交应用背后的架构和工作原理。无论是对于初学者...
Instagram作为一个全球知名的社交媒体平台,其背后的技术架构与Web服务效率是至关重要的。Web服务效率涉及到网站的性能、可扩展性、可靠性和用户体验等多个方面。在这个主题中,我们主要探讨Instagram如何通过优化...
Instagram的成功并非偶然,其背后蕴含了深刻的移动设计与开发智慧。通过采取上述策略,不仅可以提升应用的响应速度,还能增强用户体验,最终转化为用户忠诚度和市场份额的增长。对于任何希望在移动领域取得成功的...
Instagram Live 是一款非常流行的社交媒体功能,...综上所述,Instagram Live的后端架构是一个复杂的系统,涉及多种技术和组件,旨在为用户提供无缝的实时交流体验。具体实现细节可能在提供的PDF文档中有更深入的阐述。
Instagram是一款深受全球用户喜爱的照片和视频分享应用,其背后的技术栈和源代码是许多开发者学习和研究的对象。在这个“Instagram:演示 Instagram 源代码”的主题中,我们将深入探讨Instagram的开发技术,尤其是与...
而提到"Instagram"与"CSS"的结合,我们可以深入探讨Instagram界面设计背后的CSS技术及其应用。 CSS(层叠样式表)是网页设计中的关键组成部分,用于控制网页的布局、颜色、字体、间距等视觉效果。在Instagram的Web...
《Atom与instatom_node:构建Instagram的Node.js Atom提要》 在当今的软件开发领域,集成开发环境(IDE)扮演着至关...通过深入理解其背后的Node.js编程和Atom插件机制,你不仅可以享受便利,还能提升自己的技术能力。
Instagram轻,作为一个轻量级的应用,其背后的核心技术离不开JavaScript的强力支撑。JavaScript,作为互联网上最广泛使用的编程语言之一,对于构建动态、交互性强的Web应用起着至关重要的作用。在Instagram Lite的...
【标题】"Pr-tica1-Instagram"是一个与Instagram相关的项目实践,可能是一个仿制版的Instagram应用或者是一个与其功能相关的编程练习...通过实践这样的项目,开发者可以提升综合技能,理解社交应用背后的复杂技术架构。
接下来,我们将深入探讨这个项目背后的几个关键知识点。 1. **Selenium**: Selenium是一个广泛使用的开源自动化测试工具,可以模拟用户在浏览器上的各种交互行为。在这个项目中,Selenium被用来控制Brave浏览器,...
而作为一个技术爱好者,有时我们希望更深入地挖掘这些平台背后的数据,例如收集特定用户的照片或者分析热门话题。这就需要用到工具,比如"InstaPhotoDataParser",一个专为解析Instagram照片数据而设计的JavaScript...
**标题解析:** “post-writer:用于在...综上所述,post-writer是一个基于JavaScript开发的PWA,专注于帮助美食爱好者在Instagram上创建和编辑吸引人的帖子,其背后涉及的技术和知识点涵盖了Web应用开发的多个层面。
Instagram,这一全球知名的社交媒体平台,以其海量的图片分享功能著称,其背后的技术架构,特别是对于内存管理的实践,值得深入探讨。 #### Instagram的Redis实践概览 Instagram在处理数以亿计的图片及其对应的...
【标题】与【描述】提及的是“初中语文文摘”中的一个社会现象——“社会麻烦背后的商机”,然而这部分内容并没有直接关联IT知识。因此,我们可以从【部分内容】中找到与IT相关的知识点进行详细阐述。 【部分内容】...
本文将深入探讨InstaFilters这一话题,揭示其背后的技术、设计原理以及如何利用这些滤镜提升社交媒体的互动体验。 首先,让我们了解什么是InstaFilters。InstaFilters,即Instagram滤镜,是Instagram应用程序内的一...
本文将深入探讨SelfieMirror的核心功能、技术实现以及其背后的编程语言——Java。 首先,让我们了解SelfieMirror的基本功能。这款应用的核心是它的自拍筛选机制。在Instagram上,用户可以标记自己的照片为自拍,...
【知识点】 虽然这个文件主要描述的是欧洲阿尔卑斯山...以上就是从描述欧洲小镇的文件中关联到的技术知识点,尽管文件的主要内容是关于旅游,但背后的技术支持不容忽视,它们共同构成了现代旅游体验的重要组成部分。
Instagram、微博等平台上的精心策划内容使品牌能够直接与消费者建立联系,分享新品发布、时尚秀和背后的故事。同时,大数据和人工智能的运用帮助品牌更精准地了解客户需求,进行个性化推广。 此外,区块链技术也...