アメブロの大規模システム刷新と それを支えるSpring

Takuya Hattori
Takuya HattoriSystem Engineer at 株式会社サイバーエージェント [CyberAgent]
CyberAgent, Inc. All Rights Reserved
アメブロの大規模システム刷新と
それを支えるSpring
1
自己紹介
向井 政貴
株式会社サイバーエージェント
サーバサイドエンジニア
アメーバブログの開発・運用を担当
最近会社の料理部が楽しい
2
2015年の状況
システム刷新
まとめ
アメーバブログとは
3
CyberAgent, Inc. All Rights Reserved
アメーバブログ
4
アメーバブログ
PC、スマホ、ガラケー、アプリ
ランキングなど周辺サービス
5
アメーバブログ
2004年9月サービス開始
約12年続くサービス
6
CyberAgent, Inc. All Rights Reserved
2015年
アメブロの状況
7
古いバージョンの技術
8
MySQL 4系
CentOS 4系
java 1.5 ~ 1.7
9
複数のプロダクトに
似たような処理
10
ブラウザから記事投稿できるよね
アプリからも記事をかけるようにしたい!
同じ機能だけどAPIとして
新しく作るか・・
アメブロ
記事投稿
API
記事投稿
11
API
ブラウザから読者登録できるよね
アプリからも読者登録したい!
アメブロ
記事投稿
API
記事投稿
読者登録 読者登録
同じ機能だけどAPIとして
新しく作るか・・
12
API API
調査用に記事情報を取得したい!
アメブロ
記事投稿
API
記事投稿
読者登録 読者登録
同じ機能だけどAPIとして(ry
記事取得 記事取得
13
フレームワークの混在
14
Struts 1.x , S2Struts, Spring 3.x
● Struts から Spring3 に移行しようと頑張った
形跡はある…
● ややこしい
● 学習コスト
15
苦労の多い動作確認環境
16
動作確認方法の歴史
2013年
.class
SCP!!!!
ビルド
.class
チーム共用
ステージングサーバ
17
動作確認方法の歴史
2013年
2014年 個人開発用サーバ
PUSH
DEPLOY
18
動作確認方法の歴史
2013年
2014年 個人開発用サーバ
2015年 ココ
19
失われた思想(?)
20
実際のコード例:記事データ検索メソッド
public void search(boolean showEntryTextFlag) {
!? !?
21
いろいろあるけど
大まかに言うと
22
保守性の低下
増大していく開発コスト
ビューとビジネスロジックの強い依存関係
刷新前システムの課題
23
CyberAgent, Inc. All Rights Reserved
さらに
24
CyberAgent, Inc. All Rights Reserved
_人人人人人人人人人人人_
>  データセンター移設  <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
25
アメブロのシステムの大部分が
稼働していたDCから撤退
26
保守機材の在庫が限界
27
LBやコアスイッチの
調子が悪化
28
1. 既存システムのまま移設する
2. 作り直して移設する
選択肢
29
どちらにするか
30
作り直すとして
間に合うのか
31
何か障害が起きないか
32
怖い
33
刷新前のシステムつらい
34
面白くない
35
このままだと新しい人が
入ってこない
36
世間の技術トレンド
から遅れる
37
開発速度は遅くなる一方
38
39
CyberAgent, Inc. All Rights Reserved
システム刷新だ
40
システム規模
41
40超
数百台
刷新後のあるAPIサーバ
へのリクエスト数
60万リクエスト/m
サーバ台数
プロジェクト数
5300万人(2016年8月時点)会員数
ページがみれないと広告が表示されないため売上に直撃
社内他サービスへの影響
芸能事務所から問い合わせ
システムになにかあると...
42
CyberAgent, Inc. All Rights Reserved
システム刷新の対象
43
44
フロント
エンド
バック
エンド
CyberAgent, Inc. All Rights Reserved
システム刷新の要件
45
障害なし
長期のサービス停止は回避
DC移設までに完遂
画面や機能の仕様を維持
開発コスト減少
一般的なアーキテクチャ
MUST WANT
46
47
CyberAgent, Inc. All Rights Reserved
Why Spring?
48
低い導入コスト
開発陣の慣れ
テンプレートの使い回し
刷新前のシステムにSpringの採用実績
49
ローカル開発環境
開発コストの削減
ローカル開発による生産性の向上
50
@Controller, @Service, @Repository
共通の認識があるレイヤードなアーキテクチャ
アーキテクチャを統一しやすい
51
CyberAgent, Inc. All Rights Reserved
システム刷新
52
保守性の低下
増大していく開発コスト
ビューとビジネスロジックの強い依存関係
刷新前システムの課題(再掲)
53
保守性の低下
増大していく開発コスト
ビューとビジネスロジックの強い依存関係
従来システムの課題
54
CyberAgent, Inc. All Rights Reserved
保守性の低下
55
処理が適切な粒度でまとまっていない
56
刷新前システムの課題
アメブロ
ORM
ビジネスロジック
57
人によって処理を書く場所がバラバラ
再利用性や可読性が低い
刷新前のシステム
レイヤードアーキテクチャ
58
刷新後システムの設計
Controller
Facade
Service
Repository
リクエストを受けて
結果を返す
一操作に必要な
Serviceの呼び出し
最低限、
まとめておくべき
ビジネスロジック
DBアクセスや
APIの呼び出し
59
ポリシーの統一化
再利用性、可読性向上
メンテされているのかわからない
APIドキュメント
刷新前システムの課題
60
wikiにAPIドキュメント用意
手動でメンテナンス
実際のソースコードとの整合性が不安
61
Springfox + Swaggerによる
自動ドキュメント化
62
https://github.com/springfox/springfox
https://github.com/swagger-api/swagger-ui
63
@RequestMapping(
method = RequestMethod.GET,
value = "/v1.0/public/blogger/{amebaId}"
)
public BloggerResponse getBlogger (
@PathVariable("amebaId") String amebaId
) {
return bloggerFacade.getBlogger(amebaId);
}
64
エンドポイントを自動的にドキュメントに反映
複雑なドキュメントはSwaggerのアノテーションが必要
エンドポイントのきれいな一覧だけでもだいぶありがたい
65
ここまでで25分ぐらい
66
保守性の低下
増大していく開発コスト
ビューとビジネスロジックの強い依存関係
刷新前システムの課題
67
自己紹介
服部 拓也
2013年 株式会社サイバーエージェント入社
入社以来アメーバブログのサーバーサイドを担当
現在はディレクションとマネジメントを兼務
マイブームは喘息
68
CyberAgent, Inc. All Rights Reserved
69
 開発コスト
70
ローカル開発環境ない ・ 
動作確認方法の歴史 (再掲)
2013年
2014年 個人開発用サーバ
2015年 ココ
71
72
73
ローカル開発環境構築が容易
フロントエンドエンジニアでも簡単
-> 開発速度UP
74
プロダクトごとに
リポジトリが分散
75
76
77
ソースコードもリリースジョブも
再利用性が低い
削減できるはずのコスト
78
リポジトリの統合 ・
79
マルチプロジェクト化
80
81
リリースジョブを共通化できる
処理の見通しがよくなる
処理を共通化しやすくなる
刷新後システムの処理共通化
API βAPI α
Controller
Facade
Service
Repository
Controller
Facade
・・・
82
マルチプロジェクト構成によるコードの共通化
リリースジョブの統一化
-> 開発効率UP
83
CyberAgent, Inc. All Rights Reserved
だがしかし…
84
まとめたことによって
不要なのにBean化されてしまうクラスが増大
85
86
起動のためだけに
不要なBeanの設定が必要
まとめたことによってBean化されるクラスが増大
リポジトリ
Project A
Project B
Service Project Repository Project
87
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
Project A
Project B
88
リポジトリ
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
Project A
89
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
Project A
90
どうしたか
まずは Service
91
FacadeクラスがAutowiredしているServiceクラスだけを
Bean化しよう!
● @Facadeアノテーションを作った
● @FacadeのついたクラスをBean化して、
そのFacadeクラスがAutowiredしているServiceクラスだけを
Bean化するInitializerを作った
92
@ComponentScan(
excludeFilters = {
@ComponentScan.Filter(
type = FilterType.ANNOTATION,
value = Facade.class
),
@ComponentScan.Filter(
type = FilterType.ANNOTATION,
value = Service.class
)
}
)
適用例
public class Main {
 public static void main(String[] args) {
  new SpringApplicationBuilder(Main.class)
   .initializers(
    new FacadeInitializer()
   )
   .run(args);
 }
}
93
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
@Facade
@Service
@Service
repository D
@Service
@Service
Project A
94
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
@Facade
@Service
@Service
repository D
@Service
@Service
95
Project A
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
@Facade
@Service
@Service
repository D
@Service
@Service
96
Project A
どうしたか
Repository編
97
プロダクト毎に接続先DBの情報をapplication.ymlに宣言する
● 宣言した接続先に関連するRepositoryだけをBean化する
Initializerを作った
98
まとめたことによってBean化されるクラスが増大
A repository B repository
C Datasource
C repositoryA repository B repository
C repository
application.ymlInitializer
99
100
jdbc:
blog: // [HOST] + [SCHEME] の組み合わせにユニークなネームスペースをつけたイメージ
master:
url: jdbc:mysql://[HOST]/[SCHEME]?zeroDateTimeBehavior=convertToNull&...
initialSize: 1
maxTotal: 1
...
slave:
url: jdbc:mysql://[HOST]/[SCHEME]?zeroDateTimeBehavior=convertToNull&...
initialSize: 1
maxTotal: 1
...
entry:
slave:
url: jdbc:mysql://[HOST]/[SCHEME]?zeroDateTimeBehavior=convertToNull&...
initialSize: 1
maxTotal: 1
...
application.yml
@ComponentScan(
excludeFilters = {
@ComponentScan.Filter(
type = FilterType.ANNOTATION,
value = Repository.class
),
@ComponentScan.Filter(
type = FilterType.ANNOTATION,
value = Facade.class
),
@ComponentScan.Filter(
type = FilterType.ANNOTATION,
value = Service.class
)
}
)
public class Main {
 public static void main(String[] args) {
  new SpringApplicationBuilder(Main.class)
   .initializers(
    new RepositoryInitializer(),
    new FacadeInitializer()
   )
   .run(args);
 }
}
101
適用例
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
repository D
102
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
repository D
103
外部API接続用のRepositoryが
残ってる
104
RepositoryクラスのBean化(API接続用)
@Configuration
public class SampleConfiguration {
@Bean
public SampleApiClient SampleApiClient(
HttpClient httpClient,
@Value("${sample.server.scheme}") String scheme,
@Value("${sample.server.host}") String host,
@Value("${sample.server.port}") Integer port
) {
・・・
}
@Bean
public SampleRepository SampleRepository
(SampleApiClient sampleApiClient) {・・・}
}
# application.yml
sample:
scheme: http
host: sample.ameba.jp
port: 80
105
RepositoryクラスのBean化(API接続用)
@ConditionalOnProperty (
prefix = "sample",
name = "enabled",
havingValue = "true",
matchIfMissing = false
)
@Configuration
public class SampleConfiguration {
@Bean
public SampleApiClient SampleApiClient(
HttpClient httpClient,
@Value("${sample.server.scheme}") String scheme,
@Value("${sample.server.host}") String host,
@Value("${sample.server.port}") Integer port
) {
・・・
}
@Bean
public SampleRepository SampleRepository
(SampleApiClient sampleApiClient) {・・・}
}
# application.yml
sample:
scheme: http
host: sample.ameba.jp
port: 80
enabled: true
106
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
repository D
107
まとめたことによってBean化されるクラスが増大
facade
service B
repository B
facade
service A
service C
service D
repository A
repository C
リポジトリ
repository D
108
共通化して起こった問題も
Springの機能で解決
109
保守性の低下
増大していく開発コスト
ビューとビジネスロジックの強い依存関係
刷新前システムの課題
110
CyberAgent, Inc. All Rights Reserved
 ビューとビジネスロジックの
 強い依存関係
111
Data Store
刷新前のシステム
アメブロ
ビジネスロジック
ORM
他サービスAPI
他サービスのAPI
112
ビュー
刷新前の
チームとシステムの関わり方
113
サーバーサイドフロントエンド
刷新前のチームとシステムの関わり方
サーバーとフロントでチームが別れている
ただし同じシステムをさわる
フロントエンドの最新技術導入しづらい
アメブロ
ORM
ビジネスロジック
ビュー
114
刷新前の他部署との連携状況
115
刷新前の他部署との連携状況
アメブロ
ビジネスロジック
ORM
秋葉原ラボ
ティーン向け
ブログサービス
etc..
記事データ
取りたい
アメブロにも投
稿したい
この中に組み込
まれている機能
を使いたい
116
ビュー
◯◯API
ORM
新規作成
ビジネスロジック
API Centricな
アーキテクチャ ・
117
Data Store
刷新前のシステム(再掲)
アメブロ
ビジネスロジック
ORM
他サービスAPI
他サービスのAPI
118
ビュー
刷新後のシステム
PC アメブロ
Controller
API
Facade
Service
スマホ アメブロ
Controller
Facade
Service
Controller
Facade
Service
Repository
ビューを生成する
処理に集中
ビジネスロジック
の提供に集中
Data Store
他サービスのAPI
119
JSON
ビュー ビュー
すぐに良いことが
120
他部署からの依頼対応工数の削減
AMPを特別対応なしで完了
スマホ版フロントエンドの刷新も特別対応なし
  参考) アメブロ2016 ~ React/ReduxでつくるIsomorphic web app ~
https://developers.cyberagent.co.jp/blog/archives/636/
121
CyberAgent, Inc. All Rights Reserved
API Centricの課題
122
通信コスト
123
複数レイヤにキャッシュを入れて対応
PC アメブロ
Controller
API
Facade
Service
スマホ アメブロ
Controller
Facade
Service
Controller
Facade
Service
Repository
Data Store
他サービスのAPI
124
ビュー ビュー
Client でキャッシュ
Repositoryでキャッシュ
APIの呼び出し元・先が
わかりづらい
(静的な意味で)
125
未解決
126
CyberAgent, Inc. All Rights Reserved
まとめ
127
技術面
ビジネス面
組織面
128
技術面でよかったこと
129
フロントエンドの技術がトレンドに乗りやすくなった
参考) アメブロ2016 ~ React/ReduxでつくるIsomorphic web app ~
https://developers.cyberagent.co.jp/blog/archives/636/
一般的なアーキテクチャに則った作りにできた
セキュリティリスクも抑制できている
技術的によかったこと
130
ビジネス面でよかったこと
131
AMP対応を短期間で完遂
フロントエンドを刷新しPVや広告収益が
短期間でより多くの施策が実現可能に
ビジネス的によかったこと
132
組織面でよかったこと
133
フロントエンドの開発チームを分離できた
新規の人材を取り込みやすくなった
よりよいサービスにしようという意識が強くなった
組織的によかったこと
134
CyberAgent, Inc. All Rights Reserved
最後に
135
本当に
やってよかった
136
1 of 136

Recommended

Cloud Foundry x Wagby by
Cloud Foundry x WagbyCloud Foundry x Wagby
Cloud Foundry x WagbyYoshinori Nie
5K views86 slides
SCM, CI and Maven Repo by
SCM, CI and Maven RepoSCM, CI and Maven Repo
SCM, CI and Maven RepoHideaki Ishijima
2.5K views20 slides
Lineにおけるspring frameworkの活用 by
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Tokuhiro Matsuno
33.7K views54 slides
アメーバブログを支えるデータセンターとインフラ技術 by
アメーバブログを支えるデータセンターとインフラ技術 アメーバブログを支えるデータセンターとインフラ技術
アメーバブログを支えるデータセンターとインフラ技術 Hiroki NAKASHIMA
3.8K views47 slides
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions by
Spring I/O 2016 報告 Test / Cloud / Other Popular SessionsSpring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular SessionsTakuya Iwatsuka
1.7K views34 slides
Spring Framework ふりかえりと4.3新機能 by
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能kimulla
4.1K views42 slides

More Related Content

What's hot

Springを使ったwebアプリにリファクタリングしよう by
Springを使ったwebアプリにリファクタリングしようSpringを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしよう土岐 孝平
6.8K views27 slides
Spring I/O 2017 報告 ThymeleafのWebFlux対応 by
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Takuya Iwatsuka
3.4K views37 slides
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪 by
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪崇之 清水
30.6K views56 slides
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3 by
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Toshiaki Maki
34.9K views168 slides
Spring I/O 2017での拡張のお話 by
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Alisa Sasaki
2.1K views45 slides
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編 by
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編hiboma
6.5K views51 slides

What's hot(19)

Springを使ったwebアプリにリファクタリングしよう by 土岐 孝平
Springを使ったwebアプリにリファクタリングしようSpringを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしよう
土岐 孝平6.8K views
Spring I/O 2017 報告 ThymeleafのWebFlux対応 by Takuya Iwatsuka
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Takuya Iwatsuka3.4K views
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪 by 崇之 清水
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水30.6K views
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3 by Toshiaki Maki
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Toshiaki Maki34.9K views
Spring I/O 2017での拡張のお話 by Alisa Sasaki
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話
Alisa Sasaki2.1K views
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編 by hiboma
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
hiboma6.5K views
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech by Toshiaki Maki
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3techConsumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Toshiaki Maki5.2K views
[JAWS DAYS 2017 ワークショップ] 不安で夜眠れないAWSアカウント管理者に送る処方箋という名のハンズオン by Keisuke Kadoyama
[JAWS DAYS 2017 ワークショップ] 不安で夜眠れないAWSアカウント管理者に送る処方箋という名のハンズオン[JAWS DAYS 2017 ワークショップ] 不安で夜眠れないAWSアカウント管理者に送る処方箋という名のハンズオン
[JAWS DAYS 2017 ワークショップ] 不安で夜眠れないAWSアカウント管理者に送る処方箋という名のハンズオン
Keisuke Kadoyama3.1K views
Spring Boot + Netflix Eureka by 心 谷本
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka
心 谷本41.2K views
サーバ構築・デプロイが簡単に!Elastic beanstalk by Hirokazu Ouchi
サーバ構築・デプロイが簡単に!Elastic beanstalkサーバ構築・デプロイが簡単に!Elastic beanstalk
サーバ構築・デプロイが簡単に!Elastic beanstalk
Hirokazu Ouchi7K views
REST with Spring Boot #jqfk by Toshiaki Maki
REST with Spring Boot #jqfkREST with Spring Boot #jqfk
REST with Spring Boot #jqfk
Toshiaki Maki10.9K views
サーバーレスで ガチ本番運用までやってるお話し by Akira Nagata
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata5.1K views
AWSでアプリ開発するなら 知っておくべこと by Keisuke Nishitani
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
Keisuke Nishitani22.8K views
Amazon EKS によるスマホゲームのバックエンド運用事例 by gree_tech
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
gree_tech7.6K views
Spring data-rest-and-spring-cloud-contract by Takeshi Ogawa
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa8.6K views
Spring bootでweb 基本編 by なべ
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編
なべ 8.7K views

Viewers also liked

Spring Day 2016 - Web API アクセス制御の最適解 by
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解都元ダイスケ Miyamoto
22.7K views42 slides
Spring Day 2016 springの現在過去未来 by
Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Yuichi Hasegawa
11.8K views44 slides
Spring bootで学ぶ初めてのwebアプリ開発 by
Spring bootで学ぶ初めてのwebアプリ開発Spring bootで学ぶ初めてのwebアプリ開発
Spring bootで学ぶ初めてのwebアプリ開発terahide
12.7K views43 slides
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri... by
Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...Toshiaki Maki
22.3K views117 slides
Spring 5に備えるリアクティブプログラミング入門 by
Spring 5に備えるリアクティブプログラミング入門Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門Takuya Iwatsuka
31.9K views88 slides
楽天トラベルとSpring(Spring Day 2016) by
楽天トラベルとSpring(Spring Day 2016)楽天トラベルとSpring(Spring Day 2016)
楽天トラベルとSpring(Spring Day 2016)Rakuten Group, Inc.
14.1K views135 slides

Viewers also liked(20)

Spring Day 2016 springの現在過去未来 by Yuichi Hasegawa
Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来
Yuichi Hasegawa11.8K views
Spring bootで学ぶ初めてのwebアプリ開発 by terahide
Spring bootで学ぶ初めてのwebアプリ開発Spring bootで学ぶ初めてのwebアプリ開発
Spring bootで学ぶ初めてのwebアプリ開発
terahide12.7K views
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri... by Toshiaki Maki
Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Toshiaki Maki22.3K views
Spring 5に備えるリアクティブプログラミング入門 by Takuya Iwatsuka
Spring 5に備えるリアクティブプログラミング入門Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門
Takuya Iwatsuka31.9K views
楽天トラベルとSpring(Spring Day 2016) by Rakuten Group, Inc.
楽天トラベルとSpring(Spring Day 2016)楽天トラベルとSpring(Spring Day 2016)
楽天トラベルとSpring(Spring Day 2016)
Rakuten Group, Inc.14.1K views
Grailsでドメイン駆動設計を実践する時の勘所 by Takuma Watabiki
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
Takuma Watabiki8.7K views
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~ by Yuichi Hasegawa
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Yuichi Hasegawa9K views
Distributed Tracing Velocity2016 by Reshmi Krishna
Distributed Tracing Velocity2016Distributed Tracing Velocity2016
Distributed Tracing Velocity2016
Reshmi Krishna1.7K views
Distributed tracing - get a grasp on your production by nklmish
Distributed tracing - get a grasp on your productionDistributed tracing - get a grasp on your production
Distributed tracing - get a grasp on your production
nklmish2.2K views
Spring CloudとZipkinを利用した分散トレーシング by Rakuten Group, Inc.
Spring CloudとZipkinを利用した分散トレーシングSpring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシング
Rakuten Group, Inc.7.3K views
Internetトラフィックエンジニアリングの現実 by J-Stream Inc.
Internetトラフィックエンジニアリングの現実Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実
J-Stream Inc.5.1K views
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017 by tty fky
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
tty fky4.3K views
Javaアプリケーションの モダナイゼーションアプローチ by CData Software Japan
Javaアプリケーションの モダナイゼーションアプローチJavaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチ
高速なソートアルゴリズムを書こう!! by masakazu matsubara
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!
Another compilation method in java - AOT (Ahead of Time) compilation by Logico
Another compilation method in java - AOT (Ahead of Time) compilationAnother compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilation
Logico 3.6K views
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 by Hiroshi Ito
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito59K views
Java SE 9の紹介: モジュール・システムを中心に by Taku Miyakawa
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa145.2K views
Spring Bootの本当の理解ポイント #jjug by Masatoshi Tada
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
Masatoshi Tada40K views

Similar to アメブロの大規模システム刷新と それを支えるSpring

Ec cube開発合宿 プラグインセミナー by
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
1.5K views15 slides
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight by
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonightAmazon Web Services Japan
3.6K views48 slides
[AWSマイスターシリーズ] AWS Elastic Beanstalk by
[AWSマイスターシリーズ] AWS Elastic Beanstalk[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic BeanstalkAmazon Web Services Japan
15.7K views65 slides
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight by
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonightAmazon Web Services Japan
1.8K views38 slides
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門 by
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門Amazon Web Services Japan
11.1K views54 slides
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介 by
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介Yukitaka Ohmura
539 views81 slides

Similar to アメブロの大規模システム刷新と それを支えるSpring(20)

Ec cube開発合宿 プラグインセミナー by Ayumu Kawaguchi
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
Ayumu Kawaguchi1.5K views
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight by Amazon Web Services Japan
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight by Amazon Web Services Japan
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介 by Yukitaka Ohmura
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介
Yukitaka Ohmura539 views
Reco choku tech night #09 -reinvent2018報告会- by recotech
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-
recotech482 views
[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight by Amazon Web Services Japan
[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight
[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight by Amazon Web Services Japan
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
Application development with c#, .net 6, blazor web assembly, asp.net web api... by Shotaro Suzuki
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki413 views
20180220 AWS Black Belt Online Seminar - Amazon Container Services by Amazon Web Services Japan
20180220 AWS Black Belt Online Seminar - Amazon Container Services20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container Services
CA Japan seminar mainframe2.0 2011/10/26 by Kaneko Izumi
CA Japan seminar mainframe2.0 2011/10/26CA Japan seminar mainframe2.0 2011/10/26
CA Japan seminar mainframe2.0 2011/10/26
Kaneko Izumi970 views
たった1時間でシステム構築!“激速”環境構築を実現する“パターン技術”の秘密とは by Rina Owaki
たった1時間でシステム構築!“激速”環境構築を実現する“パターン技術”の秘密とはたった1時間でシステム構築!“激速”環境構築を実現する“パターン技術”の秘密とは
たった1時間でシステム構築!“激速”環境構築を実現する“パターン技術”の秘密とは
Rina Owaki868 views
実プロジェクトの経験から学ぶazureサービス適用パターン by Kuniteru Asami
実プロジェクトの経験から学ぶazureサービス適用パターン実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン
Kuniteru Asami3.7K views
Azure Site Recoveryで実現するDRとクラウドへの移行 by Masahiko Ebisuda
Azure Site Recoveryで実現するDRとクラウドへの移行Azure Site Recoveryで実現するDRとクラウドへの移行
Azure Site Recoveryで実現するDRとクラウドへの移行
Masahiko Ebisuda3.1K views
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを... by Shinichiro Arai
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
Shinichiro Arai1.3K views

アメブロの大規模システム刷新と それを支えるSpring