Desarrollando software a la Prey. Episodio II.

Rodrigo Aliste
Ingeniería Prey
Published in
3 min readMay 12, 2016

En las últimas semanas les hemos contado sobre diversos aspectos de cómo trabajamos en Prey. La semana pasada, miguel michelson nos contó sobre Master Plan, nuestra filosofía interna de cómo distribuir conocimiento. En la serie de Desarrollando software a la Prey, queremos ir describiendo soluciones técnicas sobre las distintas materias que consideramos interesantes desde el punto de vista de la pregunta “¿qué nos gustaría saber de empresa X?” pero a la inversa, “¿qué creemos que les podría interesar de nosotros?”. Porque a veces, cuando admiramos a empresas líderes en tecnología, frecuentemente nos preguntamos, por ejemplo “¿y cómo resolverán la distribución de notificaciones en Dropbox ?”.

A través de Medium, Email y Linkedin nos han hecho llegar comentarios muy interesantes, entre otras cosas, nos han pedido escribir más sobre el producto, desarrollo móvil y la metodología de desarrollo, y si bien ya les contaremos más sobre estos temas en próximos artículos, en este episodio les queremos contar sobre algo que dentro del mismísimo Prey nos han pedido que escribamos. Porque en la oficina a veces hablamos mucho en jerga técnica y escribiendo acrónimos medios hacker en Slack, así que sin mas, les presentamos EL STACK PREY.

WEB

  • Balanceador de carga: Load Balancing de Google Cloud Platform (GCP).
  • Frontend de direccionamiento: “preyfrontend”, programado en Go.
  • Frontend de dispositivos: “bullet”, programado en Node.js.

APLICACIÓN

BASES DE DATOS

  • MySQL: Base de datos principal, utilizada por la aplicación en Rails. Configuración Master-Slave-Slave con full backups cada 24 horas.
  • Cassandra: Base de datos de servicios, la utilizamos para nuestro servicio de URLs cortas, eventos de interacción y eventos de aplicación.
  • Google BigQuery (próximamente): Utilizamos BigQuery para almacenar los registros de cada dispositivo por cada conexión.
  • Redis: Máquina de estado para las tareas de procesamiento asíncronas (jobs) y como almacenamiento temporal entre el frontend de dispositivos y los servidores de aplicación.

MENSAJERÍA

  • Redis: También lo utilizamos como sistema de mensajería publicación-suscripción para los servidores de notificaciones utilizados por la aplicación Rails.
  • Notify: El sistema interno que les comentamos en el artículo Infraestructura para 10 millones de dispositivos, es utilizado para la distribución de mensajes a clientes de Escritorio en tiempo real, y próximamente, para la distribución de comandos a grupos de dispositivos.
  • Google Cloud Pub/Sub (próximamente): Como mecanismo de publicación-suscripción para la distribución masiva de eventos entre aplicaciones y bases de datos. Los procesadores de datos están escritos en Go.

LENGUAJES

  • Ruby
  • CoffeeScript
  • Javascript
  • HAML/HAMLC
  • HTML
  • Less (próximamente)
  • ES6 (próximamente)
  • Sass
  • CSS
  • Java
  • Objective-C
  • C++
  • Swift (próximamente)

LIBRERÍAS / FRAMEWORKS

APIS DE TERCEROS

  • Mapbox: para dibujar los mapas en la aplicación web.
  • Google Geocoding API: proveedor principal de nuestro sistema de geo-codificación, que también está escrito en Go.
  • Google Geolocation API: proveedor principal para nuestro sistema de geo-ubicación, utilizado por los clientes de escritorio.
  • Maxmind: proveedor principal para nuestro sistema de geo-ip.

CONTROL DE VERSIONES

  • Git: Utilizamos GitHub Enterprise. Todavía mantenemos algunos repositorios privados en GitHub. Todos los repositorios de código abierto están disponibles en github.com/prey.

OPERACIONES

  • Chef: como sistema de administración de configuraciones de sistemas.
  • Capistrano: para la administración de tareas remotas y actualización de los servidores de aplicación.
  • Houston (próximamente): como sistema interno de administración de servidores y orquestación de contenedores sobre Kubernetes.

MONITOREO

  • Nagios: sistema de monitoreo global.
  • Telegram + Slack: distribución de alertas en tiempo casi-real.
  • OCS: sistema de inventario principal.
  • Prometheus: sistema de monitoreo de sistemas y análisis de datos.

No dudes en dejarnos un comentario si es que te interesaría saber algo más sobre el stack. Si te interesaría explorar oportunidades de trabajo en Prey escríbenos a tec en preyhq punto com (puntos extras si envías tu CV escrito en algún lenguaje de programación).

Gracias a Miguel Michelson, Patricio Jofré, y Luis Sánchez por revisar el borrador de este artículo.

--

--