Qual è lo stack tecnologico dietro Slack?
Il sistema Slack è composto da molti servizi e applicazioni diverse. Abbiamo 3 client principali:
* Il nostro client web è scritto in un mix di JavaScript ed ES6, con React. Usiamo Electron per spedirlo come app desktop
* Il nostro client Android è scritto in un mix di Java e Kotlin
* Il nostro client iOS è scritto in un mix di Objective C e Swift
Sul backend, abbiamo la nostra applicazione principale che alimenta slack.com e la nostra API, che è scritta in PHP/Hacklang su HHVM. Memorizziamo i dati in MySQL usando Vitess. Per il caching, usiamo Memcached e MCRouter. Il nostro servizio di ricerca è basato su SolrCloud, con vari servizi Java per il ranking. Il nostro sistema di messaggistica in tempo reale usa WebSockets ed è composto da molti servizi scritti in Java e Go. Usiamo HAproxy per il bilanciamento del carico e Consul per la configurazione e la scoperta di alcuni servizi. La maggior parte dei nostri servizi parlano tra loro tramite gRPC, anche se abbiamo anche alcuni Thrift e JSON-over-HTTP. Il nostro servizio di chiamate vocali e video è costruito in Elixir. Alcuni servizi diversi sono anche scritti in Node. Il nostro sistema di code asincrone è costruito su Kafka e Redis.
Il nostro data warehouse è costruito su strumenti open source, inclusi Presto, Spark, Airflow, Hadoop e Kafka. Per la configurazione e la gestione dei server usiamo Terraform, Chef e Kubernetes. Usiamo Prometheus per le metriche delle serie temporali e ELK per i log. Slack è in gran parte ospitato su AWS, in molte regioni a livello globale.