元ネタ
[What is the tech stack behind Slack? - Quora]
(https://www.quora.com/What-is-the-tech-stack-behind-Slack)
Slackのバックエンドが何で出来ているのかをCTO(Cal Henderson)が答えてくれています。
ここに記載されているソフトウェアについて、知らないものが多かったので、「〇〇とは?」形式で調べてみました。
※自分が知っているものについては名前のみを記載しています。
クライアントアプリ
web client
JavaScript
ES6
React
desktop app
Electron
Android
Java
Kotlin
iOS
Objective C
Swift
slack.comのバックエンド(webサーバー周りとAPI)
アプリケーション
PHP + Hack + HHVM
要するにPHPでできてるみたいです。
HackやHHVMはPHP関連の便利ツールだそうです。
Hack
HHVM 向けの開発言語で静的型付き言語の性質を取り入れ PHP での素早い開発を実施し、PHPとの互換性があります
HHVM
HHVM(HipHop Virtual Machine)/Hackとは - Qiita
HHVM(HipHop Virtual Machine)とは、Facebookが開発・公開しているC++で実装されたPHP実行環境(JITコンパイラ)の一つです。
データ保存
MySQL + Vitess
要するにMySQLを使っているみたいです。
Vitess
MySQL + Kubernates = Vitess ? Vitessをインストールしてみよう! | スマートスタイル TECH BLOG|データベース&クラウドの最新技術情報を配信
MySQLインスタンスの大規模クラスタをデプロイ、拡張、管理するためのデータベースソリューションです。
キャッシュ
Memcached + MCRouter
要するにMemcachedを使っているみたいです。
Memcached
今更ではあるが、memcachedについて学習してみた - Qiita
memcachedとは分散型キャッシュシステムを構築することができるソフトウェアである。
MCRouter
mcrouterでElastiCache(memcached)を分散レプリケーションする | DevelopersIO
「mcrouterはmemcachedプロトコルをルーティングするソフトウェアで、クライアントとmemcachedサーバの間に立ってクエリをルーティングする仕組みになっています。」
検索
SolrCloud
with various Java services for ranking
検索システムだって高可用性にしたい!SolrCloudを用いた高可用性構成の紹介 - ZOZO Technologies TECH BLOG
全文検索や、ファセット機能などはMySQLだけでは不十分なために、Solrを併用しています。
Solrのサーバー構成例にはいくつかのパターンがありますが、今回はその中でも最も可用性の高いSolrCloud...
リアルタイムメッセージ
WebSockets
Java
Go
ロードバランサ
HAproxy
for load balancing
多機能なプロキシサーバです。
Consul
Consul by HashiCorp ~サービス・ディスカバリ入門~ - Qiita
インフラ上のサービス設定とサービスディスカバリのためのツール
通信プロトコル
gRPC
gRPC は、RPC (Remote Procedure Call) を実現するためにGoogleが開発したプロトコルの1つです。
RPC
遠隔手続き呼出し(英: remote procedure call、リモートプロシージャコール、略してRPC)とは、プログラムから別のアドレス空間(通常、共有ネットワーク上の別のコンピュータ上)にあるサブルーチンや手続きを実行することを可能にする技術。
Thrift
Apache Thrift(アパッチ スリフト)は、「スケーラブルな言語間サービス開発」のためにFacebookにて開発された遠隔手続き呼出し (RPC) フレームワークである。
JSON-over-HTTP
JSON-RPC over HTTPなサーバを作る - Qiita
JSON-RPC over HTTP
音声・ビデオ通信サービス
Elixir
voice and video calling service
Elixir (プログラミング言語) - Wikipedia
Elixir (エリクサー) は並行処理の機能や関数型といった特徴を持つ、Erlangの仮想マシン (BEAM) 上で動作するコンピュータプログラミング言語である。
その他
Node
A few different services
非同期タスクキュー
Kafka
Apache Kafkaの概要とアーキテクチャ - Qiita
Apache Kafka(以降、Kafka)はスケーラビリティに優れた分散メッセージキューです。
Redis
大規模データ分析
処理ツール
Presto
HiveとPrestoの違いについて調べてみた - Qiita
分散型SQLクエリエンジン
あらゆる大きさのデータサイズに対しても、インタラクティブ(対話的)な処理が可能
Spark
Sparkは巨大なデータに対して高速に分散処理を行うオープンソースのフレームワーク。
Airflow
【Airflow】最近よく聞くAirflowに入門!EC2で動かしてみた【CI/CD】 - Qiita
Airflowはプログラムでワークフローを作成、スケジュール設定、監視するためのプラットフォームである
ETL周りをGUIベースで実行・管理をサポートしてくれるツールのようです。
Hadoop
Hadoopは、テキスト、画像、ログなどの構造化されていないデータを、高速に処理出来るオープンソースのプラットフォームです
Kafka
Apache Kafkaの概要とアーキテクチャ - Qiita
Apache Kafka(以降、Kafka)はスケーラビリティに優れた分散メッセージキューです。
サーバー設定・管理
Terraform
https://qiita.com/Chanmoro/items/55bf0da3aaf37dc26f73
インフラストラクチャ定義ツール に分類されるツールで、クラウド上のリソースを定義ファイルの状態になるように生成・操作してくれます
Vagrant を開発している HashiCorp社 が開発しているツールなので使用感は Vagrant と同じような感じです
Chef
サーバー設定ツール「Chef」の概要と基礎的な使い方 | さくらのナレッジ
ファイルに記述した設定内容に応じて自動的にユーザーの作成やパッケージのインストール、設定ファイルの編集などを行うツール
Kubernetes
今さら人に聞けない Kubernetes とは? - Qiita
Kubernetesを一言で言うと、自動デプロイ、スケーリング、アプリ・コンテナの運用自動化のために設計されたオープンソースのプラットフォームです。
Prometheus
for time series metrics
SoundCloud が中心になって開発しているプル型のリソース監視ソフトウェアです
ELK
for logging
ELK スタックは、Elasticsearch、Logstash、Kibana という 3 つのポピュラーなオープンソースプロジェクトからなるスタックで、それぞれの頭文字を取ってこう呼ばれます。
クラウド
Slack is largely hosted in AWS, in many regions globally