Как сделать ваш аккаунт Twitter не таким скучным и повысить вовлеченность пользователей: 30+ рекомендаций
Вы наверняка видели твиттер-аккаунты солидных компаний, после посещения которых становится тоскливо. В них есть только анонсы однотипных материалов, но нет ретвитов, диалогов и других признаков онлайн-жизни. Такие аккаунты имеют нулевую вовлеченность аудитории. В этой статье вы найдете рекомендации, которые помогут оживить вашу ленту в Twitter и стимулируют взаимодействие с аудиторией.
1. Заполните профиль
Хотите увеличить базу фолловеров? Расскажите пользователям о себе. Это помогает людям быстро решать, нужно ли подписываться на ваши обновления.
2. Сделайте профиль видимым в поиске
Большинство новых фолловеров в Twitter — это друзья ваших друзей. Однако некоторые пользователи находят вас через поиск в сервисе микроблогов или поисковые системы. Например, люди могут искать узких специалистов в регионе проживания. Укажите в профиле, где вы живете и чем занимаетесь.
3. Используйте привлекательный аватар
В личном профиле лучше всего использовать собственное фото крупным планом. Будет отлично, если на фото вы улыбаетесь. Это создает условия для общения на личностном уровне. Компании могут использовать логотип. Избегайте абстрактных картинок, фото знаменитостей и животных.
4. Регулярно публикуйте сообщения
По данным SocialMedia Examiner, наибольшую вовлеченность демонстрируют аккаунты, в которых публикуется от одного до четырех твитов в сутки. Если вы публикуете более шести твитов в сутки, это негативно влияет на активность аудитории. Эти данные были получены в ходе исследования твиттер-аккаунтов компаний. Однако они справедливы и для личных профилей в Twitter.
Читайте также: Искусство написания твитов: 12 техник, пробуждающих любопытство
5. Забудьте про выходные дни
По данным интернет-предпринимателя Нила Пателя, самый высокий показатель вовлеченности обеспечивают твиты, отправленные в субботу и воскресенье. Используйте это в качестве руководства к действию.
6. Публикуйте сообщения в правильное время
Пользователи Twitter демонстрируют самую высокую активность около полудня. Они отправляют львиную долю твитов в рабочее время: с 09:00 до 18:00. После 18:00 количество отправленных твитов сокращается примерно на 50 %. Можно предположить, что твиты, отправленные вечером, не затеряются среди сообщений конкурентов. Однако больше ретвитов вы получите в рабочее время.
7. Публикуйте твиты с фотографиями
Сообщения с картинками обеспечивают рост вовлеченности на 200 % по сравнению с текстовыми твитами. Вы можете создавать и обрабатывать фото самостоятельно, легально и бесплатно использовать чужие картинки или воспользоваться продвинутыми инструментами для создания визуального контента.
8. Публикуйте сообщения со ссылками
Пользователи делают ретвиты сообщений со ссылками на 86 % чаще по сравнению с текстовыми сообщениями.
9. Взаимодействуйте с новыми подписчиками
Когда у вас появляется новый фолловер, обязательно установите с ним контакт. Например, вы можете просмотреть профиль пользователя и поинтересоваться его работой или погодой в его регионе проживания. Так вы вовлекаете подписчика во взаимодействие.
10. Отвечайте пользователям
Старайтесь, чтобы последнее слово в дискуссиях всегда оставалось за вами. Это стимулирует диалоги.
11. Подписывайтесь на других пользователей
Twitter — это улица с двухсторонним движением. Чем больше пользователей вы зафолловите, тем больше фолловеров получите. Это не значит, что нужно подписываться на все подряд профили. Добавляйте в ленту аккаунты пользователей, которые вам действительно интересны.
12. Подписывайтесь на аккаунты отраслевых гуру и известных брендов
Подписавшись на аккаунт отраслевого лидера, вы можете использовать его популярность в своих интересах. Это происходит, когда вы делаете ретвиты сообщений популярных пользователей и участвуете в дискуссиях.
Читайте также: 10 советов по созданию контента, который люди будут расшаривать
13.
Задавайте вопросыТвиты-вопросы получают на 21 % больше ретвитов по сравнению с повествовательными текстовыми сообщениями. Также вы можете задавать вопросы пользователям персонально. Это помогает стимулировать дискуссию.
14. Создайте и опубликуйте видео с помощью приложения Vine
Шестисекундные видеоролики, созданные с помощью Vine, увеличивают отклик аудитории. В коротком видео можно даже делиться с пользователями полезными данными.
15. Станьте куратором контента
Делайте ретвиты интересных сообщений, связанных со сферой вашей деятельности. Курирование контента увеличит базу подписчиков и гарантирует вам дополнительные ретвиты и диалоги.
16. Анонсируйте собственный контент
Публикуйте анонсы новых материалов и тематические подборки статей. Время от времени делитесь с пользователями ссылками на старые публикации. У вас появляются новые подписчики, которые не читали ваших статей.
17. Используйте хэштеги
Хэштеги увеличивают видимость ваших сообщений. Используйте их для привлечения внимания новых пользователей. Экспериментируйте с разными метками, придумайте и популяризируйте собственный хэштег. Не вставляйте больше двух тегов в один твит.
18. Следите за поведением пользователей
Следите за предпочтениями пользователей. Например, определяйте наиболее популярные среди ваших подписчиков ссылки. Это можно сделать с помощью сервисов и приложений для мониторинга SMM-кампаний, например, Buffer App. Постепенно вы поймете, какой контент больше всего интересует вашу аудиторию.
19. Просите пользователей ретвитнуть ваше сообщение
Просьбы ретвитнуть в несколько раз увеличивают количество ретвитов, поэтому смело используйте этот инструмент. Однако не злоупотребляйте просьбами без повода. Просите ретвиты, когда проводите опросы, запускаете новый продукт, ищете специалиста в штат. Не просите перепосты для каждой публикации. Обязательно откликайтесь на просьбы ваших фолловеров.
20. Не публикуйте сообщения о себе
Если вы не Бейонсе или Криштиану Роналду, не публикуйте твиты о себе. Никто не хочет знать, что вы ели, как у вас болит голова после вчерашнего или где вы отдыхали. Для подобных сообщений есть другие соцсети. Twitter подходит для публикации деловой информации, поэтому не пользуйтесь дешевыми трюками для привлечения внимания.
21. Используйте призывы к действию
Просите ваших фолловеров оценить, прочитать, прокомментировать, высказаться. CTA управляют вниманием и действиями пользователей.
Читайте также: Как эффективно использовать хэштеги
22. Публикуйте короткие твиты
По данным Нила Пателя, сообщения длиной до 100 знаков получают на 17 % больше ретвитов по сравнению с более длинными текстовыми твитами.
23. Организовывайте и участвуйте в твиттер-чатах
Организуйте чат с отраслевым гуру, предложите подписчикам обсудить острую тему, принимайте участие в чатах, организованных другими пользователями. Свободное общение поможет вам привлечь внимание аудитории к аккаунту.
24. Используйте кросс-постинг сообщений в Facebook
Транслируйте свои сообщения в Facebook. Это помогает получить дополнительный отклик.
25. Организовывайте онлайн-трансляции
Когда вы участвуете в отраслевых мероприятиях, обязательно делитесь впечатлениями с подписчиками в режиме реального времени. Это обеспечит вам огромное количество ретвитов и новых фолловеров.
26. Участвуйте в обсуждении актуальных тем
Обращайте внимание на блок «Актуальные темы». Вы можете присоединиться к тематической дискуссии или организовать собственную.
27. Попросите фолловеров помочь вам
Например, вы можете попросить порекомендовать вам хорошего дизайнера, найти поставщика оборудования, оценить ваш последний обзор. Не злоупотребляйте этим трюком.
28. Помогайте пользователям
Обязательно помогайте, если кто-то из фолловеров просит об этом. Также вы можете оказывать помощь без прямой просьбы. Например, если ваши подписчики обсуждают какую-то проблему, подскажите ее решение.
29. Демонстрируйте индивидуальность и личные предпочтения
Выше сказано, что пользователи Twitter не интересуются вашим завтраком. Однако они с удовольствием узнают о ваших взглядах на ту или иную проблему, подходах к работе или способах общения с клиентами. Делитесь с фолловерами опытом, рассказывайте о своих предпочтениях. Покажите, что вы имеете личную точку зрения на важные вопросы.
30. Делайте ретвиты
Пересылайте сообщения других пользователей. Во-первых, это отличный способ установить контакт. Во-вторых, пользователи тоже будут пересылать ваши сообщения в знак благодарности.
31. Создавайте добавленную стоимость
Комментируйте сообщения, когда делаете ретвиты. Даже если вы напишите что-то вроде «классный материал», это оживит ваше сообщение и создаст условия для вовлечения других пользователей.
Читайте также: Как находить лучший контент для шеринга в социальных сетях
32. Публикуйте цитаты
Только не ищите подходящий текст в сборниках типа «100 лучших цитат всех времен и народов». Делитесь с аудиторией цитатами, которые действительно вам понравились. Например, некоторые ридеры электронных книг имеют функцию социального шеринга.
33. Публикуйте статистические данные
Результаты исследований, отчеты, отраслевые данные, — этот тип контента отлично подходит для публикации в Twitter. Вы можете оформить статистику в виде интерактивной инфографики.
34. Не покупайте фолловеров
Эта рекомендация прямо влияет на вовлеченность аудитории. Когда пользователи видят фейковые аккаунты и ретвиты, у них пропадает желание с вами общаться.
Возможно, вы используете другие методы активизации аудитории в Twitter? Расскажите о них в комментариях. И не забудьте поделиться этим материалом с фолловерами.
Последние новости о соцсети Twitter
Последние новости о соцсети Twitter — РТ на русскомBloomberg: разработчики Instagram планируют в июне запустить аналог Twitter
Разработчики платформы Instagram* планируют запустить в июне приложение, аналогичное по функционалу с Twitter.
Посольство России в США иронично прокомментировало удар «Кинжала» по ЗРК Patriot в Киеве
Посольство России в США иронично прокомментировало сообщения о том, что российские вооружённые силы нанесли удар по ракетному комплексу Patriot американского производства.
Маск подтвердил, что Яккарино стала новым гендиректором Twitter
Предприниматель Илон Маск подтвердил, что Линда Яккарино назначена новым генеральным директором компании Twitter.
WSJ: главой Twitter станет топ-менеджер массмедийной компании NBCUniversal Линда Яккарино
Топ-менеджер компании NBCUniversal Линда Яккарино может занять пост гендиректора компании, владеющей социальной сетью Twitter.
Илон Маск сообщил, что покинет пост гендиректора Twitter через шесть недель
Американский предприниматель Илон Маск сообщил, что нашёл преемника на пост гендиректора Twitter.
Маск объявил о запуске пробной версии шифрования личных сообщений в Twitter
Бизнесмен Илон Маск сообщил о запуске пробной версии шифрования личных сообщений в Twitter.
Пользователи Twitter сообщили о сбоях в работе соцсети
Пользователи Twitter жалуются на сбои в работе социальной сети.
Медведев об ограничении в Twitter: соцсеть прогнулась под США и Киев
Зампред Совбеза Дмитрий Медведев прокомментировал блокировку своего англоязычного аккаунта в Twitter.
Медведев заявил, что Twitter ограничил показ его публикации о Польше
Зампред Совбеза России Дмитрий Медведев заявил, что соцсеть Twitter ограничила показ его публикации о Польше.
Соцсеть Twitter разрешила пользователям монетизировать свои ленты
Социальная сеть Twitter добавила функцию монетизации, которая позволит пользователям зарабатывать на контенте на своей ленте.
Twitter начал предоставлять приоритет верифицированным аккаунтам над обычными
Владелец Twitter Илон Маск заявил, что прошедшие верификацию путём оформления подписки Twitter Blue пользователи получат приоритет над обычными участниками.
Twitter заблокировал аккаунт секретариата ШОС через месяц после открытия
Twitter заблокировал аккаунт секретариата Шанхайской организации сотрудничества (ШОС) через месяц после его открытия, рассказал заместитель генерального секретаря организации Григорий Логвинов.
Показ твита Медведева об Украине ограничили в Германии и Польше
Показ поста в Twitter зампреда СБ России Дмитрия Медведева об исчезновении Украины был ограничен в Германии и Польше.
Маск запустил программу монетизации в Twitter
Американский предприниматель Илон Маск запустил программу монетизации в Twitter.
Депутаты Госдумы подписали просьбу к генпрокурору Краснову разблокировать Twitter в России
Депутаты Государственной думы, представляющие все фракции, подписали обращение партии «Новые люди» к генеральному прокурору России Игорю Краснову с просьбой разблокировать социальную сеть Twitter на территории России.
Загрузить ещё
Самое читаемое
«Поражены командные пункты и радиолокационные посты»: российские войска нанесли удар по объектам ВСУ на аэродромах
В Харьковской области: в Минобороны РФ сообщили об ударе по пункту временной дислокации иностранных наёмников
Эксклюзив RT «Будто Бог дал знак, что можно ехать»: как российские бойцы смогли выбраться из окружения ВСУ
«Благодарю граждан за возможность находиться у руля ещё пять лет»: Эрдоган объявил о победе во втором туре выборов
В центральных районах: власти Киева сообщили о мощных взрывах в городе
«Часть информационной войны»: в МИД Ирана ответили на критику со стороны Зеленского
Новости СМИ2
Видео
Спецоперация Z: хроника главных военных событий 29 мая
Ранены два мирных жителя: ВСУ обстреляли Михайловку
Превзойти противника в мощи и стойкости: как работают российские танкисты на линии боестолкновений
В Косове этнические сербы вступили в столкновения с полицией — видео
Design Twitter — Интервью по системному дизайну Вопрос
Twitter … Возможно, вам хорошо бы постоянно проверять эту социальную сеть, но что, если кто-то попросит вас спроектировать эту гигантскую систему всего за 45 минут? ( Это шутка…. лолз? ).
Да, это то, что вы должны делать на собеседованиях по проектированию системы. Мы не шутим, и вы должны рассказать нам о своем подходе к разработке такой системы, как Twitter (в течение 45 минут или меньше), над которой сотни инженеров-программистов работают уже десять лет. Дизайн Twitter (или ленты Facebook, или поиска в Facebook…) — довольно распространенный вопрос, который интервьюеры задают кандидатам. Многие кандидаты боятся этого раунда больше, чем раунда кодирования, потому что они не понимают, какие темы и компромиссы они должны охватить в течение этого ограниченного периода времени. Во-первых, помните, что раунд проектирования системы чрезвычайно открытый и нет такого понятия, как стандартный ответ. Даже по одному и тому же вопросу у вас будет разное обсуждение с разными интервьюерами.
В этом блоге мы обсудим, как разработать веб-сайт, подобный Twitter, но прежде чем мы пойдем дальше, мы хотим, чтобы вы прочитали статью «Как взломать системный дизайн в ходе интервью?». Это даст вам представление о том, как выглядит этот раунд, что вы должны делать в этом раунде и каких ошибок вам следует избегать перед интервьюером.
Теперь давайте перейдем к прямому вопросу « Как бы вы спроектировали Twitter? ”
Как бы вы спроектировали Twitter?
Не бросайтесь сразу в технические детали, когда вам задают этот вопрос на собеседовании. Не бегите в одном направлении, это только создаст путаницу между вами и интервьюером. Большинство кандидатов делают здесь ошибки и сразу же начинают перечислять кучу инструментов или фреймворков, таких как MongoDB, Bootstrap, MapReduce и т. д. Помните, что ваш интервьюер хочет идеи высокого уровня о том, как вы будете решать проблему. Неважно, какие инструменты вы будете использовать, важно то, как вы определяете проблему, как вы разрабатываете решение и как вы анализируете проблему шаг за шагом.
Вы можете оказаться в ситуации, когда вы работаете над реальными проектами. Во-первых, определите проблему и уточните формулировку проблемы. В этом вопросе мы сожмем Twitter до MVP (минимально жизнеспособного продукта). Никто не ожидает, что вы спроектируете весь сервис. Итак, мы будем проектировать только 9В ядре 0003 есть Twitter вместо всего.
1. Обсудите основные функции
Итак, сначала разделите всю систему на несколько основных компонентов и обсудите некоторые основные функции. Если интервьюер хочет включить какие-то другие функции, он/она упомянет их там. Сейчас мы собираемся рассмотреть следующие возможности Twitter…
- Пользователь должен иметь возможность отправлять твиты всего за несколько секунд.
- Пользователь должен иметь возможность видеть временную шкалу твитов
- Временная шкала: Это можно разделить на три части…
- Временная шкала пользователя: Пользователь видит свои собственные твиты и твиты, которые пользователь ретвитит. Твиты, которые пользователи видят, когда посещают их профиль.
- Главная Хронология: Здесь будут отображаться твиты людей, на которые подписаны пользователи. (Твиты при переходе на twitter.com)
- Хронология поиска: Когда пользователи выполняют поиск по некоторым ключевым словам или #тегам и видят твиты, связанные с этим конкретным ключевым словом.
- Пользователь должен иметь возможность подписаться на другого пользователя.
- Пользователи должны иметь возможность отправлять твиты миллионам подписчиков в течение нескольких секунд (5 секунд)
2. Простое решение (синхронные запросы к БД)
Для разработки большой системы, такой как Twitter, мы сначала поговорим о простом решении. Это поможет нам двигаться к архитектуре высокого уровня. Вы можете разработать решение для двух вещей:
- Моделирование данных: Вы можете использовать реляционную базу данных, такую как MySQL, и вы можете рассмотреть две таблицы 9Таблица пользователей 0003 (идентификатор, имя пользователя) и таблица твитов [идентификатор, контент, пользователь (первичный ключ таблицы пользователей)] . Информация о пользователе будет храниться в пользовательской таблице, и каждый раз, когда пользователь будет твитить сообщение, оно будет сохранено в таблице твитов. Здесь также необходимы два соотношения. Во-первых, пользователь может подписываться друг на друга, а во-вторых, у каждого канала есть владелец пользователя. Таким образом, между пользователем и таблицей твитов будет связь «один ко многим».
- Подача каналов: Вам необходимо получить все каналы от всех людей, на которых подписан пользователь, и отобразить их в хронологическом порядке.
3. Ограничение архитектуры (укажите узкое место)
Вам нужно будет сделать большой оператор select в таблице твитов, чтобы получить все твиты для конкретного пользователя, за кем бы он ни следил, и это также в хронологический порядок. Выполнение этого каждый раз создаст проблему, потому что таблица твитов будет иметь огромный контент с большим количеством твитов. Нам нужно оптимизировать это решение, чтобы решить эту проблему, и для этого мы перейдем к высокоуровневому решению этой проблемы. Перед этим давайте сначала разберемся с характеристиками Twitter.
4. Характеристики Твиттера (трафик)
Твиттер имеет 300 млн активных пользователей в день. В среднем каждую секунду в Твиттере публикуется 6000 твитов . Каждую секунду 6, 00, 000 Запросов для получения таймлайнов. У каждого пользователя в среднем 200 подписчиков, а у некоторых пользователей, таких как некоторые знаменитости, миллионы подписчиков. Эта характеристика Твиттера проясняет следующие моменты…
- Твиттер имеет интенсивное чтение по сравнению с записью, поэтому мы должны гораздо больше заботиться о 9Доступность 0003 и масштаб приложения для интенсивного чтения в Твиттере.
- Мы можем рассмотреть окончательную согласованность для такого типа систем. Совершенно нормально, если пользователь увидит твит своего подписчика с небольшой задержкой
- Пробел не проблема, так как твиты ограничены 140 символами.
Высокоуровневое решение
Как мы уже говорили, Twitter требует большого объема чтения, поэтому нам нужна система, которая позволяет нам быстрее читать информацию, а также может масштабироваться по горизонтали. Redis идеально подходит для этого требования, но мы не можем полагаться исключительно на Redis, потому что нам также необходимо хранить копии твитов и связанной информации других пользователей в базе данных. Итак, у нас будет базовая архитектура Twitter, состоящая из трех таблиц… Таблица пользователей, Таблица твитов и Таблица подписчиков .
- Всякий раз, когда пользователь создает профиль в Твиттере, запись будет сохраняться в таблице пользователей.
- Твиты, опубликованные пользователем, будут храниться в таблице твитов вместе с User_id. Также в таблице User будет 1 слишком много связей с таблицей Tweet.
- Когда пользователь следует за другим пользователем, он сохраняется в таблице подписчиков, а также кэшируется Redis. Таблица User будет иметь 1 слишком много связей с таблицей Follower.
1. Архитектура пользовательской временной шкалы
Чтобы получить пользовательскую временную шкалу, просто перейдите в таблицу пользователей, получите user_id, сопоставьте этот user_id в таблице твитов, а затем получите все твиты. Это также будет включать ретвиты и сохранять ретвиты как твиты с оригинальными ссылками на твиты. Как только это будет сделано, отсортируйте твит по дате и времени, а затем отобразите информацию на временной шкале пользователя.
Как мы уже говорили, Twitter очень читаемый, поэтому описанный выше подход не всегда будет работать. Здесь нам нужно использовать другой слой, то есть слой кэширования , и мы сохраним данные для запросов пользовательской временной шкалы в Redis. Кроме того, продолжайте сохранять твиты в Redis, поэтому, когда кто-то посещает временную шкалу пользователя, он / она может получить все твиты, сделанные этим пользователем. Получение данных из Redis происходит намного быстрее, поэтому нет особого смысла всегда получать их из БД.
2. Архитектура домашней временной шкалы
Домашняя временная шкала пользователя содержит все последние твиты человека и страницы, на которые подписан пользователь. Что ж, здесь вы можете просто выбрать пользователей, за которыми следит пользователь, для каждого подписчика получить все последние твиты, затем объединить все твиты, отсортировать все эти твиты по дате и времени и отобразить их на домашней временной шкале. Это решение имеет около недостатки . Домашняя страница Twitter загружается намного быстрее, а эти запросы тяжелее в базе данных, поэтому эта огромная операция поиска займет гораздо больше времени, когда таблица твитов вырастет до миллионов. Теперь давайте поговорим о решении этого недостатка…
Подход разветвления: Разветвление просто означает распространение данных из одной точки. Давайте посмотрим, как его использовать. Всякий раз, когда пользователь (Followee) делает твит, выполняет много предварительной обработки и распределяет данные по домашним временным шкалам разных пользователей (фолловеров). В этом процессе вам не нужно будет делать какие-либо запросы к базе данных. Вам просто нужно зайти в кеш по user_id и получить доступ к данным домашней временной шкалы в Redis. Таким образом, этот процесс будет намного быстрее и проще, потому что в памяти мы получаем список твитов. Вот полный алгоритм этого подхода…
- За пользователем X следуют три человека, и у этого пользователя есть кэш, называемый временной шкалой пользователя. X что-то написал в Твиттере.
- Через Load Balancer твиты будут поступать на внутренние серверы.
- Узел сервера сохранит твит в базе данных/кэше
- Узел сервера извлечет из кеша всех пользователей, которые следуют за пользователем X.
- Серверный узел вставит этот твит в временную шкалу in-memory своих подписчиков (разветвление)
- Все подписчики пользователя X увидят твит пользователя X на своей временной шкале. Он будет обновляться и обновляться каждый раз, когда пользователь посещает свою временную шкалу.
Что будет, если у знаменитости будут миллионы подписчиков? Является ли вышеуказанный метод эффективным в этом сценарии?
Слабость (пограничный случай): Интервьюер может задать вышеуказанный вопрос. Если есть знаменитость, у которой миллионы подписчиков, Твиттеру может потребоваться от 3 до 44 минут, чтобы твит перешел от Эминема (знаменитости) к его миллиону подписчиков. Вам придется обновить миллионы домашних хронологий подписчиков, которые не масштабируются. Вот решение…
Решение [Смешанный подход (в памяти + синхронные вызовы)]:
- Предварительно вычислить домашнюю временную шкалу пользователя А (последователя Эминема) со всеми, кроме твитов Эминема
- Каждый пользователь поддерживает список знаменитости в кеше, а также на кого подписан этот пользователь. Когда поступит запрос (твит от знаменитости), вы можете получить знаменитость из списка, получить твит из пользовательской временной шкалы знаменитости, а затем смешать твит знаменитости во время выполнения с другими твитами пользователя А.
- Таким образом, когда пользователь А получает доступ к своей домашней временной шкале, его лента твитов объединяется с твитом Эминема во время загрузки. Таким образом, твит знаменитости будет вставлен во время выполнения.
Другое Оптимизация: Для неактивных пользователей не вычислять временную шкалу. Люди, которые не заходят в систему в течение достаточно длительного времени (скажем, более 20 дней).
3. Поиск
Твиттер выполняет поиск своих твитов и тегов #, используя Earlybird , который представляет собой обратный индекс в реальном времени на основе Lucene. Ранняя пташка делает инвертированное полнотекстовое индексирование операция. Это означает, что всякий раз, когда твит публикуется, он рассматривается как документ. Твит будет разбит на теги, слова и #теги, а затем эти слова будут проиндексированы. Эта индексация выполняется для большой таблицы или распределенной таблицы. В этой таблице каждое слово имеет ссылку на все твиты, содержащие это конкретное слово. Поскольку индекс представляет собой точное неупорядоченное соответствие строки, он может быть очень быстрым. Предположим, если пользователь ищет « выборы », то вы просматриваете таблицу и находите слово «9».0005 выборы ’, то вы разберетесь со всеми ссылками на все твиты в системе, потом она выдаст все результаты, которые содержат слово ‘ выборы ’.
Твиттер обрабатывает тысячи твитов в секунду, поэтому у вас не может быть только одной большой системы или таблицы для обработки всех данных, поэтому их следует обрабатывать с помощью распределенного подхода. Twitter использует стратегию разбросанных и собранных , где он устанавливает несколько серверов или центров обработки данных , которые позволяют индексировать. Когда Twitter получает запрос (скажем, #geeksforgeeks), он отправляет запрос на все серверы или центры обработки данных и запрашивает каждые Осколок Early Bird . Все ранние пташки, соответствующие запросу, возвращают результат. Результаты возвращаются, сортируются, объединяются и ранжируются. Рейтинг составляется на основе количества ретвитов, ответов и популярности твитов.
До сих пор мы говорили обо всех основных функциях и компонентах Twitter. Есть некоторые другие подробные компоненты, о которых вы можете поговорить. Например, вы можете рассказать о трендах / актуальных темах (с использованием Apache Storm и Heron framework), вы можете рассказать о уведомления, и как включить рекламу .
Хотите получить работу разработчика/инженера программного обеспечения в ведущей технологической компании? или Хотите плавно перейти от SDE I к профилям SDE II или Senior Developer? Если да, то вам необходимо глубоко погрузиться в мир проектирования систем! Приличное владение концепциями системного дизайна очень важно, особенно для работающих профессионалов, чтобы получить столь необходимое преимущество перед другими во время технических собеседований.
И именно поэтому GeeksforGeeks предлагает вам подробное интервью, ориентированное на Проектирование системы — живой курс , который поможет вам подготовиться к вопросам, связанным с проектированием систем для Google, Amazon, Adobe, Uber. и другие продуктовые компании.
Дизайн Твиттер: Интервью с системным разработчиком Вопрос
Твиттер — это платформа социальных сетей, где пользователи могут публиковать короткие сообщения, называемые «твитами», и взаимодействовать друг с другом. Эти твиты могут содержать до 280 символов и содержать текст, фотографии или ссылки. Пользователи также могут подписываться на других пользователей и получать уведомления, когда они публикуют новые твиты. В этой статье мы обсудим, как разработать систему, подобную Twitter. Во-первых, мы наметим ключевые требования к нашей системе.
Ключевые требования
Перед проектированием такой системы, как Twitter, важно определить основные функции и требования, которым мы хотим соответствовать при разработке.
- Публикация твитов: пользователи должны иметь возможность создавать и публиковать твиты, которые могут содержать текст, фотографии или ссылки.
- Доставка твитов: служба должна иметь возможность отправлять новые твиты подписчикам пользователя, опубликовавшего их, и отправлять push-уведомления, чтобы предупредить подписчиков о новых твитах.
- Просмотр временной шкалы: пользователи должны иметь возможность просматривать свою собственную временную шкалу (ленту собственных твитов), а также домашнюю временную шкалу (ленту твитов из учетных записей, на которые они подписаны).
- Высокая доступность: служба должна быть высокодоступной, то есть она должна быть в состоянии обрабатывать большое количество пользователей и запросов без простоев.
Оценка емкости
Предположим, что наша система Twitter имеет:
- 0,5 миллиарда пользователей.
- 100 миллионов активных пользователей в день (DAU).
- Каждый день создается 50 миллионов новых твитов.
Система будет генерировать в общей сложности 4 миллиарда просмотров твитов в день, если предположить, что в среднем пользователь посещает свою временную шкалу 1 раз в день, посещает 3 страницы других людей и на каждой странице есть 10 твитов. Это рассчитывается по формуле: общее количество просмотров твитов в день = количество DAU * (количество посещений временной шкалы в день + количество посещенных страниц других людей в день) * количество твитов на страницу = 100 миллионов * (1 + 3) * 10 = 4 миллиарда.
Итак, наша система твиттера больше читает, чем пишет, то есть получает больше запросов на чтение твитов, чем на их создание. Поэтому очень важно оптимизировать для быстрого чтения твитов.
Если предположить, что размер каждого твита составляет 10 КБ, то общее ежедневное необходимое хранилище составит примерно 5 ТБ. Этот расчет выполняется по формуле: общий объем памяти, необходимый в день = размер твита * количество твитов в день = 10 КБ * 50 миллионов = 5 ТБ.
Высокоуровневое проектирование
На высоком уровне сервису, подобному Twitter, требуется система с несколькими серверами приложений для обработки клиентских запросов. Эти серверы размещаются за балансировщиками нагрузки, которые равномерно распределяют входящий трафик между серверами. На бэкэнде необходима мощная база данных для хранения твитов и поддержки большого количества чтений. Кроме того, системе необходимо файловое хранилище для хранения фото и видео
Общая высокоуровневая архитектура нашей платформы выглядит следующим образом:
Платформа предлагает ряд услуг, предназначенных для выполнения определенных функций. Для поддержки всех предполагаемых вариантов использования каждая служба предоставляет набор API-интерфейсов, которые могут использоваться клиентскими приложениями или другими службами. Эти сервисы также имеют собственные хранилища данных для хранения соответствующих данных.
Когда служба получает запрос, например новый твит или запрос на подписку на пользователя, она проверяет запрос и сохраняет данные в своем хранилище данных. Кроме того, служба отправляет сообщение в виде события службе обмена сообщениями, которое может использоваться другими службами для обновления своего состояния. Таким образом, платформа может обрабатывать широкий спектр вариантов использования и обеспечивать эффективное хранение и обработку данных.
Модель данных и хранилищеПри выборе решения для хранения данных для большой платформы с большим количеством пользователей важно учитывать варианты как SQL, так и NoSQL. Однако из-за проблем с масштабируемостью решений SQL решение NoSQL может оказаться более подходящим. В этом случае мы можем использовать хранилище данных с широкими столбцами, такое как Cassandra, для хранения таких данных, как твиты, комментарии и лайки.
Для таких объектов, как пользователи и их подписчики, мы можем рассмотреть возможность использования решения для хранения данных на основе графа, такого как Neo4j или Cassandra. Используя подходящее хранилище данных для каждого типа данных, мы можем гарантировать, что система способна обрабатывать большие объемы данных и эффективно масштабироваться.
Детальный дизайн компонентов
Основные системные компоненты нашей платформы:
Служба пользователя: Предоставляет API для управления пользователями и их взаимодействием, например, подписка или отписка от других пользователей. В некоторых случаях может быть полезно создать отдельную службу подписки пользователей для обработки этих взаимодействий. Такое разделение обязанностей может помочь обеспечить масштабируемость и простоту обслуживания системы.
Служба твитов: Предоставляет API для создания и хранения твитов в хранилище данных, а также для управления комментариями и лайками к твитам. В зависимости от потребностей приложения эта служба может быть дополнительно разделена на службы комментариев твитов и службы лайков твитов для улучшения организации и масштабируемости.
Служба каналов: Отвечает за подсчет твитов, которые появятся на временной шкале пользователя. У него есть API, который возвращает эти твиты, чтобы можно было отобразить временную шкалу, а также поддерживает нумерацию страниц, чтобы пользователи могли просматривать свою временную шкалу по частям. Это облегчает пользователям навигацию по временной шкале и просмотр твитов, которые наиболее важны для них. Служба также имеет возможность быстро и эффективно рассчитывать временную шкалу, гарантируя, что система может масштабироваться для поддержки большого количества пользователей.
Генерация временной шкалы: Чтобы отобразить временную шкалу пользователя, система должна отображать самые последние сообщения от подписчиков пользователя. Создание временной шкалы по запросу может быть медленным для пользователей с большим количеством подписчиков, поскольку алгоритм должен запрашивать, объединять и ранжировать большое количество твитов. Для повышения производительности система должна предварительно сгенерировать временную шкалу и сохранить ее в памяти. Это позволяет быстро получать временную шкалу, когда пользователь загружает страницу, вместо того, чтобы создавать ее по запросу.
Чтобы обеспечить регулярное обновление предварительно сгенерированных временных шкал, система может использовать выделенные серверы для их постоянного создания и хранения в памяти. При использовании этого подхода временные шкалы пользователей не компилируются по запросу, а регулярно обновляются и сохраняются в памяти для быстрого поиска.
Обновления временной шкалы: Если система создает временные рамки для всех пользователей одинаковым образом, у пользователей с большим количеством подписчиков могут возникать задержки с получением новых сообщений. Чтобы решить эту проблему, система может отдавать приоритет пользователям с новыми обновлениями при создании графиков. Когда новый твит добавляется в очередь сообщений, он подхватывается службами генератора временной шкалы, которые повторно генерируют временную шкалу для всех подписчиков. Такой подход позволяет пользователям быстро получать новые публикации, даже если у них большое количество подписчиков.
Существует несколько подходов, которые можно использовать для публикации новых сообщений для пользователей:
- Модель извлечения: В этом подходе клиенты могут запрашивать данные регулярно или всякий раз, когда они им нужны, вручную. Недостатком этого метода является то, что новая информация не отображается до тех пор, пока клиент не отправит запрос на включение. Кроме того, большинство запросов на вытягивание возвращают пустой ответ, если нет новых данных, что может привести к пустой трате ресурсов.
- Модель Push: При таком подходе система отправляет уведомление всем подписчикам пользователя, как только они публикуют твит. Однако этот метод может быть сложным, когда у пользователя миллионы подписчиков, поскольку сервер должен одновременно передавать обновления большому количеству людей.
- Гибридная модель: Можно использовать комбинацию моделей вытягивания и выталкивания, чтобы сбалансировать преимущества и недостатки каждого подхода. Например, система может предоставлять обновления непосредственно пользователям, у которых всего несколько сотен или тысяч подписчиков, в то время как знаменитости с большим количеством подписчиков могут полагаться на своих поклонников в распространении обновлений. Этот гибридный подход может помочь гарантировать, что система способна эффективно масштабироваться и поддерживать большое количество пользователей.
Оптимизация системы
В этом разделе мы рассмотрим различные стратегии оптимизации для повышения производительности, масштабируемости, избыточности и других нефункциональных аспектов нашей архитектуры. Эти подходы помогут нам гарантировать, что система способна удовлетворить потребности большого количества пользователей и обеспечить надежную и качественную работу.
Разделение базы данныхУчитывая большое количество пользователей и твитов, невозможно хранить все данные службы на одном компьютере. Чтобы решить эту проблему, важно определить стратегию секционирования для разделения данных на более мелкие секции или секции, которые можно реплицировать и хранить на разных узлах кластера. Этот процесс, известный как сегментация данных, помогает повысить скорость узлов данных за счет уменьшения количества узлов, которые необходимо обыскать, чтобы найти конкретный документ.
Существует несколько различных подходов к разделению данных, включая разделение по пользователям, твитам или другим критериям. Тщательно учитывая потребности приложения и характеристики данных, можно разработать эффективную стратегию разделения, которая поможет гарантировать, что система сможет эффективно масштабироваться и поддерживать большое количество пользователей.
Разделение на основе идентификатора пользователя
Одним из возможных подходов к разделению данных является привязка каждого пользователя к определенному серверу на основе его идентификатора пользователя. Эта стратегия удерживает все твиты, лайки и подписчиков пользователя, среди прочего, на одном сервере. Однако этот подход может быть проблематичным, когда некоторые пользователи (например, знаменитости) особенно популярны, поскольку это может привести к тому, что непропорционально большой объем данных и доступ будут сосредоточены на подмножестве серверов. Для решения этой проблемы может потребоваться принятие другой стратегии разделения, которая лучше подходит для характеристик данных и потребностей приложения.
Разделение на основе TweetID
Другой подход к разделению данных заключается в сопоставлении каждого твита с конкретным сервером на основе его TweetID. Этот метод сохраняет информацию о твите на сервере, который отвечает за этот конкретный твит. Чтобы найти твиты, система должна запросить все серверы и получить набор твитов с каждого из них. Хотя этот подход помогает избежать проблемы горячих пользователей за счет равномерного распределения данных по серверам, он может увеличить задержку, поскольку все серверы должны быть опрошены, чтобы найти конкретный твит. В результате этот метод может оказаться не лучшим вариантом для приложений, требующих высокой производительности поиска.
Разделение на основе времени создания твита
Хранение твитов на основе времени их создания позволяет нам быстро получать самые последние твиты, запрашивая только небольшое количество серверов. Однако такой подход может привести к неравномерному распределению нагрузки трафика. Например, при написании новых твитов весь входящий трафик будет направляться на один сервер, а остальные серверы будут простаивать. С другой стороны, при чтении твитов сервер, на котором хранятся самые свежие данные, может испытывать более высокую нагрузку по сравнению с серверами, на которых хранятся более старые данные, что приводит к проблемам с производительностью и неэффективности обработки больших объемов трафика.
Кэширование базы данных
Кэширование — полезный метод повышения производительности и масштабируемости системы. Он работает путем хранения предварительно вычисленных данных в кеше, к которому можно быстро получить доступ в ответ на запросы этих данных.
Служба веб-каналов является хорошим кандидатом на внедрение кэширования для повышения скорости системы. Одним из вариантов хранения кэшированных данных является использование таких решений, как Redis или Memcache. Эти решения можно использовать для кэширования хронологии для каждого пользователя, потенциально сохраняя всю временную шкалу пользователя или значительную ее часть.
Предварительно загружая в кэш эти данные, можно уменьшить задержку, когда пользователь получает доступ к своей ленте, улучшая их работу. Для дальнейшего повышения производительности система может упреждающе запрашивать и кэшировать следующий пакет данных канала для пользователя, когда он просматривает свой канал. Это может помочь сократить время, необходимое для загрузки новых твитов, и улучшить общее взаимодействие с пользователем.
Балансировка нагрузки
Чтобы обеспечить равномерное распределение входящих запросов между несколькими центрами обработки данных, мы можем использовать балансировку нагрузки DNS. Это особенно полезно для приложений, которые получают запросы из различных географических регионов. Перед каждой службой должен стоять балансировщик нагрузки для распределения запросов по различным узлам службы на основе оценок емкости.
Существует несколько методов балансировки нагрузки, которые можно использовать, например циклический алгоритм и метод наименьшего количества подключений, чтобы определить, как распределить нагрузку между доступными узлами. Кроме того, поскольку наши службы не имеют состояния, мы можем добавлять или удалять узлы из кластера без потери данных, что упрощает масштабирование системы по мере необходимости.
Репликация и отказоустойчивость
Для оптимизации рабочих нагрузок с большим количеством операций чтения мы можем использовать несколько подчиненных серверов базы данных для каждого раздела базы данных. Эти подчиненные серверы будут использоваться только для обработки трафика чтения, в то время как все операции записи будут направлены в главную базу данных, а затем реплицированы в подчиненную базу данных. Такой подход не только помогает распределять трафик чтения, но и обеспечивает отказоустойчивость.
Заключение
В этом сообщении блога мы обсудили, как разработать систему, аналогичную Twitter.