2012-09-27 26 views
7

Tengo una serie de sitios con PHP y MySQL, especialmente con MediaWiki, y necesito mejorar el rendimiento. Sin embargo, tengo solo un porcentaje limitado de CPU que puedo usar.¿El almacenamiento en caché siempre mejora el rendimiento?

Lo mejor que puedo pensar para mejorar el rendimiento es habilitar el almacenamiento en caché. Sin embargo, estoy confundido: ¿eso realmente mejora el rendimiento general o simplemente mejora la velocidad?

Lo que puedo pensar es decir, si el almacenamiento en caché, utilizará los archivos, a continuación, se tardaría más procesamiento para obtener el contenido de estos archivos. Si va a usar tablas SQL, también se requerirá más procesamiento para consultar estas tablas, tal vez el tiempo sea más corto, pero el uso de la CPU será mayor.

¿Es correcto o no? ¿el almacenamiento en caché consume más CPU para dar un speeder o mejora el rendimiento en general?

+1

¿Qué mostraron tus medidas? – arkascha

+0

"especialmente MediaWiki" implica sí a su Q, pero solo el tipo correcto de almacenamiento en caché. Por ejemplo, MW usa innodb de manera predeterminada, por lo que el almacenamiento en caché MyISAM ayuda a una jota aquí. Lea las páginas de caché de MW. Puede configurar algunos cachés basados ​​en archivos que hacen una GRAN diferencia en MW para invitados (es decir, la mayoría) de visitantes. – TerryE

+0

Probablemente deberías ir a https://www.mediawiki.org/wiki/Manual:Performance_tuning Con MediaWiki, tu principal preocupación es evitar el análisis de wikitext, que es lento y requiere una gran cantidad de CPU. – Nemo

Respuesta

4

En el nivel más básico, el almacenamiento en caché debe usarse para almacenar el resultado de los procesos intensivos de la CPU. Por ejemplo, si tiene un controlador de imagen del lado del servidor que crea una imagen sobre la marcha (por ejemplo, una vista en miniatura y una vista previa más grande), entonces no desea que esta operación ocurra en cada solicitud; le gustaría ejecutar este proceso. una vez y almacenar los resultados; Luego, cada otra solicitud obtiene el resultado guardado.

Esto es obviamente una descripción demasiado simplificada del almacenamiento en caché básico, y el uso de una imagen está bien en este caso ya que no tiene que preocuparse por datos obsoletos, es decir, ¿con qué frecuencia cambiará la imagen real? En su caso, las bases de datos son muy diferentes. Si almacena los datos en caché, ¿cómo puede garantizar que no habrá una discrepancia instantánea entre los datos reales y en caché de datos? Consultar una base de datos no siempre es una tarea intensiva (se debe considerar cómo se diseña la base de datos en términos de indexación, tamaño de tabla, etc.) pero en la mayoría de los casos consultar una base de datos bien diseñada es mucho más intensiva en E/S de disco que está en ciclos de CPU.

Primero, necesita ver el diseño de su base de datos y, en segundo lugar, sus consultas. Por ejemplo, está normalizing your database correctly, sus consultas pescan grandes cantidades de datos cuando puede archivar, está uniendo tablas en campos no indexados, son sus cláusulas where que consultan campos que podrían indexarse ​​(IN es particularmente malo en estos casos) .

Le recomiendo que se apodere de un query analyzer y dedique algo de tiempo a optimizar la estructura de su tabla y las consultas para encontrar el cuello de botella antes de buscar cambios más drásticos.

0

Tienes que perfilar tu apariencia y descubrir dónde está ocurriendo el cuello de la botella. La caché es el mejor tipo de carga de página, es una que no afecta al servidor en absoluto. Puede construir un sistema de almacenamiento en caché muy simple que solo vuelve a cargar la información cada 15 minutos. Entonces, si la página fue almacenada en caché en los últimos 15 minutos, les da una página pre-renderizada. La página cargada una vez, crea un archivo temporal. cada 15 minutos crea una nueva (si alguien carga esa página).

El almacenamiento en memoria caché solo almacena un archivo que el servidor ya ha realizado el trabajo. El trabajo para crear el archivo ya está hecho y tu simplemente lo guardas.

1

Referencia: http://msdn.microsoft.com/en-us/library/ee817646.aspx

Rendimiento: técnicas de almacenamiento en caché se utilizan comúnmente para mejorar el rendimiento de la aplicación mediante el almacenamiento de los datos pertinentes lo más cerca posible al consumidor de datos, evitando de esta manera repetitiva creación de datos, procesamiento y transporte. Por ejemplo, almacenar datos que no cambian, como una lista de países, en una memoria caché puede mejorar el rendimiento al minimizar las operaciones de acceso a datos y eliminar la necesidad de recrear los mismos datos para cada solicitud.

Escalabilidad: los mismos datos, la funcionalidad del negocio y los fragmentos de la interfaz del usuario a menudo son necesarios para muchos usuarios y procesos en una aplicación. Si esta información se procesa para cada solicitud, se desperdician recursos valiosos que reproducen el mismo resultado. En su lugar, puede almacenar los resultados en un caché y reutilizarlos para cada solicitud. Esto mejora la escalabilidad de su aplicación porque a medida que aumenta la base de usuarios, la demanda de recursos del servidor para estas tareas permanece constante. Por ejemplo, en una aplicación web, el servidor web debe presentar la interfaz de usuario para cada solicitud de usuario. Puede almacenar en caché la página representada en la memoria caché de resultados de ASP.NET para usarla en futuras solicitudes, liberando recursos para ser utilizados con otros fines.

Los datos de almacenamiento en caché también pueden ayudar a escalar los recursos de su servidor de base de datos. Al almacenar datos de uso frecuente en un caché, se realizan menos solicitudes de base de datos, lo que significa que se pueden atender más usuarios.

Disponibilidad: ocasionalmente los servicios que brindan información a su aplicación pueden no estar disponibles. Al almacenar esos datos en otro lugar, su aplicación puede sobrevivir a fallas del sistema como la latencia de la red, problemas del servicio web o fallas de hardware. Por ejemplo, cada vez que un usuario solicita información de su almacén de datos, puede devolver la información y también almacenar en caché los resultados, actualizando el caché en cada solicitud. Si el almacén de datos deja de estar disponible, puede atender las solicitudes utilizando los datos en caché hasta que el almacén de datos vuelva a estar en línea.

+3

Con todo el respeto, ¿no es solo una respuesta de copiar y pegar desde aquí: http://books.google.co.uk/books?id=MEOmjpKLmqYC&pg=PA414&lpg=PA414&dq=%22Performance+:+Caching+techniques + son + comúnmente + usados% 22 & source = bl & ots = nqFchRBGQH & sig = jdQfh6sIm17he94PhxlattcXeeM & hl = en & sa = X & ei = yR9kUO-jGefW0QWekoH4DQ & ved = 0CB4Q6AEwAA # v = onepage & q =% 22Performance% 20% 3A% 20Caching% 20techniques% 20are% 20commonly% 20used% 22 & f = false - si va a hacer eso, al menos haga referencia a su fuente para dar crédito. –

+0

Quiero brindar la mejor solución. Así que navego en red y proporciono la mejor solución aquí. ¿No tiene sentido? qué piensas ? –

+0

Sí, alrededor del 35% de la pasta es relevante para responder la pregunta original. – user989056

0

Utiliza los términos 'rendimiento' y 'velocidad'. Asumiré que el "rendimiento" se relaciona con los ciclos de la CPU en su servidor web y que la "velocidad" se relaciona con el tiempo que lleva servirle la página al usuario. Desea maximizar el 'rendimiento' del servidor web (bajando el número total de ciclos de CPU necesarios para servir páginas) mientras maximiza la 'velocidad' (reduciendo el tiempo que lleva servir una página web).

La buena noticia para usted es que el almacenamiento en caché puede mejorar estas dos métricas al mismo tiempo. Al almacenar en caché el contenido, crea una página de salida que se almacena en la caché y puede ser servida repetidamente a los usuarios directamente sin tener que volver a ejecutar el código PHP que creó originalmente esta página de salida (disminuyendo así los ciclos de la CPU). La obtención de una página almacenada en caché desde la caché consume menos ciclos de CPU que la re-ejecución del código PHP.

El almacenamiento en caché es particularmente bueno para las páginas web que generalmente son las mismas para todos los usuarios que solicitan la página, por ejemplo en una wiki y para las páginas que generalmente no cambian demasiado, una wiki.

0

"Mejorar el rendimiento" suena como algo del correo electrónico consigo ...

Hay dos cosas, relacionadas entre sí que suceden aquí. Una es "¿cuánto tiempo lleva entregar una solicitud determinada?", Y la otra es "¿cuántas solicitudes puedo atender de forma simultánea debido a mis recursos limitados?". La gente tiende a usar uno o ambos conceptos cuando habla de rendimiento.

El almacenamiento en memoria caché puede ayudar con ambas cosas.

La estrategia de almacenamiento en caché más efectiva utiliza recursos externos a sus máquinas para almacenar sus cosas en caché; los ejemplos más obvios son el navegador del usuario o una CDN. Asumiré que no puedes usar un CDN, pero al gastar un poco de esfuerzo en configurar los encabezados de caché HTTP, puedes reducir el número de solicitudes a tu servidor para recursos estáticos o inactivos de manera bastante drástica.

Para el contenido dinámico, generalmente la página web que genera al consultar su base de datos, la siguiente estrategia de almacenamiento en caché más efectiva es almacenar en caché el HTML generado por (partes de) su página. Por ejemplo, si tiene un cuadro de "artículos más populares" en su página principal, esto generalmente ejecutará un par de consultas de bases de datos moderadamente complejas, y luego un código de back-end "convertir datos a HTML". Si puede almacenar en caché el HTML, guarda tanto las consultas de la base de datos como el esfuerzo de la CPU para convertir los datos en HTML.

Si eso no es posible, es posible que pueda almacenar en caché el resultado de algunas consultas en la base de datos. Eso ayuda a reducir la carga de la base de datos, y generalmente también reduce la carga en su servidor web; el código requerido para ejecutar la consulta de la base de datos y tratar con los resultados suele ser más oneroso que recuperar el elemento de la memoria caché; porque es más rápido, permite que su solicitud se maneje más rápido, lo que libera recursos más rápidamente. Esto reduce la carga en sus servidores para una solicitud individual y, por lo tanto, le permite atender más solicitudes simultáneas.

Cuestiones relacionadas