Suicaのシステムがいかにすごいか仕組みを徹底解説

f:id:kitahashi-ryoichi:20180328230529j:plain

 

Suicaの凄さ

  1. ものすごい処理量(1日4000万件)
  2. 全然サービスが落ちない
  3. 年寄りも使っている

Suicaがない社会なんて今や想像できないですよね?東京でSuica持ってない人はいないくらい普及していますし、レストランやコンビニでSuicaを使って買える場所も普通になってきました。普通に考えて、1日4000万件も処理して0.1秒以内に処理を完了させないといけないシステムなんて無茶苦茶難しくないですか?しかも、Suicaがリリースされたのは2001年です!ちょこっと調べてみたすごいブレークスルーの数々を紹介してみようと思います。

 

IT・Suica事業

https://www.jreast.co.jp/youran/pdf/2013-2014/jre_youran_group_p63_67.pdf

交通系電子マネーのご利用件数が最高記録を更新!

https://www.jreast.co.jp/press/2015/20150602.pdf

ICカード乗車券システムにおける自律分散高速処理技術と そのアプリケーション

http://www.sice.jp/ia-j/papers/jitk6-20050722-1305.pdf

 

サービスを落とさないための「自立分散高速処理技術!」

改札が止まれば日本の通勤ラッシュをさばくことができない!すべてはこれを解決するために安定して高速にサービスを動かし続けるアーキテクチャになっています。かんたんに言うと、「ピッ」する改札は独立させて、「ピッ」したデータが改札→駅→中央サーバに送信できたら送信するという仕組みになっていて、中央が死んでも駅サーバで処理できちゃう!キューのような仕組みになっていて、データをある程度蓄積し、通信が確立されれば、より上位のサーバ(改札<駅<中央)にデータを複製することで間違いが起きずに中央集権的に顧客管理ができます。

 

そもそも、改札<駅<中央が独立できるのは、改札を通って駅構内に入ってから人間が行きたい駅まで移動するのにタイムラグが発生する電車の特性によるからなんです。つまり、「ピッ」した情報は次の駅の改札を通るまでに到着駅サーバに到達すれば良いのでこんなアーキテクチャができるわけです。逆に、改札入ってすぐ出る場合は駅サーバまで複製できていれば処理できるので信頼性の高い処理が行える・・・キレイな設計ですね。

 

ICカード乗車券システムにおける自律分散高速処理技術とそのアプリケーション

http://www.sice.jp/ia-j/papers/jitk6-20050722-1305.pdf

 

ものすごい処理量をこなす緻密な速度改善

「ピッ」した時にやってることは「運賃計算」が主な処理とのこと。これを100msec(0.1秒)以内に計算して、改札に返さないといけないのです!どれくらい難しいかというと、普通のWebサービスのレスポンス速度は1秒以内でも結構早い方で、処理速度的には0.2秒とか意外にかってたりします。糞なアプリだともっと遅いです。Suicaが凄いのは問題解決にピンを置いて、普通降りる時に運賃計算するのを乗った時に処理の一部をカードに保存してしまうという逆転の発想があった。こういう逆転の発想はエンジニアは必要な思考法で、その時にしなくても良いものを先にやっておくという考え方は色んな所で使われている。アイテムベースの協調フィルタリングで「この商品を買った人はこんな商品も買っています」というレコメンドでも利用されている。前例に囚われることなくあらゆる可能性を考えてみるというのは忘れないで置こうと思ったのでした。

 

したがって,処理時間を短縮 するために,乗車時に予め定期区間内の乗継駅 (仮精算駅)および乗車駅-乗継駅間の運賃を IC カード内に記録する技術を考案した.これは, 個々の改札機に自駅から各駅への運賃データを記憶させることで可能となった技術である。

http://www.sice.jp/ia-j/papers/jitk6-20050722-1305.pdfより

 

お金を扱うからこそ間違わない仕組み

間違わない仕組みというより、間違うからこそ間違っても何とかなる仕組みが大事だと思います。完璧なシステムよりも完璧じゃないことを前提にそれでも正しく動く仕組みって大事ですよね。つまり、実際に起ったことを確実に記録して、それがエラーだったらもう1回やればいいよっていう冪等性(べきとうせい)のある仕組みを考えておくべき。Suicaだと『だれがいつどこで「ピッ」したか』と『だれがいくらチャージ』したかが分かれば、必ず正しい状態にすることができます。このデータをネットワーク上のサーバに複製しておくことで中央が死んだり、改札が死んだりしても最終的には数字を合わせることが出来る仕組みになっています。僕が主にやってきたECでも障害はよくあることなので、障害がおきても復旧できるようにユーザの生データは確実に保存できるような仕組みになっていました。

 

当時は最先端の非接触ICカードを採用

「ピッ」の技術は非接触ICカードといいます。この技術は大きく2つに分かれて、NFCとFelicaがあります。どちらもソニーの技術ですが、NFCはオランダ:フィリップスと共同開発になっています。NFCはかざすだけで通信する技術で、Felicaはデータ管理とセキュリティの技術になっており、この2つが合わさってSuicaや他の電子マネーが動きます。世界的に見ても当時は日本が最先端を走っており、Suicaの登場で東京の通勤ラッシュも大きく緩和されることになったと思います。

 

非接触ICカードの歴史

1988年 ソニーでFelicaの基礎技術研究が始まる

1997年 香港「オクトパスカード」でFelicaがはじめて実用化

2001年 Edy、Suicaサービス開始

2004年 おサイフケータイ(Felica)がドコモから発売

2011年 Felica対応スマホが発売

2016年 ApplePayでiPhone7にFelicaが搭載

 

年寄りも当たり前に使えるサービス

当たり前に使えるというのがシステムでは相当難しい話になります。しかし、100%確実に動くシステムなんて存在しません。物理的なモノがある以上災害があれば止まりますし、99%の稼働率でも年間87時間停止していることになります。これではまるで使えません。そんな中でも障害が起きた話は直近でたった1時間のみです。先ほど説明した「自立分散高速処理技術」と呼ばれている自立分散の部分で、一部が死んでも動き続ける仕組みが実装されていることによる影響が大きいです。サーバースペックに依存することなく、アーキテクチャとして一部が死んでも動き続けるヒトの血管の弁のような仕組みを盛り込む必要があるということです。

 

 

だからSuicaは6000万枚も普及した

通勤ラッシュのとんでもなく高い要求仕様をエンジニアが解決したことで、とんでもなく使いやすい電子マネーのSuicaが誕生し、現在では約6000万枚発行されているみたい。使えるお店も32万店舗!端末は63万と、コンビニでは当たり前に使えるし、自動販売機でも使えてどんどん便利になっていってますよね。

f:id:kitahashi-ryoichi:20161117184152p:plain

 

クレジットカードの発行枚数は約2億5000万枚

Tポイントカード発行枚数約1億3000万枚(内アクティブ6050万人)

楽天Edy発行枚数約7800万枚

nanaco発行枚数約4000万枚

 

他の電子マネーと比較すると、枚数差はそんなにありません。ただ、交通系カードなのでアクティブ率が他と段違いで高いため、電子マネーといえば圧倒的No1でSuicaなのです。

 

クレジットカード発行枚数調査結果の公表について

http://www.j-credit.or.jp/information/statistics/download/toukei_03_a.pdf

電子マネー「楽天Edy(エディ)」 | 加盟店募集|楽天Edyの特徴

電子マネー nanaco 【公式サイト】 : 法人のお客様 | 電子マネーnanacoとは

T-POINT 10周年 | TポイントとTカードの総合サイト[T-SITE]

 

まとめ

だれでもかんたんに使えて、速さを意識しないくらい自然に支えるシステムの裏には地道な速度改善のための問題解決と、アプリレベルではないアーキテクチャとして仕組みによる問題解決が重要な要素になっているということ。難易度が違っていても、課題をドリルダウンして解決できるレベルの課題を本質的に解決していくことが大事なんだなということを感じた。