Skip to main content

Quora

Введение​

С таким огромным количеством информации, доступной онлайн, поиск ответов на вопросы может быть сложной задачей. Именно поэтому распространение информации в интернете стало настолько популярным. Поисковые системы помогают нам находить информацию по всему вебу. Например, поисковая система Google достаточно умна, чтобы отвечать на вопросы, извлекая информацию с веб-страниц. Хотя у поисковых систем есть свои преимущества, иногда найти нужную информацию не так просто. Давайте взглянем на иллюстрацию ниже, чтобы понять, как поиск информации через поисковые системы отличается от поиска через людей.

img_289.png

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

Что такое Quora?​

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

Следующий график показывает глобальные тенденции поиска термина "Quora" с помощью Google:

img_290.png

Более 300 миллионов активных пользователей ежемесячно публикуют тысячи вопросов, касающихся более чем 400,000 тем на Quora.

В этой главе мы разработаем Quora и оценим, как она удовлетворяет функциональные и нефункциональные требования.

Как мы будем разрабатывать Quora?​

Мы будем разрабатывать Quora, разделив задачу проектирования на следующие четыре урока:

Требования:​

В этом уроке мы сосредоточимся на функциональных и нефункциональных требованиях для проектирования Quora. Мы также оценим ресурсы, необходимые для разработки системы.

Первоначальный дизайн:​

Мы создадим первоначальный дизайн, который будет удовлетворять все функциональные требования для Quora, а также сформулируем API-дизайн в этом уроке. В основном, мы обсудим основные блоки системы, другие компоненты, участвующие в завершении дизайна, их интеграцию и рабочий процесс.

Окончательный дизайн:​

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

Оценка:​

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

Примечание: Информация, представленная в этой главе, вдохновлена инженерным блогом Quora.

Requirements of Quora's Design​

img_291.png img_292.png img_293.png img_294.png img_295.png img_296.png img_297.png img_298.png

Initial Design of Quora​

img_299.png img_302.png img_303.png img_304.png


When would a service like Quora require a notifications feature?

Details

Quora will need a notification service in the following scenarios:

  • A user posts a question on a topic subscribed by a would-be respondent.
  • A user posts an answer to a question asked by another user.
  • A post a user is interested in or wrote received new comments or upvotes/downvotes, and so on.

How is it possible for Quora to send notifications to users through the above-described mechanism?

Details

img_305.png


img_306.png img_307.png img_308.png img_309.png img_310.png


Why is there a custom routing layer between the web and application servers instead of a load-balancing layer?

Details

The primary reason is performance. A generic load-balancing layer will have little application understandability and higher latency.

As stated, the manager processes generate the skeleton of the web page and leave the majority of the work to worker processes. In that sense, one manager process can generate multiple worker tasks. The custom router library is a queue between manager and worker, where any worker process can consume a task generated by the manager process.

This design improves the overall performance and supports scalability.


Final Design of Quora​

img_311.png img_312.png img_314.png img_313.png img_315.png img_316.png img_317.png img_318.png img_319.png

Evaluation of Quora’s Design​

img_323.png img_324.png img_325.png img_326.png img_327.png img_328.png