¿Qué pila de tecnología se necesita para escalar mi aplicación y encontrar un equilibrio entre rendimiento y productividad?

Tengo una aplicación móvil social que funciona con Phonegap en el lado del cliente y PHP en el lado del servidor. Elegí usar estas tecnologías (Phonegap, Framework7 (framework front-end), Apache y MySQL) porque la primera versión es un MVP, así que quería hacerlo de forma rápida y sencilla usando tecnologías con las que estoy muy familiarizado. Ahora recibo mucho tráfico en la aplicación y necesito escalarla para que sea más eficiente y menos costosa de mantener. Entonces, necesito elegir una pila diferente para trabajar.

Mi plan es seguir usando Phonegap y Framework7 (la aplicación funciona perfectamente, se comporta como una aplicación nativa con una interfaz de usuario muy completa), pero el lado del servidor es lo que más me preocupa.

Los requisitos por ahora son:

  • El almacenamiento de archivos (imágenes) tiene que ser más eficiente, por lo que los tiempos de carga son más rápidos
  • El uso de la CPU y la memoria del servidor tiene que disminuir (PHP usa mucha memoria y CPU para tareas en las que otros lenguajes usan mucha menos memoria o CPU).
  • DB tiene que ser SQL, pero MySQL tiene errores y necesito un sistema de base de datos más rápido para tiempos de respuesta más rápidos al cliente.
  • Mi servidor se encuentra actualmente en los Países Bajos (Ámsterdam), por lo que se necesita un CDN para distribuir archivos estáticos y hacerlos disponibles más rápido para personas de otros países.

La aplicación en sí no está completamente enfocada en fotos o videos ni nada. Los usuarios pueden compartir texto, enlaces y fotos. Aparte de eso, se incluyen las características típicas de las aplicaciones sociales como amistades, feed, perfil, etc.

Estoy pensando en usar Python (Django) o Node JS como mi lenguaje del lado del servidor. ¿Cuál me sugieres que use? En cuanto a la base de datos, escucho muy buenas cosas sobre PostgreSQL y MariaDB. ¿Cuál se adapta mejor a mis necesidades? Por supuesto, tiene que haber un servidor de almacenamiento en caché, y estaba pensando en usar Memcached. ¿Alguien tiene experiencia con una combinación de estas tecnologías que pueda decirme cómo hacer que este proyecto sea escalable y encontrar un equilibrio perfecto entre rendimiento y productividad (cuando contrato un equipo, quiero que los ingenieros puedan trabajar fácilmente con el código que voy a escribir).

Escribir un buen código es un requisito, por supuesto. Pero esta pregunta es realmente sobre qué tecnologías sugeriría que use para una aplicación como la mía.

¿Puede justificar esa declaración "MySQL tiene errores"? o al menos ampliarlo? Obviamente, si tiene errores, informarlos mejora sus posibilidades de corregirlos y ayuda a otros. (gran pregunta, aunque +1 y starerd)

Respuestas (1)

DB tiene que ser SQL, pero MySQL tiene errores y necesito un sistema de base de datos más rápido para tiempos de respuesta más rápidos al cliente.

sqlite sería una buena opción:

El sitio web de SQLite ( https://www.sqlite.org/ ) usa el mismo SQLite, por supuesto, y al momento de escribir este artículo (2015) maneja entre 400 000 y 500 000 solicitudes HTTP por día, de las cuales alrededor del 15 al 20 % son dinámicas. páginas que tocan la base de datos.

 

El uso de la CPU y la memoria del servidor tiene que disminuir (PHP usa mucha memoria y CPU para tareas en las que otros lenguajes usan mucha menos memoria o CPU).

web.py con la API python sqlite3 sería una alternativa simple.

Mi servidor se encuentra actualmente en los Países Bajos (Ámsterdam), por lo que se necesita un CDN para distribuir archivos estáticos y hacerlos disponibles más rápido para personas de otros países.

Cloudflare tiene un plan gratuito.

El almacenamiento de archivos (imágenes) tiene que ser más eficiente, por lo que los tiempos de carga son más rápidos

Cloudflare puede intercambiar una imagen original por una imagen equivalente comprimida usando WebP