Slide 1

Slide 1 text

ଵଦͰ͋ΔΤϯδχΞͷͨΊͷΫϥ΢υը૾ม׵αʔϏε @harukasan / MICHII Shunsuke 2017-07-01 :"1$'VLVPLBϥϯνεϙϯαʔηογϣϯ

Slide 2

Slide 2 text

)BSVLBTBOಓҪढ़հ
 ϐΫγϒ ג ϦʔυΤϯδχΞ *NBHF'MVYࣄۀ੹೚ऀ
 ෱ԬΦϑΟεͰ͸ͳ͘౦ژຊࣾۈ຿ ೥෱Ԭݝٱཹถࢢੜ·Ε
 ٱཹถߴઐˠ۝޻େ ൧௩ ˠஜ೾େӃˠϐΫγϒೖࣾ
 3VCZͱ(Pͱ͢͜͠4DBMBΛॻ͘ΠϯϑϥܥΤϯδχΞ
 ීஈ͸ࣇͷ෕

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

૑࡞׆ಈ͕΋ͬͱָ͘͠ͳΔ৔ॴΛͭ͘Δ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

ϥϯνηογϣϯ

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

ϖ Image ϖ Image ϖ Image ϖ Image ϖ Image ϖ Image

Slide 9

Slide 9 text

ϨΠΞ΢τΛม͍͑ͨ
 ৽͍͠αΠζͷαϜωΠϧ͕΄͍͠ ৽͍͠σόΠεʹରԠ͍ͨ͠
 ͍··ͰͷαϜωΠϧͩͱখ͍͞ ͖Ε͍ʹݟ͑ΔΑ͏ʹ͍ͨ͠
 ը࣭Λམͱͣ͞ʹॖখ͍ͨ͠ දࣔ଎౓Λ͸΍͍ͨ͘͠
 WebPͰ഑৴͍ͨ͠

Slide 10

Slide 10 text

զʑ͸ΤϯδχΞͰ͋ΔͷͰ ͜ΕΒͷ໰୊ʹରͯ͋͠Δఔ౓·Ͱ ಠྗͰର߅͢Δ͜ͱ͕Ͱ͖Δ

Slide 11

Slide 11 text

ͨͱ͑͹Image::MagickΛ࢖͏ use Image::Magick; $img = Image::Magick->new(); $img->Read("input.jpg"); $img->Resize( geometry => "400x400", ); ... $img->Write("output.jpg");

Slide 12

Slide 12 text

ͨͱ͑͹CSSͰ͏·͍͜ͱ߹ΘͤΔ .img { background-image: url("input.jpg"); /* style attributeͰࢦఆ͢Δͷ͕Ұൠత */
 background-size: cover;
 background-position: center center;
 width: 400px;
 height: 400px; }

Slide 13

Slide 13 text

ͨͱ͑͹ngx_small_lightΛ࢖͏ server { listen 8000; server_name localhost; small_light on; small_light_pattern_define square dw=400,dh=400,da=l,q=95,e=imagemagick,jpeghint=y; # http://localhost:8000/small_light(p=square)/input.jpg location ~ small_light[^/]*/(.+)$ { set $file $1; rewrite ^ /$file; } }

Slide 14

Slide 14 text

දࣔͰ͖ͯΔ͔ΒͱΓ͍͍͚͋͑ͣͲ͜ΕͰਖ਼͍͠ͷʁ ImageMagickʹ͸resizeɺscaleͱthumbnail͕͋Δ͚Ͳ ͳΜ͔ಛఆͷϒϥ΢βͰݟΔͱ৭͕มΘͬͯݟ͑Δ͚Ͳ ࣗ෼͕΍Ίͨޙ୭͕ϝϯςͰ͖ΔΜͩΖ͏……

Slide 15

Slide 15 text

૿͑ଓ͚͍ͯ͘αʔϏε ͢΂ͯͷWebαʔϏε͕ ը૾ॲཧΛ࣮૷/ӡ༻͢Δඞཁ͕͋Δͷ͔ʁ

Slide 16

Slide 16 text

ੲ͸αʔό΋ύʔπΛങ͍͚ͬͯͭͬͯͨ͘Ͳ……

Slide 17

Slide 17 text

ଵଦͰ͋ΔΤϯδχΞͷͨΊͷΫϥ΢υը૾ม׵αʔϏε

Slide 18

Slide 18 text

HTTP/S3ετϨʔδ ը૾ม׵ॲཧ ΦϦδφϧը૾Λऔಘ ม׵ޙΩϟογϡΛ഑৴ ΤϯυϢʔβ ίϯςϯπΩϟογϡ URLΛม͑Δ͚ͩͰը૾ม׵ https://example.imageflux.jp/w=400,h=400/input.jpg ͍··Ͱ࢖͍ͬͯͨ
 ετϨʔδΛͦͷ··࢖͑Δ ͭ·Γɺ͍͍ͩͨ
 small light as a service

Slide 19

Slide 19 text

ࣾ಺Ͱར༻͍ͯͨ͠ը૾ม׵γεςϜ͕ϕʔε ϐΫγϒ͕UGCը૾ϑΝΠϧͱઓ͖ͬͯͨྺ࢙ ࣾ಺Ͱ͸௝͍͠B2BαʔϏε ͘͞ΒΠϯλʔωοτͱڞಉͰ։ൃɺӡ༻ ImageMagickΛ࢖͍ͬͯͳ͍

Slide 20

Slide 20 text

LVS
 LB / DSR nginx
 HTTP front server ഑৴Ϋϥελ ؅ཧαʔό GRPC HTTP API Traffic Server
 HTTP front server Golang
 Thumbnailing server Golang
 Fetching server Golang
 Master server Scala
 Console / API

Slide 21

Slide 21 text

ͳͥGoͰॻ͍͍ͯΔͷ͔: - ܰྔεϨου(goroutine) - ඇಉظॲཧΛॎʹॻ͚Δʢωετ͠ͳ͍͍ͯ͘ʣ - γϯάϧόΠφϦ - CͷίʔυΛݺ΂Δ

Slide 22

Slide 22 text

cgo package main // // int fortytwo() // { // return 42; // } // import "C" import "fmt" func main() { fmt.Println(int(C.fortytwo())) // Output: 42 } ίϝϯτ෦ʹCͷίʔυΛهड़

Slide 23

Slide 23 text

cgo ίϝϯτ෦ʹCͷίʔυΛهड़ʢͪΐͬͱ͖΋ͪΘΔ͍ʣ Go͔ΒCͷܕΛ࢖͑Δ - C.int - C.MyFunc

Slide 24

Slide 24 text

net/http libjpeg-turbo scale libpng CͷϥΠϒϥϦ GoͷHTTPαʔό࣮૷ GoͱCͷ͍͍ͱ͜ͲΓ

Slide 25

Slide 25 text

౦ژɺ෱Ԭͷ྆ํʹ։ൃऀ/Ϛωʔδϟ͕͍·͢ appear.inͰ౦ژ-෱ԬΛ24࣌ؒ઀ଓ ͘͞Β౦ژɺϐΫγϒ౦ژɺ͘͞ΒେࡕɺϐΫγϒ෱Ԭ ͰςϨΧϯ͢Δָ͍͠৬৔Ͱ͢ Tokyo Osaka Fukuoka

Slide 26

Slide 26 text

ImageFluxͰ͸ΤϯδχΞΛืू͍ͯ͠·͢ʂ Wantedlyɺฐࣾ࠾༻αΠτɺ΋͘͠͸࠙਌ձͰ HTTPϓϩΩγΛॻ͍ͨΓը૾ม׵Λ࠷దԽͨ͠Γ
 ָ͍͠৬৔Ͱ͢ ౦ژͰ΋෱ԬͰ΋ಇ͚·͢ ϐΫγϒ෱ԬΦϑΟε ϐΫγϒ౦ژຊࣾ