Estoy usando Amazon Web Services con Tomcat para implementar una aplicación Java.

La aplicación consta de un índice de Lucene de datos de artistas y un sitio web que permite al usuario buscar un artista musical (por ejemplo, madonna, beatles) y luego devolverá información sobre ese artista generada a partir del índice en forma de una página html. El índice no cambia y, por lo tanto, la página generada para un artista en particular nunca cambia. No quiero calcular previamente las páginas porque eso llevaría mucho tiempo (más de un millón de páginas) y requeriría mucho espacio, pero sí quiero que las páginas se almacenen en caché para que:

  1. Una búsqueda del artista puede devolver una página existente en lugar de tener que volver a crearla.
  2. Quiero que Google rastree e indexe las páginas para que puedan devolverse en la búsqueda de Google.

¿Cómo hago para esto? (Tengo mucha experiencia en Java pero no mucha experiencia en sitios web)

Cuando digo que el índice nunca cambia, me refiero a que la aplicación implementada usa el mismo índice, y ese índice nunca se modifica. Aproximadamente una vez al mes se creará un nuevo índice y la aplicación se volverá a distribuir con el nuevo índice.

0
Paul Taylor 11 feb. 2015 a las 17:28

2 respuestas

La mejor respuesta

Configure algunos encabezados de caché en las páginas para que las páginas se almacenen durante un período de tiempo más largo (por ejemplo, unos días), mueva tomcat a otro nombre de host y luego configure amazon cloudfront para que tomcat sea el servidor de origen.

Luego, finalmente configure un registro DNS CNAME para apuntar www.yourdomain.com al frente de la nube

Cuando actualice su índice, simplemente dígale a cloudfront que invalide toda su caché.

Esa es la forma más perezosa que se me ocurre para hacer esto. (pero estoy abierto a sugerencias si hay una forma más perezosa de hacer esto).

1
Damian Nikodem 11 feb. 2015 a las 14:38

Puede crear un directorio para su caché con código como el siguiente en su Servlet y luego almacenar sus páginas recién generadas allí.

       cache = Paths.get(request.getSession().getServletContext().getAttribute("javax.servlet.context.tempdir") + "/artists");
        try {
            if(!Files.exists(cache)) {
                Files.createDirectory(cache);
            }
        } catch(IOException e) {
0
Neil Masson 11 feb. 2015 a las 14:39