Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
201512݄ʹɺ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ʹ͍ͭͯ SlimaneWeb 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 SuvlibuvϕʔεͷඇಉظI/OϥϯλΠϜ ɾSlimaneʹ͓͚Δ࠷ϨϕϧͳAPI܈ ɾඇಉظͳTCPɺPipeɺFileSystemProcessͳͲΛఏڙ ɾͦͷଞ҉߸Խܥͪΐͪ͜ΐ͜(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ɺWAFCSP࣮ͳͲ͕ɺ͜ͷ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
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ