Slide 1

Slide 1 text

u r & (

Slide 2

Slide 2 text

1 8 BA 6 A F 724/3 S &) S L S S r & S S n b

Slide 3

Slide 3 text

to p r to p r8 INIH

Slide 4

Slide 4 text

& & ®®S r X 3 3 s _ RPGX ® S R S S & S R

Slide 5

Slide 5 text

4

Slide 6

Slide 6 text

1/:3 v DASH rgp iU • 7 26 S • http://bks-dash.com , U 5

Slide 7

Slide 7 text

r

Slide 8

Slide 8 text

s s ® S Nginx + Unicorn + Rails S S MariaDB Memcached S ActiveJob + Sidekiq Photon S Ridgepole S ActiveRecord::Sharding 7

Slide 9

Slide 9 text

s s Unity _ R s l R ® S Nginx + Unicorn + Rails S S MariaDB Memcached S ActiveJob + Sidekiq Photon S Ridgepole S ActiveRecord::Sharding 8

Slide 10

Slide 10 text

API Multi-play 9

Slide 11

Slide 11 text

API app app Multi-play load balancer 10

Slide 12

Slide 12 text

API app cache app database Multi-play load balancer 11

Slide 13

Slide 13 text

API app cache app database batch Multi-play load balancer 12

Slide 14

Slide 14 text

API app cache app database batch game master photon cluster Multi-play load balancer 13

Slide 15

Slide 15 text

API app cache app database batch game master photon cluster Multi-play load balancer game master photon cluster 14

Slide 16

Slide 16 text

q kt sharding : ActiveRecord::Sharding • https://github.com/hirocaster/activerecord-sharding • activerecord-turntable ActiveRecord : Ridgepole • https://github.com/winebarrel/ridgepole • Migration s u or hR 15

Slide 17

Slide 17 text

to p

Slide 18

Slide 18 text

u WRITE a U • S S … • • • s • u u t t i v R a bcs k R (sharding) q gp i 17

Slide 19

Slide 19 text

t np READ/WRITE u a s • S S S • S S S S • master_data user_friend_code matching 18

Slide 20

Slide 20 text

M DHB u q i dra u • user_ids S S q S • ActiveRecord::Sharding user shards user sequencer s g ( R user_id s a shards hID S S S s 19

Slide 21

Slide 21 text

M DHB u q i dra u • user_ids S S q S • ActiveRecord::Sharding user shards user sequencer 8DB 4 s S s g ( R 20

Slide 22

Slide 22 text

1 uDB v Migration • s S X • h s Migration l u _ • q n or _ c … • ALTER h … qv Migration qvscRRidgepole • l h R 21

Slide 23

Slide 23 text

D BA I Arv D BA I A • https://github.com/winebarrel/ridgepole • DB S S S • S S S S _DDL ALTER TABLE u • pR 22

Slide 24

Slide 24 text

5DB NDIH PM D BA I A 398_remove_column_example1_from_users.rb 103_create_users.rb 412_add_column_example2_to_users.rb 5DB NDIH • d Migration • schema_migrations S schema_migrations 23

Slide 25

Slide 25 text

5DB NDIH PM D BA I A create_table :users, options: "ENGINE=InnoDB" do |t| t.string :name, null: false t.integer :rank, null: false, default: 1 t.integer :experience, null: false, default: 0 - t.integer :example1, null: false + t.string :example2, null: false, default: "" : ALTER TABLE `users` ADD `example2` varchar(255) DEFAULT '' NOT NULL AFTER `experience` ALTER TABLE `users` DROP `example1` D BA I A • S Y S × • S × s s _ 24

Slide 26

Slide 26 text

D BA I Au • W 8 1 gscp • S _ DB h • UP/DOWN k × r • UP/DOWN r • a t qb • Migration S _ • r1 u a • schema S × _ • ALTER_ S s schema r _ OK 25

Slide 27

Slide 27 text

qu D BA I A qv q v b i 1. schema 2. S DB r 3. commit & push 4. S S DB 5. S S & S 6. ®®S DB i drv gs 26

Slide 28

Slide 28 text

1 - R - s db/schemas ├─ master_data │ ├─ chars_schema.rb │ ├─ items_schema.rb │ : │ └─ ├─ user_shard │ ├─ users_schema.rb │ ├─ user_points_schema.rb │ : │ └─ ├─ : 27

Slide 29

Slide 29 text

1 - R - s db/schemas ├─ master_data │ ├─ chars_schema.rb │ ├─ items_schema.rb │ : │ └─ ├─ user_shard │ ├─ users_schema.rb │ ├─ user_points_schema.rb │ : │ └─ ├─ : DATABASE TABLE 28

Slide 30

Slide 30 text

1 D BA I A • A GF D s D A c _ • D l10 S D A h dir = ENV["DB"] remove_shard_number!(dir) pattern = File.join(File.dirname(__FILE__), dir, "*_schema.rb") Dir[pattern].each do |schema_file| require File.join(dir, File.basename(schema_file)) end 29

Slide 31

Slide 31 text

1 D BA I A • A GF D s D A c _ • D l10 S D A h dir = ENV["DB"] remove_shard_number!(dir) pattern = File.join(File.dirname(__FILE__), dir, "*_schema.rb") Dir[pattern].each do |schema_file| require File.join(dir, File.basename(schema_file)) end 30

Slide 32

Slide 32 text

1 D BA I A • A GF D s D A c _ • D l10 S D A h dir = ENV["DB"] remove_shard_number!(dir) pattern = File.join(File.dirname(__FILE__), dir, "*_schema.rb") Dir[pattern].each do |schema_file| require File.join(dir, File.basename(schema_file)) end 31 user_shard_001, user_shard_002, ... r user_shard ® S ei

Slide 33

Slide 33 text

1 D BA I A u DMN HI A • 10 S _ r s & • ol S A GF 10 32 10 A s 10 r 5A GF R

Slide 34

Slide 34 text

r8 INIH

Slide 35

Slide 35 text

u • S_ h S • • • • S • 34

Slide 36

Slide 36 text

u game master photon cluster API S S /matching/hosts photon.example.com i 8 INIH 5 MNA :A PA 35

Slide 37

Slide 37 text

u ( game master photon cluster API S S S S ID ( 36

Slide 38

Slide 38 text

u ) game master photon cluster API S S /matching/register photon master IP S ID S ) t GPS 37

Slide 39

Slide 39 text

u game master photon cluster API S S /matching/list u 38

Slide 40

Slide 40 text

u + game master photon cluster API S S S + t R 39

Slide 41

Slide 41 text

u game master photon cluster API S S S u… 8 INIH 2 GA :A PA rgp 40

Slide 42

Slide 42 text

8 INIH u S 8 INIH k • S S • S all-in-one u • • 41

Slide 43

Slide 43 text

8 INIH u g 8 INIH u hosts: - photon1.example.com photon1.example.com /matching/hosts photon_server.yml photon cluster photon cluster 42

Slide 44

Slide 44 text

8 INIH u ( ( t gp hosts: - photon1.example.com - photon2.example.com photon1.example.com /matching/hosts photon_server.yml photon cluster photon2.example.com or photon cluster 43

Slide 45

Slide 45 text

8 INIH u gp hosts: - photon2.example.com photon2.example.com /matching/hosts photon_server.yml photon cluster photon cluster 44

Slide 46

Slide 46 text

8 INIH u ( ( 8 INIH hosts: - photon2.example.com photon2.example.com /matching/hosts photon_server.yml photon cluster 45

Slide 47

Slide 47 text

u8 INIH u • 8 INIH • i G MNA MA PA q • t ag i • 28:t a/84 q • s or _ ™ h c mol • DB i c s photon master-server • qu g i 46

Slide 48

Slide 48 text

r

Slide 49

Slide 49 text

r • u u • u r to pR q gk r u • 8 INIH gk u to pR u t 48

Slide 50

Slide 50 text

No content