我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Instagram网站的图片存储过程是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Instagram网站的图片存储过程是什么

这篇文章主要介绍“Instagram网站的图片存储过程是什么”,在日常操作中,相信很多人在Instagram网站的图片存储过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Instagram网站的图片存储过程是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

被Facebook以10亿美金收购的著名手机照片分享应用Instagram最近吸引了无数人的眼球,Instagram联合创始人Mike Krieger说他们用了8周时间打造了最初的Instagram,但现在的系统肯定已经今非昔比。Instagram技术团队曾发表过一篇文章,介绍了Instagram背后的技术,日前Mike Krieger在名为Scaling Instagram的演讲里,又介绍了更多细节,让人们能了解到5名技术人员是如何支撑起整个系统的。

一张照片上传的过程是这样的:

采用同步的方式写入媒体数据库
2.如果照片上有地理位置标签,则以异步的方式将照片提交给Solr进行索引
3.将照片的ID加入每个关注者的列表里,该列表保存在Redis之中
4.在显示Feed时,选取一小部分照片ID,在Memcached里进行查询
5.在设计系统时,Instagram的设计哲学是简单、为最小化运维负担进行优化并监控一切内容;其核心原则是保持简单,不要重复发明轮子,尽可能使用经过验证、稳定可靠的技术。

由于只有5名技术人员(其中仅2.5名后端工程师),精力有限,选择Amazon的云服务是个不错的选择。目前他们使用了超过100个EC2实例用于提供各种服务,运行的操作系统是Ubuntu 11.04,之前的一些版本在高流量时表现不够稳定。在负载均衡方面,他们使用Amazon的Elastic Load Balancer实现负载均衡,后端运行了3个Nginx实例,SSL只到ELB上为止,降低了Nginx上的CPU负载。DNSCDN分别由Amazon的Route 53和CloudFront提供,所有的照片都存放在S3上,目前已经有几TB的规模了。

用于处理请求的应用服务器运行于Amazon High-CPU Extra-Large Instance之上,由于他们的请求更多是CPU密集型的,因此这能更好地平衡CPU与内存。采用的开发框架是Django,WSGI服务器是Gunicorn,通过Fabric在所有机器上进行并行部署,一次部署仅需几秒钟。

用户信息、图片元数据、标签等大部分数据存储在 PostgreSQL 中。
实践中发现 Amazon 的网络磁盘系统单位时间内寻道能力不行,所以有必要将数据尽量放到内存中。创建了软 RAID 以提升 IO 能力,使用的 Mdadm 工具进行 RAID 管理。
管理内存中的数据,vmtouch 这个小工具值得推荐。
PostgreSQL 设置为 Master-Replica 方式,流复制模式。利用 EBS 的快照进行数据库备份。使用 XFS 文件系统,以便和快照服务充分配合。 使用 repmgr 这个小工具做 PostgreSQL 复制管理器器。
连接池管理,用了 Pgbouncer。Christophe Pettus 的文章包含了不少 PostgreSQL 数据库的信息。

应用程序在连接数据库时,由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上还根据整理Instagram团队软件工程师Mike Krieger的演讲整理了一些值得借鉴的经验,比如:

找那些你熟悉的技术和工具,在简单的使用场景里先做一些尝试
2.不要使用两个工具来处理同样的任务
3.事先准备降级方案,以便在需要时降低负载
4.不要过度优化,或者希望能事先知道站点要扩展,对于一个初创的社交站点而言,没什么扩展性问题是解决不了的
5.如果一个办法不行,赶快换下一个

到此,关于“Instagram网站的图片存储过程是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Instagram网站的图片存储过程是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Instagram网站的图片存储过程是什么

这篇文章主要介绍“Instagram网站的图片存储过程是什么”,在日常操作中,相信很多人在Instagram网站的图片存储过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Instagram网站的图片存
2023-06-10

mongodb存储图片的方法是什么

在MongoDB中存储图片通常有两种方法:存储图片的URL链接或者将图片以二进制数据的形式存储在数据库中。存储图片的URL链接:在这种方法中,将图片存储在文件系统或者云存储中,然后将图片的链接存储在MongoDB数据库中。这样可以减小数据库
mongodb存储图片的方法是什么
2024-04-09

mysql存储图片是什么类型的

mysql存储图片是BLOB、MEDIUMBLOB、LONGBLOB三种类型的。具体介绍:1、BLOB类型可以存储二进制数据,适合存储一些较小的图片,如头像、图标等;2、MEDIUMBLOB类型可以存储中等大小的二进制数据,适合存储一些稍大
2023-07-18

oracle的存储过程是什么

Oracle的存储过程是一段预先编译好的PL/SQL代码,它经过编译后存储在数据库中,并可以在需要的时候被调用执行。存储过程可以包含一系列的SQL语句、控制结构、变量声明等,可以实现复杂的逻辑和业务操作。存储过程可以提高数据库的性能和安全性
oracle的存储过程是什么
2024-05-11

mysql的存储过程是什么

MySQL的存储过程是一种在数据库服务器内部存储和执行的一组SQL语句集合。存储过程可以包含SQL语句、控制结构、变量声明和赋值等,类似于程序中的函数或方法。存储过程可以被调用和执行,可以帮助简化复杂的SQL操作,提高数据库的性能和安全性。
mysql的存储过程是什么
2024-04-09

SQLServer中的存储过程是什么

存储过程是一组预编译的SQL语句集合,可被存储在数据库服务器上,以便在需要时调用执行。存储过程可以接受输入参数,并返回结果,它们可以用于执行复杂的数据库操作,如数据检索、更新、插入、删除等。存储过程可以提高数据库性能、安全性和可维护性,同时
SQLServer中的存储过程是什么
2024-04-09

存储过程的优点是什么?

以下是存储过程的优点:由于存储过程是编译和存储的,因此无论何时调用过程,响应都很快。您可以将所有必需的 SQL 语句分组在一个过程中并立即执行它们。由于过程存储在数据库服务器上这比客户端更快。您可以使用它执行所有复杂的查询,这会更快。使用过
2023-10-22

MySQL中的存储过程是什么

MySQL中的存储过程是一段预先编译好的SQL代码块,它可以在需要的时候被调用执行。存储过程通常用于封装一系列SQL语句,以实现特定的功能或任务。存储过程可以接受参数,并可以返回结果。它可以在数据库服务器上创建和存储,并可以通过调用存储过程
2023-08-15

Oracle中的存储过程是什么

Oracle中的存储过程是一组预编译的SQL语句和PL/SQL代码,可以接受输入参数、执行特定任务,并返回结果。存储过程可以在数据库中存储并被多个程序或用户调用,可以提高数据库的性能和安全性。存储过程通常用于执行复杂的数据操作、数据处理和业
Oracle中的存储过程是什么
2024-04-09

PostgreSQL中的存储过程是什么

存储过程是一组预编译的SQL语句和逻辑操作,通过一个命名的过程存储在数据库服务器中,用于执行特定的任务或操作。存储过程可以接受输入参数,执行一系列SQL语句并返回结果。在 PostgreSQL 中,存储过程可以通过 PL/pgSQL 或其他
PostgreSQL中的存储过程是什么
2024-04-09

什么是SQLServer中的存储过程

在SQLServer中,存储过程是一组SQL语句的集合,可以被存储在数据库中并重复使用。存储过程可以包括数据查询、数据操作、流程控制以及其他逻辑。通过存储过程,可以简化复杂的数据库操作,提高数据库的性能和安全性。存储过程还可以减少网络通信的
什么是SQLServer中的存储过程
2024-04-09

Oracle procedure存储过程是什么

Oracle存储过程是一种在数据库中存储的可重复使用的程序单元。它可以接受参数并执行一系列的数据库操作,比如查询、插入、更新和删除数据。存储过程可以被调用并传递参数,从而实现复杂的业务逻辑和数据处理操作。存储过程可以提高数据库的性能和安全性
2023-10-23

MySQL中的视图、存储函数、存储过程、触发器分别是什么

这篇文章主要讲解了“MySQL中的视图、存储函数、存储过程、触发器分别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的视图、存储函数、存储过程、触发器分别是什么”吧!目录一
2023-06-20

mysql存储过程的作用是什么

本篇内容主要讲解“mysql存储过程的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql存储过程的作用是什么”吧!mysql存储过程的作用:1、通过
2023-04-19

oracle存储过程的游标是什么

Oracle存储过程中的游标是一种用于遍历和访问查询结果集的数据库对象。游标可以被认为是指向某个查询结果集的指针,通过游标可以逐行地读取查询结果集中的数据。在存储过程中,游标通常用于以下几种情况:1. 遍历查询结果集:通过游标可以循环遍历查
2023-08-24

MySQL存储函数与存储过程的区别是什么

这篇“MySQL存储函数与存储过程的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL存储函数与存储过程的区
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录