fork/chroot, эквивалентный для приложения Windows Server

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

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

И не забывают, что Вы никогда не делаетесь, масштабируясь. Сайту, который обрабатывает 10req/s, будут нужны изменения для поддержки 1000req/s. И если Вы будете lucking достаточно для поддержки 10,000req/s, архитектура будет, вероятно, выглядеть полностью отличающейся также.

Базы данных

  • не используют MySQLi - , PDO является 'современным' слоем доступа к базе данных OO. Самой важной функцией для использования являются заполнители в запросах. Достаточно умно использовать сторону сервера, готовится и другая оптимизация к Вам также.
  • Вы, вероятно, не хотите разбивать свою базу данных в этой точке. Если Вы находите, что одна база данных не сокращает, существует несколько методов для увеличения масштаба, в зависимости от приложения. Тиражирование в дополнительные серверы обычно работает хорошо, если у Вас есть больше чтений, чем записи. Sharding является техникой для разделения данных по многим машинам.

Кэширование

  • Вы, вероятно, не хотите кэшироваться в своей базе данных. База данных обычно является Вашим узким местом, таким образом добавляя, что больше IO's к нему обычно является плохой вещью. Существует несколько кэшей PHP там, которые выполняют подобные вещи как APC и Пехлеви.
  • Мера Ваша система с кэшированием на и прочь. Я держал пари, что Ваш кэш более тяжел, чем обслуживание страниц прямо.
  • , Если требуется много времени для создания комментариев и данных статьи из дб, интегрируйтесь кэш-память в систему. Можно кэшировать результаты запроса и сохранить их в memcached экземпляре. Важно помнить, что получение данных из кэш-памяти должно быть быстрее, чем сборка его от базы данных для наблюдения любого преимущества.
  • , Если Ваши статьи не являются динамичными, или у Вас есть простые динамические изменения после того, как это сгенерировано, рассмотрите выписывание HTML или php к диску. У Вас могла быть index.php страница, которая считает диск для статьи, если это там, это передает его потоком клиенту. Если это не, это генерирует статью, пишет это в диск и отправляет его клиенту. Удаление файлов от диска заставило бы страницы быть переписанными. Если бы комментарий добавляется к статье, удалите кэшируемую копию - это было бы повторно создано.

5
задан codebox 6 November 2009 в 10:01
поделиться

6 ответов

Прежде всего, Windows-эквивалент chroot - это RUNAS , который задокументирован здесь . Если вам нужно сделать это из программы, то изучение этого исходного кода C ++ должно помочь вам понять, как использовать Windows API. Это не совсем то же самое, что chroot () , но люди Windows используют его для создания чего-то вроде chroot-тюрьмы, создавая пользователя с чрезвычайно ограниченными разрешениями и давая этому пользователю только разрешение на чтение в папке приложения и запись разрешение на одну папку для данных.

Вы, вероятно, не хотите точно эмулировать fork () в Windows, потому что это не похоже на то, что вам нужно заходить так далеко. Чтобы понять Windows API для создания процессов и чем он отличается от fork () , проверить Mr. Пибоди объясняет вилку () . Фактический текущий исходный код для реализации форка Cygwin показывает текущее состояние дел.

Документация Microsoft для CreateProcess () и CreateThread () это место, где можно найти дополнительную информацию о различиях между ними.

И, наконец, если вы не хотите изучать все мельчайшие детали платформы, просто напишите переносимые программы, которые работают в Windows и Unix, почему бы не просто используйте саму переносимую библиотеку времени выполнения Apache . Вот несколько документов по созданию процесса с помощью примера кода на языке C для создания нового процесса.

реализация вилки показывает текущее состояние дел.

Документация Microsoft для CreateProcess () и CreateThread () - это место, где можно найти дополнительную информацию. различия между ними.

И, наконец, если вы не хотите изучать все мельчайшие детали платформы, просто напишите переносимые программы, которые работают в Windows и Unix, почему бы просто не использовать Apache Portable Runtime library сам. Вот несколько документов по созданию процесса с помощью примера кода на языке C для создания нового процесса.

реализация вилки показывает текущее состояние дел.

Документация Microsoft для CreateProcess () и CreateThread () - это место, где можно найти дополнительную информацию. различия между ними.

И, наконец, если вы не хотите изучать все мельчайшие подробности платформы, просто напишите переносимые программы, которые работают в Windows и Unix, почему бы просто не использовать Apache Portable Runtime library сам. Вот несколько документов по созданию процесса с помощью примера кода на языке C для создания нового процесса.

Я не хочу изучать все мельчайшие детали платформы, просто пишите переносимые программы, которые работают в Windows и Unix, почему бы просто не использовать саму Apache Portable Runtime library . Вот несколько документов по созданию процесса с помощью примера кода на языке C для создания нового процесса.

Я не хочу изучать все мельчайшие детали платформы, просто пишите переносимые программы, которые работают в Windows и Unix, почему бы просто не использовать саму Apache Portable Runtime library . Вот несколько документов по созданию процесса с помощью примера кода на языке C для создания нового процесса.

9
ответ дан 18 December 2019 в 11:58
поделиться

В Windows не существует такой вещи, как fork () . Вам нужно вызвать CreateProcess () - это запустит отдельный процесс (в основном эквивалентно вызову fork () , а затем немедленно exec () для порожденного процесса ) и как-нибудь передать ему параметры. Поскольку кажется, что у вас есть все данные для обработки в выделенном каталоге, вы можете использовать параметр lpCurrentDirectory в CreateProcess () - просто передайте путь к каталогу, который вы ранее использовали с chroot () там.

3
ответ дан 18 December 2019 в 11:58
поделиться

The absolutely simplest way of doing it is using Cygwin, the free Unix emulation layer for Windows. Download it and install a complete development environment. (Choose in the installer.) If you are lucky, you will be able to compile your program as is, no changes at all.

Of course there are downsides and some might consider this "cheating" but you asked for the simplest solution.

2
ответ дан 18 December 2019 в 11:58
поделиться

Рассмотрим SUA (также известный как службы Windows для Unix). В нем есть почти все, что вам нужно для переноса приложений.

man chroot (interix)

0
ответ дан 18 December 2019 в 11:58
поделиться

Использование fork / chroot просто не так, как это делается в Windows. Если вас беспокоит безопасность подпроцессов, возможно, вы хотите использовать какую-то форму виртуализации или песочницы. Передача сложной информации в подпроцесс может быть выполнена с помощью RPC-решения в той или иной форме.

Мне кажется, что вы разработали свое приложение в стиле Unix и теперь хотите запускать его в Windows, ничего не меняя. . В этом случае вы можете рассмотреть возможность использования Cygwin , но я не уверен, эмулирует ли / как Cygwin chroot .

0
ответ дан 18 December 2019 в 11:58
поделиться

Без использования инфраструктуры совместимости (Interix, Cygwin, ...) вы рассматриваете возможность использования парадигмы Windows для такого рода вещей.

fork / vfork - дешевая операция в UNIX, поэтому s используется часто по сравнению с многопоточностью. эквивалент Windows - CreateProcess () - по сравнению с этим дорогостоящая операция, и по этой причине вы должны вместо этого использовать потоки, создавая их с помощью CreateThread () . Существует множество примеров кода для CreateThread () .

Что касается chroot () , в Windows нет такой концепции. Существуют библиотеки, которые утверждают, что эмулируют то, что вам нужно. Однако это зависит от того, почему вы вообще хотите использовать chroot.

Читая комментарии, если просто чтобы не дать людям подняться по дереву с помощью ../../../../ (и т. Д.), Chroot выполнит свою работу, но это не заменит в первую очередь анализирует ввод и проверяет его правильность: т.е. если указано слишком много родителей, заблокировать пользователя в известном корневом каталоге. Apache почти наверняка это сделает, поскольку мне никогда не приходилось создавать среду chroot () для работы Apache ...

1
ответ дан 18 December 2019 в 11:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: