システムアーキテクト
DESCRIPTION
Hoge駆動で居酒屋で発表したプレゼンTRANSCRIPT
本日のお話
プロジェクト X
数億を超える社内きっての大規模プロジェクト
このプロジェクトにシステムアーキテクトとして参画しました!
ゎーィ♪ヽ(*´∀`)ノ
・ハード調達・OS、仮想環境構築・ネットワーク構築・ミドルウェア導入・アプリケーション開発
・要件定義から運用まで
まさにSI案件
可用性 99.99% 絶対に止まらないシステム
データ件数 2億件 ビックデータへの対応
連携装置 3万台 負荷に対応できるシステム
本日はこのプロジェクトでシスアーキとして心掛けた内容を中心にお話をしようと思います!
つまりですね
これは、高可用・大規模プロジェクトに挑んだ知られざるシステムアーキテクトの話である
主題歌「地上の星」中島 みゆき
一般的な中堅SIer
社内きっての大規模プロジェクト
可用性 99.99%
許される年間停止時間 53分未満
現行システムに性能遅延
連携装置
3万台
デー
タ件数
2億件以上!
移行時も
システム停止は
許されない!
インフルエンザの猛威!
次々倒れるチームメンバ(平均年齢35才)
新チーム結成
シスアーキの意地!
負荷テストでシステムダウン!
JSFでは厳しい迫られる決断
Play Frameworkで行く!
押し寄せる寝不足
ドラクエX
挑め!99.99%!~大規模プロジェクトに見る システムアーキテクトの思考~
presents by
すいませんお待たせしましたm(__)m
資料作成のほとんどはこれに費やされています
ちなみに
可用性 99.99%!データ件数 2億件!連携装置 3万台!
をどのように実現したのか
可用性 99.99%!データ件数 2億件!連携装置 3万台!
をどのように実現したのか
などの話はしません
話すのはシスアーキとして心掛けた内容ね
かっこいい話はできません
ごめんね
システムアーキテクトX
自己紹介自己紹介可用性
信頼性
★★☆
☆☆☆
性能 ★☆☆
嫁の手のひら
Twitter@s_kozake
「やられたらやりかえす!倍返しだ!」が最近のお気に入り
システムアーキテクトX
設計
基盤構築
開発
まとめ
AgendaAgenda
システムアーキテクトX
設計
基盤構築
開発
まとめ
AgendaAgenda
システムアーキテクトX
architecture designarchitecture design
方式設計の心得方式設計の心得
システムアーキテクトX
architecture designarchitecture design
『バランスの鍛錬はカラテだけでなく人生全てでものをいう 『バランスの鍛錬はカラテだけでなく人生全てでものをいう 調和の取れた人生なら・・・ 全てが上手くいく』 調和の取れた人生なら・・・ 全てが上手くいく』
映画『ベスト・キッド』 映画『ベスト・キッド』 『ミヤギ』の言葉より『ミヤギ』の言葉より
システムアーキテクトX
architecture designarchitecture design
セキュリティ
性能 可用性 発展性
運用
平行性
情報
機能性
パースペクティブパースペクティブ
ビュ ー
ビュ ー
方式設計のコツはバランス。方式設計のコツはバランス。方式設計は様々な観点(ビュー)方式設計は様々な観点(ビュー)でアーキテクチャを検証し、でアーキテクチャを検証し、取捨選択する必要がある。取捨選択する必要がある。
「何かを得れば、何かを失う」「何かを得れば、何かを失う」
全てを両立するのは難しい全てを両立するのは難しいと認識して挑む。と認識して挑む。
システムアーキテクトX
architecture designarchitecture design
全てのシステムに全てのシステムに99.99%99.99%の可用性を適用すると、の可用性を適用すると、コストおよび複雑性が増す。コストおよび複雑性が増す。システムシステムAAはは99.99%99.99%だが、システムだが、システムBBはは99%99%とする。とする。また、運用系サーバーにはまた、運用系サーバーには99.99%99.99%は適用しない。は適用しない。
プロジェクトプロジェクトXXの例の例
将来のトランザクション増加を想定し、将来のトランザクション増加を想定し、サーバーをスケールアウト可能な構成とする。サーバーをスケールアウト可能な構成とする。それにより、システム運用の複雑性は増加する。それにより、システム運用の複雑性は増加する。
システムアーキテクトX
architecture designarchitecture design
方式設計書作成方式設計書作成
システムアーキテクトX
architecture designarchitecture design
・・曖昧性を排除曖昧性を排除し、客観的かつし、客観的かつテスト可能テスト可能とすることとすること・・要件を管理要件を管理し、方式設計書の中でし、方式設計書の中で参照可能参照可能とすることとすること・要件には・要件には重要度を持たせ重要度を持たせ、取捨選択が必要な際の参考に出来ること、取捨選択が必要な際の参考に出来ること
非機能要件の整理非機能要件の整理
システムアーキテクトX
architecture designarchitecture design
非機能要件定義の例非機能要件定義の例番号 カテゴリ 要件 重要度
R-001 性能 装置からの通知を受けてから、1分以内に画面に表示されること
A
R-002 可用性 システムAの可用性は99.99%であること。また、1回の停止時間は10分以内であること
A
R-003 性能 1000件 / 1分の装置通知に対応できる性能を有すること
A
R-004 性能 簡易にスケールアウト可能なシステム構成とすること
B
:
システムアーキテクトX
architecture designarchitecture design
・図表を多用すること・図表を多用すること・色を有効活用すること・色を有効活用すること・方式設計の背景、検討した案、それを選んだ理由を書くこと・方式設計の背景、検討した案、それを選んだ理由を書くこと
方式設計書作成の指針方式設計書作成の指針
プログラムで表現出来ないこと書く。ドキュメントの特性を活かす!
・観点を・観点を11つに絞り記述するつに絞り記述する
複数の観点を詰め込みすぎない
システムアーキテクトX
architecture designarchitecture design
ダメな例ダメな例サーバーサーバーAA サーバーサーバーBB
App1App1 App2App2
MyBatis2.1MyBatis2.1 OracleOracle
Json on HTTPJson on HTTP
JDBCJDBC
電文 電文 on Socketon Socket
IFIF方式、コンポーネント配置、コンポーネントの依存と方式、コンポーネント配置、コンポーネントの依存と11つのモデル図つのモデル図に詰め込みすぎに詰め込みすぎ
システムアーキテクトX
architecture designarchitecture design
観点を分ける観点を分ける
サーバーサーバーAA
サーバーサーバーBB
App1App1
App2App2
App1App1 App2App2
OracleOracle
Json on HTTPJson on HTTP
JDBCJDBC
電文 電文 on Socketon Socket
App2App2 MyBatis2.1MyBatis2.1
配置モデル配置モデル 機能モデル機能モデル
コンポーネントモデルコンポーネントモデル
システムアーキテクトX
architecture designarchitecture design
変化への対応変化への対応(番外編)(番外編)
システムアーキテクトX
architecture designarchitecture design
・・S IS Iの新規案件は大規模が多く、要件定義~リリースまでの期間が長いの新規案件は大規模が多く、要件定義~リリースまでの期間が長い・開発途中での仕様変更は必然。変化に対応する必要がある・開発途中での仕様変更は必然。変化に対応する必要がある
変化への対応変化への対応
システムアーキテクトX
architecture designarchitecture design変化の流れと修正の影響度に着目変化の流れと修正の影響度に着目
変化の流れ変化の流れ
Business LogicBusiness LogicUIUI ModelModel
早い早い 遅い遅い
修正の影響度修正の影響度低い低い 高い高い
・・UIUIは時代の流行り、担当者の好みなどで代わりやすいは時代の流行り、担当者の好みなどで代わりやすい・モデルはビジネスの本質であり、変化の影響が少ない・モデルはビジネスの本質であり、変化の影響が少ない・・ModelModelの変更はの変更はBusiness LogicBusiness Logic、、UIUIすべてに影響を及ぼすすべてに影響を及ぼす
システムアーキテクトX
architecture designarchitecture design変化の流れと修正の影響度に着目変化の流れと修正の影響度に着目
Business LogicBusiness LogicUIUI ModelModel
・外部設計は両端から攻めるイメージ・外部設計は両端から攻めるイメージ・・UIUIはモックアップでみえる化し、早期に要件を捉える。はモックアップでみえる化し、早期に要件を捉える。・・ModelModel設計でシステムの本質を明確にする設計でシステムの本質を明確にする
システムアーキテクトX
architecture designarchitecture design変化の流れと修正の影響度に着目変化の流れと修正の影響度に着目
Business LogicBusiness LogicUIUI ModelModel
・詳細設計はビジネスロジックを深く詰める・詳細設計はビジネスロジックを深く詰める・・UIUIとモデル設計の論理矛盾を開発までになくすとモデル設計の論理矛盾を開発までになくす
システムアーキテクトX
architecture designarchitecture design
・変化の激しい・変化の激しいUIUIを早めにみえる化し、「こんなイメージじゃなかった」を早めにみえる化し、「こんなイメージじゃなかった」 を避ける を避ける・本質的なモデルを早期に詰め、後工程での修正影響度を減らす・本質的なモデルを早期に詰め、後工程での修正影響度を減らす・機能追加は修正影響度を考慮し、柔軟に対応する・機能追加は修正影響度を考慮し、柔軟に対応する
変化への対応(まとめ)変化への対応(まとめ)
システムアーキテクトX
設計
基盤構築
開発
まとめ
AgendaAgenda
システムアーキテクトX
architecture constractarchitecture constract
基盤構築基盤構築
Business LogicBusiness Logic
F/WF/W
LibraryLibrary
σ(σ(゚∀゚゚∀゚))オレオレオレオレ
システムアーキテクトX
architecture constractarchitecture constractフレームワークとはフレームワークとは
・フレームワークは型にはめて効率化するもの・フレームワークは型にはめて効率化するもの・フレームワークの強力さと適用範囲は反比例しやすい・フレームワークの強力さと適用範囲は反比例しやすい
システムアーキテクト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 →
システムアーキテクトX
architecture constractarchitecture constracthot spothot spotはは2 : 8 2 : 8 のバランスでのバランスで
frozen spotfrozen spot
hot spothot spot
業務ロジック業務ロジック
22割はフレームワーク対象外割はフレームワーク対象外と出来る設計を!と出来る設計を!
システムアーキテクトX
architecture constractarchitecture constracthot spothot spotの再利用についての再利用について
・基本考えない・基本考えない・コストがかかるし、設計が多伎に広がりすぎる・コストがかかるし、設計が多伎に広がりすぎる・往々にして再利用されない・往々にして再利用されない・再利用はそれが確実に行われる時のみ・再利用はそれが確実に行われる時のみ・結果、再利用可能なものが出来るのは・結果、再利用可能なものが出来るのはOKOK
システムアーキテクト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 エラー解析の為の詳細エラー解析の為の詳細
ログ設計がしっかりしていると、開発効率も上がります
システムアーキテクトX
architecture constractarchitecture constractError handlingError handling
・エラーハンドリングのルールは早期に明確にする・エラーハンドリングのルールは早期に明確にする・後工程での対応はコストが莫大・後工程での対応はコストが莫大
システムアーキテクトX
architecture constractarchitecture constractError handlingError handling
ThrowableThrowable
ExceptionException ErrorError
RuntimeExceptionRuntimeException
障害。障害。ログ出力&通知後ログ出力&通知後速やかにシステムを停止する。速やかにシステムを停止する。F/WF/W基盤で対処基盤で対処
システム不具合。システム不具合。プログラムで発生を防げるプログラムで発生を防げるログ出力&通知ログ出力&通知F/WF/W基盤で対処基盤で対処
外部要因によるエラー外部要因によるエラープログラムで発生を防げないプログラムで発生を防げないログ出力&通知ログ出力&通知業務ロジックで対処業務ロジックで対処
システムアーキテクトX
architecture constractarchitecture constractThreadThread
・スレッドは基盤で管理する・スレッドは基盤で管理する・スレッドには必ず名前をつける・スレッドには必ず名前をつける・業務ロジックによるスレッド生成は基本禁止・業務ロジックによるスレッド生成は基本禁止・・11プロセス内のスレッド数を把握し、適切にリソース管理するプロセス内のスレッド数を把握し、適切にリソース管理する
システムアーキテクトX
architecture constractarchitecture constractNullNull
・・JavaJavaでおなじみでおなじみNullPointerExceptionNullPointerException
・・NullNullの対処はモデルから、の対処はモデルから、 出来る限り、 出来る限り、DBDB項目に項目にNOT NULLNOT NULL制約を適用する制約を適用する・必ず全部未入力のテストを実施する・必ず全部未入力のテストを実施する
今後の検討課題MaybeとかNullオブジェクトとかアノーテーションとか
システムアーキテクトX
architecture constractarchitecture constractNamingNaming
・名前は統一されていることが重要・名前は統一されていることが重要・変数名の統一はモデルから・変数名の統一はモデルから・名前辞書を作って管理(但し・名前辞書を作って管理(但しExcelExcelだがな!)だがな!)
種別 type
電文 telegram
電文[短縮] tele
:
電文種別 電文[短縮] 種別 teleType
:
単語辞書単語辞書
文言辞書文言辞書
システムアーキテクトX
設計
基盤構築
開発
まとめ
AgendaAgenda
システムアーキテクトX
DevelopDevelop大規模への対処大規模への対処
・・S IS I案件の基本は大規模開発案件の基本は大規模開発・大規模という複雑性への対処が必要・大規模という複雑性への対処が必要・機械的な作業を極力排除する。・機械的な作業を極力排除する。 貴重なメンバ・時間のリソースを無駄にしない 貴重なメンバ・時間のリソースを無駄にしない
システムアーキテクトX
DevelopDevelop自動生成自動生成
・機械的に生成できるソースは手組みしない・機械的に生成できるソースは手組みしない・自動生成したソースは・自動生成したソースは絶対絶対にに手修正しない手修正しない 別ソースフォルダで管理する 別ソースフォルダで管理する・自動生成ソースはテスト対象外・自動生成ソースはテスト対象外
プロジェクトXでは100万Step以上のソースが自動生成
システムアーキテクトX
architecture designarchitecture designプロジェクトプロジェクトXXでやったことの一例でやったことの一例
テーブル仕様書テーブル仕様書 DDLDDL
OracleOracle
MyBatis GeneraterMyBatis Generater ++σ(σ(゚∀゚゚∀゚))オレオレオレオレPluginPlugin
アノーテーションプロセッサーアノーテーションプロセッサー
IFIF仕様書仕様書
システムアーキテクトX
DevelopDevelop自動生成(反省)自動生成(反省)
・正直、・正直、ExcelExcel依存は反省している依存は反省している・とはいえ、・とはいえ、ExcelExcel超便利超便利・・ExcelExcelののXMLXMLデータソースの機能でデータのみの抽出を検討中データソースの機能でデータのみの抽出を検討中
システムアーキテクトX
DevelopDevelop自動化自動化
システムアーキテクトX
architecture designarchitecture designプロジェクトプロジェクトXXでやったことでやったこと
IvyIvyリポジトリリポジトリ
ビルドサーバービルドサーバー
開発サーバー開発サーバーAA
開発サーバー開発サーバーAA
開発サーバー開発サーバーCC
Get DeployGet Deploy
Get DeployGet Deploy
Get DeployGet Deploy
Check InCheck In
ResolveResolve
システムアーキテクトX
DevelopDevelop自動化(結論)自動化(結論)
S Ie rS Ie rはこの方についていけば間違いないはこの方についていけば間違いない
システムアーキテクトX
設計
基盤構築
開発
まとめ
AgendaAgenda
本番移行は無事成功
リリース後、アプリケーション起因の大きなトラブルは発生していない
社内きっての大規模プロジェクトXは無事成功を収めた
「SIerは今こそ技術に取り組むべき なんですよ。 技術は根っこです。 ”根”が大事なんですよ。 人もシステムも」
s_kozakeはそう言い残すと、また次の仕事へ向かった。
2013/05/23 プロジェクトXの打ち上げ
日本料亭 河久にて