Be ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО осторожно о реализации кэширования на стороне клиента. Кэширование БЕЗУМНО трудно сделать правильно, поддерживая производительность, безопасность и корректность. Обратите внимание, что механизм кэширования вашего DB Server уже, вероятно, будет намного лучше, чем любой механизм локального кэширования, который вы, вероятно, внедрите менее чем за 2 недели!
Я бы настоятельно призвал вас сделать как можно больше работы с бэкэндом и ограничить ваш клиент в представлении данных способом, подходящим для ваших пользователей. Хотя многие могут не согласиться с этим предложением, оно основано на ряде наблюдений, полученных в результате создания многих таких систем в прошлом:
- Если вы собираетесь отфильтровать некоторые данные, возвращаемые вашим сервисом, вы просто потратили тысячи циклов доставки данных, которые никогда не покидали ваш сервер
- Если вы собираетесь сортировать свои данные, ваша БД могла бы выполнить сортировку за вас (часто используя в противном случае неактивные тики ЦП), ожидая, пока данные будут считаны с ее дисков.
- Ваш сервер, скорее всего, имеет больше ресурсов ЦП и ОЗУ, чем ваши клиенты, и имеет удивительное количество «свободного времени», которое можно использовать для сортировки, фильтрации, выполнения встроенных вычислений и т. Д., В то время как он ожидает дисков для чтения секторов и т. Д.
Как предположил Роман: минимизируйте количество поездок между клиентом и сервером в максимально возможной степени.
Но, пожалуй, самое главное:
- ПРЕЖДЕ ЧЕМ НАЧАТЬ ПРОЕКТИРОВАНИЕ СИСТЕМЫ, сформулируйте свои цели производительности
- Разработайте то, что, по вашему мнению, позволит достичь этих целей. Постарайтесь найти узкие места в вашем дизайне, особенно в тех областях, где вы делаете блокировку вызовов. Перепроектируйте эти области, чтобы использовать асинхронные шаблоны везде, где вы можете.
- Создайте желаемое решение
- Измерьте фактическую производительность под реальной нагрузкой
- Если вы находитесь в пределах ожидаемых целей производительности, то все готово.
- Если нет, потренируйтесь там, где вы тратите слишком много времени, и настройте дизайн этой части системы. Перейти к 3.
Не пытайтесь создать идеальную систему за одну попытку - есть вероятность, что вы не справитесь с ней, независимо от того, как сильно вы пытаетесь, по разным причинам, включая ожидания пользователей, способность ваших серверов обрабатывать требуемую нагрузку способность ваших клиентов обрабатывать возвращенные данные, способность вашей сети переносить трафик и т. д.
Сейчас они немного устарели, но я предлагаю вам прочитать некоторые из предыдущих постов по адресу http://blogs.msdn.com/richardt, чтобы больше размышлять о проектировании и конструировании сервис-ориентированных и распределенных систем.