¿Con qué tecnologías se construye Asana?

A menudo, para hacer grandes cosas debemos estar sobre los hombros de los gigantes. Es realmente tremenda la cantidad de tecnología sobresaliente que una compañía de software puede aprovechar para su misión. Sería imposible para nosotros tener éxito sin todo lo anterior, y del mismo modo creemos que en unos años la gente mirará hacia atrás y se preguntará cómo podrían hacer lo que están haciendo sin herramientas como Asana para apoyarlos.

Esto es en lo que se basa Asana.

Para ejecutar el servicio que ve (comenzando en la parte inferior de la pila)

(Nota: estamos trabajando hacia una nueva arquitectura de back-end, que hará que algunos de estos elementos sean obsoletos y los reemplace con alternativas más nuevas. Intentaré actualizar la respuesta cuando los hayamos implementado).

Servicios web de Amazon. Para la computación en la nube; Esto nos da la flexibilidad que necesitamos en varios frentes combinados con escalabilidad. Todos nuestros servicios de producción se ejecutan en instancias EC2. Estoy entusiasmado con la forma en que Amazon está ayudando a escalar la innovación en general al crecer cada vez más desde el fondo de la pila. Para nuestras necesidades, sus innovaciones más nuevas a veces no nos han funcionado (tuvimos problemas con sus Elastic Load Balancers hace un tiempo, y su servicio de búsqueda carecía de cierta flexibilidad y tenía un perfil de latencia que simplemente no funcionó bien para nosotros) pero He estado convencido por un tiempo de que es la plataforma más sólida para estar. Actualmente estamos utilizando S3, ELB, CloudFormation, ElasticFileStore, entre otros servicios.
http://aws.amazon.com

Kubernetes Esto es para la configuración del clúster, la máquina y la gestión de roles, manteniendo nuestro sistema de producción sano a medida que se escala. Es un área donde hemos visto alguna iteración. Hubo un momento en que teníamos scripts de Python locales para realizar la implementación. Luego migramos más a una mezcla de Chef, Docker y Zookeeper. Estamos entusiasmados de que Google finalmente haya traído al mercado parte de su salsa especial en este campo.

MySQL con InnoDB (Amazon RDS). Almacenamiento basado en SQL que utiliza el servicio de Amazon para confiabilidad y redundancia. Ejecutamos múltiples bases de datos SQL, fragmentadas para la escalabilidad. También probamos Aurora y la usamos en algunos lugares como Airpedal (nuestro colector de errores, a continuación). No nos funcionó para el uso de producción.

Redis (Amazon ElastiCache). Un caché distribuido masivo, predominantemente de propiedades de objetos individuales y resultados de consultas, para que podamos servir la mayoría de nuestros datos sin llegar a la base de datos.

Kafka / Kinesis / Kraken. El núcleo de nuestro sistema debe ser una poderosa solución de publicación, y Kafka es la última tecnología que hemos adoptado aquí. Debe manejar un número impío de suscripciones y notificaciones para que cuando las propiedades del objeto cambien, podamos notificar a todas las partes interesadas rápidamente. Procesamos los binlogs de MySQL en una secuencia de Kinesis, que luego leemos. Estamos en el proceso de pasar de Kinesis a Kafka. Mientras tanto, nuestra pila Luna1 usa Kraken, que es nuestro pub-sub casero escrito en Erlang.
http://kafka.apache.org/

Búsqueda elástica. Potenciamos nuestra búsqueda con instancias de esta plataforma de búsqueda basada en Lucene. Hasta ahora ha sido bastante bueno: rápido y flexible.
http://www.elasticsearch.org/

Kinesis Registramos muchos datos sin procesar y métricas sobre la actividad de Asana para ayudarnos a comprender cómo está funcionando el producto. Aquí canalizamos todo tipo de registros, desde datos de cambios de misión crítica que afectan la funcionalidad del producto hasta registros de eventos que se alimentan de informes sobre las métricas clave de nuestra compañía. En el pasado hemos usado Scribe y Flume.

Datadog / InfluxDb. Para recopilar, graficar y alertar sobre estadísticas operativas sobre sistemas de producción. Hemos probado Grafana en el pasado y nos estamos moviendo hacia Datadog.

NodoJS . Ejecutamos Javascript del lado del servidor, que combinado con nuestros servidores con estado y simulación de IU del lado del servidor, nos permite compartir la gran mayoría de nuestro código entre el cliente y el servidor. Aquí es donde vive nuestro marco “Luna”. Pero actualmente estamos desarrollando una nueva arquitectura de back-end (“Luna 2”) que finalmente eliminará este elemento de nuestra pila.
http://nodejs.org/

Un despachador personalizado (“JSSWeb”). Este proceso de Scala se ejecuta en cada servidor web y distribuye conexiones de red a procesos individuales de NodeJS.

Nginx. Esto se encuentra frente a JSWeb en cada servidor web y maneja todas las cosas esenciales a nivel de protocolo HTTP como SSL, keepalive, gzip, solicitud de registro, etc., que no queríamos reinventar en nuestro despachador. Se trata principalmente de transformar y transferir solicitudes entre el equilibrador de carga y el backend JSWeb.
http://wiki.nginx.org/Main

haproxy Haproxy es un equilibrador de carga bastante eficiente, y ya usamos múltiples para manejar nuestro nivel de tráfico y proporcionar redundancia en caso de interrupción. Dado que el haproxy puede manejar SSL ahora, intentamos usarlo pero descubrimos que solo tiene un solo subproceso, por lo que bloquea sus solicitudes. Y recientemente nos hemos encontrado con problemas de escalabilidad con stunnel que nos han hecho considerar darle otra oportunidad a Amazon ELB.
http://haproxy.1wt.eu/ y https://www.stunnel.org/index.html

DNS y el resto de Internet. Bueno, tienes que llegar a nosotros de alguna manera. 🙂

Para ejecutar la empresa (también comenzando desde la parte inferior de la pila)

Chocolate. Si no pudiéramos desbloquear primero las preciosas calorías del chocolate, tendríamos que conformarnos con “Hacer las cosas bien”. En realidad, aquí comemos alimentos saludables realmente increíbles (ver Asanaculinary en Instagram ), pero también nos encanta el chocolate.

Asana misma. Nuestro propio producto es probablemente la herramienta más importante y por excelencia en la organización de todo nuestro desarrollo, desde la ideación hasta la ejecución y el análisis. Es casi imposible imaginar cómo comenzamos la compañía sin ella o algo así en su forma actual. Aunque para ser justos, una vez que tuvimos un prototipo inicial, ya nos estaba haciendo mucho más productivos.
http://asana.com

Google Docs / Gmail. Cuando necesitamos documentos de diseño de larga duración y resúmenes, recurrimos a Google Docs. Y todavía usamos Gmail corporativo, pero sus días están contados. Prácticamente todos nuestros empleados usan la función de Bandeja de entrada de Asana que ha eliminado el 99% de nuestro tráfico interno de correo electrónico .
http://drive.google.com

Flojo. Esta es la mejor aplicación que existe para la comunicación en tiempo real. Es hábil, muy amigable, y parece que “entienden” lo bueno que está hecho el software.
https://slack.com/

GitHub. Para gestionar cambios, confirmaciones, fusiones, lanzamientos, git es indispensable porque es el control de origen el que simplemente funciona. Hospedamos nuestro propio servidor git en EC2, pero algunos de nuestros proyectos / servicios están alojados en GitHub.
https://github.com/Asana

Phabricator. Algunos de nuestros flujos de trabajo utilizan solicitudes de extracción, otros realizan revisiones posteriores a la confirmación. Cuando nos comprometemos, queremos que otra mirada sobre el cambio busque problemas y proporcione comentarios. Esta es una gran herramienta de revisión de código de código abierto de Evan Priestley de Facebook.
http://phabricator.org/

CircleCI. Solíamos confiar en Jenkins, pero ahora estamos bastante interesados ​​en CircleCI para nuestras pruebas automatizadas. Nos gusta externalizar la gestión de la infraestructura de prueba, ya que mantener nuestro propio clúster Jenkins ha sido una verdadera pérdida de recursos durante mucho tiempo. Consulte también ¿Cómo se prueban y trasladan varias funciones a producción en Asana?
https://circleci.com/

Centinela / Airpedal. En Luna2, hemos estado usando Sentry para recopilar informes de errores de nuestro producto, por lo que podemos clasificar y depurar fallas y problemas. Airpedal es nuestra herramienta de informe de errores local que se integra con Asana a través de la API. Cada falla en el sistema pasa a través de una base de datos como esta y se agrega e informa, e incluso puede generar alertas, por lo que si empujamos el código y causa problemas, lo sabremos rápidamente.

PagerDuty. Estos muchachos han descubierto cómo dar servicio a las rotaciones de guardia y facilitar su administración, programación y configuración de notificaciones. Cuando hay un problema urgente con nuestro servicio, es PagerDuty lo que garantiza que un miembro de nuestro personal de ingeniería sea notificado lo antes posible.
https://www.pagerduty.com/

Escritorio. Cuando los clientes tienen problemas, nuestro equipo de Operaciones de usuario utiliza Desk para administrar la cola y manejar la respuesta a través de todo tipo de medios. Es una de sus armas secretas (junto con ser generalmente impresionante), y les ha ayudado a ser reconocidos repetidamente por un excelente servicio al cliente de una compañía de software.
http://desk.com

Interana Nos proporciona una interfaz rápida y flexible para realizar consultas ad hoc sobre nuestros datos y proporcionar información comercial.

Looker Una GUI de SQL en la que podemos construir un modelo de datos, explicando cómo usar nuestras tablas, que proporciona acceso flexible para agregar y filtrar datos a los miembros del equipo que no dominan SQL (y algunos paneles de control potentes incluso para aquellos que son )

Recurrentemente Así es como manejamos nuestra facturación, para cuando nuestros clientes se den cuenta de cuánto valor les brinda Asana y cuánto más pueden obtener como clientes premium.
http://recurly.com

Redshift Una base de datos distribuida de PostgreSQL que nuestro equipo de datos utiliza para gran parte de sus datos, alojada por AWS.

NetSuite. Cuando nuestros clientes no pueden o no pueden usar una tarjeta de crédito, esto ayuda a nuestro equipo de Finanzas a rastrear las facturas manuales y mantener las mejores prácticas contables.
http://www.netsuite.com/

Matasellos. A pesar de querer matar el correo electrónico, debemos recurrir a él para comunicarnos fuera de Asana. Este servicio administra nuestro correo saliente y permite que nuestro equipo de Operaciones de usuario / Servicio personalizado rastree y brinde un soporte aún más profundo cuando sea necesario.
https://postmarkapp.com/

Puede haber otras herramientas / procesos que he omitido, especialmente si están más lejos de la parte del Producto de la organización, aunque he hecho los que no son de producción solo por diversión. ¡Otras Asanas pueden sentirse libres de corregirme o agregarme si hay algo que sienten que me he perdido!

Haré todo lo posible para agregar a la excelente respuesta de Greg. Los productos que componen la pila tecnológica de Asana incluyen: Adobe Typekit, Amazon (CloudFront, EC2, ElastiCache, Route 53), Apache Web Server, Bugsnag, Disqus, Elasticsearch, Google (Cloud Messaging, Fonts, Maps), HAProxy, JavaScript, LaunchKit, Meldium, MySQL, Nginx, Node.js, Phabricator, Redis, Scala, Swift, Swiftype, TypeScript, Wistia, WP Engine y Xendo.

Además, aquí hay una lista de otros productos de software que Asana está usando internamente:

  • Marketing: BuySellAds, Embedly, Postmark, SendGrid
  • Ventas y soporte: Clearbit, Instabug, SalesforceIQ CRM, Salesforce Live Agent
  • Analytics: Google Analytics, Optimizely, Interana, Looker
  • HR: AngelList Jobs, CodeFights Bots, Connectifier, The Muse
  • Finanzas: Bill.com, Expensify, Recurly, Square
  • Productividad: Dropbox, SecureDocs, SendHub

Para obtener una lista completa del software utilizado por Asana, consulte: Asana’s Stack | Siftery

(Descargo de responsabilidad: los datos anteriores se obtuvieron de Siftery y han sido verificados por personas que trabajan en Asana)

Principalmente, utilizamos un marco web JavaScript personalizado llamado Luna que se ejecuta sobre V8 en Ubuntu en EC2. Vea ¿Qué es el marco de tecnología Luna de Asana? ¿Qué incluye y sobre qué está construido?

Nuestra base de datos es MySQL (a través del servicio RDS de Amazon).