Redisを見つめて:私たちは本当に発明する開発者なのか?
(blog.day1swhan.com)Redisエコシステムを見つめながら、自分が本当に発明する開発者だと胸を張って言えるのか、あらためて考えさせられます。
Key-Valueストレージの誕生
- 2000年代以降、Web 2.0時代の到来とともに、Webサービス企業は膨大なユーザー数を支えなければならない状況に直面
- この莫大なトラフィックをさばくために、大きくて立派なサーバーではなく、小さくて安価な大規模分散システムが必要になった
- 幸い、ほとんどのデータ構造は単純だった(例:
userid = 1234の情報を取得する) - リレーショナルデータベース(RDBMS)を使うには重すぎるうえ、高価で、複雑だった
- CAP Theoremの登場
- ならば整合性を多少捨てても、可用性と速度を取ればよい
- keyを渡すとvalueを返すシンプルなデータベースが誕生(Memcached-2003, Amazon Dynamo-2007)
Redisの誕生
- パスタの本場イタリアで、Salvatore Sanfilippoという開発者がLLOOGGというスタートアップを運営していた(Logのつづりでoが2つあるのは本当)
- LLOOGGはWebサイト訪問者のリアルタイム追跡サービスを提供
- 小規模ながら実際のユーザーもいた
- 当時、リアルタイム分析はかなり難しい作業だった
- データが溜まり始める → 既存のRDBMSは徐々に遅くなる → リアルタイムな応答性が出ない
- リアルタイム応答のためにはメモリを使う必要がある → 当時のMemcachedはstring形式の単純なGET、PUTしかサポートしていなかった
- INCR、DECR、LISTのように、もう少し拡張されたdictionary機能が必要なのに、そんなDBがない? → じゃあ自分で作る
- 超シンプルなTCPサーバー上で動く初期バージョンが誕生(クラスター、AOF、レプリケーションのような高級機能はなし)
Redisの進化
- Redisはキャッシュではなく、リアルタイム処理のためのデータ構造ストアを目的として生まれた
- ところが人々はこれをキャッシュとして使い始めた
- 既存の巨人たち(Facebook, Twitter, GitHub, Stack Overflowなど)で、キャッシュを超えたデータ構造への要求が増えていった
- セッション保存、ログイントークン管理、リアルタイムカウンター、ランキングシステム、いいね数のような小さな機能から段階的な導入が始まった
- さまざまな必要機能とデータ構造が進化的に追加された(Sorted Set, HASH, Cluster, 永続化...)
- 柔軟なデータ処理プラットフォームになっていった
コミュニティとUX、そして開発者の哲学
- Redisは機能は多くても複雑であってはならないという哲学の上に成り立っている
- 公式ドキュメントはCLIベースですぐ実行できるサンプルと、明確な動作説明を提供している
- 直感的なコマンド群(SET, GET, LPUSH, ZADD, HGETALLなど)は、公式ドキュメントを一度ざっと見るだけで何をするものかすぐ感覚をつかめる
- この直感性は、単に便利というだけでなく、ツールに対する心理的ハードルを下げ、開発者の生産性を高める役割を果たす
- こうした構造から生まれる汎用性は、ユーザー、クラウド提供者、オープンソース貢献者のすべてに利益をもたらす
- 互いの利益で成り立つエコシステムの中で、Redisは強制されない選択を通じて、インメモリDBの事実上の標準として定着した
Redisエコシステムを見つめながら
- Redisは、訪問者のリアルタイム分析という、ある意味ではありふれたアイデアを実現する手段として出発した
- SQLという既存方式の限界(遅い、高い)を、新しいアプローチで突破した
- 業界の人脈活用、納入業者の締め付け、ハードウェアチューニング、利用量制限といった既存ルールの最適化ではない
- メモリをDBの中核要素に変えるという新しいルールを生み出した
- ツールを自ら設計し、これまで存在しなかった流れを提案し、それを世界中に受け入れさせるには、応用のための基礎知識が重要になる
- ショッピングカート保存という問題を解決するために設計されたAmazon Dynamoを見ても、複雑な分散システムの知識を応用する必要がある
- みなが自発的に選ぶ業界標準になれば、巨大な付加価値と雇用が生まれる
- Redis専門人材、ハードウェアインフラ、学習コンテンツ、マネージドサービス(AWS, Azure)、専門ソリューション(Redis Enterprise)を見れば実感できる
- このすべては、特定産業振興だの中小企業支援だのといった政府政策や法律が作り出したものではない
私たちは、まだ見た目だけ先進国で、もしかすると製造業時代の発想のまま生きながら、開発者は知識サービス産業の従事者だと思い込んでいるのではないか、考えてみる必要があります。
- 基礎技術(例: アルゴリズム)がなぜ重要なのかを、結果によって証明できるか
- 問題解決のために道具を作れる開発者文化と教育システムがあるか
- 誰もが失敗を許容する文化を育てるべきだと言いながら、自分自身が他人のミスに怒ったり罵ったりしていないか
- 知識サービス産業の真の付加価値を本当に理解し、粘り強く押し進められるか
本当の開発者とは、単にツールをうまく使う人ではなく、たとえ拙くても自分に必要な道具を自ら設計し、その道具を他の人も簡単に使えるようにして、エコシステムを拡張し付加価値を生み出せる人なのだという思いを、あらためて胸に刻みます
2件のコメント
自分は偽物みたいです(泣)
有用性の発明…