Your SlideShare is downloading. ×
0
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Yapc::Asia_2012
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Yapc::Asia_2012

1,155

Published on

YAPC::Asia_2012

YAPC::Asia_2012

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,155
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. YAPC::Asia 2012大きくなったシステムの疎結合化への取り組み masartz@mixi.inc
  • 2. 2 Self Introduction○ 星野 将(id:masartz)○ 株式会社ミクシィ○ 技術部たんぽぽGたんぽぽT ○ No More 「刺身の上にタンポポをのせる仕事」 - 単純作業の繰り返しで開発者の時間を浪費しないために Copyright (C) mixi, Inc. All rights reserved.
  • 3. 3 Agenda○ mixiサービスの歴史と現状○ 疎結合化のアーキテクチャ○ ライブラリ管理○ ガイドラインとテスト○ まとめ Copyright (C) mixi, Inc. All rights reserved.
  • 4. 4 mixiサービスの歴史と現状Copyright (C) mixi, Inc. All rights reserved.
  • 5. 5 mixi’s History○ サービス開始(2004年)から表も裏もperlであることは変わっていない○ あるときオープンソース化したことで、そこのライブラリは変更した○ 特徴 ○ ライブラリ・モジュール群が複雑に絡まりあっている ● 影響範囲が広いor読めない ● 開発効率が落ちる or 予期せぬ障害が発生する ○ レガシーな記述や歴代のコーディングスタイルが混在している ● メンテナンスコストも高い ● ack しまくり Copyright (C) mixi, Inc. All rights reserved.
  • 6. 6 mixi’s History○ しかし、、、それを一口に悪と言うだけでは良くない ○ 長く続いているサービスでは仕方ないこと ○ たくさんの開発者がいるサービスでは避けられないこと○ 皆様にも共感いただける内容になっているのではないかと思います Copyright (C) mixi, Inc. All rights reserved.
  • 7. 7 疎結合のアーキテクチャCopyright (C) mixi, Inc. All rights reserved.
  • 8. 8 Architecture of loose coupling○ Service Procedure○ Web+DB vol.62 に掲載○ モジュール間を仲介するための疑似的なRPC○ 直接useすることで生じる依存関係を解決する ○ ×:Mixi::Diary -> Mixi::User::get_profile ○ ○:Mixi::Diary => Mixi::ServiceProcedure::call(‘user.profile.get’) => Mixi::User::Adapter::Profile -> Mixi::User::get_profile○ 横断的なインターフェースの一覧がYAMLで管理される --- methods: getEntryBody : Mixi::Voive::Adapter::Entry inertComment : Mixi::Voice::Adapter::Comment○ 内部実装の変更をProcedureで吸収or確認することができる Copyright (C) mixi, Inc. All rights reserved.
  • 9. 9 Architecture of loose coupling○ 各レベルのAPI一覧○ InternalAPI ( 別の名前空間向け)○ CoreInternalAPI ( 内部切り出しのサービス向け) ←今回の話はコレ○ InternalGraphAPI ( 公式アプリなど向け)○ GraphAPI ( SAPなど向け) Copyright (C) mixi, Inc. All rights reserved.
  • 10. 10 CoreInternal API○ mixiのサービスは1つのリポジトリによって運用されている○ メリット ○ 既存資産 ○ 開発ノウハウ○ デメリット ○ リポジトリの肥大化 ○ 影響範囲の拡大 ○ 新しいトライへの障壁○ このデメリットの部分に対する一つの解として、 必要な情報のみをAPIとして提供するための機構がCoreInternal Copyright (C) mixi, Inc. All rights reserved.
  • 11. 11 CoreInternal API○ ミニマムなサービスを手軽に構築することを目的とする wwwサーバー、DBサーバー、memcacheなどのリソースも専用化する○ APIサーバーはhttp通信 ○ 現時点では生のPlackサーバー○ リクエスト/レスポンス ○ JSONRPC Copyright (C) mixi, Inc. All rights reserved.
  • 12. 12 CoreInternal API○ 導入実績 ○ 社内用ベータサービスなどで実験導入中 ○ 既存システムに混じっていた小規模サービスの切り出し(途中)○ 課題 ○ リソースの専用化と資源配分 ○ 負荷面のパフォーマンス計測 ○ 既存資産が活用できない○ 使いどころ ○ 新規サービスをミニマムで構築する場合 ○ 言語や環境の縛りを超える場合 Copyright (C) mixi, Inc. All rights reserved.
  • 13. 13 Once the break○ ここまでで半分ちょっと Copyright (C) mixi, Inc. All rights reserved.
  • 14. 14 ライブラリ管理Copyright (C) mixi, Inc. All rights reserved.
  • 15. 15 Library Maintenance○ Inspect Package ○ http://alpha.mixi.co.jp/2011/10767/○ 名前空間ごとの技術的負債のスコアを算出する ○ 結合度、複雑度etc○ 導入された以降、いくつかの改善対応が行われる ○ Service Procedureを用いたリファクタリングetc○ 究極的なゴールは結合度・複雑度がゼロになること○ その始点として現在の数値がいくつなのかを「見える化」するツール Copyright (C) mixi, Inc. All rights reserved.
  • 16. 16 Library Maintenance○ 対応が進むと、経過差分が見たくなる○ 社内wikiではいくつかのチームがコマンド実行->結果貼り付けをルーチン化○ そういう作業を自動化するのがたんぽぽの業務 ○ 過去に遡った履歴の取得 ○ 取り組んだチーム管轄以外も含めて全ての名前空間分を収集○ 時間軸:過程も含めた「見える化」を行える○ モジュール間の横軸:全社的な状況把握と対応の優先度づけを行える Copyright (C) mixi, Inc. All rights reserved.
  • 17. 17 ガイドラインとテストCopyright (C) mixi, Inc. All rights reserved.
  • 18. 18 Guideline and Test○ コードレビュー業務とコーディングガイドライン ○ http://alpha.mixi.co.jp/2012/10870/○ コードレビューによって、一定の安定度・統一性が保たれてきた○ しかし最近は、中央集権的だったコードレビューの一部 (特定名前空間のみ対象)を各チーム内に権限移譲 ○ 組織:小さな組織で小さなサイクルを回すため ○ コード:疎結合化により、コード修正の影響範囲の局所化が進んでいるため○ 通常レビュー、チーム内レビュー問わず同様の品質を保つ必要がある○ →ガイドラインを整理する/ガイドラインに沿ったレビューをする○ ー→ガイドラインを厳守するためのテストを書いて自動化する = 品質担保をできる限り自動化する Copyright (C) mixi, Inc. All rights reserved.
  • 19. 19 Guideline and Test○ 自動化できるガイドライン項目を洗い出す○ 内容に沿ったテスト内容を書く ○ 現状では正規表現系が主○ リポジトリの主要ディレクトリ配下全てを再帰的に対象とする○ 既存のモジュールでテストが落ちるものをブラックリスト化する○ 上記内容を設定ファイルっぽくしたファイルを作っていく <モジュール> <設定ファイル> Copyright (C) mixi, Inc. All rights reserved.
  • 20. 20 Guideline and Test○ 設定ファイルっぽいテスト項目ファイル群をまとめてテスト実行○ テスト項目(の一部) ○ @EXPORTの使用 ○ requireの使用 ○ 非推奨モジュールの使用 ○ ループ用途でのmap,grep使用 ○ etc…○ 中には140個程度のpmがブラックリストに列挙されたものもある○ 大事なのは、既存に引っ張られずに、悪さに歯止めをかけること ○ 新しいものをダメにしない ○ ダメなものを洗い出して、直していく ○ 「いつか良くなるだろう」は甘え Copyright (C) mixi, Inc. All rights reserved.
  • 21. 21 まとめCopyright (C) mixi, Inc. All rights reserved.
  • 22. 22 Conclusion○ システムが長く運用される上で、肥大化・複雑化することは仕方ない○ 「リーダブルコード」の『ネストを浅くする』の項 ○ 例えば1日1回if文を追加する ○ 例えば1日1回モジュールをuseする○ →普段何気なく行っていることの結果起きること Copyright (C) mixi, Inc. All rights reserved.
  • 23. 23 Conclusion○ あるべき姿に向けてどういうアプローチをとっていくか ○ 道筋となる土台を作る ● SeviceProcedureモジュール、CoreInternalAPIサーバー ○ ゴールまでの距離を計測する ● Inspect Packageツール/ビジュアライザ ○ 今以上に悪くならないよう歯止めをかける ● ガイドラインテストツール○ 最終的にはエンジニアの手によって計画的に改善していく Copyright (C) mixi, Inc. All rights reserved.
  • 24. 24 Thanks○ ご清聴ありがとうございました Copyright (C) mixi, Inc. All rights reserved.
  • 25. 25Copyright (C) mixi, Inc. All rights reserved.

×