Архитектура инстаграм: Архитектура Instagram

Содержание

Архитектура Instagram

Instagram — всего лишь iOS, а теперь и Android, приложение для обмена фотографиями с друзьями. Последнее время находится на слуху благодаря новости о покупке проекта Facebook’ом за кругленькую сумму. Недавно один из основателей проекта, Mike Krieger, выступил на конференции с докладом о техническом аспекте проекта, который я и хотел бы вкратце пересказать.

Начало:

  • 1 сервер слабее Macbook Pro
  • 25к регистраций в первый день
  • 2 разработчика

Сегодня:

  • 40+ миллионов пользователей
  • 100+ виртуальных серверов в EC2, в том числе:
  • Проект куплен Facebook за 1 млрд. долл
  • 1 миллион регистраций за 12 часов после запуска Android-версии
  • 5 разработчиков

Технологии

  • UbuntuLinux 11.04 — основная операционная система
  • Python — основной язык программирования серверной части
  • Django — фреймворк
  • Amazon:
    • EC2 — хостинг
    • ELB — балансировка входящих HTTP-запросов
    • Route53 — DNS
    • S3 — хранение фотографий
    • CloudFront — CDN
  • nginx — второй уровень балансировки входящихHTTP-запросов
  • gunicorn — WSGI-сервер
  • HAProxy — балансировка нагрузки внутри системы
  • PostgreSQL — основное хранилище данных
  • postgis — поддержка гео-запросов
  • pgfouine — отчеты на основе логов
  • pgbouncer — создание пула соединений
  • Redis — дополнительное хранилище данных
  • Memcached — кэширование
  • Gearman — очередь задач
  • Solr — гео-поиск
  • munin, statsd, pingdom — мониторинг
  • Fabric — управление кластером
  • xfs — файловая система

Философия

  1. Простота
  2. Минимизация операционных издержек
  3. Использование подходящих инструментов

История

  • Забыли сделать favicon. ico до запуска — в первый же день логи пестрили ошибками 404
  • Для хранения данных использовали просто Django ORM и PostgreSQL (из-за postgis)
  • Начали с одного слабого сервера, после успешного запуска решили переехать на EC2
  • Довольно быстро пришлось вынести СУБД на отдельный сервер (виртуальный, естественно)
  • Количество фотографий продолжало расти и расти, даже самый большой инстанс EC2 не справлялся
  • Решили вертикально разделить данные на несколько баз, с использованием механизма routers из ORM, параллельно избавившись от внешних ключей
  • Через несколько месяцев суммарный размер базы данных перевалил за 60Гб и перестало справляться и это решение
  • Следующим шагом стало горизонтальное разбиение данных (sharding):
  • Создали несколько тысяч логических баз данных.
  • Распределили их по существенно меньшему количеству физических серверов (читай: виртуальных машин).
  • Написали свой механизм определения где искать какую базу данных, с поддержкой миграции (вероятно тоже на основе routers).
  • По последним данным под PostgreSQL используется 12+12 виртуальных машин с максимальной оперативной памятью (68.4Гб), а также сетевые диски EBS, объединенные в программный RAID посредством mdadm. Это необходимо, чтобы весь массив данных помещался в памяти, EBS не в состоянии обеспечить достаточную производительность.
  • С некоторыми задачами лучше справляется Redis:
  • Для каждого пользователя в Redis есть список идентификаторов новых фотографий от других пользователей, на которых он подписан.
  • При отображении потока новых для пользователя фотографий делается выборка части такого списка, после чего посредством multiget достается подробная о них информация из memcached.
  • Пробовали возложить на него задачу хранения списков подписчиков, но в итоге вернулись к решению на PostgreSQL с небольшим кэшированием.
  • В Redis также хранится информация о сессиях.
  • Несколько фактов о Redis:
    • Так как все находится в памяти — очень быстрые операции записи и работы с множествами.
    • Является не заменой, а дополнением к основному хранилищу данных.
    • Redis хорош для структур данных, которые относительно ограничены.
    • Отлично подходит для кэширования комплексных структур данных, где нужно большее, чем просто получить значение по ключу (например — счетчики, подмножества, проверка вхождения в множества).
    • Механизм репликации (посредством slaveof) позволяет легко масштабировать операции чтения.
  • Пользователи синхронно загружают фотографии на медиа-сервер с (опциональными) заголовком и месте на карте, все остальное происходит асинхронно посредством очередей, например:
    • Сохраняются гео-метки, обновляется Solr (который впоследствии заменил postgis).
    • Идентификатор нового фото добавляется в обсуждавшиеся выше списки для всех подписчиков автора.
  • Поначалу использовали Apache + mod_wsgi для запуска Django, впоследствии перешли к gunicorn из-за меньшего потребления ресурсов и простоты настройки.
  • С недавних пор начали использовать Amazon ELB вместо DNS round-robin для первичной балансировки входяших HTTP-запросов, что позволило:
  • избежать необходимости дешифровки SSL посредством nginx;
  • ускорить исключение из балансировки проблемных серверов.
  • Благодаря использованию xfs есть возможность «замораживать» и «размораживать» дисковые массивы при резервном копировании.

Подводим итоги

  • Многие проблемы с масштабируемостью — результат банальных человеческих ошибок.
  • Масштабирование = замена всех деталей в машине на скорости 150 км/ч.
  • Заранее сложно узнать как в основном будут обращаться к данным, без реального использования.
  • В первую очередь попытайтесь адаптировать известные Вам технологии и инструменты для создания простого и понятного решения, прежде чем бросаться на поиски чего-то нетривиального.
  • Дополните свое основное хранилище более гибким компонентом, вроде Redis.
  • Постарайтесь не использовать два инструмента для решения одной и той же задачи.
  • Оставайтесь гибкими и ловкими = напоминайте себе о том, что на самом деле имеет значение.
  • Разрабатывайте решения, к которым не придется постоянно возвращаться из-за их сбоев.
  • Активное юнит- и функциональное тестирование стоят потраченного на них времени.
  • DRY: не делайте одну и ту же работу несколько раз.
  • Слабая связанность посредством уведомлений или сигналов позволяет легко менять структуру проекта.
  • Дисковый ввод-вывод часто оказывается узким местом, особенно на EC2.
  • Спускаться до C нужно только при необходимости, большую часть работы лучше делать в Python.
  • Короткий цикл разработки — залог быстрого развития.
  • Частые совместные рассмотрения кода нужны, чтобы все были в курсе происходящего.
  • Не изобретайте велосипед.
  • Окружите себя с толковыми консультантами.
  • Культура открытости вокруг разработки.
  • Делитесь с opensource сообществом.
  • Фокусируйтесь на том, что вы делаете лучше всего.
  • Вашим пользователям абсолютно без разницы, написали ли Вы собственную СУБД или нет.
  • Не переоптимизируйте и не предполагайте заранее как сайт будет расти.
  • Не рассчитывайте, что «кто-то еще присоединится к команде и разберется с этим».
  • Для социальных стартапов очень мало, или даже совсем нет, нерешимых вопросов, связанных с масштабируемостью.

Упоминавшаяся во вступлении неприлично длинная презентация из 185 слайдов:

На видео, к сожалению, это выступление не записывалось.

Часть информации взята из технического блога Instagram.

13 апреля 2012 |  Иван Блинков  |  Высокие нагрузки

Amazon   Android   CloudFront   django   EC2   ELB   Fabric   Facebook   gearman   gunicorn   HAProxy   Intagram   iOS   Linux   Memcached   Munin   nginx   ORM   pgbouncer   pgFouine   Pingdom   postgis   PostgreSQL   Python   Redis   Route53   S3   Solr   statsd   Ubuntu   WSGI   xfs   Архитектура Instagram  

10 лучших архитектурных Instagram аккаунтов

News

 

В 2012 году Facebook раскошелился на $1 млрд. в пользу маленькой компании под названием Instagram. Сегодня это сильный и глобальный инструмент в мире социальных медиа, площадка, где каждый день миллионы пользователей выражают себя через потрясающие фотографии.

 

 

Архитекторы, дизайнеры и фотографы не стали исключением. Предлагаем 10 лучших представителей данной области, на которых стоит подписаться. Если вы заинтересованы в развитие современной архитектуры, хотите быть в курсе последних тенденций или просто ищите вдохновение, подписывайтесь и наслаждайтесь снимками, демонстрирующими архитектуру и дизайн.

 

 

Alan Durnwirth @adurnwirth

Мобильный фотограф, дизайнер и просто энтузиаст из Сиэтла, любит обновлять Instagram снимками архитектуры родного города.

 

#frankgehry #architecture

Публикация от Alan Durnwirth (@adurnwirth)

 

 

Frederik Liisberg @frederikliisberg

Instagram принадлежит жителю Дании, который искусно демонстрирует богатство родного Копенгагена и любой другой архитектуры мира.   

 

Gardens by the Bay/Singapore

Публикация от Frederik Liisberg (@frederikliisberg)

 

 

Christina @cm.images

Фотограф Кристина выгружает ошеломляющие снимки, подписка на нее обязательна.

 

shadowplay . #paris #architecturelovers

Публикация от christina (@cm.images)

 

 

Cieran Murphy @cieranmurphy

Сиаран Мерфи является независимым фотографом, живущим в Брисбене (Австралия). Он публикует фото, связанные с архитектурой, приключениями и стилем минимализм. 

 

Death Valley View pt.2 Zabriskie Point Sunrise ———————— #deathvalley #zabriskiepoint #california #ourplanetdaily #sunrise @deathvalleynps @deathvalleycamp @death_valley_national_park_ @california

Публикация от C I E R A N — M U R P H Y (@cieranmurphy)

 

 

@institute_architects_aus

Австралийский институт архитекторов вдохновляет новичков и призывает всех познавать азы архитектурного мастерства.  

 

Praxis International speaker Rahul Mehrotra is a prolific writer, practising architect, urban designer and educator. Mehrotra is the founder of RMA Architects in Mumbai which has designed projects for government and non-government agencies, corporate, individuals and institutions along with several unsolicited projects driven by the firm’s commitment to advocacy in the city of Mumbai. To purchase tickets and learn more about Praxis, click the link in the bio. #praxis2017 Photo credit: #RajeshVohra #CarlosChen

Публикация от @institute_architects_aus

 

 

Miruna Grec @arch_vortex

Молодой румынский студент-архитектор делится с миром своим вдохновением и не устает демонстрировать отменный вкус в дизайне и архитектуре.

 

Casa Brutale by OPA #concept #architecture #archilovers #architecturelovers #arquitetura #architectureporn #cliff #house #modern #design

Публикация от Arch Vortex (@arch_vortex)

 

 

@archifound

Профайл посвящен демонстрации лучшей архитектуры и дизайну интерьеров со всего мира.

 

The International Museum of the Baroque (Museo Internacional del Barroco) is a museum of Baroque art designed by Japanese architect Toyoo Itō located in Puebla, Mexico. It opened on February 4, 2016. #TheInternationalMuseumOfTheBaroque  #Puebla #Mexico #Awesome #Photo | Ph. @josepascual94 #Archifound #architecture #building #architexture #city #buildings #skyscraper #urban #design #minimal #cities #town #street #art #архитектура #architecturelovers #lovesdomus #lines #love #beautiful #archilovers #architectureporn #建築

Публикация от Archifound © (@archifound)

 

 

@herzogdemeuron       

Швейцарское архитектурное бюро Herzog & de Meuron было основано в 1978 и по сегодняшний день два основателя Жак Херцогом и Пьер де Мёроном продолжают трудиться над проектами по всей Европе, Северной и Южной Америке, и Азии.

 

A shared library and conference room on the top floor of the newly complete Fondazione Feltrinelli. Image © Mario Carrieri.

Публикация от Herzog & de Meuron (@herzogdemeuron)

 

 

Sebastian Weiss @le_blanc

Впечатляющий Instagram жителя Германии Себастьяна Вайсса. Он увлечен эстетикой и красотой городских форм. Кроме популярного профайла, Вайсс является фотографом и фото обозревателем Architectural Digest Germany.

 

Playing with lines and lights

Публикация от Sebastian Weiss (@le_blanc)

 

 

@superb_suburbs

Профайл дизайнера прольет свет на лучшие здания Великобритании и Ирландии.

 

 

Tags: архитектура, дизайн, Instagram, инстаграм, архитектор, проекты архитекторов, какой архитектор, Instagram аккаунт, instagram, архитектура 2017, Instagram аккаунты, Инстаграм, instagram, instagram, instagram, дизайн 2017 тенденции, Alan Durnwirth @adurnwirth, @superb_suburbs, Frederik Liisberg @frederikliisberg, Christina @cm.images, Cieran Murphy @cieranmurphy, @institute_architects_aus, Miruna Grec @arch_vortex, @archifound, Профайл, Miruna Grec — instagram, Christina — instagram, Frederik Liisberg — instagram, Alan Durnwirth, Alan Durnwirth — instagram, инстаграм, инстаграм аккаунты про архитектуру, архитектура инстаграм, архитекторы, дом архитектора, архитектор проекты домов, интерьер дизайнер, архитектурный бюро, современный дом проект, инстаграм архитекторов, стили архитектуры, современная архитектура, архитектура домов, интерьер дизайн, архитектурный проектирование, архитектура фото, фото футуристической архитектуры, архитектура здание, архитектура город, интерьер фотография, фото дизайн архитектура, инстагра фото, instagram аккаунт, instagram аккаунт, instagram аккаунт, здание, жилые здания, строительство зданий

Архитектура и база данных Instagram — как он хранит и ищет миллиарды изображений

Сегодня Instagram — самая популярная фото-ориентированная социальная сеть на планете. С более чем миллиардом пользователей он стал первым выбором для компаний, на котором можно проводить свои маркетинговые кампании.

В этой статье подробно рассматривается архитектура платформы и рассматриваются такие вопросы, как, например, какие технологии используются на сервере? Какие базы данных использует платформа? Как он хранит миллиарды фотографий, обрабатывая миллионы QPS (запросов в секунду)? Как он ищет контент в массиве данных, которые у него есть? Давайте узнаем.

Распределенные системы
Полный список похожих статей о распределенных системах и реальных архитектурах здесь.

Серверный код работает на Django Python. Все веб-серверы и асинхронные серверы работают в распределенной среде и не имеют состояния.

На приведенной ниже диаграмме показана архитектура Instagram:

Источник изображения: Instagram

Серверная часть использует различные технологии хранения, такие как Cassandra, PostgreSQL, Memcache и Redis, для предоставления персонализированного контента пользователям.

Если вы хотите освоить базы данных и проектирование распределенных систем, ознакомьтесь с учебным курсом «От нуля до архитектора программного обеспечения», состоящим из трех курсов, которые помогут вам понять проектирование распределенных систем благодаря подробному обсуждению различных компонентов и концепций системы, начиная с нуля.

Асинхронное поведение

RabbitMQ и Celery выполняют асинхронные задачи, такие как отправка уведомлений пользователям и другие системные фоновые процессы.

Celery — это асинхронная очередь задач, основанная на распределенной передаче сообщений, ориентированная на операции в реальном времени. Он также поддерживает планирование. Рекомендуемый брокер сообщений для celery — RabbitMQ.

RabbitMQ, с другой стороны, является популярным брокером сообщений с открытым исходным кодом, написанным с использованием протокола AMQP Advanced Messaging Queuing Protocol.

Gearman используется для распределения задач между несколькими узлами в системе и для асинхронной обработки задач, таких как загрузка мультимедиа и т.  д. Это платформа приложений для распределения задач на другие машины или процессы, которые больше подходят для выполнения этих конкретных задач. Он имеет широкий спектр приложений, начиная от высокодоступных веб-сайтов и заканчивая передачей событий резервного копирования базы данных.

Вычисление трендовых хэштегов на платформе

Базовая часть трендов — это приложение для обработки потоков, которое содержит четыре узла/компонента, соединенных линейно.

Источник изображения: Instagram

Роль узлов состоит в том, чтобы потреблять поток журналов событий и создавать ранжированный список трендового контента, т.

Узел препроцессора

Узел препроцессора прикрепляет необходимые данные, необходимые для применения фильтров на исходном носителе, к которому прикреплены метаданные.

Узел анализатора

Узел анализатора извлекает все хэштеги, прикрепленные к изображению, и применяет к нему фильтры.

Узел счетчика

Узел счетчика отслеживает счетчики для каждого хэштега в зависимости от времени. Все данные счетчика хранятся в кеше, а также сохраняются для долговечности.

Узел ранжирования

Роль узла ранжирования заключается в вычислении рейтинга трендов хэштегов. Тенденции обслуживаются из кэша чтения, который представляет собой Memcache, а база данных — Postgres 9.0046 .

Используемые базы данных @Instagram

PostgreSQL является основной базой данных приложения, в ней хранится большая часть данных платформы, таких как пользовательские данные, фотографии, теги, мета-теги и т. д.

По мере роста платформы Популярность и объем данных со временем становились огромными, команда инженеров Insta размышляла над различными решениями NoSQL для масштабирования и, наконец, решила разделить существующую базу данных PostgreSQL так, чтобы она лучше всего соответствовала их требованиям.

Чтобы получить более глубокое представление о распределенных базах данных, например о том, как они обрабатывают параллельный трафик, рост данных и т. д., ознакомьтесь с моим курсом по проектированию распределенных систем — Проектирование современных распределенных веб-приложений как профессионал

Говоря о масштабировании базы данных с помощью сегментирования и других средств, эта статья База данных YouTube — как она хранит так много видео без нехватки места?   — интересное чтение.

Кластер основной базы данных Instagram содержит 12 реплик в разных зонах и включает 12 экземпляров Quadruple Extra Large Memory.

Hive используется для архивирования данных. Это программное обеспечение для хранения данных, созданное на основе Apache Hadoop для запросов данных и возможностей аналитики. Запланированный пакетный процесс запускается через равные промежутки времени для архивирования данных из базы данных PostgreSQL в Hive.

Vmtouch, инструмент для изучения и управления кешем файловой системы Unix и Unix-подобных серверов, используется для управления данными в памяти при перемещении с одной машины на другую.

Использование Pgbouncer для объединения соединений PostgreSQL при подключении к внутреннему веб-серверу привело к значительному повышению производительности.

База данных Redis в памяти используется для хранения ленты активности, сеансов и других данных приложения в реальном времени.

Memcache — система кэширования в распределенной памяти с открытым исходным кодом, используемая для кэширования во всей службе.

Управление данными в кластере

Данные в кластере в конечном счете согласуются, уровни кэша совмещены с веб-серверами в одном центре обработки данных, чтобы избежать задержек.

Данные подразделяются на глобальные и локальные, что помогает команде масштабироваться. Глобальные данные реплицируются в разных центрах обработки данных в разных географических зонах. С другой стороны, локальные данные ограничиваются определенными центрами обработки данных.

Если вы хотите понять, как облако развертывает рабочие нагрузки глобально в зонах доступности и центрах обработки данных, как работают кластеры и многое другое. Ознакомьтесь с моим курсом по облачным вычислениям, не зависящим от платформы.

Первоначально серверная часть приложения размещалась на AWS, но позже была перенесена в центры обработки данных Facebook. Это упростило интеграцию Instagram с другими сервисами Facebook, сократило задержку и позволило им использовать фреймворки, инструменты для крупномасштабного развертывания, созданные командой инженеров Facebook.

Серверный код Instagram работает на #Django #Python. #PostgreSQL является основной #базой данных приложения. Узнайте больше здесь #distributedsystems #softwarearchitecture

Нажмите, чтобы написать твит

Мониторинг

При таком большом количестве экземпляров службы мониторинг играет ключевую роль в обеспечении работоспособности и доступности службы.

Munin — это инструмент мониторинга ресурсов, сети и инфраструктуры с открытым исходным кодом, который Instagram использует для отслеживания показателей службы и получения уведомлений о любых аномалиях.

StatsD сетевой демон используется для отслеживания статистики, такой как счетчики и таймеры. Счетчики в Instagram используются для отслеживания таких событий, как регистрация пользователей, количество лайков и т. д. Таймеры используются для определения времени создания каналов и других событий, которые выполняются пользователями в приложении. Эти статистические данные почти в реальном времени и позволяют разработчикам немедленно оценивать изменения системы и кода.

Dogslow Промежуточное программное обеспечение Django используется для наблюдения за запущенными процессами, и делается снимок любого процесса, занимающего больше времени, чем указано промежуточным программным обеспечением, и файл записывается на диск.

Pingdom используется для внешнего мониторинга веб-сайта, обеспечивая ожидаемую производительность и доступность. PagerDuty используется для уведомлений и реагирования на инциденты.

  Теперь давайте перейдем к архитектуре поиска.

Как Instagram ищет контент среди миллиардов изображений?

Instagram изначально использовал Elasticsearch для своей функции поиска, но позже перешел на Unicorn, социальную поисковую систему, созданную Facebook собственными силами.

Unicorn поддерживает поиск в Facebook и масштабируется до индексов, содержащих триллионы документов. Это позволяет приложению сохранять местоположения, пользователей, хэштеги и т. д., а также отношения между этими объектами.

Говоря о поисковой инфраструктуре Insta, она имеет денормализованные хранилища данных для пользователей, местоположений, хэштегов, медиа и т. д.

Эти хранилища данных также можно назвать документами, которые сгруппированы в наборы для обработки с помощью эффективных операций с наборами, таких как И-ИЛИ и НЕ.

Инфраструктура поиска имеет систему под названием Slipstream, которая разбивает загруженные пользователем данные, передает их через Firehose и добавляет в поисковые индексы.

Данные, хранящиеся в этих поисковых индексах, больше ориентированы на поиск, в отличие от обычного сохранения загруженных данных в БД PostgreSQL.

Ниже приведена схема архитектуры поиска

Источник изображения: Instagram

Если вы не знаете о Hive, Thrift, Scribe. Прочитайте эту статью, какую базу данных использует Facebook? Это даст вам представление о том, как Facebook хранит пользовательские данные.

Instagram изначально использовал #Elasticsearch для своей функции поиска, но позже перешел на #Unicorn, поисковую систему с поддержкой социальных графов, созданную Facebook собственными силами. #distributedsystems #softwarearchitecture

Нажмите, чтобы твитнуть

Ссылки:
Поисковая архитектура Instagram
Популярное в Instagram
Шардинг в Instagram

Ребята, вот и все. Статья будет постоянно обновляться по мере развития архитектуры Instagram. Я Шиванг. Вы можете поймать меня на LinkedIn здесь. Если вы нашли контент полезным, поделитесь им со своей сетью для лучшего охвата. До следующей записи в блоге. Ваше здоровье!

Архитектура системы Instagram. Пожалуйста, хлопайте и делитесь, если вам это нравится… | от JIN

Пожалуйста, хлопайте и делитесь, если вам понравилась эта статья.

Я считаю, что Instagram — это приложение, в котором большинство людей делятся своими ежедневными историями и записывают свои живые воспоминания, потому что это бесплатный сервис для обмена фотографиями и видео и социальных сетей.

Функциональные требования

  1. Пользователи загружают фотографии или видео
  2. Пользователи могут просматривать фотографии и видео
  3. Пользователи могут искать по названиям фотографий строка поиска
  4. Создать новостную ленту для каждого пользователя, на которого он подписан
  5. Может архивировать альбом фотографий
  6. Может делиться своими историями в чате
  7. Может блокировать/ограничивать других пользователей
  8. Может лайкать и комментировать публикации других пользователей
  9. Пользователи могут создавать post

Нефункциональные требования

  1. Высокая масштабируемость
  2. Высокая согласованность
  3. Высокая доступность
  4. Высокая надежность
  5. Пользовательские данные никогда не должны быть потеряны)0174
  6. Максимальная задержка для создания ленты новостей составляет 150 мс.

Теперь проведем некоторые математические расчеты для . Расчет размера данных. запросы на чтение = 100* количество запросов на загрузку (запись)

  • В пиковое время установите средний трафик = X, мы хотим обработать 6X
  • Активные пользователи:

    1. Публиковать 3 раза в неделю, каждое сообщение имеет 1 МБ изображения и текста
    2. Каждое сообщение получает не менее 10 лайков и 2–3 комментария
    3. Подписаться на 100 пользователей, за которыми следуют 50 пользователей
    4. Загружать обновление новостной ленты 2 раза в день

    Знаменитости

    1. Публиковать 2 раза в неделю, каждое сообщение содержит >500 тыс. изображений + текст
    2. Каждое сообщение получает >50 тыс. лайков + >1 тыс. комментариев
    3. 5 миллионов пользователей
    4. Загружать новостную ленту 2 раза в день

    Запросов в секунду (QPS)

    1. Сообщение
    • Create_post_avg = (150 миллионов + 10 K)*46/(7*2/(7*2) = 496/с
    • Create_post_peak = 496/с*6 = 3к/с

    *60)) = 6,6 к/с

  • like_post_peak = 6,6 к/с*6 = 40 к/с
  • 3. Комментарий

    • comment_post_avg = (150 миллионов82 +10K*1K) = 1k/s
    • Comment_post_peak = 1k/s *6 = 6k/s

    2/(24*60*60))= 3,5 тыс./с

  • get_follow_feed_peak = 3,5 тыс./с * 6 = 21,8 тыс./с
  • 5. Размер данных

    • z’,’A-Z’,’0–9′,’-‘,’_’]), нам нужно 5 бит ~ 1 байт
    • 500 миллионов + 10K * 5 бит ~1 байт = 1G пользователя

    Оценка емкости

    1. Ежедневное количество активных пользователей для загрузки = 1 миллион
    2. Ежедневно загружаемых фотографий = 5 миллионов
    3. Загруженных фотографий в секунду в день = 57 фотографий
    4. Средний размер фотографий = 150 КБ
    5. Хранилище 9 использование в день = 5 миллионов * 150 КБ = 716 ГБ
    6. Служба хранит эти данные в течение 10 лет, необходимое хранилище 716 ГБ * 365 * 10 лет = 2553 ТБ ≈ 2,6 ПБ
    7. Ежедневное количество активных пользователей для просмотра = 10 миллионов
    8. Ежечасная новостная лента производит 10 миллионов, что составляет 2800 RPS (запросов в секунду)
    9. Если у нас есть 1 поиск в день, то это 10 миллионов поисков в день, что составляет 115 RPS.

    Дизайн системных компонентов

    • Загрузка фото и видео = запись
    • Просмотр фото и видео = чтение
    • Соотношение чтения/записи = 20:80
    • Веб-сервер может поддерживать 100773 активных соединения одновременно

      4 одновременных подключений будет занят записью, а запись (загрузка) будет держать соединение открытым долгое время

    Итак, лучше иметь 2 БД для записи и чтения соответственно. Кроме того, разделение запросов на чтение и запись фотографий позволит нам независимо масштабировать и оптимизировать каждый процесс. Следующая диаграмма может работать для процесса чтения-записи.

    1. Службы создания новостных лент
    • Обновление пользователей для получения последних сообщений от пользователей, за которыми он или она следит
    • Таким образом, новостная лента каждого пользователя уникальна. Комбинация очень сложная
    • Чтобы сгенерировать новую ленту, система должна получить метаданные (лайки, комментарии, время, местоположение и т. д.) этих фотографий и передать их алгоритму ранжирования, чтобы определить, какие фотографии должны быть размещены в ленте новостей на основе метаданных.
    • Со стороны серверной части потребуется одновременно запрашивать множество таблиц, а затем ранжировать их с использованием предопределенных параметров, поэтому такой подход приведет к более высокой задержке. Создание новостной ленты займет много времени.
    • Итак, предгенерирующая новостная лента принята. Мы создаем сервер, предназначенный для создания новостной ленты, уникальной для каждого пользователя, и хранения ее в отдельной таблице новостных лент. При таком подходе, когда пользователь нажимает на обновление, пользователю будет отображаться лента новостей из БД.

    2. Обслуживание новостной ленты

    • Push — когда пользователь загружает новое фото/видео, тогда будут обновлены все его/ее подписчики. Используется лонг-пул. Если пользователь следит за многими людьми или знаменитостями, сервер должен довольно часто отправлять пользователю push-уведомления.
    • Pull — Пользователи обновят свою ленту новостей (отправят запрос на вытягивание на сервер). Новый пост не будет виден, пока пользователи не обновятся.
    • Гибридный подход — Примените подход на основе вытягивания для всех пользователей с большим количеством подписчиков или знаменитостей. Примените push-подход для обычных пользователей.

    3. Балансировка нагрузки

    • распределение трафика между группой серверов, что приводит к улучшению отклика и доступности веб-сайта или приложения
    • Использовать Метод наименьшей пропускной способности наименьшее количество трафика, измеряемое в мегабитах в секунду (Мбит/с)
    • Place between the client and the server or the server and the database

    Data Architecture

    Database Design

    1. Data related to user
    • User ID (primary key): уникальный идентификатор пользователя, позволяющий глобально различать пользователей
    • Имя : имя пользователя
    • Электронная почта : идентификатор электронной почты пользователя
    • Пароль : Пароль пользователя для облегчения входа в систему
    • Дата создания : дата регистрации пользователя

    2. Данные, относящиеся к фотографиям (AWS S3) photo

  • UserId : идентификатор пользователя, который загрузил фото расположение фотографии.
  • Дата и время : дата и время загрузки фотографии
  • 3. Данные, относящиеся к подписчикам и подписчикам пользователей UserId всех людей, следующих за пользователями

    Итак, нам нужно 2 разных варианта баз данных:
    1) реляционные базы данных (MySQL)
    2) базы данных NoSQL (Cassandra)

    Модель данных

    • типичные запросы: чтобы получить всех пользователей, на которых подписан пользователь X — отправить ленту для пользователя X
    • получить всех пользователей, которые подписаны на пользователя X — отправить сообщение пользователя X в ленту подписчиков
    • получить всех активных пользователей (кэшировать ленту подписчиков для активных пользователей)

    Интерфейс/API

    1. create_post(user_id, изображение, текст, временная метка) -> успех/неудача
    2. comment_post(user_id, post_id, комментарий, временная метка) -> успех/неудача
    3. like_ (user_id, post_id, временная метка) -> успех/неудача
    4. get_follow_feed(user_id, timestamp) -> список новейших сообщений из списка подписчиков пользователя, упорядоченный по времени, ограничение 20
    5. get_profile_feed(user_id, user2_id, timestamp) -> список новейших сообщений от user2, упорядоченный по времени, ограничение 20

    Архитектура системы

    Пост

    Лента

    Пост

    Подача

    Дополнительные ресурсы

    Instagram Engineering — Medium

    Instagram гордится своим бережливым приложением.

    Но по мере того, как количество инженеров и функций растет, растут и проблемы…

    medium.com

    Проектирование Instagram — Grokking the System Design Interview

    Давайте разработаем сервис обмена фотографиями, такой как Instagram, где пользователи могут загружать фотографии в поделиться ими с другими пользователями…

    www.educative.io

    Design Photo Sharing Platform — Instagram

    Отказ от ответственности: _**Это наш подход к разработке системы обмена фотографиями, такой как Instagram, для загрузки и обмена пользователями…

    techtakshila.com

    интервьюер задает вопрос о системном дизайне во время интервью: «Дизайн Instagram». Прежде чем мы приступим к работе над…

    www.codercrunch.com

    Instagram Engineering — Medium

    Прочтите письмо от Instagram Engineering на Medium. Каждый день Instagram Engineering и тысячи других голосов читают…

    medium.com

    Проектирование архитектуры Instagram — Дизайн системы — Nlogn

    Предпосылкой для изучения дизайна архитектуры Instagram является то, как спроектировать службу сокращения URL-адресов в виде крошечного…

    nlogn. in

    Дизайн системы Анализ Instagram

    Как вы разрабатываете сервис для обмена фотографиями, такой как Instagram?

    в направлении datascience.com

    Если вы нашли какую-либо из моих статей полезной или полезной, пожалуйста, рассмотрите возможность бросить мне кофе, чтобы помочь поддержать мою работу или оказать мне покровительство😊, используя

    Patreon

    Ko-fi.com

    buymeacoffee

    И последнее, но не менее важное, если вы не планируете стать одним из участников Medium используя следующую ссылку. Я получу часть вашего членского взноса без каких-либо дополнительных затрат для вас.

    Присоединяйтесь к Medium по моей реферальной ссылке — JIN

    Как участник Medium, часть вашего членского взноса идет авторам, которых вы читаете, и вы получаете полный доступ к каждой истории…

    jinlow.medium.com

    Получайте электронные письма каждый раз, когда JIN KANG LOW публикует.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *