Могу ли я иметь раздел APP_CODE, который компилируется отдельно от остальной части папки?

StackOverflow https://stackoverflow.com/questions/4798086

  •  24-10-2019
  •  | 
  •  

Вопрос

У нас есть веб -сайт с огромным количеством кэшированных объектов, хранящихся в статических переменных в APP_CODE. Всякий раз, когда мы подталкиваем изменение APP_CODE на наши производственные веб -серверы, он перерабатывает пул IIS и промывает кэш. Однако он не промывает кэш, когда мы выдвигаем изменения в файлах .aspx и .aspx.cs.

Мне нужно иметь кучу классов, которые будут обновляться несколько раз в день, чтобы иметь возможность ссылаться на APP_CODE. Мне бы хотелось либо раздел моего APP_CODE, который я могу обновлять несколько раз в день без езды на велосипеде IIS и промыть мой кэш, либо возможность ссылаться на классы за пределами APP_CODE из APP_CODE.

Есть ли решение, которое соответствует моей проблеме?

Это было полезно?

Решение

Обновления в APP_CODE или / BIN / Всегда перерабатывайте ваши пулы приложений, я считаю. Если вы говорите, что у вас есть сценарий развертывания, где обновления файлов .aspx.cs не перерабатывают свой пул приложений, и если вы можете обратиться к самому типу страницы, возможно, вы можете переместить свой код в .aspx. CS -файлы, чтобы предотвратить переработку. Это может быть уродливым выбором, хотя.

Одним из предложений является пересмотр вашего дизайна, чтобы уменьшить количество обновлений исходного кода, которые требуются ежедневно. Возможно, используйте XML или хранилище базы данных и разработайте ваше приложение, чтобы быть немного более общим и менее склонным к двоичным обновлениям.

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

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

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

Частые обновления происходят только потому, что происходит много изменений в разработке?

Другие советы

Другим углом будет использование распределенного кэш -решения вместо кэша HTTPRuntime.

Httpruntime cache имеет два основных недостатка:

1) Он промывается при переработке домена вашего приложения. В любом случае, это делается по умолчанию каждые 29 часов, даже если вы не изменяете APP_CODE.

2) Он локализован на одном веб -сервере. Поэтому, если ваш веб -сервер должен масштабироваться на более крупной веб -ферме, ваш кэш становится все менее и менее эффективным, потому что записи кэша не синхронизированы на всех веб -серверах.

Распределенные решения кэша обойдя эти проблемы, создавая отдельный уровень кэша между вашим веб -уровнем и источником данных.

Пример решения:

  • мемкахед
  • Редис
  • Oracle Coherence (коммерческая)

Конечно, это приведет к более сложной архитектуре и потребует больше оборудования или виртуальных машин.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top