20
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Slackのバックエンドについて少し調べてみた

元ネタ

What is the tech stack behind Slack? - Quora
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

新言語Hackで最強PHPerになろう! - Qiita

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

HAProxyを使い始めてみる - Qiita

多機能なプロキシサーバです。

Consul

Consul by HashiCorp ~サービス・ディスカバリ入門~ - Qiita

インフラ上のサービス設定とサービスディスカバリのためのツール

通信プロトコル

gRPC

gRPCって何? - Qiita

gRPC は、RPC (Remote Procedure Call) を実現するためにGoogleが開発したプロトコルの1つです。

RPC

遠隔手続き呼出し - Wikipedia

遠隔手続き呼出し(英: remote procedure call、リモートプロシージャコール、略してRPC)とは、プログラムから別のアドレス空間(通常、共有ネットワーク上の別のコンピュータ上)にあるサブルーチンや手続きを実行することを可能にする技術。

Thrift

Apache Thrift - Wikipedia

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

Apache Spark で分散処理入門 - Qiita

Sparkは巨大なデータに対して高速に分散処理を行うオープンソースのフレームワーク。

Airflow

【Airflow】最近よく聞くAirflowに入門!EC2で動かしてみた【CI/CD】 - Qiita

Airflowはプログラムでワークフローを作成、スケジュール設定、監視するためのプラットフォームである

ETL周りをGUIベースで実行・管理をサポートしてくれるツールのようです。

Hadoop

Hadoopとは - Qiita

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

10分で理解する Prometheus - Qiita

SoundCloud が中心になって開発しているプル型のリソース監視ソフトウェアです

ELK

元ネタ内

for logging

ELK スタック | AWS

ELK スタックは、Elasticsearch、Logstash、Kibana という 3 つのポピュラーなオープンソースプロジェクトからなるスタックで、それぞれの頭文字を取ってこう呼ばれます。

クラウド

元ネタ内

Slack is largely hosted in AWS, in many regions globally

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
20
Help us understand the problem. What are the problem?