システムアーキテクト

8,295 views

Published on

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

0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,295
On SlideShare
0
From Embeds
0
Number of Embeds
3,254
Actions
Shares
0
Downloads
14
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

システムアーキテクト

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

×