大規模データ解析サービスを実現する、とは?
今この文章を書いているMacBookで、Webサイトのアクセスデータを解析するサービスを実現するとしましょう。現在は技術が発展し、少し前に比べたら、PCの処理能力、データの保存領域の大きさは格段に向上しています。また、ものすごく解像度が高い映画を簡単に再生できるようにもなっています。このような環境下でサービスを実現することは、果たして可能なのでしょうか? 大規模データ解析サービスを実現するためのインフラについて、MacBookを例に考えてみましょう。
データ解析サービスとは
そもそもデータ解析サービスとはどういうものなのでしょうか?
データ解析サービスは、データから何らかの知見を得て、サービス改善など、大切なことを実現するための行動につなげる役割を担っています。この役割を果たすには、行動につながる可能性を最大限にするため、なるべく多くのデータを処理することが重要になります。
データ解析サービスのポイント
「なるべく多くのデータを処理する」ということにはいくつかのポイントがあります。
一つ目は、できる限り多くのデータを対象とするというポイントです。例えばWebサイトの解析を例に考えると、アクセスするユーザーすべての情報、サイトの閲覧、問い合わせ、購買などのユーザーが起こすさまざまな行動、色々なデバイスからのアクセスなどが処理対象になります。複数のユーザーの継続的な行動のデータを処理するということは、同時に多くのデータを処理する必要があるということです。これをMacBookで実現するには、外部ネットワークに公開した上で、同時に多数のクライアントからの接続が確立できるようにして、リクエストを処理する必要があります。
二つ目は、情報量をなるべく減らさないというポイントです。受け取ったデータの情報量を減らすと処理的には楽になります。ですが、情報量を減らすためには、あらかじめ使い方を考えておく必要があります。例えば、秒間500データ処理するとして、大きめに見積もったデータは2KBだとします。そうすると、一年間で 2×500×60×60×24×365 = 31,536GB
程度のデータを処理する必要があります。これを保存しておくことだけを考えても、私のMacBookの保存領域は500GBなので、この処理の実現はかなり難しそうです(ただし、データの読み書きのスループットという観点では結構余裕があるので、高画質の映画を再生することは可能です)。
三つ目は、データに抜けがないというポイントです。特定の時間でデータが欠損したり、高い確率でデータが欠損したりする状況になると、行動するための正しい判断ができなくなってしまいます。また、MacBookの電池がなくなった、ネットワークが不安定、OSアップデートで再起動などの状況が発生してしまうと、データを処理できなくなってしまいます。
他にもポイントはあると思いますが、これらの大事なポイントを実現するには、同時に処理するための接続数としてのスループット、情報量を減らさず処理するための量としてのスループット、データをためておくための保存領域、データを抜けなく処理するための安定性、などが大事になってきます。
どうやら私のMacBook一台では、小規模のWebサイトの解析をそこそこの安定性で実現できそうですが、サービスとして提供するには難しそうです。つまり、この辺りが大規模データ解析サービスを実現する上での課題となります。
行動につなげるためのリアルタイム性
データ解析から得られた知見を行動につなげるためには、今まで挙げた解析サービスの「データを処理する」というポイントに加えて、データの「解析結果を得る」ことが必要になります。これはデータ処理の開始から解析結果を得るまでの時間の幅に応じて、システムの構成やアルゴリズムなどのアーキテクチャが変わってくるためです。
私がエンジニアとして働いているPLAIDでは「KARTE」という大規模データ解析サービスを提供しています。
KARTEは、Webサイト解析ツールの一種です。先ほど述べた、解析サービスの特徴である大量のデータを受けることができ、データの情報量をなるべく落とすことなく、情報が欲しい時に後から解析できます。また、データの欠損が少ないという性質も備えています。それに加え、リアルタイムに解析結果を得られるという特徴を持っており、その解析結果を用いて、サイト上でポップアップを出す、メールやSMSの送信をするなど、さまざまなアクションをデータを取得したタイミングで行えます。
リアルタイムにデータを解析するためには、解析が終わるまでレイテンシが最重要となります。また、基本的にはデータを一旦ためておいて後から処理することはできません。急激なアクセスの増加などに対応するためには、短い時間でのスケーラビリティが重要となります。