システムアーキテクト

74
本日のお話

Upload: shinichi-kozake

Post on 24-May-2015

3.808 views

Category:

Documents


0 download

DESCRIPTION

Hoge駆動で居酒屋で発表したプレゼン

TRANSCRIPT

Page 1: システムアーキテクト

本日のお話

Page 2: システムアーキテクト

プロジェクト X

Page 3: システムアーキテクト

数億を超える社内きっての大規模プロジェクト

Page 4: システムアーキテクト

このプロジェクトにシステムアーキテクトとして参画しました!

ゎーィ♪ヽ(*´∀`)ノ

Page 5: システムアーキテクト

・ハード調達・OS、仮想環境構築・ネットワーク構築・ミドルウェア導入・アプリケーション開発

・要件定義から運用まで

まさにSI案件

Page 6: システムアーキテクト

可用性 99.99% 絶対に止まらないシステム

データ件数 2億件 ビックデータへの対応

連携装置 3万台 負荷に対応できるシステム

Page 7: システムアーキテクト

本日はこのプロジェクトでシスアーキとして心掛けた内容を中心にお話をしようと思います!

Page 8: システムアーキテクト

つまりですね

Page 9: システムアーキテクト

これは、高可用・大規模プロジェクトに挑んだ知られざるシステムアーキテクトの話である

Page 10: システムアーキテクト
Page 11: システムアーキテクト

主題歌「地上の星」中島 みゆき

Page 12: システムアーキテクト

一般的な中堅SIer

社内きっての大規模プロジェクト

Page 13: システムアーキテクト

可用性 99.99%

許される年間停止時間 53分未満

Page 14: システムアーキテクト

現行システムに性能遅延

連携装置

3万台

Page 15: システムアーキテクト

デー

タ件数

  2億件以上!

移行時も

システム停止は

許されない!

Page 16: システムアーキテクト

インフルエンザの猛威!

次々倒れるチームメンバ(平均年齢35才)

新チーム結成

Page 17: システムアーキテクト

シスアーキの意地!

負荷テストでシステムダウン!

Page 18: システムアーキテクト

JSFでは厳しい迫られる決断

Play Frameworkで行く!

Page 19: システムアーキテクト

押し寄せる寝不足

ドラクエX

Page 20: システムアーキテクト

挑め!99.99%!~大規模プロジェクトに見る システムアーキテクトの思考~

presents by

Page 21: システムアーキテクト

すいませんお待たせしましたm(__)m

Page 22: システムアーキテクト

資料作成のほとんどはこれに費やされています

Page 23: システムアーキテクト

ちなみに

Page 24: システムアーキテクト

可用性 99.99%!データ件数 2億件!連携装置 3万台!

をどのように実現したのか

Page 25: システムアーキテクト

可用性 99.99%!データ件数 2億件!連携装置 3万台!

をどのように実現したのか

などの話はしません

Page 26: システムアーキテクト

話すのはシスアーキとして心掛けた内容ね

Page 27: システムアーキテクト

かっこいい話はできません

Page 28: システムアーキテクト

ごめんね

Page 29: システムアーキテクト

システムアーキテクトX

自己紹介自己紹介可用性

信頼性

★★☆

☆☆☆

性能 ★☆☆

嫁の手のひら

Twitter@s_kozake

「やられたらやりかえす!倍返しだ!」が最近のお気に入り

Page 30: システムアーキテクト

システムアーキテクトX

設計

基盤構築

開発

まとめ

AgendaAgenda

Page 31: システムアーキテクト

システムアーキテクトX

設計

基盤構築

開発

まとめ

AgendaAgenda

Page 32: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

方式設計の心得方式設計の心得

Page 33: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

『バランスの鍛錬はカラテだけでなく人生全てでものをいう 『バランスの鍛錬はカラテだけでなく人生全てでものをいう  調和の取れた人生なら・・・ 全てが上手くいく』 調和の取れた人生なら・・・ 全てが上手くいく』

 映画『ベスト・キッド』  映画『ベスト・キッド』 『ミヤギ』の言葉より『ミヤギ』の言葉より

Page 34: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

セキュリティ

性能 可用性 発展性

運用

平行性

情報

機能性

パースペクティブパースペクティブ

ビュ ー

ビュ ー

方式設計のコツはバランス。方式設計のコツはバランス。方式設計は様々な観点(ビュー)方式設計は様々な観点(ビュー)でアーキテクチャを検証し、でアーキテクチャを検証し、取捨選択する必要がある。取捨選択する必要がある。

「何かを得れば、何かを失う」「何かを得れば、何かを失う」

全てを両立するのは難しい全てを両立するのは難しいと認識して挑む。と認識して挑む。

Page 35: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

全てのシステムに全てのシステムに99.99%99.99%の可用性を適用すると、の可用性を適用すると、コストおよび複雑性が増す。コストおよび複雑性が増す。システムシステムAAはは99.99%99.99%だが、システムだが、システムBBはは99%99%とする。とする。また、運用系サーバーにはまた、運用系サーバーには99.99%99.99%は適用しない。は適用しない。

プロジェクトプロジェクトXXの例の例

将来のトランザクション増加を想定し、将来のトランザクション増加を想定し、サーバーをスケールアウト可能な構成とする。サーバーをスケールアウト可能な構成とする。それにより、システム運用の複雑性は増加する。それにより、システム運用の複雑性は増加する。

Page 36: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

方式設計書作成方式設計書作成

Page 37: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

・・曖昧性を排除曖昧性を排除し、客観的かつし、客観的かつテスト可能テスト可能とすることとすること・・要件を管理要件を管理し、方式設計書の中でし、方式設計書の中で参照可能参照可能とすることとすること・要件には・要件には重要度を持たせ重要度を持たせ、取捨選択が必要な際の参考に出来ること、取捨選択が必要な際の参考に出来ること

非機能要件の整理非機能要件の整理

Page 38: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

非機能要件定義の例非機能要件定義の例番号 カテゴリ 要件 重要度

R-001 性能 装置からの通知を受けてから、1分以内に画面に表示されること

A

R-002 可用性 システムAの可用性は99.99%であること。また、1回の停止時間は10分以内であること

A

R-003 性能 1000件 / 1分の装置通知に対応できる性能を有すること

A

R-004 性能 簡易にスケールアウト可能なシステム構成とすること

B

:

Page 39: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

・図表を多用すること・図表を多用すること・色を有効活用すること・色を有効活用すること・方式設計の背景、検討した案、それを選んだ理由を書くこと・方式設計の背景、検討した案、それを選んだ理由を書くこと

方式設計書作成の指針方式設計書作成の指針

プログラムで表現出来ないこと書く。ドキュメントの特性を活かす!

・観点を・観点を11つに絞り記述するつに絞り記述する

複数の観点を詰め込みすぎない

Page 40: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

ダメな例ダメな例サーバーサーバーAA サーバーサーバーBB

App1App1 App2App2

MyBatis2.1MyBatis2.1 OracleOracle

Json on HTTPJson on HTTP

JDBCJDBC

電文 電文 on Socketon Socket

IFIF方式、コンポーネント配置、コンポーネントの依存と方式、コンポーネント配置、コンポーネントの依存と11つのモデル図つのモデル図に詰め込みすぎに詰め込みすぎ

Page 41: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

観点を分ける観点を分ける

サーバーサーバーAA

サーバーサーバーBB

App1App1

App2App2

App1App1 App2App2

OracleOracle

Json on HTTPJson on HTTP

JDBCJDBC

電文 電文 on Socketon Socket

App2App2 MyBatis2.1MyBatis2.1

配置モデル配置モデル 機能モデル機能モデル

コンポーネントモデルコンポーネントモデル

Page 42: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

変化への対応変化への対応(番外編)(番外編)

Page 43: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

・・S IS Iの新規案件は大規模が多く、要件定義~リリースまでの期間が長いの新規案件は大規模が多く、要件定義~リリースまでの期間が長い・開発途中での仕様変更は必然。変化に対応する必要がある・開発途中での仕様変更は必然。変化に対応する必要がある

変化への対応変化への対応

Page 44: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design変化の流れと修正の影響度に着目変化の流れと修正の影響度に着目

変化の流れ変化の流れ

Business LogicBusiness LogicUIUI ModelModel

早い早い 遅い遅い

修正の影響度修正の影響度低い低い 高い高い

・・UIUIは時代の流行り、担当者の好みなどで代わりやすいは時代の流行り、担当者の好みなどで代わりやすい・モデルはビジネスの本質であり、変化の影響が少ない・モデルはビジネスの本質であり、変化の影響が少ない・・ModelModelの変更はの変更はBusiness LogicBusiness Logic、、UIUIすべてに影響を及ぼすすべてに影響を及ぼす

Page 45: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design変化の流れと修正の影響度に着目変化の流れと修正の影響度に着目

Business LogicBusiness LogicUIUI ModelModel

・外部設計は両端から攻めるイメージ・外部設計は両端から攻めるイメージ・・UIUIはモックアップでみえる化し、早期に要件を捉える。はモックアップでみえる化し、早期に要件を捉える。・・ModelModel設計でシステムの本質を明確にする設計でシステムの本質を明確にする

Page 46: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design変化の流れと修正の影響度に着目変化の流れと修正の影響度に着目

Business LogicBusiness LogicUIUI ModelModel

・詳細設計はビジネスロジックを深く詰める・詳細設計はビジネスロジックを深く詰める・・UIUIとモデル設計の論理矛盾を開発までになくすとモデル設計の論理矛盾を開発までになくす

Page 47: システムアーキテクト

システムアーキテクトX

architecture designarchitecture design

・変化の激しい・変化の激しいUIUIを早めにみえる化し、「こんなイメージじゃなかった」を早めにみえる化し、「こんなイメージじゃなかった」 を避ける を避ける・本質的なモデルを早期に詰め、後工程での修正影響度を減らす・本質的なモデルを早期に詰め、後工程での修正影響度を減らす・機能追加は修正影響度を考慮し、柔軟に対応する・機能追加は修正影響度を考慮し、柔軟に対応する

変化への対応(まとめ)変化への対応(まとめ)

Page 48: システムアーキテクト

システムアーキテクトX

設計

基盤構築

開発

まとめ

AgendaAgenda

Page 49: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constract

基盤構築基盤構築

Business LogicBusiness Logic

F/WF/W

LibraryLibrary

σ(σ(゚∀゚゚∀゚))オレオレオレオレ

Page 50: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constractフレームワークとはフレームワークとは

・フレームワークは型にはめて効率化するもの・フレームワークは型にはめて効率化するもの・フレームワークの強力さと適用範囲は反比例しやすい・フレームワークの強力さと適用範囲は反比例しやすい

Page 51: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constractfrozen spot & hot spotfrozen spot & hot spot

frozen spot(Struts, Seasar2, Spring, etc)frozen spot(Struts, Seasar2, Spring, etc)

hot spot(hot spot(業務フレームワーク)業務フレームワーク)

業務ロジック業務ロジック

・・frozen spotfrozen spotは基盤となるは基盤となるF/WF/W

・・hot spothot spotははfrozen spotfrozen spotと業務ロジックの隙間を埋めると業務ロジックの隙間を埋める

業務特性に応じた業務特性に応じたF/W →F/W →

Page 52: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constracthot spothot spotはは2 : 8 2 : 8 のバランスでのバランスで

frozen spotfrozen spot

hot spothot spot

業務ロジック業務ロジック

22割はフレームワーク対象外割はフレームワーク対象外と出来る設計を!と出来る設計を!

Page 53: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constracthot spothot spotの再利用についての再利用について

・基本考えない・基本考えない・コストがかかるし、設計が多伎に広がりすぎる・コストがかかるし、設計が多伎に広がりすぎる・往々にして再利用されない・往々にして再利用されない・再利用はそれが確実に行われる時のみ・再利用はそれが確実に行われる時のみ・結果、再利用可能なものが出来るのは・結果、再利用可能なものが出来るのはOKOK

Page 54: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constractLoggingLogging

・ログはシステムのメッセージ。メッセージとして管理する・ログはシステムのメッセージ。メッセージとして管理する・システム運用でログが出た時を想定したメッセージを・システム運用でログが出た時を想定したメッセージを (悪い例) (悪い例)DBDBエラー発生エラー発生 (いい例) (いい例)MSG-998, DBMSG-998, DBエラー発生。 エラー発生。 SQLCODE=[XX] , SQLCODE=[XX] , メッセージメッセージ=[=[ ~~]]

・エラーログはエスカレーション通知の仕組みとセットで・エラーログはエスカレーション通知の仕組みとセットで・メッセージは・メッセージは5W1H5W1H  - When - When 日時日時  - Where - Where どのクラスでどのクラスで  - Who - Who どのスレッドが・ユーザーがどのスレッドが・ユーザーが  - What - What 何の処理で何の処理で  - How - How どのようなエラーが発生したかどのようなエラーが発生したか  - Why - Why エラー解析の為の詳細エラー解析の為の詳細

ログ設計がしっかりしていると、開発効率も上がります

Page 55: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constractError handlingError handling

・エラーハンドリングのルールは早期に明確にする・エラーハンドリングのルールは早期に明確にする・後工程での対応はコストが莫大・後工程での対応はコストが莫大

Page 56: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constractError handlingError handling

ThrowableThrowable

ExceptionException ErrorError

RuntimeExceptionRuntimeException

障害。障害。ログ出力&通知後ログ出力&通知後速やかにシステムを停止する。速やかにシステムを停止する。F/WF/W基盤で対処基盤で対処

システム不具合。システム不具合。プログラムで発生を防げるプログラムで発生を防げるログ出力&通知ログ出力&通知F/WF/W基盤で対処基盤で対処

外部要因によるエラー外部要因によるエラープログラムで発生を防げないプログラムで発生を防げないログ出力&通知ログ出力&通知業務ロジックで対処業務ロジックで対処

Page 57: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constractThreadThread

・スレッドは基盤で管理する・スレッドは基盤で管理する・スレッドには必ず名前をつける・スレッドには必ず名前をつける・業務ロジックによるスレッド生成は基本禁止・業務ロジックによるスレッド生成は基本禁止・・11プロセス内のスレッド数を把握し、適切にリソース管理するプロセス内のスレッド数を把握し、適切にリソース管理する

Page 58: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constractNullNull

・・JavaJavaでおなじみでおなじみNullPointerExceptionNullPointerException

・・NullNullの対処はモデルから、の対処はモデルから、 出来る限り、 出来る限り、DBDB項目に項目にNOT NULLNOT NULL制約を適用する制約を適用する・必ず全部未入力のテストを実施する・必ず全部未入力のテストを実施する

今後の検討課題MaybeとかNullオブジェクトとかアノーテーションとか

Page 59: システムアーキテクト

システムアーキテクトX

architecture constractarchitecture constractNamingNaming

・名前は統一されていることが重要・名前は統一されていることが重要・変数名の統一はモデルから・変数名の統一はモデルから・名前辞書を作って管理(但し・名前辞書を作って管理(但しExcelExcelだがな!)だがな!)

種別 type

電文 telegram

電文[短縮] tele

:

電文種別 電文[短縮] 種別 teleType

:

単語辞書単語辞書

文言辞書文言辞書

Page 60: システムアーキテクト

システムアーキテクトX

設計

基盤構築

開発

まとめ

AgendaAgenda

Page 61: システムアーキテクト

システムアーキテクトX

DevelopDevelop大規模への対処大規模への対処

・・S IS I案件の基本は大規模開発案件の基本は大規模開発・大規模という複雑性への対処が必要・大規模という複雑性への対処が必要・機械的な作業を極力排除する。・機械的な作業を極力排除する。 貴重なメンバ・時間のリソースを無駄にしない 貴重なメンバ・時間のリソースを無駄にしない

Page 62: システムアーキテクト

システムアーキテクトX

DevelopDevelop自動生成自動生成

・機械的に生成できるソースは手組みしない・機械的に生成できるソースは手組みしない・自動生成したソースは・自動生成したソースは絶対絶対にに手修正しない手修正しない 別ソースフォルダで管理する 別ソースフォルダで管理する・自動生成ソースはテスト対象外・自動生成ソースはテスト対象外

プロジェクトXでは100万Step以上のソースが自動生成

Page 63: システムアーキテクト

システムアーキテクトX

architecture designarchitecture designプロジェクトプロジェクトXXでやったことの一例でやったことの一例

テーブル仕様書テーブル仕様書 DDLDDL

OracleOracle

MyBatis GeneraterMyBatis Generater ++σ(σ(゚∀゚゚∀゚))オレオレオレオレPluginPlugin

アノーテーションプロセッサーアノーテーションプロセッサー

IFIF仕様書仕様書

Page 64: システムアーキテクト

システムアーキテクトX

DevelopDevelop自動生成(反省)自動生成(反省)

・正直、・正直、ExcelExcel依存は反省している依存は反省している・とはいえ、・とはいえ、ExcelExcel超便利超便利・・ExcelExcelののXMLXMLデータソースの機能でデータのみの抽出を検討中データソースの機能でデータのみの抽出を検討中

Page 65: システムアーキテクト

システムアーキテクトX

DevelopDevelop自動化自動化

Page 66: システムアーキテクト

システムアーキテクトX

architecture designarchitecture designプロジェクトプロジェクトXXでやったことでやったこと

IvyIvyリポジトリリポジトリ

ビルドサーバービルドサーバー

開発サーバー開発サーバーAA

開発サーバー開発サーバーAA

開発サーバー開発サーバーCC

Get DeployGet Deploy

Get DeployGet Deploy

Get DeployGet Deploy

Check InCheck In

ResolveResolve

Page 67: システムアーキテクト

システムアーキテクトX

DevelopDevelop自動化(結論)自動化(結論)

S Ie rS Ie rはこの方についていけば間違いないはこの方についていけば間違いない

Page 68: システムアーキテクト

システムアーキテクトX

設計

基盤構築

開発

まとめ

AgendaAgenda

Page 69: システムアーキテクト
Page 70: システムアーキテクト
Page 71: システムアーキテクト
Page 72: システムアーキテクト

本番移行は無事成功

リリース後、アプリケーション起因の大きなトラブルは発生していない

社内きっての大規模プロジェクトXは無事成功を収めた

Page 73: システムアーキテクト

「SIerは今こそ技術に取り組むべき なんですよ。 技術は根っこです。 ”根”が大事なんですよ。 人もシステムも」

s_kozakeはそう言い残すと、また次の仕事へ向かった。

Page 74: システムアーキテクト

2013/05/23 プロジェクトXの打ち上げ

日本料亭 河久にて