Slide 1

Slide 1 text

INTRODUCTION OF SLIMANE AND SERVER SIDE SWIFT Yuki Takei

Slide 2

Slide 2 text

TABLE OF CONTENTS ▸ ࣗݾ঺հ ▸ Swift ͰServer Side? ▸ Slimaneʹ͍ͭͯ ▸ σϞ ▸ ϕϯνϚʔΫ ▸ ։ൃܦݧஊ(ςετ΍ɺLinuxͰࠔͬͨ͜ͱͳͲ) ▸ ՝୊ɺ·ͱΊ

Slide 3

Slide 3 text

ࣗݾ঺հ ෢Ҫ ༏ݾ ϑϦʔϥϯε ιϑτ΢ΣΞΤϯδχΞ / ϥδΦύʔιφϦςΟ ௨শ noppoman ݱࡏͷओͳ࢓ࣄ ɾגࣜձࣾiDEAKITT Ϧʔυσϕϩούʔ ʢ૑ۀظ͔Β) ɾגࣜձࣾSmartDrive όοΫΤϯυ/σʔλղੳʢ૑ۀظ͔Β) ݴޠͩͱɺNode.js, Ruby, Python, GO, SwiftΛ࠷ۙͩͱΑ͘࢖͍·͢ɻ MikeTOKYOͱ͍͏ϥδΦΛ΍͍ͬͯ·͢ɻস

Slide 4

Slide 4 text

ࣗݾ঺հ / OSS ACTIVITY npdynamodb node-mariadb Slimane/SlimaneHTTP Suv

Slide 5

Slide 5 text

ࣗݾ঺հ / OSS ACTIVITY ຊ೔঺հ͍ͤͯͨͩ͘͞΋ͷͰ͢ɻ npdynamodb node-mariadb Slimane/SlimaneHTTP Suv

Slide 6

Slide 6 text

஫) ͨͩ͠ɺͲΕ΋શ͘༗໊Ͱ͸͋Γ·ͤΜɺɺ

Slide 7

Slide 7 text

SwiftͰServer Side?

Slide 8

Slide 8 text

2015೥12݄ʹɺSwift͕OSSԽ Linux Readyʹ

Slide 9

Slide 9 text

SWIFTͰSERVER SIDE? ▸ core-foundation (Swift࣮૷ͷFoundation) ▸ Swift Package Manager (go getతͳ΍ͭ) ▸ XCTest ▸ gcd ▸ swift-llvm/lldb ύʔβʔ΍ϥϯλΠϜͳͲͷجຊతͳswiftݴޠػೳͷଞɺ ͳͲ΋ҰॹʹOSSԽ

Slide 10

Slide 10 text

ͬͯ͜ͱ͸Զ΋αʔόʔ࡞ΕΔ͡ΌΜʂʂ

Slide 11

Slide 11 text

ͱ͍͏͜ͱͰɺၟӽͳ͕Β࡞ͬͯΈ·ͨ͠ɻ

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

SLIMANEʹ͍ͭͯ ▸ ExpressɺSinatraͷྲྀΕΛ૊ΉܰྔϑϨʔϜϫʔΫ ▸ ඇಉظI/OʢΠϕϯτϧʔϓʣ ▸ C10K໰୊ ▸ ؆୯ɺγϯϓϧͳrouting ▸ middlewareʹΑΔ֦ு ▸ Cluster mode(Ϛϧνϓϩηε؀ڥ) ▸ ໊લͷ༝དྷ͸ϑΝογϣϯσβΠφͷΤσΟεϦϚϯ Slimane͸ݱࡏචऀ͕։ൃதͷܰྔwebϑϨʔϜϫʔΫ

Slide 14

Slide 14 text

SLIMANEʹ͍ͭͯ Slimane͸Web Server/Web Application FrameWork ҎԼͷ̏૚͔Βߏ੒͞ΕΔ Slimane SlimaneHTTP Suv * ɾURL Routing * ɾMiddleware * ɾBody Parser * ɾCookie And Session * ɾStatic Assets Serving ɾHTTP Server ɾHTTP Client Not implemented yet ɾHTTP Upgrade ɾHTTPS ɾNetworking ɾFileSystem ɾProcess ɾCluster and Worker ɾTimer, DNS, Signal ɾEncryption etc… High Low

Slide 15

Slide 15 text

SLIMANEʹ͍ͭͯ / SUV Suv Suv͸libuvϕʔεͷඇಉظI/OϥϯλΠϜ ɾSlimaneʹ͓͚Δ࠷΋௿ϨϕϧͳAPI܈ ɾඇಉظͳTCPɺPipeɺFileSystem΍ProcessͳͲΛఏڙ ɾͦͷଞ҉߸Խܥ΋ͪΐͪ͜ΐ͜(uv_work_queue) ɾͲ͔͜Node.jsͬΆ͍interface (ͨͩ͠ɺI/O݁Ռ͸ Either) ɾNetworking ɾFileSystem ɾProcess ɾCluster and Worker ɾTimer, DNS, Signal ɾEncryption etc…

Slide 16

Slide 16 text

SLIMANEʹ͍ͭͯ / SLIMANEHTTP SlimaneHTTP ɾHTTP Server ɾHTTP Client Not implemented yet ɾHTTP Upgrade ɾHTTPS SuvϕʔεͷඇಉظHTTP Server/Client ɾSlimaneͷHTTPϨΠϠʔ ɾryan࡞ͷhttp-parser͕ϕʔε ɾHTTP/1.1ͷServerͱClient࣮૷ ɾHTTPS͸·ͩʢۙ೔ணखʣ ɾUpgrade(Websocket/HTTP2.0ͳͲ)͸·ͩ

Slide 17

Slide 17 text

SLIMANEʹ͍ͭͯ / SLIMANE Slimane ɾURL RoutingɺMiddlewareΛఏڙ ɾCookie ParserɺSessionɺBodyParserɺFile Serving ɾ֦ு͕ඞཁ͕ͩɺViewςϯϓϨʔτ΋࢖͑Δ ɾModelͳ͠ʢඇಉظDBDriver͸طଘͷ΋ͷΛfolkͳͲ͠ ͯผ్։ൃ༧ఆʣ ɾઐ༻ίϚϯυϥΠϯΠϯλʔϑΣʔεʢۙ೔ެ։ʣ * ɾURL Routing * ɾMiddleware * ɾBody Parser * ɾCookie And Session * ɾStatic Assets Serving

Slide 18

Slide 18 text

αʔόʔ্ཱͪ͛·Ͱͷ؆୯ͳίʔυΛ ݟͯΈ·͠ΐ͏

Slide 19

Slide 19 text

SLIMANEʹ͍ͭͯ / ίʔυ ,

Slide 20

Slide 20 text

σϞ

Slide 21

Slide 21 text

଎౓͕ؾʹͳͬͨͷͰɺ Swift΍ଞݴޠͷWAFͱڞʹ ϕϯνϚʔΫΛऔͬͯΈ·ͨ͠ɻ

Slide 22

Slide 22 text

ͬͱͦͷલʹ….

Slide 23

Slide 23 text

ࣄલ৘ใͷͨΊʹɺ ͍͔ͭ͘SwiftͷWebFrameWorkΛ঺հ͠·͢ɻ

Slide 24

Slide 24 text

ϕϯνϚʔΫͷલʹ…. SWIFTͰ࢖͑ΔϑϨʔϜϫʔΫͷ঺հ ▸ Zewo (CSPɺGCDɺServerɺRoutingɺSSLͳͲ) ▸ Vapor (Laravel Inspired MVC) ▸ Swifton (Rails Inspired MVC) ▸ Kitura (From IBM. Express Like) ▸ Nest (Common Swift Server Side Interface PJ) େখͷServerɺWAF΍CSP࣮૷ͳͲ͕ɺ͜ͷ3ϲ݄ؒͰଓʑొ৔

Slide 25

Slide 25 text

BENCHMARK݁Ռ Time 0 1.75 3.5 5.25 7 SLIMANE SLIMANE HTTP NGINX EXPRESS REVEL SWIFTON VAPOR KITURA ɾܭଌ͸apache benchͰߦͬͨ (ab -n 10000 -c 100) ɾ؀ڥ͸ɺAWS EC2ͷt2.medium(vCPU: 2, Mem: 4) ɾDBΞΫηεແ͠ɺͦΕͧΕͷindex htmlΛฦ͢୯७ͳςετ ɾKituraҎ֎͸Έͳrelease build

Slide 26

Slide 26 text

Slimaneͷwikiʹৄ͍͠਺ࣈ͕͋Γ·͢ɻ https://github.com/noppoMan/Slimane/wiki/ benchmarking-result

Slide 27

Slide 27 text

։ൃܦݧஊɺࠓޙͷ՝୊ͳͲ

Slide 28

Slide 28 text

։ൃܦݧஊ(։ൃத΍ςετɺLINUX্Ͱࠔͬͨ͜ͱͳͲ) ▸ cݴޠΛѻ͏ࡍɺSystem headerͷએݴ͕LinuxͱmacͰҧ͏ͨΊɺ Posixޓ׵ͳؔ਺΍ɺϓϩύςΟΛѻ͏Α͏ʹ ▸ OSS൛Foundation͸ະ࣮ͩ૷͞Ε͍ͯͳ͍ػೳ͕ଟ͍ɻ ▸ ࢿྉ࡞੒࣌఺ͰɺXCTestͷඇಉظػೳ͕αϙʔτ͞Ε͍ͯͳ͍ (Quickͷ࡞ऀΑΓPR͕ग़͍ͯ·͢ɻ) ▸ libuv͸αϯϓϧ਺͕͋·Γଟ͘ͳ͍ͨΊɺΘ͔Βͳ͍ͱ͜Ζ͸ node.jsͷίʔυΛݟ࣮ͯ૷ΛϚωͯΈͨΓ ▸ Linux༻ͷϥΠϒϥϦͳͲ͸ɺ·ͩ·ͩͳʹ͕ྲྀߦΔ͔Θ͔Βͳ͍ɻ

Slide 29

Slide 29 text

SLIMANEͷࠓޙͷ՝୊ ▸ libuvʢඇಉظʣͷͨΊɺྑ͘΋ѱ͘΋ͦ͜ʹͱΒΘΕΔ ▸ ಛʹωοτϫʔΫ΍ϑΝΠϧI/Oޙͷcallback hell ▸ PromiseͳͲͰcallback hellΛආ͚Δ(nodeͷyieldཉ͍͠…) ▸ αʔυύʔςΟ੡ͷϥΠϒϥϦͱͷ਌࿨ੑ(ಛʹಉظI/Oܥ) ▸ ·ͩ·ͩmemory leak͕͋ΔʢZewoͷϥΠϒϥϦͰ͢Β͍ͯ͠Δ..ʣ ▸ ϓϩμΫγϣϯ؀ڥͰͷӡ༻ɺϑΟʔυόοΫ͕ඞਢ ▸ ։ൃ଎౓ͷ໰୊ɻ஥ؒΛूΊͯεϐʔυΞοϓ͍ͨ͠

Slide 30

Slide 30 text

࠷ޙʹ·ͱΊͰ͢ɻ

Slide 31

Slide 31 text

·ͱΊ ▸ Swiftαʔόʔ͸݁ߏ଎͍ʢνϡʔχϯά࣍ୈʣ ▸ ଓʑͱϑϨʔϜϫʔΫ΍αʔόʔ͕ొ৔͍ͯͯ͠ɺઓཚͷ࣌ ͕΍ͬͯ͘Δ…ʁ(PR͸ͪΐͬͱগͳΊͳؾ͕) ▸ SwiftͰඇಉظI/O͸·ͩ·ͩૣख़ ▸ XcodeͰ։ൃ -> LinuxͰϏϧυͷࡍ͸ɺະ࣮૷ͷػೳ΋͋Δ ͷͰཁ஫ҙ

Slide 32

Slide 32 text

Slimane։ൃࠓޙ΋ؤு͍ͬͯ͜͏ͱࢥ͍·͢ɻ ؾܰʹPR͍͚ͨͩΔͱ޾͍Ͱ͢ʂ

Slide 33

Slide 33 text

ɾSlimane https://github.com/noppoMan/Slimane ɾSlimaneHTTP https://github.com/noppoMan/SlimaneHTTP ɾSuv https://github.com/noppoMan/Suv ɾslimane-example https://github.com/noppoMan/slimane-example

Slide 34

Slide 34 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ