Report to Spring Developer from CyberAgent #jsug_sis

はじめに

訳あって前半部分だけ記載しています。

自己紹介

  • 池田裕介(@yukung)
  • スマートフォンプラットフォームのAPI設計や運用を担当

  • CyberAgent=キラキラというイメージ化もしれないですが、今日は違います

  • 苦労話を

Amebaスマートフォンプラットフォーム

  • 2012年4月スタート
  • 延べ300サービス
  • Developerサイトにアプリケーションを登録
  • Ameba Developerセンターの役割
  • 公開・停止などをしている
  • 運用に問題が合った場合に、Developerの業績にも影響
  • 正確なデータ処理などBtoBに近い

抱えている問題

  • 保守運用コストの増大
  • レガシー化
  • 内政のフレームワークが放置
  • スパゲティコード化
  • 冗長なシステムアーキテクチャのオーバーヘッド
  • 設定やプロビジョニングの暗黙知
  • フレームワークミドルウェアの設定値があやしい
  • 一貫性が無い
  • 本当に正しいのか分からない
  • 秘伝のタレ化しかChef cookbookやデプロイスクリプト
  • WEBサーバのcookbookのはずなのに、そのノードを起動するためだけのcookbookになっている
  • 怖くてsudo Chef clientがたたけ無い

リファクタリングしよう

  • チーム構成
  • 今のサービスのリソースは私1人だけ…
  • インフラエンジニアもいるが兼務
  • 仲間を探そう
  • 主要スキルセット
  • 色々なものを求められている
  • 諸事情によりJavaエンジニアが多いので、JavaScriptは辛いかも…
  • 内政フレームワークを使っているので、学習コストが高い
  • 設けるサービスではないので予算も取れない
  • 使っているライブラリ、フレームワークも多い

  • そもそも作りなおした方が良い?

  • 犠牲的アーキテクチャ
  • 捨てるまでに多くの価値を生み出しているので、捨てて作りなおす

解決に向けたアプローチ

  • コストとリソースのバランス崩壊
  • 内政フレームワークからの脱却
  • 生産性が高いものを

暗黙知

  • 時間経過で積み上がるもの
  • 無くすのは無理!
  • ドキュメント化し続けるのも結構大変
  • 暗黙知を状態として管理しない
  • コードで宣言的にする
  • 環境変数、設定ファイル、イメージファイル
  • GitHubEnterprize上で変更の差分も終える

解決策

  • Spring Boot + Docker
  • 車内用、社外用でDockerコンテナを分けた
  • 技術スタックもバッサリ捨てた
  • SpringBootでサポートもされたJOOQを使った
  • jQueryは辛くなったのでVie.jsを使った

作りなおした結果

  • Dockerを使っておくと、AWSGCPに載せ替えるコストが少なくなるかも

サービスの運用について

自己紹介

  • 山田岳人
  • Amebaポイント事業
  • ポイントサービス運用
  • サーバサイドエンジニア

  • 運用してどうだったのか

  • 運用して便利だったこと

Spring Boot導入の背景

  • Amebaのポイントサービス
  • システム要件
  • 100万PV/Day (画面)
  • 100万Request/Day (API)
  • ポイントサービス特有の問題がある
  • 仮想通貨の性質を持つため、会社として利用できるミドルウェア等にも制限
  • ダウンタイムは賠償問題
  • 業務改善命令を出されることも

  • 諸事情で3ヶ月で3人でリリースして欲しい

解決策

  • JVMSpring Frameworkの信頼性
  • Spring Bootの高い生産性と保守性
  • 既存サービスのJavaリソースの再利用