• このエントリーをはてなブックマークに追加

スポンサードリンク

はじめに

内容について

全 10week 中,

  • 7week は C. Jules White さんのはなし.
  • 3week は Douglas C. Schmidt さんのはなし.

タイトルで Android と書いてあるにも関わらず, なんと Android の実装は出てこなかった.

ウェブアプリケーション技術を徹底解説

前半は, Jules さんの講義.Java の Spring フレームワークを例に, Web アプリケーション技術を網羅的に解説されるという,かなり実践的な内容.

Spring Framework

Spring フレームワークは, Java で Web アプリケーションを開発するさいの デファクトスタンダードだ.

幅広い Web 知識

HTTP Protocol, サーブレット, セッションとクッキー, セキュリティと認証などなど, 幅広い知識が解説される.

自分は, 以下の本を副読本として読んでいた.

Assignments

Assignments は 2 つ.

1 つは, Spring を利用して mp3 をアップロードする Web サービスを作成す る. HTTP GET, POST をどのようにしてプログラミングするのかを理解で きた. Spring の Annotation が便利過ぎてビックリする.

もう 1 つは, OAuth 2.0 による認証の実装. これは一度理解したけど,忘れてしまったな…. orz.

ウェブアプリケーションのアーキテクチャを徹底解説

後半は, Doug 氏による, Pattern Oriented Software Archtecture のお話.

C++ のネットワーク/Web アプリケーション用フレームワークである ACE を利 用しつつ, POSA2 の全パターンを次から次へと解説していく.

POSA2 については, 講義についていくために Kindle で購入.

また, ネットワークアーキテクチャの副読本として, 以下の本も読んだ.

Assignments

POSA2 で解説される, 以下のパターンを実装する課題.

  • Wrapper Facade
  • Reactor
  • Acceptor-Connector
  • Half-Sync/Half-Async

Java の Network 用フレームワーク, Netty を利用して実装した.

感想について

HTTP Protocol の仕組みを理解できた

HTTP Protocol を理解できたことは有益だった.

ブラウザを利用してネットを閲覧するという, 毎日当たり前のようにやっていることの裏側について, 自分は今まで理解していなかったのだ.

オブジェクトストレージのアーキを理解できた

また, ストレージ業界に身をおく自分としては, オブジェクトストレージのアーキテクチャを垣間見たことは有益だった. 今までは, 本や WEB で知識を読んでもどうもピンとこなかった. コードから 学ぶことで,構造や機能が頭に思い浮かべられるようになった.

ネットワークアーキテクチャについて学べた

今仕事では, CIFS プロトコルを利用して ミドルウェアのアプリケーションを作成しようとしてる. ネットワークの知識がまるでない自分にとって, ネットワークの知識ことは差し迫った急務だった.

そんな自分にとって, HTTP Protocol の仕組みや Archtectore Pattern を学ぶ機会は, 絶好のタイミングだった. ソケットプログラミングのアーキテクチャパターンなどは, すぐにでも仕事に応用できそうな知識だ.

その一方で, POSA2 については消化不良も否めない. 折に触れて, 再度復習しなければと思う.

学習メモ

最後に, POSA2 の主要パターンについて書いて終わりにしようと思う. POSA2 の本によると, まずは以下の最重要パターン 4 つを身につけようとのこと.

Acceptor-Connector Pattern

通信の初期化処理と実際の処理を分離することで, 構造を整理するパターン.

Reactor Pattern において, Handler と Reactor の仲介を行う. Handler に Dispatch する前に, 一連の手続きが必要な場合には,

  • Acceptor が Handler に対して手続きを実施してから (Accept)
  • Reactor から Handler への Dispatch をさせる (Connect)

Acceptor がサーバ側の仲介者, Connector がクライアント側の仲介者.

クラス図的には,EventHandler のサブクラスに Handler や Acceptor, Connector がいる.

EventHandler

  • CifsAcceptor
    • negotiate
    • session
  • CifsHandler
    • read
    • write
  • CifsConnector
    • negotiate
    • session

Active Object Pattern

メソッドの呼び出しとメソッドの実際の実行を分離することで並行性を導入する. 各オブジェクトは利用者からの要求を管理するための メッセージキューとスケジューラを持つ.

外部の Client スレッドから非同期にメッセージを受け取っても, 自分固有の Active Object スレッドで, 自分の都合のいいタイミングで処理を実行させたい場合に利用する.

起動 (invocation) と実行 (execution) の分離.

 Active Object defines units of concurrency as service requests
 on components & runs service requests on a component in a different
 thread from the requesting client thread.

他のパターンとの関係

  • Acceptor-Connector / Reactor

Acceptor-Connector Pattern における Handler 部分をスレッド化すればよい. (i.e. Thread per connection) Reactor の Minor Change で実現できる.

  • Half-Sync/Half-Async Active Object はスレッド/ スレッドを分離する. Half-Sync/Half-Async は, 非同期プロセスと同期プロセスを分離する.