SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
KotlinConf 2018 から⾒る
最近の Kotlin サーバーサイド事情
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
川⽥ 裕貴
LINE Corporation 2016年⼊社
開発1センター LINE開発1室 P Part チーム
スタンプ・絵⽂字関連サーバー開発 (Java, Kotlin?)
IoT 関連サービスの Server-side 開発 (全て Kotlin)
HIROTAKA KAWATA @hktechno
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Microservices in LINE Shop
•Armeria を利⽤した Thrift RPC で Microservices
• Armeria: LINE 製 OSS HTTP/2 RPC ライブラリ https://line.github.io/armeria/
• LINE では、歴史的に Thrift を RPC のために利⽤している
• 内部は、ほぼすべて RxJava2 を組み合わせた Non-blocking RPC, DB アクセス
•過去に書いたブログ記事とか
• RxJava 2とArmeriaでマイクロサービスを⾮同期化してみた
• LINE スタンプショップにおける Zipkin 利⽤事例
• Elasticsearch を検索エンジンとして利⽤する際のポイント
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
お仕事での Kotlin
•IoT サービスのバックエンドを Kotlin で書いてます
• 来⽉の LINE Developer Day 2018 に期待していてください
• Spring Boot 2 + Armeria + Thrift RPC, REST API
• もともと Spring MVC で書かれていたが…
• リリースもしていないサービスなのに Armeria 化され、完全 Kotlin 化された…
• Armeria も、Kotlin から使っていてそんなに不便なことはない
• たまに微妙に感じることがあるので、落ち着いたら Kotlin 対応を⼊れたいと思っている
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
KotlinConf 2018 - 感想
•Kotlin サーバーサイドの話も、思ったよりあった
• サーバーサイドの⼈なので、サーバーサイドのトークを重点的に聞いた
• ただ、Kotlin の話より、何かを Kotlin でやってみた系の話が多かった、Kotlin はおまけ
•Coroutine がアツい
• みんな本当に使いこなせるの?Reactive Streams との共存…
•Amsterdam がいいところだった
• US でやるカンファレンスより満⾜度⾼い、会場とかいろいろ
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Server-side Kotlin
•みんな使ってる?
•イケてるところ
• Null safety, Type safety
• Functional programming, DSL
•サーバサイド的に重要
• JVM ⾔語
• 既存の Java のリソースが使える、親和性が良い
• パフォーマンス的な問題があまりない
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Kotlin で Web フレームワーク何つかってる?
•よく使われていそうなのは、以下の3つかな?
•Ktor http://ktor.io/
•http4k https://www.http4k.org/
•Spring Boot https://spring.io/projects/spring-boot
•Ktor, http4k は、Pure Kotlin, Lightweight
• 全部⼊りがほしければ、やっぱり Spring Boot ?
• Kotlin で Spring を快適に使うには ?
from Komparing Kotlin Server Frameworks
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Kotlin Web フレームワーク⽐較
•Swagger, Micrometer, Zipkin (Tracing) が使いたい!
• http4k, Spring Boot
•Coroutine (Non-blocking, Asynchronous API) が使いたい!
• Ktor は JetBrains 謹製なのでもちろん対応
• Spring も Unofficial support がある (for webflux)
•(個⼈的には) Ktor のこれからの成⻑に期待
• それまでは、Spring でもいいかなぁ?
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
http4k
val app = routes(
    "bob" bind GET to { Response(OK).body("you GET bob") },
    "rita" bind POST to { Response(OK).body("you POST rita") },
    "sue" bind DELETE to { Response(OK).body("you DELETE sue") }
)
val server = app.asServer(SunHttp(8000)).start()
Ktor
embeddedServer(Netty, 8080) {
routing {
get("/") {
call.respondText("Hello, world!", ContentType.Text.Html)
}
}
}.start(wait = true)
Server as a Function
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Spring Boot を Kotlin で快適に使うには…
•SpringFu, KoFu を使って Functional!! DSL!! (ただし incubating feature)
• やっぱり Spring 使いたいですよね
• https://github.com/spring-projects/spring-fu
•Annotation を多⽤した Configuration, Bean registration は⿊魔術に近い
• 何が起きているのかわからない、辿れない
• 解決策としての Functional configuration with Kotlin DSL で明⽰的な Configuration を実現
• 上記のプレゼンでは、Live coding で1つづつアノテーションを削っていく実演
from Kotlin and Spring Boot, a Match Made in Heaven
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
SpringFu, KoFu のサンプル https://github.com/ajavageek/springfunctional-migration
@SpringBootApplication
class MigrationDemoApplication
fun main(args: Array<String>) {
runApplication<MigrationDemoApplication>(*args)
}
@RestController
class PersonController(private val personRepository: PersonRepository) {
@GetMapping("/person")
fun readAll() = personRepository.findAll()
@GetMapping("/person/{id}")
fun readOne(@PathVariable id: Long) = personRepository.findById(id)
}
interface PersonRepository : PagingAndSortingRepository<Person, Long>
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
val beans = beans {
bean<PersonHandler>()
bean<PersonRepository>()
}
val app = application {
import(beans)
server {
import(::routes)
codecs {
jackson()
}
}
mongodb {
embedded()
}
}
SpringFu, KoFu のサンプル
fun routes(handler: PersonHandler) = router {
"/person".nest {
GET("/{id}", handler::readOne)
GET("/", handler::readAll)
}
}
fun main(args: Array<String>) {
app.run(args)
}
https://github.com/ajavageek/springfunctional-migration
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
API / Microservices
•REST に否定的(?)なトークがいくつかあった
• Painless Microservices with Kotlin
• GraphQL Powered by Kotlin
•REST (JSON over HTTP) のイケてないところ
• 型がない、スキーマが曖昧、パースに CPU を多く消費する
• 乗り換え先は?
• GraphQL (for external), gRPC (for internal) 弊社だと Thrift
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
API / Microservices
•Kubanetes Kotlin DSL
•https://github.com/fkorotkov/k8s-kotlin-dsl
from Painless Microservices with Kotlin
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
API / Microservices
•分散 Tracing の話を、思ったよりちらほら聞いた
• https://opentracing.io/ https://zipkin.io/
• 国内で Opentracing, Zipkin をあまり使っている話は聞いたことないのだけど…
• 弊社で勉強会やったけど⼈の集まりが悪かったけど…
• https://line.connpass.com/event/86639/
•Microservices 特有の分散トレーシング
• ちゃんとフレームワーク⽐較のところでも取り上げられて、⽐較されていた
• マイクロサービスを使うなら、ぜひ導⼊しておきたい
LINE スタンプショップにおける zipkin 利⽤事例
ユーザー	token	認証
Product	情報取得
Ownership	情報取得
getProduct() API の例
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Kotlin/Native の可能性
•Kotlin/Native はサーバーサイドでも使えるようになるのか?
• 上記の Kotlin/Native の発表を⾒た限り、Concurrency 周りが難しそう
• GC や Safe concurrency を実現するための、オブジェクトの扱いが難しそう
• Pure Kotlin の Ktor あたりが Native をちゃんとサポートしてくれれば…?
• いずれにしても、JVM 系のライブラリは⼀切は使えない
• 今後に期待
• 現状、特に Server-less な利⽤法では、Kotlin/JVM は Startup time の問題から厳しい
• サーバーレスで使いたいなら、GraalVM の⽅に期待したほうが良さそう?
from Kotlin/Native Concurrency Model

Más contenido relacionado

La actualidad más candente

virtual-kubeletってなんだ?Alibaba Cloudで動かしてみよう
virtual-kubeletってなんだ?Alibaba Cloudで動かしてみようvirtual-kubeletってなんだ?Alibaba Cloudで動かしてみよう
virtual-kubeletってなんだ?Alibaba Cloudで動かしてみようShinya Mori (@mosuke5)
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーYoshifumi Kawai
 
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことOpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことMasaya Aoyama
 
5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon Recap5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon RecapMasaya Aoyama
 
祝 top-level project Apache Geode
祝 top-level project Apache Geode祝 top-level project Apache Geode
祝 top-level project Apache GeodeTomohiro Ichimura
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発Shuto Suzuki
 
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術Masaya Aoyama
 
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~genroku
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜Masaya Aoyama
 
Cloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container NetworkingCloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container NetworkingKazuto Kusama
 
Kafka Connect(Japanese)
Kafka Connect(Japanese)Kafka Connect(Japanese)
Kafka Connect(Japanese)Roman Shtykh
 
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
当番をランダムに割り当ててみる ~ on-dutyTable.py ~当番をランダムに割り当ててみる ~ on-dutyTable.py ~
当番をランダムに割り当ててみる ~ on-dutyTable.py ~genroku
 
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1Masaya Aoyama
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Yoshifumi Kawai
 
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会   reactive extensions inside(公開用)UniRx勉強会   reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)wilfrem
 

La actualidad más candente (17)

virtual-kubeletってなんだ?Alibaba Cloudで動かしてみよう
virtual-kubeletってなんだ?Alibaba Cloudで動かしてみようvirtual-kubeletってなんだ?Alibaba Cloudで動かしてみよう
virtual-kubeletってなんだ?Alibaba Cloudで動かしてみよう
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことOpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
 
5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon Recap5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon Recap
 
祝 top-level project Apache Geode
祝 top-level project Apache Geode祝 top-level project Apache Geode
祝 top-level project Apache Geode
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
 
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
 
Sinatra hijacker
Sinatra hijackerSinatra hijacker
Sinatra hijacker
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
Cloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container NetworkingCloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container Networking
 
RyuJIT
RyuJITRyuJIT
RyuJIT
 
Kafka Connect(Japanese)
Kafka Connect(Japanese)Kafka Connect(Japanese)
Kafka Connect(Japanese)
 
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
当番をランダムに割り当ててみる ~ on-dutyTable.py ~当番をランダムに割り当ててみる ~ on-dutyTable.py ~
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
 
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会   reactive extensions inside(公開用)UniRx勉強会   reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
 

Similar a KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情

Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyMasashi Shibata
 
SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-CASAREAL, Inc.
 
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsYoshio Terada
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 bitbank, Inc. Tokyo, Japan
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとはKoto Shigeru
 
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現Hitachi, Ltd. OSS Solution Center.
 
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話Yuji Oshima
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Taisuke Oe
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大openrtm
 
OpenStack Vancouver Summit Report presented at nttgroup meeting in Japanese
OpenStack Vancouver Summit Report presented at nttgroup meeting in JapaneseOpenStack Vancouver Summit Report presented at nttgroup meeting in Japanese
OpenStack Vancouver Summit Report presented at nttgroup meeting in JapaneseToshikazu Ichikawa
 
ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現Shigeru Tatsuta
 
KubeFlowでどこまでいける?
KubeFlowでどこまでいける?KubeFlowでどこまでいける?
KubeFlowでどこまでいける?Yuji Oshima
 
IBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようIBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようTakuji Kawata
 
Spring I/O 2018 報告会 - Spring Cloud Gateway / Spring Cloud Pipelines
Spring I/O 2018 報告会 - Spring Cloud Gateway / Spring Cloud PipelinesSpring I/O 2018 報告会 - Spring Cloud Gateway / Spring Cloud Pipelines
Spring I/O 2018 報告会 - Spring Cloud Gateway / Spring Cloud PipelinesJunya Katada
 
Mk vpp for-containers-vppug
Mk vpp for-containers-vppugMk vpp for-containers-vppug
Mk vpp for-containers-vppugMiya Kohno
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 

Similar a KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情 (20)

Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-
 
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab Contents
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
 
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
 
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
 
OpenStack Vancouver Summit Report presented at nttgroup meeting in Japanese
OpenStack Vancouver Summit Report presented at nttgroup meeting in JapaneseOpenStack Vancouver Summit Report presented at nttgroup meeting in Japanese
OpenStack Vancouver Summit Report presented at nttgroup meeting in Japanese
 
ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現
 
2018 07-19dist
2018 07-19dist2018 07-19dist
2018 07-19dist
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
KubeFlowでどこまでいける?
KubeFlowでどこまでいける?KubeFlowでどこまでいける?
KubeFlowでどこまでいける?
 
IBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようIBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみよう
 
Spring I/O 2018 報告会
Spring I/O 2018 報告会Spring I/O 2018 報告会
Spring I/O 2018 報告会
 
Spring I/O 2018 報告会 - Spring Cloud Gateway / Spring Cloud Pipelines
Spring I/O 2018 報告会 - Spring Cloud Gateway / Spring Cloud PipelinesSpring I/O 2018 報告会 - Spring Cloud Gateway / Spring Cloud Pipelines
Spring I/O 2018 報告会 - Spring Cloud Gateway / Spring Cloud Pipelines
 
Mk vpp for-containers-vppug
Mk vpp for-containers-vppugMk vpp for-containers-vppug
Mk vpp for-containers-vppug
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 

Más de Hirotaka Kawata

本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown本当にわかる Spectre と Meltdown
本当にわかる Spectre と MeltdownHirotaka Kawata
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門Hirotaka Kawata
 
Micro Python で組み込み Python
Micro Python で組み込み PythonMicro Python で組み込み Python
Micro Python で組み込み PythonHirotaka Kawata
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1Hirotaka Kawata
 
Introduction of PyCon JP 2014 in PyCon SG
Introduction of PyCon JP 2014 in PyCon SGIntroduction of PyCon JP 2014 in PyCon SG
Introduction of PyCon JP 2014 in PyCon SGHirotaka Kawata
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会Hirotaka Kawata
 
産学間連携推進室(AC部屋) 2012 成果報告会
産学間連携推進室(AC部屋) 2012 成果報告会産学間連携推進室(AC部屋) 2012 成果報告会
産学間連携推進室(AC部屋) 2012 成果報告会Hirotaka Kawata
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表Hirotaka Kawata
 
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmOpen Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmHirotaka Kawata
 
About University of Tsukuba Linux User Group
About University of Tsukuba Linux User GroupAbout University of Tsukuba Linux User Group
About University of Tsukuba Linux User GroupHirotaka Kawata
 

Más de Hirotaka Kawata (12)

本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
Micro Python で組み込み Python
Micro Python で組み込み PythonMicro Python で組み込み Python
Micro Python で組み込み Python
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
 
Introduction of PyCon JP 2014 in PyCon SG
Introduction of PyCon JP 2014 in PyCon SGIntroduction of PyCon JP 2014 in PyCon SG
Introduction of PyCon JP 2014 in PyCon SG
 
xv6 + mist32 + mruby
xv6 + mist32 + mrubyxv6 + mist32 + mruby
xv6 + mist32 + mruby
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
産学間連携推進室(AC部屋) 2012 成果報告会
産学間連携推進室(AC部屋) 2012 成果報告会産学間連携推進室(AC部屋) 2012 成果報告会
産学間連携推進室(AC部屋) 2012 成果報告会
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
 
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmOpen Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pm
 
About University of Tsukuba Linux User Group
About University of Tsukuba Linux User GroupAbout University of Tsukuba Linux User Group
About University of Tsukuba Linux User Group
 

KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情

  • 1. KotlinConf 2018 から⾒る 最近の Kotlin サーバーサイド事情
  • 2. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 川⽥ 裕貴 LINE Corporation 2016年⼊社 開発1センター LINE開発1室 P Part チーム スタンプ・絵⽂字関連サーバー開発 (Java, Kotlin?) IoT 関連サービスの Server-side 開発 (全て Kotlin) HIROTAKA KAWATA @hktechno
  • 3. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Microservices in LINE Shop •Armeria を利⽤した Thrift RPC で Microservices • Armeria: LINE 製 OSS HTTP/2 RPC ライブラリ https://line.github.io/armeria/ • LINE では、歴史的に Thrift を RPC のために利⽤している • 内部は、ほぼすべて RxJava2 を組み合わせた Non-blocking RPC, DB アクセス •過去に書いたブログ記事とか • RxJava 2とArmeriaでマイクロサービスを⾮同期化してみた • LINE スタンプショップにおける Zipkin 利⽤事例 • Elasticsearch を検索エンジンとして利⽤する際のポイント
  • 4. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 お仕事での Kotlin •IoT サービスのバックエンドを Kotlin で書いてます • 来⽉の LINE Developer Day 2018 に期待していてください • Spring Boot 2 + Armeria + Thrift RPC, REST API • もともと Spring MVC で書かれていたが… • リリースもしていないサービスなのに Armeria 化され、完全 Kotlin 化された… • Armeria も、Kotlin から使っていてそんなに不便なことはない • たまに微妙に感じることがあるので、落ち着いたら Kotlin 対応を⼊れたいと思っている
  • 5. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 KotlinConf 2018 - 感想 •Kotlin サーバーサイドの話も、思ったよりあった • サーバーサイドの⼈なので、サーバーサイドのトークを重点的に聞いた • ただ、Kotlin の話より、何かを Kotlin でやってみた系の話が多かった、Kotlin はおまけ •Coroutine がアツい • みんな本当に使いこなせるの?Reactive Streams との共存… •Amsterdam がいいところだった • US でやるカンファレンスより満⾜度⾼い、会場とかいろいろ
  • 6. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Server-side Kotlin •みんな使ってる? •イケてるところ • Null safety, Type safety • Functional programming, DSL •サーバサイド的に重要 • JVM ⾔語 • 既存の Java のリソースが使える、親和性が良い • パフォーマンス的な問題があまりない
  • 7. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Kotlin で Web フレームワーク何つかってる? •よく使われていそうなのは、以下の3つかな? •Ktor http://ktor.io/ •http4k https://www.http4k.org/ •Spring Boot https://spring.io/projects/spring-boot •Ktor, http4k は、Pure Kotlin, Lightweight • 全部⼊りがほしければ、やっぱり Spring Boot ? • Kotlin で Spring を快適に使うには ? from Komparing Kotlin Server Frameworks
  • 8. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Kotlin Web フレームワーク⽐較 •Swagger, Micrometer, Zipkin (Tracing) が使いたい! • http4k, Spring Boot •Coroutine (Non-blocking, Asynchronous API) が使いたい! • Ktor は JetBrains 謹製なのでもちろん対応 • Spring も Unofficial support がある (for webflux) •(個⼈的には) Ktor のこれからの成⻑に期待 • それまでは、Spring でもいいかなぁ?
  • 9. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 http4k val app = routes(     "bob" bind GET to { Response(OK).body("you GET bob") },     "rita" bind POST to { Response(OK).body("you POST rita") },     "sue" bind DELETE to { Response(OK).body("you DELETE sue") } ) val server = app.asServer(SunHttp(8000)).start() Ktor embeddedServer(Netty, 8080) { routing { get("/") { call.respondText("Hello, world!", ContentType.Text.Html) } } }.start(wait = true) Server as a Function
  • 10. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Spring Boot を Kotlin で快適に使うには… •SpringFu, KoFu を使って Functional!! DSL!! (ただし incubating feature) • やっぱり Spring 使いたいですよね • https://github.com/spring-projects/spring-fu •Annotation を多⽤した Configuration, Bean registration は⿊魔術に近い • 何が起きているのかわからない、辿れない • 解決策としての Functional configuration with Kotlin DSL で明⽰的な Configuration を実現 • 上記のプレゼンでは、Live coding で1つづつアノテーションを削っていく実演 from Kotlin and Spring Boot, a Match Made in Heaven
  • 11. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 SpringFu, KoFu のサンプル https://github.com/ajavageek/springfunctional-migration @SpringBootApplication class MigrationDemoApplication fun main(args: Array<String>) { runApplication<MigrationDemoApplication>(*args) } @RestController class PersonController(private val personRepository: PersonRepository) { @GetMapping("/person") fun readAll() = personRepository.findAll() @GetMapping("/person/{id}") fun readOne(@PathVariable id: Long) = personRepository.findById(id) } interface PersonRepository : PagingAndSortingRepository<Person, Long>
  • 12. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 val beans = beans { bean<PersonHandler>() bean<PersonRepository>() } val app = application { import(beans) server { import(::routes) codecs { jackson() } } mongodb { embedded() } } SpringFu, KoFu のサンプル fun routes(handler: PersonHandler) = router { "/person".nest { GET("/{id}", handler::readOne) GET("/", handler::readAll) } } fun main(args: Array<String>) { app.run(args) } https://github.com/ajavageek/springfunctional-migration
  • 13. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 API / Microservices •REST に否定的(?)なトークがいくつかあった • Painless Microservices with Kotlin • GraphQL Powered by Kotlin •REST (JSON over HTTP) のイケてないところ • 型がない、スキーマが曖昧、パースに CPU を多く消費する • 乗り換え先は? • GraphQL (for external), gRPC (for internal) 弊社だと Thrift
  • 14. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 API / Microservices •Kubanetes Kotlin DSL •https://github.com/fkorotkov/k8s-kotlin-dsl from Painless Microservices with Kotlin
  • 15. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 API / Microservices •分散 Tracing の話を、思ったよりちらほら聞いた • https://opentracing.io/ https://zipkin.io/ • 国内で Opentracing, Zipkin をあまり使っている話は聞いたことないのだけど… • 弊社で勉強会やったけど⼈の集まりが悪かったけど… • https://line.connpass.com/event/86639/ •Microservices 特有の分散トレーシング • ちゃんとフレームワーク⽐較のところでも取り上げられて、⽐較されていた • マイクロサービスを使うなら、ぜひ導⼊しておきたい
  • 16. LINE スタンプショップにおける zipkin 利⽤事例 ユーザー token 認証 Product 情報取得 Ownership 情報取得 getProduct() API の例
  • 17. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Kotlin/Native の可能性 •Kotlin/Native はサーバーサイドでも使えるようになるのか? • 上記の Kotlin/Native の発表を⾒た限り、Concurrency 周りが難しそう • GC や Safe concurrency を実現するための、オブジェクトの扱いが難しそう • Pure Kotlin の Ktor あたりが Native をちゃんとサポートしてくれれば…? • いずれにしても、JVM 系のライブラリは⼀切は使えない • 今後に期待 • 現状、特に Server-less な利⽤法では、Kotlin/JVM は Startup time の問題から厳しい • サーバーレスで使いたいなら、GraalVM の⽅に期待したほうが良さそう? from Kotlin/Native Concurrency Model