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

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

Более 300 миллионов активных пользователей ежемесячно публикуют тысячи вопросов, касающихся более чем 400,000 тем на Quora.
В этой главе мы разработаем Quora и оценим, как она удовлетворяет функциональные и нефункциональные требования.
Как мы будем разрабатывать Quora?
Мы будем разрабатывать Quora, разделив задачу проектирования на следующие четыре урока:
Требования:
В этом уроке мы сосредоточимся на функциональных и нефункциональных требованиях для проектирования Quora. Мы также оценим ресурсы, необходимые для разработки системы.
Первоначальный дизайн:
Мы создадим первоначальный дизайн, который будет удовлетворять все функциональные требования для Quora, а также сформулируем API-дизайн в этом уроке. В основном, мы обсудим основные блоки системы, другие компоненты, участвующие в завершении дизайна, их интеграцию и рабочий процесс.
Окончательный дизайн:
В этом уроке мы начнем с выявления ограничений первоначального дизайна. Затем мы обновим наш окончательный дизайн, чтобы он соответствовал всем функциональным и нефункциональным требованиям, устраняя эти ограничения. Мы также сосредоточимся на некоторых интересных аспектах нашего дизайна, таких как вертикальное шардирование базы данных.
Оценка:
Мы оценим наш дизайн, особенно с точки зрения нефункциональных требований, и обсудим некоторые его компромиссы. Также в этом уроке мы обсудим идеи о том, как мы можем улучшить доступность нашего дизайна.
Примечание: Информация, представленная в этой главе, вдохновлена инженерным блогом Quora.
Requirements of Quora's Design

Initial Design of Quora

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


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

Evaluation of Quora’s Design
