Slide 1

Slide 1 text

Serverless in Scala on Node.js High Productivity and Resource Saving TATSUNO Yasuhiro 2018-11-24 Tokyo Node Festival

Slide 2

Slide 2 text

Who am I TATSUNO Yasuhiro Twitter: @smogami GitHub: exoego

Slide 3

Slide 3 text

所属での事例紹介 case study from my job 教師データ作成・保管SaaS Quality Annotation for ML at Scale 名古屋で機械学習の研究開発 R&D in Machine Learning at Nagoya 2018: ヤフー株式会社(Yahoo Japan) さまとの共同研究 道路沿いの視覚情報をAIでテキスト化する実証実験 https://about.yahoo.co.jp/pr/release/2018/10/15a/ 2017: Google I/O 2017 で紹介 スマートデバイスでラジオ体操をモーション認識 https://youtu.be/25ISTLhz0ys

Slide 4

Slide 4 text

少人数で自社SaaS立ち上げの技術テーマ Our Technical Challenges for Building SaaS in Small Team 両立してイテレーションを速く回す!! インフラ管理とコスト抑えて機能開発に専念できるように Serverless Architecture チームの誰もがUIもバックエンドも開発しやすいように Universal Architecture

Slide 5

Slide 5 text

サーバーレスのうれしさ Why we love "Serverless" 1. Scale by Design: 必要な性能・量の資源が必要な ときに自動起動=スケールしやすい設計になる。 ユーザが少ない時間帯の料金節約にもなる 2. Agile and Manage-Less: フルマネージドサービス 活用でインフラ構築が迅速。管理コストも小 プログラム実行環境の例 Lambda イベント駆動アプリ データベースの例 Batch バッチコンピューティング Aurora Serverless オンデマンドでスケールするRDB AppSync リアルタイムデータアプリ向けBaaS

Slide 6

Slide 6 text

なぜサーバーレス開発で Scala を選ぶか Why our team choose Scala for Serverless SDK Runtime • Back-Endは社内知見豊富で生産性高い Scala • 少人数で Front-End & Back-End を継続開発する必要。 Front-End は Scala.js にして、Universalに開発したい Java JVM Java JS Node.js JS C# .NET C# Python Python Python Language Go Go Go Scala AWS Lambda

Slide 7

Slide 7 text

1. Slow Cold-start: メモリをケチると初回起動に数秒。 Web APIバックエンドに使うには遅すぎる メモリ増やしたり、インスタンスを暖めておけば、速くなる。 しかし無料枠が削られてコスト増 2. Too Big : 使いたいライブラリを色々乗せたら、 Lambdaのデプロイ上限 50MB スレスレ。立ち上げ 時からプロジェクト分割など手間がかかる Scala on JVM サーバーレスの課題 Technical Challenges in Scala on JVM for Serverless 無難に JS or Python …?

Slide 8

Slide 8 text

Scala SDK Runtime Language Java版 JVM Scala言語とScala&JSライブラリで開発できるAlt-JS Write JS in Scala using Scala Libraries and JS Libraries Our Solution: Run Scala on Node.js using… JavaScript版 Node.js JavaScript transpile use Scala.js

Slide 9

Slide 9 text

128MB 256MB 512MB 1024MB 1536MB 10秒 8秒 6秒 4秒 2秒 0秒 Java (JVM) Scala (JVM) Scala (Node.js) Cold-Start / seconds 省メモリでも Cold-Start 0.1s=爆速 ライブラリ使っても 4MB 程度 何よりチームの好きなScalaで開発 採用 Adopted! 課題解決

Slide 10

Slide 10 text

1. 何とかなって自分でも驚いてしまった 2. Front-EndもBack-Endも同じ言語、コードベー スで開発できて疲れない 3. Scala.js由来でユーザに迷惑かけたバグない 4. 将来的には JVM の低フットプリント化・高速 起動にも期待: Modular Java, Graal VM 5. 好きな言語で意地でもServerless → AltJS on Node.js という福音 Universal Scala.js で1年半開発・運用してみて Retrospection after 1.5 years of Universal Scala.js in production

Slide 11

Slide 11 text

Programming Language You Love ... if it has AltJS tooling Node.js-powered Serverless Architecture Win 今回1番言いたいこと Summary High-Productivity Resource Saving and Fun

Slide 12

Slide 12 text

Date メ モ リ 使 用 率 Memory Usage Node.js 8.10 Lambda on Node.js 6.10 Node.jsバージョンアップで最大60%省メモリ Newer Node.js cut memory usage 60% +Turbofan JIT compiler +Ignition Interpreter 省 メ モ リ 化 Less Memory

Slide 13

Slide 13 text

AWS-SDK-JS Façade for Scala.js https://github.com/exoego/aws-sdk-scalajs-façade AWS-SDK-JSの型定義 + Scalaらしく書きやすくする拡張 本番利用してく中で使いやすいようバンバン改良(途上) Scala.jsでAWS開発、一緒にやりましょう!!

Slide 14

Slide 14 text

Type Definition Importer for Scala.js TypeScript の *.d.ts をScala.js用に変換するツール。Scala.js作者が開発。 TSの変化が速く、足りない機能が多かったので PR 送りまくった。 Webブラウザ版も作りました https://exoego.net/scala-js-ts-importer/ Example) Converts electron.d.t.s for Scala.js Typing

Slide 15

Slide 15 text

ご質問 Question?