ドメイン指向アーキテクチャのスモールスタートなロードマップ案
分散オブジェクト・アーキテクチャ/ドメイン指向アーキテクチャへの追記。
とりあえず「分散並列処理」という要件を後回しにすると:
- オブジェクト・サーバーはScala (Play) + Redis/MongoDB で → ユーザー・インターフェイス(HTML)は取り扱わない。SOAのRPCサーバー。
- ウェブサーバーはScala (Play)で → HTMLやJSONなどを取り扱い、ユーザー・インタフェイス層の一部を担う。ドメイン層のデータは持たないが、セッション管理などは担当する。
という考え方で。
次のステップでスケールアウトしながら、必要になったタイミングで分散化し、並列化する:
- サーバー1インスタンスのなかに、オブジェクト・サーバーとウェブサーバーを同居させる。
- オブジェクト・サーバーとウェブサーバーを分離し、RPCで連携させる。 →ここですでに分散化
- ウェブサーバーを複数インスタンスにスケールアウトする。
- オブジェクト・サーバーを複数インスタンスにスケールアウトする。 →並列分散化
という感じで。第2ステップ(あるいは第1ステップ)の分散化では、Ruby on RailsのActiveResourceのようなRPCの仕組みが欲しい。この時点でFinagleを導入するかも。そうなると、第4ステップの並列分散化も、その延長で実装できるかもしれない。かなり希望的観測だけど、分散・並列化のレイヤーにドメイン層が依存しなければ、あとで差し替えてもいいわけで、まあいいでしょう。現時点ではこんなアーキテクチャ設計で。
あとは永続化インフラストラクチャの選定。Redisにするか、MongoDBにするか。Redis使おうかなーと。