Mongo db as_a_building_block

30
MongoDB as a building block アーキテクチャと私

description

このスライドは ・福崎がアーキテクトになっていった経緯 ・ITにおけるアーキテクチャの例 ・MongoDBを建材としてみると について発表した時のものを若干編集したものです。

Transcript of Mongo db as_a_building_block

Page 1: Mongo db as_a_building_block

MongoDB  as  a  building  block

アーキテクチャと私

Page 2: Mongo db as_a_building_block

何故アーキテクチャか? •  はじまりの理由

o  父親がゼネコンの現場所長 o  幼少の遊びは木工 o  幼少の遊びはダイヤブロック&レゴブロック

アーキテクチャ(=構造)のセンスが磨かれた?

Page 3: Mongo db as_a_building_block

マイコン&パソコン •  マイコンに初めて触ったのは小学一年生の時

o  MZ-700 アルファベットを覚える前にBASICを触っていた

•  MSX o  小学4年のお年玉でCASIOのMX-10 8kbメモリ  MSX

•  X68k o  高校2年のころX68000 SUPER HDを親に買わせる

Page 4: Mongo db as_a_building_block

なりたかった職業 •  ラーメン屋(小学校低学年) •  天才科学者(中学卒業ごろまで?) •  映画かアニメの制作者(高校2年ごろまで) •  宇宙飛行士(高校3年) •  経営者(浪人時代) •  謎(大学時代) •  リサイクルショップ経営者(博士後期課程満期中退時)

Page 5: Mongo db as_a_building_block

大学時代のバイト •  マルチメディア制作会社でバイトしてはじめてパソコンが金になることに気づいた

•  大学の講義よりハマっていた・・・・

Page 6: Mongo db as_a_building_block

もしかしてSE? •  Macromedia Directorで作成 •  半角全角混じりの適当な日本語ファイル名で作り散らかされたムービーファイル群

•  半角英数、固定長、体系的なファイル名 •  管理表 •  工程管理

Page 7: Mongo db as_a_building_block

はじめてのC++ •  C++とJavaでオブジェクト指向と出会う •  バラバラに敵キャラクタを動かせる! •  自機の玉が連射できる! •  しかし・・時既に遅し・・研究用の実験システム作成 •  遠隔教育システムetc..

Page 8: Mongo db as_a_building_block

研究者として •  卒論

o  多数決による自動修復可能な分散演算システム •  エヴァ○ン○リオンのアレ・・・

•  修論 o  エンドユーザーによるプログラミングが可能な最小語彙セットによるシステム記述方法

•  D論 o  無し・・・・

•  理化学研究所 o  リサーチアソシエイトとしてウェット実験屋さんのための支援システム開発 o  高度好熱菌プロジェクト

研究者には向いていなかった・・・

Page 9: Mongo db as_a_building_block

1個目の会社 •  Think & Win(=考えて勝つ) •  ビジネスは普遍(色々無くても考えることは出来る!)

o  ホームレスが o  空き缶を潰し o  ビジネスになっていた! o  @上野公園

これは重要な示唆ではないか?!

•  しかし失敗 o  何を考えるべきか社員には見えなかった・・・

Page 10: Mongo db as_a_building_block

はじめてのSI案件 •  NTTグループでのGridコンピューティング案件 •  USAのソリューション導入! •  DCに5ラックのシステム設置! •  サーバー立ち上がってます!

•  サービスは? •  運用は?

まぁ、勉強になりました

Page 11: Mongo db as_a_building_block

NTTグループでの開発 •  ある大規模サービスの立ち上げにhelpで入ることに •  Gridの経験があったので紹介された

•  あんまり技能的には関係無かった・・・

Page 12: Mongo db as_a_building_block

派遣ソリューション •  派遣って •  外側の人だけど内側の人 •  社内での昇進とか関係無し

この特性を有利に使って問題を解決する!

•  体当たりコンサル •  内部の人だとできないことをしちゃう

o  ※技術的理由に非ず・・・

Page 13: Mongo db as_a_building_block

サービス仕様書が無い •  RFPまでの道のり

•  サービス要件 •  サービス仕様 •  サイジング、SLAなどなど •  機能構成図 •  インフラ概要 •  RFP作成

Page 14: Mongo db as_a_building_block

インフラがいない! •  アプリ開発者とか既存サービスの運用はいる •  システムとかインフラとか・・・・ •  無いならオレがやる •  300ポートのスイッチとか無いかしら? •  とりあえずサイジングとSLAか・・

•  信頼性工学、とっても役に立ちました •  統計・OR、とっても役に立ちました

Page 15: Mongo db as_a_building_block

Centimani設立 •  ヘカトンケイルというアプリを販売。1件のみ・・ •  その後、医療系Webサービス開発案件

o  顧客の要望でアジャイルのSI案件で受注 o  資本金10万円の会社が o  瞬間最大23人月のプロジェクト o  6ヶ月 o  アジャイルで

Page 16: Mongo db as_a_building_block

PHP  +  MongoDB •  前から気になっていたアーキテクチャプロトタイプを本命の対抗馬として提案

•  WebのUIと、機能のAPIに分離

Page 17: Mongo db as_a_building_block

そのココロは? •  画面の要求は常に変わる •  アジャイルやるにはプラットホームが必要 •  品質保証をどうするか?   •  性能性、可用性、拡張性

•  本命が通ったのでしばらく封印

•  プロジェクト中に東日本大震災

Page 18: Mongo db as_a_building_block

アイデアソン的イベント参加

•  ユーザーとNPCが一緒に暮らすSNS的サービス  生きているオブジェクトを常駐させる

•  オブジェクトの永続化とメッセージなどの格納にMongoDBを利用

Page 19: Mongo db as_a_building_block
Page 20: Mongo db as_a_building_block
Page 21: Mongo db as_a_building_block

生け簀 •  ライブオブジェクトを生け簀で飼う •  オブジェクトの永続化にMongoDBを利用

Page 22: Mongo db as_a_building_block

Hogeソン支援 •  チューニンガソン、ハッカソンの審判システム •  オブジェクトの永続化とスコアにMongoDBを利用

Page 23: Mongo db as_a_building_block

何故アーキテクチャか? •  振り返るとアーキテクチャ •  オブジェクト指向で示唆されるゲームの構造 •  自動修復と分散処理を同時に解決する構造 •  多様性のある表現を持つ簡易な言語の構造 •  データを共同で管理する構造 •  お仕事の仕方の構造 •  非機能要件のための構造 •  開発の仕方のための構造 •  Etc….

Page 24: Mongo db as_a_building_block

アーキテクチャが重要 •  アーキテクチャを明確に出来ると、使う部品や工法の議論、検討が出来る

•  だからアーキテクチャを見える化するお手伝いというお仕事をやっている

※対象は特に限定せず

Page 25: Mongo db as_a_building_block

MongoDB  as  a  building  block

•  MongoDBをシステムの建材とみると o  構造材:○

•  可用性を簡易に実現できるObjectの入れ物 •  サービスの構造をなすObjectをそのまま格納

o  接合剤:◎ •  サブシステム間の橋渡し •  一時的な保管場所

o  装飾:? •  使うとかっこいい・・・?

非常に使い出のある建材!

Page 26: Mongo db as_a_building_block

おまけ

Page 27: Mongo db as_a_building_block

MongoDB  +  REST  APIハッカソン

※第二回秋のもんご祭りにてハッカソンを実施しました

•  と、いうわけで実はアーキテクチャ理解のお題でした

•  優勝者へのプレゼントは o  1時間のアーキテクチャコンサルティング券を進呈!

•  本人希望価格は10万円! o  通常はオープン価格にて提供

Page 28: Mongo db as_a_building_block

競技内容 •  お題:ECサイト風API •  サーバー:一人一台用意しました(パスワードカード渡します)

•  MongoDB:yum でepelからインストール済み •  データ:商品データのみタブ区切り /tmp/sample.tsv

•  指定されたAPIをMongoDBに上記データを入れて実現してもらいます。各サーバーで80番ポート、httpにてREST APIとして実装です。使用言語は自由。

•  制限時間は約3時間

Page 29: Mongo db as_a_building_block

APIの仕様 ECサイト風API  ハックのお題商品データタブ区切り  /tmp/sample.tsvUTF-8、LF改行、フィールドは以下のとおり

<item_id>  TAB  <item_name>  TAB  <item_price>API仕様REST  APIの実装について仕様で指定したメソッド(今回はGETかPUT)でURLにリクエストが送られます。クエリパラメータは必要なケースでは付与されるので解釈するようにしてください。なおPUTではリクエストボディはapplication/x-www-form-urlencodedで送付されます。レスポンスはステータス200を直接返すようにしてください。3xxでの転送はチェックプログラム的にエラーと見なされます。レスポンスのボディはapplication/json、文字コードはUTF-8としてください。チェックプログラムはJSONとしてパースして内容をチェックします。1.商品一覧リクエスト  GET  /api/listItems

商品の一覧を返します。Limitはかけず、全エントリー返される前提です

リクエスト例  http://<your  GIP>/api/listItems

レスポンス例

[  {  "item_id"  :  "md00001",        "item_name"  :  "普通のもんごイカブラック",        "item_price"  :  692  },・・・その他データ・・・]2.商品表示リクエスト  GET  /api/showItem/<item_id>

特定の商品エントリを取り出します

リクエスト例  http://<your  GIP>/api/showItem/md00001

レスポンス例

{  "item_id"  :  "md00001",

   "item_name"  :  "普通のもんごイカブラック",    "item_price"  :  692  }

Page 30: Mongo db as_a_building_block

ハッカソンの結果 •  6名の方が参加くださいました! •  1位の人は13項目中12項目合格!

o  1問は仕様の勘違い

•  Railsやgoなどラピッドプロトタイプ向きの言語 •  MongoDBは初めてという方もいらしゃいました