2012-06-14 16 views
8

Actualmente estoy usando Heroku's Memcached en una aplicación de Rails 3 y me gustaría pasar a Elasticache porque el precio es mucho más favorable. es posible? ¿La configuración es relativamente sencilla? ¿Hay algo de lo que tenga conocimiento en cuanto al rendimiento?¿Puedo usar Amazon Elasticache en Heroku?

Respuesta

4

Nota: Mientras esto funciona, @btucker señaló que permite que cualquier aplicación alojada en Heroku acceda a su clúster de ElastiCache. No recomiendo usar esta solución.

Sí, puedes. La configuración es similar a la guía que Heroku tiene en Amazon RDS. Los pasos que difieren algo así:

  1. seguir el "Get Started with Amazon ElastiCache" guía para crear un clúster de caché y el nodo
  2. Instalar el ElastiCache Command Line Toolkit
  3. permitir que los servidores entrada de Heroku al clúster ElastiCache como la guía RDS explica pero reemplace los comandos rds- con los elasticache-:

    elasticache-authorize-cache-security-group-ingress \ 
        --cache-security-group-name default \ 
        --ec2-security-group-name default \ 
        --ec2-security-group-owner-id 098166147350 \ 
    
        # If your AWS_CREDENTIAL_FILE environment setting is configured, 
        # this option is not necessary. 
        --aws-credential-file ../credential-file-path.template 
    
  4. Establecer un valor de configuración para y Heroku nuestra aplicación de producción con el nombre de host del clúster:

    heroku config:set MEMCACHE_SERVERS=elasticachehostname.amazonaws.com 
    

Después de eso, siga el Memcache Rails setup, y ya está.

+1

Gracias - esto funciona perfectamente. – alpheus

+0

Disculpa si acabo de secuestrar este comentario, pero es probable que quieras utilizar la dirección privada para no cargar todo el tráfico. Hemos intentado hacerlo con nuestra instancia de EC2 pero no funcionó, pero escuchamos que funcionaría con Elasticache – nambrot

+0

¿Dónde encuentra la dirección privada, @nambrot? Utilizo el "punto final" que figura en la consola de AWS y aún no he visto cargos por el tráfico de ElastiCache. –

6

No, no se recomienda el uso de Elasticache ya que no hay un mecanismo de autenticación con él. Como tal, ¡cualquiera puede acceder a su caché! Esto normalmente es correcto ya que usaría las reglas de seguridad de AWS para restringir qué máquinas pueden acceder a la suya. Sin embargo, esto obviamente no funciona con Heroku ya que tu aplicación se ejecuta en una máquina de Herokus elegida al azar.

Puede implementar Memcache usted mismo con autenticación SASL en una máquina EC2. ElastiCache en realidad no le da nada más que una máquina EC2 con Memcache preinstalado de todos modos.

Hay otra opción: MemCachier

(descargo de responsabilidad completa, trabajo para MemCachier).

Hay otro proveedor de memcache en Heroku que es significativamente más barato que el proporcionado por membase. Se llama MemCachier, la página de inicio de addon es here.

Es comparable en precio a ElasticCache dependiendo del tamaño de su caché y si usa instancias reservadas o no (en los tamaños de caché muy grandes, ElatiCache es más económico).

Actualización (junio de 2013): el complemento membase memcache se ha apagado, por lo que MemCachier es el único proveedor de Memcache en Heroku.

Si desea ayuda, comuníquese conmigo si necesita ayuda con ElastiCache.

+0

Genial. He echado un vistazo a los documentos pero solo para aclararlo: si actualmente estoy usando el complemento membase en Heroku, aparte de agregar gem 'memcachier' a mi Gemfile, ¿hay algún otro cambio que deba hacer para cambiar a ¿tu sistema? – alpheus

+0

@alpheus, sí, todo lo que debes hacer es agregar la gema 'memcachier' y todo lo demás debería funcionar. Háganos saber si tiene problemas: [email protected] (Descargo de responsabilidad: también trabajo en MemCachier). – alexlod

3

Vale la pena señalar que, si bien la respuesta anterior de @ ssorallen funcionará como se describe, también permite CUALQUIER aplicación heroku desplegada para acceder a su servidor memcached. Por lo tanto, si almacena algo en absoluto confidencial o si le preocupa que otras personas hagan uso de su clúster ElatiCache, no lo haga. En el contexto de RDS tiene el control de acceso integrado en la base de datos, pero memcached no tiene dicha autenticación admitida por ElastiCache. Entonces, abrir el grupo de seguridad a todos Heroku es un riesgo bastante grande.

+1

Ese es un gran punto. Dado que ElastiCache no usa autenticación, ¿hay alguna manera de evitar esto? La seguridad a través de la oscuridad del nombre de host apenas es seguridad. –

+0

@ssorallen, desafortunadamente no hay forma de evitar esto con ElastiCache. Hay algunas distribuciones alternativas de memcached que admiten la autenticación, pero necesitaría ejecutarlo usted mismo en una instancia de ec2. – btucker

+0

Acabo de volver a tener este tema, y ​​una posible solución es tener su código en heroku para hablar con la API de AWS y agregar una regla al grupo de seguridad de ElasticCache para el tráfico proveniente del Dyno actual. Yo * creo * que probablemente funcionaría. Simplemente debería ejecutarse antes de que el cliente de Memcache intente conectarse a ElastiCache. – btucker

Cuestiones relacionadas