Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Serverless in Scala on Node.js

Serverless in Scala on Node.js

Lightning Talk at Tokyo Node Festival 2018 Day 2
https://nodejs.connpass.com/event/106263/

TATSUNO Yasuhiro

November 24, 2018
Tweet

More Decks by TATSUNO Yasuhiro

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. 所属での事例紹介
    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

    View Slide

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

    View Slide

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

    View Slide

  6. なぜサーバーレス開発で 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

    View Slide

  7. 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 …?

    View Slide

  8. 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

    View Slide

  9. 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!
    課題解決

    View Slide

  10. 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

    View Slide

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

    View Slide

  12. 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

    View Slide

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

    View Slide

  14. 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

    View Slide

  15. ご質問
    Question?

    View Slide