Архитектура социальной сети, C ++ Клиенты База данных Neo4j, что между? - PullRequest
2 голосов
/ 09 апреля 2011

Я сейчас работаю над внедрением социальной сети.Архитектура:

- Распределенные клиенты C ++ / Qt
- База данных сервера Neo4j

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

Какой сервер / архитектуру следует использовать для управления запросами от клиентов?

Я больше Python, чем Java, но здесь важна скорость.

И вы думаете, что REST достаточно быстр или мне следует использовать RPC?

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

1 Ответ

2 голосов
/ 09 апреля 2011

REST будет достаточно быстрым.Используйте его до тех пор, пока не сможете измерить и получить реальные данные, свидетельствующие о том, что это проблема.

Но я бы не использовал REST API для непосредственного обращения с базой данных.

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

Если бы вы делали это в Spring, контроллеры могли бы беспокоиться о первых двух и службахэто будет иметь дело с двумя последними.

Да, клиент / сервер намного сложнее напрямую подключается к базе данных, но вы покупаете что-то, что вам нужно (безопасность и т. Д.), За счет большего количества слоев и большего количества кода.Решите, чего это стоит для вас.

Скорость, конечно, имеет значение, но предел, скорее всего, будет определен задержкой сети, чем что-либо еще.Если клиенты приходят через Интернет, это означает, что в среднем в вашем приложении должно быть 12 прыжков маршрутизатора.Я вижу задержку 70 мс в своей корпоративной интрасети.Пусть это будет показателем скорости.

Что касается того, что важно, я думаю, что сайт социальной сети должен беспокоиться о масштабировании для большого количества посетителей.Мне известны архитектуры, представляющие собой пулы потоков и очереди запросов, по одному потоку на каждый входящий запрос, или неблокирующие операции ввода-вывода, такие как Netty.Я думаю, что Python, эквивалентный Netty , является Twisted .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...