こんにちは!
この記事はユアマイスターアドベントカレンダーの23日目の記事です。
記事のテーマ
伊坂幸太郎さんの「モダンタイムス」という小説に出てくる出会い系サイトのアーキテクチャと技術選定をエンジニア目線でやってみた、というものになります。
いつかこの小説に出てくる出会い系サイトとちゃんと向き合いたいと思ってたので嬉しいです。
そして、「ここはこうだと思うよ」「こういう機能も必要なんじゃない?」などご意見あればコメントお願いします!!!
簡単に自己紹介
エンジニア3年目・社会人3年目
好きな言語:Java
興味のある技術:Go
好きな作家(一番重要):村上春樹、伊坂幸太郎
(おすすめの小説とか作家があればコメント大歓迎です)
「モダンタイムス」を知らない人のために簡単に説明します
主人公の渡辺はエンジニアとして働いており、ある日業務から逃げ行方不明になった五反田(同僚)の代わりに株式会社ゴッシュという会社の出会い系サイトの改修を行う。その改修自体はユーザーの使用する登録画面に新しい項目を5つ追加するというシンプルなもの。「こんな簡単な案件から五反田が逃げ出すなんておかしい!」と思った渡辺はその出会い系サイトについて調べ、ある事実が判明した。
その出会い系サイトはある特定の文言で調べないと到達することのできない特殊な出会い系サイトであった。(その特定の文言はソースコード上で暗号化されており、独自のコンパイラがないと解析することができない。)そして、その特定の文言で検索を行い出会い系サイトに到達した人間は次々に殺されていくのであった。。
というのが大まかなストーリーであります。
以下、アーキテクチャと技術選定は完全に独断と偏見です
アーキテクチャ(予想)
アーキテクチャの説明
マイクロサービスアーキテクチャです。理由は下記です。
①機能によって別コンパイルが必要
②管理のしやすさを重視
この結果マイクロサービスアーキテクチャが妥当という結論になりました。
補足
この物語で肝になる、「特定の文言で検索エンジンで検索を行い出会い系サイトに到達した人」の解析を行っているのがアクセス解析バッチになります。
技術選定
まず前提にこの本が出版されたのが2008年なのでこの時代に適した?技術を選んだつもりなのですがお手柔らかにお願いします。。。
-
自社サーバー
- AWSでもなく自社で作ったサーバーです。なぜかと言うと、小説内ではこの出会い系サイトがWeb上のどこにあるのかわかっていないからです。自社サーバーと聞くと脆弱性の問題や攻撃を受けやすい印象がありますが、、、そこはすご腕のエンジニアがゴッシュにはいたという設定で自分の中で解決しました。
-
サーバーサイド
- Javaです。この時代?のWebサービスはJavaという印象がありました。PHPも候補に入れてたんですが、ゴッシュという会社は自社サーバー作っちゃうくらいなのでPHPだとエンジニアのコスト抑えすぎ&そんな軽い言語ゴッシュが選ぶはずないと思ったのでJavaにしました。フレームワークはSpringです。
-
解析系バッチ
- Pythonです。解析と言ったらPythonかなと思いました。(安直)
-
暗号化されてないデータベース
- ユーザー情報やログ情報を格納するのはMySQLです。ゴッシュにとってこのDBに格納される情報自体あまり重要ではないかなと思ったのでMySQLにしました。
-
暗号化されたデータベース
- 検索エンジンで特定の文言で検索をかけて出会い系サイトに到達した人の情報(年齢・職業・名前)やどの検索エンジンを使ったのかなどの情報を格納するのがこのデータベースです。なぜCassandraかと言うとゴッシュにとって一番重要なデータを格納するからです。改竄されてはいけない、抜け落ちてはいけない、この条件を満たしてくれるのは分散処理に適したCassandraかなと思いました。上記の画像では1ノードしか用意してないですがおそらく5ノードくらい実際にはあると思います、リッチな会社なので。
-
独自のコンパイラ
- ソースコード上で暗号化されている箇所が散見されています。その暗号を解析するのが独自のコンパイラです。実際にはどの言語で実装すればいいのか悩んだ結果Pythonです。これも暗号とか解析と言ったらPythonかな・・・と思い選定しました(安直)
-
フロント・画面
- タイムリーフです。サーバーからもらったデータを表示させるのはタイムリーフで、簡単な動的な処理はJSにやってもらおうと思いました。Javaといったらタイムリーフかなって思いました(安直)
感想
実際に作ってみたいと思いました。(でもタイムリーフは使いたくない。Vue.js使いたい)
独自のコンパイラとか作るの大変そうだがいい勉強になりそうだと思いました。
一番大変だったのは小説を読み直すことです。読んだ人は知ってると思いますが結構長いです。
ミドルウェアとかもっと考えたかったです。
技術選定って楽しいなと思いました!!