Этот вопрос о проектном решении. В настоящее время я работаю над веб-проектом, в котором будет 40 тыс. Пользователей, и через пару месяцев ожидается рост 50 млн. Пользователей (хотя и не одновременно). Я хотел бы иметь архитектуру, которую можно легко масштабировать без особых усилий.
Чтобы объяснить, я хотел бы использовать тривиальный сценарий. Допустим, объекты и службы пользователя, такие как CreateUser, AuthenticateUser и т. Д., Являются простыми вызовами методов для контроллеров страниц. Но когда трафик увеличивается, например, аутентифицирующий пользователь (или такие сервисы, связанные с пользовательскими объектами) должен быть перемещен на другой внутренний сервер, чтобы распределить нагрузку. Но в то же время использование вызовов RPC по сети, когда число пользователей составляет 40 КБ, станет избыточным.
Мое предложение состояло в том, чтобы изначально использовать IPC, и когда нам нужно будет уменьшить масштаб, мы можем взаимно переключаться на вызовы RPC на основе TCP, чтобы его можно было легко масштабировать. Например, я имею в виду System.IO.Pipes.NamedPipeStreamServer
для начала и позже перейдем к TcpListener
.
Если у нас есть надлежащий дизайн, который может инкапсулировать вышеупомянутый подход, нам будет легко масштабировать сервисы на несколько сетевых серверов, но в то же время избегать сетевых вызовов, когда количество пользователей мало.
Это лучший подход? Любые предложения будут великолепны ..
Примечание. Масштабирование базы данных, безусловно, является вторым этапом оптимизации, поэтому мы уже разработали архитектурный проект, позволяющий легко разделять данные при увеличении трафика. Основным узким местом будут серверы приложений в течение определенного периода времени.