スケーラブルなアプリケーション開発を考える

13年10月18日金曜日
渡辺 雄作(33) / @waysaku
株式会社サイバーエージェント
アメーバ事業本部
2006年中途入社
前職は金融•証券系のSIerのプログラマー
アメーバ関連開発を2.5年(2006/02-2008/09)
アメーバピグ開発責任者2.5...
13年10月18日金曜日
アーキテクチャ説明

13年10月18日金曜日
MySQL(master)

MySQL(slave)

stanby cluster

active cluster

基盤HBase

apache + tomcat

batch

月額課金システム
http

jsonPersister...
MySQL(master)

MySQL(slave)

stanby cluster

active cluster

基盤HBase

apache + tomcat

batch

月額課金システム
http

jsonPersister...
MySQL(master)

MySQL(slave)

stanby cluster

active cluster

基盤HBase

普通!

apache + tomcat

batch

月額課金システム
http

jsonPers...
MySQL(master)

MySQL(slave)

stanby cluster

active cluster

基盤HBase

apache + tomcat

batch

月額課金システム
http

jsonPersister...
JsonPersisterとは

13年10月18日金曜日
• javaオブジェクトをjsonデータとして永続化
• javaオブジェクトを直接save、loadするシンプルなAPI
• スキーマレス
• データストアに非依存

13年10月18日金曜日
スキーマレス
@Persistable(name	
  =	
  "user_data")
public	
  class	
  UserData	
  {
	
  	
  	
  	
  @PrimaryKey
	
  	
  	
  	
 ...
スキーマレス
@Persistable(name	
  =	
  "user_data")
public	
  class	
  UserData	
  {
	
  	
  	
  	
  @PrimaryKey
	
  	
  	
  	
 ...
スキーマレス
@Persistable(name	
  =	
  "user_data")
public	
  class	
  UserData	
  {
	
  	
  	
  	
  @PrimaryKey
	
  	
  	
  	
 ...
Application
View
Logic
jsonPersister
interface

13年10月18日金曜日

MySQL
Application
View

MySQL

Logic
jsonPersister
interface

HBase

MongoDB
13年10月18日金曜日
Application
View

MySQL
サービスの特性や成長速度に合わせてDB
Logic
を選択することが可能
jsonPersister

interface
ex)最初はスモールスタートでMySQLで、流行ってきたら
HBaseや...
データ操作用API
•
•

jsonPersister.load(dataClass)

•

jsonPersister.list(queryClass)

•

13年10月18日金曜日

jsonPersister.save(dataC...
デモ
hbaseにsave, load
プロパティ追加してsave, load
mysqlに切り替えてsave, load
プロパティ追加してsave, load

13年10月18日金曜日
なぜjsonPersisterなのか?

13年10月18日金曜日
アプリケーション開発のコモディティ化

13年10月18日金曜日
アプリケーション開発のコモディティ化

13年10月18日金曜日
アプリケーション開発のコモディティ化

13年10月18日金曜日
アプリケーション開発のコモディティ化

アプリケーションロジックの実装はもはや枯れた
技術でどれだけ素早く開発できるかが勝負

13年10月18日金曜日
アプリケーション開発のコモディティ化

アプリケーションロジックの実装はもはや枯れた
技術でどれだけ素早く開発できるかが勝負

事業(サービス)が当たらなかったら素早く
修正、なんならスクラップ(&ビルド)

13年10月18日金曜日
13年10月18日金曜日
アイデア

計画

開発

13年10月18日金曜日
コモディティ化された所に手間をかけない
アイデア

↓

本当に必要な技術にコミットする
計画

開発

13年10月18日金曜日
インクリメンタル(増分)な開発を行う

13年10月18日金曜日
インクリメンタル(増分)な開発を行う

キーで検索できて必要なデータをしまえる入れ物さえあれ
ば開発はできる

13年10月18日金曜日
インクリメンタル(増分)な開発を行う

キーで検索できて必要なデータをしまえる入れ物さえあれ
ば開発はできる

JsonPersister\(^o^)/
13年10月18日金曜日
13年10月18日金曜日
サイバーエージェントではサービスを複数ラインで同時に開発している。
サービス開発においてスピードは命。サイバーエージェントでも、いかに
そのスピードを上げられるかが重要な課題となっていたという。

 「スピードを上げるためのアプローチはいろいろ...
ご清聴ありがとうございました

13年10月18日金曜日
Upcoming SlideShare
Loading in …5
×

スケーラブルなアプリケーション開発を考える

712 views
620 views

Published on

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

No Downloads
Views
Total views
712
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
10
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

スケーラブルなアプリケーション開発を考える

  1. 1. スケーラブルなアプリケーション開発を考える 13年10月18日金曜日
  2. 2. 渡辺 雄作(33) / @waysaku 株式会社サイバーエージェント アメーバ事業本部 2006年中途入社 前職は金融•証券系のSIerのプログラマー アメーバ関連開発を2.5年(2006/02-2008/09) アメーバピグ開発責任者2.5年(2008/10-2011/04) 新規開発チーム(SIG)責任者1年(2011/04-2012.4) 現在は縁結び開発チームPS3(2012.4-) 13年10月18日金曜日
  3. 3. 13年10月18日金曜日
  4. 4. アーキテクチャ説明 13年10月18日金曜日
  5. 5. MySQL(master) MySQL(slave) stanby cluster active cluster 基盤HBase apache + tomcat batch 月額課金システム http jsonPersister batch(jenkins) http(or etc...) postfix + dovecot apache + tomcat 縁結びシステム 13年10月18日金曜日 Ameba関連各種API
  6. 6. MySQL(master) MySQL(slave) stanby cluster active cluster 基盤HBase apache + tomcat batch 月額課金システム http jsonPersister batch(jenkins) http(or etc...) postfix + dovecot apache + tomcat 縁結びシステム 13年10月18日金曜日 Ameba関連各種API
  7. 7. MySQL(master) MySQL(slave) stanby cluster active cluster 基盤HBase 普通! apache + tomcat batch 月額課金システム http jsonPersister batch(jenkins) http(or etc...) postfix + dovecot apache + tomcat 縁結びシステム 13年10月18日金曜日 Ameba関連各種API
  8. 8. MySQL(master) MySQL(slave) stanby cluster active cluster 基盤HBase apache + tomcat batch 月額課金システム http jsonPersister batch(jenkins) http(or etc...) postfix + dovecot apache + tomcat 縁結びシステム 13年10月18日金曜日 Ameba関連各種API
  9. 9. JsonPersisterとは 13年10月18日金曜日
  10. 10. • javaオブジェクトをjsonデータとして永続化 • javaオブジェクトを直接save、loadするシンプルなAPI • スキーマレス • データストアに非依存 13年10月18日金曜日
  11. 11. スキーマレス @Persistable(name  =  "user_data") public  class  UserData  {        @PrimaryKey        private  String  userName;          private  String  age;          @Indexed        private  Date  date;          private  String  address;             13年10月18日金曜日
  12. 12. スキーマレス @Persistable(name  =  "user_data") public  class  UserData  {        @PrimaryKey        private  String  userName;          private  String  age;          @Indexed        private  Date  date;          private  String  address;             13年10月18日金曜日 定義を追加 @Persistable(name  =  "user_data") public  class  UserData  {        @PrimaryKey        private  String  userName;          private  String  age;          @Indexed        private  Date  date;          private  String  address;          private  String  job;          
  13. 13. スキーマレス @Persistable(name  =  "user_data") public  class  UserData  {        @PrimaryKey        private  String  userName;          private  String  age;          @Indexed        private  Date  date;          private  String  address;             定義を追加 @Persistable(name  =  "user_data") public  class  UserData  {        @PrimaryKey        private  String  userName;          private  String  age;          @Indexed        private  Date  date;          private  String  address;          private  String  job;           今まで通りそのままsaveするだけ ※クラス定義と実際のjsonデータの後方互換性は維持されます 13年10月18日金曜日
  14. 14. Application View Logic jsonPersister interface 13年10月18日金曜日 MySQL
  15. 15. Application View MySQL Logic jsonPersister interface HBase MongoDB 13年10月18日金曜日
  16. 16. Application View MySQL サービスの特性や成長速度に合わせてDB Logic を選択することが可能 jsonPersister interface ex)最初はスモールスタートでMySQLで、流行ってきたら HBaseやMongoDBなどのクラスタDBに移行する HBase MongoDB 13年10月18日金曜日
  17. 17. データ操作用API • • jsonPersister.load(dataClass) • jsonPersister.list(queryClass) • 13年10月18日金曜日 jsonPersister.save(dataClass) jsonPersister.delete(dataClass)
  18. 18. デモ hbaseにsave, load プロパティ追加してsave, load mysqlに切り替えてsave, load プロパティ追加してsave, load 13年10月18日金曜日
  19. 19. なぜjsonPersisterなのか? 13年10月18日金曜日
  20. 20. アプリケーション開発のコモディティ化 13年10月18日金曜日
  21. 21. アプリケーション開発のコモディティ化 13年10月18日金曜日
  22. 22. アプリケーション開発のコモディティ化 13年10月18日金曜日
  23. 23. アプリケーション開発のコモディティ化 アプリケーションロジックの実装はもはや枯れた 技術でどれだけ素早く開発できるかが勝負 13年10月18日金曜日
  24. 24. アプリケーション開発のコモディティ化 アプリケーションロジックの実装はもはや枯れた 技術でどれだけ素早く開発できるかが勝負 事業(サービス)が当たらなかったら素早く 修正、なんならスクラップ(&ビルド) 13年10月18日金曜日
  25. 25. 13年10月18日金曜日
  26. 26. アイデア 計画 開発 13年10月18日金曜日
  27. 27. コモディティ化された所に手間をかけない アイデア ↓ 本当に必要な技術にコミットする 計画 開発 13年10月18日金曜日
  28. 28. インクリメンタル(増分)な開発を行う 13年10月18日金曜日
  29. 29. インクリメンタル(増分)な開発を行う キーで検索できて必要なデータをしまえる入れ物さえあれ ば開発はできる 13年10月18日金曜日
  30. 30. インクリメンタル(増分)な開発を行う キーで検索できて必要なデータをしまえる入れ物さえあれ ば開発はできる JsonPersister\(^o^)/ 13年10月18日金曜日
  31. 31. 13年10月18日金曜日
  32. 32. サイバーエージェントではサービスを複数ラインで同時に開発している。 サービス開発においてスピードは命。サイバーエージェントでも、いかに そのスピードを上げられるかが重要な課題となっていたという。  「スピードを上げるためのアプローチはいろいろあるが、私たちが注 目したのはデータベース。一部基盤化はされてはいたものの、サービス ごとにデータベースを立てている状況だったからだ。そこでHBaseを採 用し、すべてのサービスのデータを入れ、運用を一元化できたら良さそ うだと考えた」と鈴木氏は振り返る 13年10月18日金曜日
  33. 33. ご清聴ありがとうございました 13年10月18日金曜日

×