View
443
Download
1
Category
Preview:
DESCRIPTION
このスライドは ・福崎がアーキテクトになっていった経緯 ・ITにおけるアーキテクチャの例 ・MongoDBを建材としてみると について発表した時のものを若干編集したものです。
Citation preview
MongoDB as a building block
アーキテクチャと私
何故アーキテクチャか? • はじまりの理由
o 父親がゼネコンの現場所長 o 幼少の遊びは木工 o 幼少の遊びはダイヤブロック&レゴブロック
アーキテクチャ(=構造)のセンスが磨かれた?
マイコン&パソコン • マイコンに初めて触ったのは小学一年生の時
o MZ-700 アルファベットを覚える前にBASICを触っていた
• MSX o 小学4年のお年玉でCASIOのMX-10 8kbメモリ MSX
• X68k o 高校2年のころX68000 SUPER HDを親に買わせる
なりたかった職業 • ラーメン屋(小学校低学年) • 天才科学者(中学卒業ごろまで?) • 映画かアニメの制作者(高校2年ごろまで) • 宇宙飛行士(高校3年) • 経営者(浪人時代) • 謎(大学時代) • リサイクルショップ経営者(博士後期課程満期中退時)
大学時代のバイト • マルチメディア制作会社でバイトしてはじめてパソコンが金になることに気づいた
• 大学の講義よりハマっていた・・・・
もしかしてSE? • Macromedia Directorで作成 • 半角全角混じりの適当な日本語ファイル名で作り散らかされたムービーファイル群
• 半角英数、固定長、体系的なファイル名 • 管理表 • 工程管理
はじめてのC++ • C++とJavaでオブジェクト指向と出会う • バラバラに敵キャラクタを動かせる! • 自機の玉が連射できる! • しかし・・時既に遅し・・研究用の実験システム作成 • 遠隔教育システムetc..
研究者として • 卒論
o 多数決による自動修復可能な分散演算システム • エヴァ○ン○リオンのアレ・・・
• 修論 o エンドユーザーによるプログラミングが可能な最小語彙セットによるシステム記述方法
• D論 o 無し・・・・
• 理化学研究所 o リサーチアソシエイトとしてウェット実験屋さんのための支援システム開発 o 高度好熱菌プロジェクト
研究者には向いていなかった・・・
1個目の会社 • Think & Win(=考えて勝つ) • ビジネスは普遍(色々無くても考えることは出来る!)
o ホームレスが o 空き缶を潰し o ビジネスになっていた! o @上野公園
これは重要な示唆ではないか?!
• しかし失敗 o 何を考えるべきか社員には見えなかった・・・
はじめてのSI案件 • NTTグループでのGridコンピューティング案件 • USAのソリューション導入! • DCに5ラックのシステム設置! • サーバー立ち上がってます!
• サービスは? • 運用は?
まぁ、勉強になりました
NTTグループでの開発 • ある大規模サービスの立ち上げにhelpで入ることに • Gridの経験があったので紹介された
• あんまり技能的には関係無かった・・・
派遣ソリューション • 派遣って • 外側の人だけど内側の人 • 社内での昇進とか関係無し
この特性を有利に使って問題を解決する!
• 体当たりコンサル • 内部の人だとできないことをしちゃう
o ※技術的理由に非ず・・・
サービス仕様書が無い • RFPまでの道のり
• サービス要件 • サービス仕様 • サイジング、SLAなどなど • 機能構成図 • インフラ概要 • RFP作成
インフラがいない! • アプリ開発者とか既存サービスの運用はいる • システムとかインフラとか・・・・ • 無いならオレがやる • 300ポートのスイッチとか無いかしら? • とりあえずサイジングとSLAか・・
• 信頼性工学、とっても役に立ちました • 統計・OR、とっても役に立ちました
Centimani設立 • ヘカトンケイルというアプリを販売。1件のみ・・ • その後、医療系Webサービス開発案件
o 顧客の要望でアジャイルのSI案件で受注 o 資本金10万円の会社が o 瞬間最大23人月のプロジェクト o 6ヶ月 o アジャイルで
PHP + MongoDB • 前から気になっていたアーキテクチャプロトタイプを本命の対抗馬として提案
• WebのUIと、機能のAPIに分離
そのココロは? • 画面の要求は常に変わる • アジャイルやるにはプラットホームが必要 • 品質保証をどうするか? • 性能性、可用性、拡張性
• 本命が通ったのでしばらく封印
• プロジェクト中に東日本大震災
アイデアソン的イベント参加
• ユーザーとNPCが一緒に暮らすSNS的サービス 生きているオブジェクトを常駐させる
• オブジェクトの永続化とメッセージなどの格納にMongoDBを利用
生け簀 • ライブオブジェクトを生け簀で飼う • オブジェクトの永続化にMongoDBを利用
Hogeソン支援 • チューニンガソン、ハッカソンの審判システム • オブジェクトの永続化とスコアにMongoDBを利用
何故アーキテクチャか? • 振り返るとアーキテクチャ • オブジェクト指向で示唆されるゲームの構造 • 自動修復と分散処理を同時に解決する構造 • 多様性のある表現を持つ簡易な言語の構造 • データを共同で管理する構造 • お仕事の仕方の構造 • 非機能要件のための構造 • 開発の仕方のための構造 • Etc….
アーキテクチャが重要 • アーキテクチャを明確に出来ると、使う部品や工法の議論、検討が出来る
• だからアーキテクチャを見える化するお手伝いというお仕事をやっている
※対象は特に限定せず
MongoDB as a building block
• MongoDBをシステムの建材とみると o 構造材:○
• 可用性を簡易に実現できるObjectの入れ物 • サービスの構造をなすObjectをそのまま格納
o 接合剤:◎ • サブシステム間の橋渡し • 一時的な保管場所
o 装飾:? • 使うとかっこいい・・・?
非常に使い出のある建材!
おまけ
MongoDB + REST APIハッカソン
※第二回秋のもんご祭りにてハッカソンを実施しました
• と、いうわけで実はアーキテクチャ理解のお題でした
• 優勝者へのプレゼントは o 1時間のアーキテクチャコンサルティング券を進呈!
• 本人希望価格は10万円! o 通常はオープン価格にて提供
競技内容 • お題:ECサイト風API • サーバー:一人一台用意しました(パスワードカード渡します)
• MongoDB:yum でepelからインストール済み • データ:商品データのみタブ区切り /tmp/sample.tsv
• 指定されたAPIをMongoDBに上記データを入れて実現してもらいます。各サーバーで80番ポート、httpにてREST APIとして実装です。使用言語は自由。
• 制限時間は約3時間
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 }
ハッカソンの結果 • 6名の方が参加くださいました! • 1位の人は13項目中12項目合格!
o 1問は仕様の勘違い
• Railsやgoなどラピッドプロトタイプ向きの言語 • MongoDBは初めてという方もいらしゃいました
Recommended