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