unhurried

コンピュータ関連ネタがほとんど、ときどき趣味も…

Developer Summit 2019 Summerまとめ

Developer Summit 2019 Summerで参加したセッション(一部)の概要をまとめた。

大規模レガシー環境に立ち向かう有機的な開発フォーメーション

https://www.slideshare.net/i2key/devsumi-152929762

リソース効率性(稼働率を重視)とフロー効率性(リリースの早さを重視)のいいとこ取りをしたい。

タウンワークでの事例

責務ごとにチームを分け、各チームごとに予算枠を決める。 → 現場裁量で業務を進めることができる。(マイクロサービスからアーキテクチャを除いたイメージ)

  • 商品開発チーム(求人情報機能開発)
  • グロースハックチーム(CVR向上、UI/UX改善)
    • フロー効率(開発サイクルの速さ)重視、アジャイル開発
  • 安定稼働チーム(障害対応/SRE)
    • 組織的ゆとりとして、普段は安定稼働のためのアーキテクチャを含めた改善を行う。
    • 障害発生時は全力で解決に当たる。

ヤフーのアプリにおける会社全体での業務効率化について

Yahoo! JAPANのネイティブアプリは50以上あり、サービスごとに開発チーム(エンジニア、デザイナ)が分かれている。チームの大きさや開発手法もそれぞれ異なるため、サイロ化が課題となっている。

この解決のために、CTO室アプリ統括部という全社横断チームを作った。

  • メンバーはサービス開発と兼務。
  • 黒帯(特定領域の第一任者)も参加し、相談しやすい環境を作る。
  • 開発はペアプロエリアで週4時間(2時間 x 2回)。
横断チームでの取り組み事例
  • 既存のアプリから機能を抜き出して共通ライブラリ化(ログイン処理や、アップデート機能など)
  • 新技術(OSの音声機能対応、機械学習など)の調査・サービスへの取り込み
  • 社内SDKOSS化(サービスの目標に直結しない活動にも取り組みやすい)

実践 Engineering Manager ~理想のエンジニアチームを目指して~

https://speakerdeck.com/_atsushisakai/practice-engineering-manager

家族アルバムサービス「みてね」のマネージャとしての思想と実践について

マネージャがストレスを抱えないようにしていること
  • 目標に対してひとつずつやっていく。
  • できない・わからないことはオープンにする。
  • せっかくなので充実したキャリアになるように意識を持つ。
  • …など
理想のチームとは
  • エンジニアがプロダクトに責任を持ち、ボトムアップで意見・提案を上げられる。
  • 様々な視点で振り返りを行い、失敗や意見の対立を受け入れて学習していける。
エンジニアリングマネージャの役割

エンジニアが働きにくい状況の防止・検知・除去。そのために以下を行っている。

  • 意見が対立したときの対処方法など、最低限のチーム運営ルールを作る。
  • アクション可能なチーム・個人の目標をディスカッションして作る。
  • 定期的な振り返りで成功・失敗を賞賛し、失敗は影響を最小化して改善につなげる。
チーム独自の学習・ボトムアップ文化
  • ユーザーストーリーマッピングを企画とエンジニアが一緒に実施し、要求や課題の理解を深める。
  • バックログの準備会議を行い、エンジニア目線での機能提案を行う。
  • リリース管理(QA進行管理や関連部門との調整など)を輪番制にして、開発工程の影響範囲を認識する。
  • エンジニアがリーダーになり、小さな改善・課題をプロジェクトとして解決する。

ソフトウェアアーキテクチャ組織力

https://speakerdeck.com/hirokidaichi/power-theory-of-software-architecture

アーキテクチャとは何かをしにくくする代わりに、何かをしやすくする構造

例)Web開発フレームワークは、Web開発以外をしにくくする代わりに、Web開発をしやすくする。

→ 社会をとりまく目に見えない力を生み出す構造 = アーキテクチャ

アーキテクチャを構成する様々なパースペクティブ
  • プロジェクト(マネジメント)
    • プロジェクトとプロダクトの依存関係は相似する。
    • ウォーターフォールでは設計フェーズで全てのシステム依存関係を定義するが、アジャイルでは漸進的に改善していく。
  • 組織構造
    • 組織とシステムは同じ構造に変化しやすい。(悪い組織構造 ⇔ 悪いシステム構造)
    • 技術的負債は組織がシステム構造を必要な速度で変える能力を失うこと。
  • ビジネス構造(モデル)
    • ミッション → 戦略 → アクションという目的・手段構造に合わせたシステム構造が望ましい。
    • ビジネスの変動に対してロバストになる。(アクションが変わったときは対応するシステム要素のみ変更すればよい。)

アリババW11を支えるインフラの技術

天猫(B2B向けのECサイト)が11月11日(W11)に開催する巨大セール 2018年の実績:取り扱い高 3.5兆円/日、商品発送 10億件

このセールに対応するために毎年インフラの改善を積み重ねてきた。

  • CDNキャパシティの予測精度向上
  • リソーススケジューラの開発(リソース管理の手順書が2000を超えてきていた)
  • 複数リージョンに跨ったリクエストの分散
  • オンライン処理とバッチ処理のリソース管理統合(リソース融通)
  • ストレージへのアクセスをTCPからRDMAに変更
  • …など

SI × Webの総合力で切り拓く新しいエンジニアのキャリアパス

(株式会社メドレー:オンライン診療アプリCLINICSなどを展開する)

従来はアプローチが異なっていたSI系とWeb系のエンジニアだが、X-Techの登場で両者のスキルの組み合わせが求められるようになってきている。

  • X-Techでは法規制・ガイドラインへの対応や関係省庁との調整が必要となる。
  • このため、Web系のテクニカルスキル(開発スピード、モダン技術)に加えて、SI系のビジネススキル(業務設計、調整)が求められる。
医療系システムでの大変なところ
  • 日本国内法の適用が及ぶ場所に設置する必要がある。
  • 医療機関に対して必須となるクライアント認証
  • レガシーな医療システム(病院内システム)との連携

クラウドネイティブ時代のマルチテナントアーキテクチャとデータ設計

(株式会社エイトレッドクラウドアプリ基盤ALTLED Work Platformを開発)

アーキテクチャ:AngularJS + Java (JAX-RS) + MongoDB / Elasticsearch / Redis

アーキテクチャ詳細(バックエンド)とマルチテナント対応方法
  • APサーバ:ECS(on EC2)
  • MongoDB
    • EC2上に構成(プライマリ1台、レプリカ2台)
    • テーブル名でテナント分離 → 今後はサーバー分離を入れていく
  • Elasticsearch
    • インデックス(RDBでのテーブル)でテナント分離
  • (参考)リクエストのテナント識別
    • セッションにテナントIDを入れている(できればドメインで識別できると楽)
パフォーマンス改善への取り組み
  • Cloud Watch Logs Insightsで現状把握して優先度付けを行う。
  • 処理が重いAPIのみ別のリソースに振り分けて、他の処理に影響を与えないようにする。
  • 予防としてユーザーごとの資源割り当てを決めておくことが大事。(後で変えにくい。)