MOBILITY:dev 2019の聴講メモ

10-31_MOBILITY-dev-2019

ITエンジニアこそ実現できるモビリティのサービス化(keynote session)

登壇者

内容

  • CASE : 自動車産業が見据えている方向性の頭文字
    • Connected ( ネットワーク化 )
    • Autonomous ( 自動運転 )
    • Shared and Service ( サービス化 )
    • Electric ( 電動化 )
  • TESLA
    • イーロン・マスク氏による電気自動車ベンチャー企業
    • スマホと同様に、ソフトウェア・アップデートを頻繁に行う
      • カメラ、超音波、レーダーによるセンシング
      • 将来的には完全な自動運転を目指す
    • Webでカスタマイズしオーダー可能
    • トヨタもこのような方向性なのかも?
  • MaaS
    • 所有から利用へ
      • PaaSだと、オンプレミスからクラウド
      • MaaSだと、車を所有するのではなく、サービスとして利用する時代へ
        • 高額な初期費用はなくなり、少額の都度払いか、定額制か
  • MaaS Global社が提供するWhim
  • Uber Express Pool
    • タクシーが乗客を拾うというより、乗客が歩いて、待つことで更に効率的なライドシェア
  • 自動運転の普及による都市への影響

GTFSオープンデータで公共交通をアップデート

登壇者

内容

秘伝のソースがつなぐ技術と人

登壇者

  • 見川 孝太
    • 株式会社ヴァル研究所/執行役員CTO 兼 ナビゲーション開発部部長

内容

  • 30年前からの秘伝をソースを使っている
  • 経路検索か経路探索か
    • 探索とは
      • 特定の制約条件を満たす物を見つけ出す行動
    • 検索とは
      • データの集合から目的のデータを見つけ出すこと
    • 駅すぱあとは、本当経路探索だけど、検索と言ったほうがわかりやすいから検索ということにした
  • ちょっとアプリの紹介→EMot[エモット] もっといい「いきかた」
  • 「最短」を見つけるのではなく、「最適」を見つけたい
    • 現在の経路探索結果は、カーナビのような案内と違い、駅と路線のみで抽象化している
      • そもそも、本当の発着時点は駅ではなく場所(家など)
      • 雨や雪でも大丈夫な経路なのか
      • 車い椅子や、スーツケースを持っていても大丈夫な経路なのか
      • 駅での乗り換えも、初めての駅で複雑な乗り換えだと具体的にどう歩けば良いのか分からないかも

Webエンジニアが自動運転企業でやっていること

登壇者

  • 森本 潤一
    • 株式会社ティアフォー/技術本部エンジニア

内容

  • Autowareについて
  • Webでやっていること
    • Autoware→Webのデータ
      • 現在の位置情報の表示
      • 車両のステータスの監視
    • Web→Autowareのデータ
      • 車両へ発信命令、走行ルートを送る
    • AWS IoTを利用
      • バイスシャドウ
        • バイスがオフラインになっても、操作を受け付け、オンラインに戻ると受け付けていた処理を実行
      • バイス上で動くLambda
      • などなどAWS上で色んな機能が使える

アプリケーション エンジニアのための Cloud Spanner Deep dive と BigQuery GIS

登壇者

内容

自動運転車を動かすサーバレスシステムの中身

登壇者

  • 須山 温人
    • SBドライブ株式会社/CTO
  • 関谷 博之
    • SBドライブ株式会社/バックエンドエンジニア

内容

SpringFest2018のランチセッション「エンタープライズアジャイル と Spring/Wagby の親和性」聴講メモ

プレゼンター

贄 良則 株式会社ジャスミンソフト 代表取締役

ジャスミンソフト社長。Wagbyのコンセプトデザイン、アーキテクチャ設計を行う。超高速開発コミュニティ幹事。IT ベンダーとユーザーの関係性はどうあるべきかを日々、模索中。

概略

エンタープライズアジャイルとは、SoRとSoEの垣根をなくすムーブメント(運動)である” という視点から、そのプラットフォームとして Spring が優れている理由を考察します。さらに具体的事例として Spring をベースとした超高速開発ツール Wagby のアプローチを紹介します。 #sf_lunch

聴講メモ

  • これはスポンサーによるセッションなので、若干広告的な要素を含みます
  • プレゼンターによる主観が多く含まれます

SoRとSoE

  • SoR
    • 社内 ( 基幹系、エンタープライズ )
    • 経費削減のためのIT
    • 計画的設計
    • 仕様が無ければ仕方ない
    • 枯れた技術が安心
  • SoE
    • 社外
    • 売上UPのためのIT
    • 進化的設計 ( アジャイル )
    • 仕様は作るもの
    • 先端技術でなければ競争に勝てない
  • DX ( デジタルトランスフォーメーション ) は、SoEしなければAmazonに蹂躙されるという恐怖感?

アジャイル的なアプローチを取りれたいという視点 ( 下流・上流 )

  • 大手Slerが実績として掲げる「アジャイル開発」はほとんど小規模案件
  • 大規模でどこまで通用するのか?
    • アジャイル開発には丸投げ不可、責任の押し付けあいは不可というドグマが存在

エンタープライズアジャイルは多分こんな感じ? ( 提案 )

エンタープライズとの違い

  • 進化的設計
  • 枯れた技術と先端技術のハイブリッド
  • 自己組織化

何のためのエンタープライズアジャイルか?

  • 開発費と保守費の削減
    • 大規模開発を少人数でやる?
  • 開発スピードアップ
  • ユーザによるシステムイニシアチブの確保

システム・アーキテクチャ的な視点

  • SoEがSoRを飲み込んでいく
    • SoRは古いシステムの延命や、パッケージの導入に席巻
    • SoEをリードするユーザ企業は、流行のアーキテクチャを知っている
  • SoRを支える情報システム部の心構え
    • パブリッククラウドであんたープライズシステムを稼働できるようにする
    • 動作環境を固定するのではなく、常に最新環境で稼働できるようにする
    • 情報システム部が手放してはならないもの

Wagbyの立ち位置 ( 広告部分 )

  • エンタープライズアプリケーションのDevOpsを実現
  • salesfoceやkintoneでもいいのでは?
    • APIを叩くだけでなく、自由度が高い
  • 負荷分散目的よりもモジュール単位での入れ替え容易性を重視

SpringFest2018の「Micrometer/Prometheus による大規模システムモニタリング 〜ヤフーインターネッ ト広告システムで・・・」聴講メモ

プレゼンター

池田 誠 ヤフー株式会社

インターネット広告の開発部に所属。インターネット広告の各サービスが利用する共通ライブラリの開発や、共通課題を解決する業務に従事。最近の気になるSpringプロダクトは、Netflix-Eureka。

概略

マイクロサービスアーキテクチャで構築されたシステムでは、サービスを安定稼働させるためにシステムモニタリングが重要な要素となります。Spring Boot 2では、このシステムモニタリングのためのメトリクス収集を手助けしてくれるMicrometerというライブラリが標準で組み込まれました。 ヤフーのインターネット広告システムでは、MicrometerとPrometheusを採用し数千のSpring Bootアプリケーションインスタンスをモニタリングしています。本セッションでは、MicrometerとPrometheusの簡単な紹介、大規模システムでの導入事例、導入時に遭遇したトラブルや直面している課題をお話しさせていただきます。#sf_26

聴講メモ

  • システムモニタリングを行わないと、パフォーマンス問題に気づかない

システム概要

  • 広告管理システム→広告配信システム
    • 今日紹介するモニタリングは、広告管理システムにて利用中

導入背景

  • 独自のモニタリングシステムの刷新
    • 属人化
    • モニタリング項目追加に開発が必要
    • カバー範囲に余計な領域がある
  • SRE ( Site Reliability Enginieering )
    • アプリケーションの性能とユーザの体験の両方を向上させるため

MicrometerとPrometheusの説明

  • Prometheus
    • 時系列DB+モニタリング
    • pull方式でメトリクス収集
    • 監視対象はメトリクスが記載されたテキストを返却
    • 収集したメトリクスは、PromQLという独自クエリーで検索可能
    • Grafanaを利用
    • 注意点
      • 単独では冗長化できない
        • 内蔵の時系列DBが冗長化できない
        • 公式では、同じ設定のPrometheusを設置する方法が紹介されている
  • Micrometer
    • メトリクス収集ライブラリ
    • Dependency追加&多少の設定追加で動作
    • 様々なモニタリングシステムと連携可能
    • カスタムメトリクス

MicrometerとPrometheusの採用理由

  • Micrometer
    • 複数のプラットフォームで導入可能
      • IaaS, PaaS, CaaS
    • 監視対象アプリケーションへの導入が容易
    • Spring Boot公式サポート
    • 基本的なことができる
  • Prometheus
    • pull方式なので、エージェントレス
    • 大規模システムで利用可能
    • GoogleのSRE本で紹介

モニタリングシステム

  • 数千インスタンスをPrometheusに設定するのが大変 ( 課題 )
    • サービスディスカバリ ( Netflix-Eureka ) を導入
      • Prometheusの鑑賞対象を変更する運用コストの作成
  • Grafanaで共通ダッシュボードを作成
  • ステータスコード200の割合とかもわかる
  • 監視対象が多すぎて、FD超過して監視失敗することも
  • PaaSでは、インスタンス狙い撃ちでメトリクスを収集できない
    • アプリごと割り当てたFQDN単位でしか取れない
    • pushgatewayを使い、PaaS内部からPUSH
      • これもサービスディスカバリを利用してなんとかならないかを検討中
  • メトリクスが増えすぎGC連発
    • パスパラメータを利用し、ラベルのバリエーションが多いが設定でメリスクスを収集してしまうとGCが増えた
  • 性能問題いろいろ

まとめ

良かった点

  • 監視対象側の導入は簡単・低コスト
  • カスタマイズ性抜群・属人化
  • 大規模システムでも利用可能
    • 大量メトリクスで複雑な集計をする場合は、1次集計を工夫する必要あり

悪かった点

  • PromQLの習得コストが高い
  • ナレッジやドキュメント不足で調査に苦労

SpringFest2018の「500+のサーバーで動くLINE Ads PlatformをささえるSpring」聴講メモ

プレゼンター

渡邉 直樹 LINE株式会社 開発3センター 開発Aチーム

複数のLINEファミリーサービスの開発を経て、2017年から広告配信Platformの開発に携わっています。最近はBoot2の新しい機能を使ってみることにハマっています。

概略

LINEではSpringが多く使われています。最近ではSpring Boot 2への移行も進んできました。 本セッションでは、最近のLINEでのSpring活用事例として、500台以上のサーバーで運営される広告配信PlatformのLINE Ads Platformを例にあげて、多量のトラフィックを処理するためのArchitectureと、その中でSpringがどの様に使われているかをご紹介したいと思います。広告配信に特化した話はしない予定です。 #sf_a4 #アンケート

聴講メモ

LINEの広告プラットフォーム

  • SSPDSPのやり取りと50ms以内に行う必要がある
  • RTB ( Real Time Bidding )
  • 三者三様のニーズ
    • 広告主はROIの最大化
    • メディアは利益を最大化したい
    • ユーザはUXが最高であることがが望ましい
  • CTR ( Click Through Rate ) は事後の数値
    • 事前の数値はpCTR ( 予測されたCTR )
      • 機械学習で様々な特徴量から推定値を出す
      • LINE DEVELOPER DAY 2018で話すので詳細は割愛

Spring in LINE Platform

  • 50msを維持する工夫
  • SSP
    • メディア側を管理するプラットフォーム
      • JavaとSprintBoot2
      • Tomcat
      • Caffeineでキャッシュ
      • CMS側はKotlinとNuxt.js
  • DSP
    • 広告を管理しているプラットフォーム
      • Javaを使わない理由はGCがきついから
      • GoのGCは高速なのでGoを採用
  • メモリに乗る量なら全てメモリに乗せる
    • 乗らないのもはRedisで扱う
  • DMP
    • 広告配信を最適化するために特徴となるデータを提供
    • 推定オーディエンス情報 ( 性別、年齢、興味 )
      • LINE Tag
      • Look-a-like
    • 実装
      • JavaとSpringBoot1.5->2 ( 今年から2 )
      • Kafka
      • HBase
      • Redis
  • 推定オーディエンス情報配信
    • Armeria ( 非同期PRC/API )
    • 50msでresponseを返す必要がある
    • G1GCでも数十ms使うときがある
    • 99.9%では問題ない
  • G1GCの時間を短縮しようとして、あまり積極的な目標を設定するとGCのオーバーヘッドが増加して逆効果
    • G1GCはもともと最適化されているっぽい?
    • 対策としてヒープのサイズを大きくした
  • Java11にはZGCがあるから、GCの時間が短くなると期待
  • LINE Tag Event
    • 広告主埋め込むJSタグ
      • 広告主のサイトに貼られているので、どらくらい来るのかわからない
      • そこでスケール可能なKafkaで受け取り、過ぎに使うものはRedis、永続的に利用するものはHBand
  • Data Pipeline / Analytics Cluster
    • 広告配信に関わるあらゆるデータを集計し格納、分析するプラットフォーム
    • Hadoop, Hive, Presto
    • Kafka, Spark
    • ES, Druid
    • Airflow, Mesos, Aurora
    • Filebeat, Logstash
  • LINEでは、各プロジェクトでArchitectureやミドルウェアがバラバラ
    • ドラフィックが膨大なので、高速であることが必須

Technical topic

  • Kafka
    • 高速で安定したstreaming platform
    • 各サービス間でのデータの受け渡しで、責任分界点として利用
      • Kafkaに書き込めば送ったことにする
      • なので必ずKafkaに書き込む
    • QueueやJob Schedulerとして利用
    • write at once, consume anywhere
      • とりあえずKafkaに置いとけば、データは消えないので、いろんなサービスで利用可能
    • Spring Bootと相性が良い
      • ほとんどコードを書かなくて良い
      • spring-kafkaもあるけど、公式のkafka_clientがおすすめ
      • spring-kafkaを利用すると、springのバージョンが固定化されるから、自由にバージョンを上げ下げできない
      • Kafka streamはシンプルに利用できる
  • 最近の開発
    • Spring Boot 2
    • Reactor
      • reactive streams
      • non-blocking + back pressure
      • WebFlux
      • Lettuce5
        • ReactiveAPI
        • 戻り値がMono/Fluxになるから、個人的にはスッキリする
      • CompletableFutureとかCompletableFuture<List>とかくよりもスッキリする
    • Kafka
    • actuator + micrometer ( プロメテウスはやめた )

開発チームについて

  • 2 country
    • 韓国の人とはLINEの翻訳ボットで頑張る
      • 韓国語は単語の並びが近いので、翻訳ボットでなんとかなる
  • 60 developer
  • 100 co-worker

参考リンク

SpringFest2018の「Amazon Cognito使って認証したい?それならSpring Security使いましょう!」聴講メモ

プレゼンター

内立 良介 コイニー株式会社 日本Javaユーザーグループ

Springを使って決済系サービスを開発しているユニセックス系エンジニア。基本的にJava書いてますが、golangかじったり、Vue.jsと戯れたりもしています。お酒が好き、服が好き!

概略

本セッションでは、デフォルトで入っているFORM認証の実装からAmazon Cognitoを使った独自認証、認可の実装まで、どういう流れで認証、認可が行われているかの説明を交えながら紹介します。Spring Security Testの話もします。Amazon Cognitoの仕様に基づいた内容が一部ありますが、汎用的に使える内容になっているかと思います。「スプリングセキュリティコワイ」を少しでもなくしましょう。 #sf_23 #アンケート

聴講メモ

Spring Securityとは

  • モジュール郡
    • Core ( 認証と認可 )
    • Web ( Webアプリのセキュリティ対策 )
    • Config ( XMLネームスペース JavaConfigをサポート)
  • ユーザ ⇔ Filter Chain Proxy ⇔ Security Filter Chain ⇔ アプリ
  • Security Filterの詳細
    • Lgout Filter
    • Annoymous Authentication Filter
    • Basic Authentication Filter
  • 認証
    • spring-security-web ( Authentication Filter ) ⇔ spring-security-core ( Authentication Manager, Authentication Provider )
  • 認可
    • spring-security-web ( Exception Translation Filter, Filter Security Inteceptor ) ⇔ spring-security-core ( Access Decisition Managerの実装, Access Decistion Voterの実装 )
    • AccessDecistionVoter.javaはWebExpressionVoter.javaがデフォルトの処理を適用
    • AffirmativeBased.java
      • Voterの一人でも賛成なら、アクセス権限を付与
    • ConsensusBased.java
      • Voterが過半数賛成なら、アクセス権限を付与
    • UnanimousBased.java
      • Voterの全員が賛成なら、アクセス権限を付与

FORM認証機能の実装

  • 設定クラスと資格情報取得用のServiceのみを実装

Spring Security と Amazon Cognito

Cognito認証実装

  • ID, パスワード認証

Spring Securityのテスト

  • FORM認証のテスト
    • SecurityMockMvcRequestBuilder#formLogin
  • ROLEで制限を与えられているかどうかのテスト

おまけ ( メソッドセキュリティ )

  • メソッドに対してアノテーションをつけるだけでアクセス制御
  • @PreAuthorize
    • メソッドに入る前にチェック処理を行う
    • だめならAccessDeniedExceptionがスロー
  • @PostAuthorize
    • メソッド通過後に戻り値に対してチェック処理を行う
    • だめならAccessDeniedExceptionがスロー
  • @PreFilter
    • メソッドに入る前に引数の中で条件に一致するオブジェクトのみをフィルタリング
  • @PostFilter
    • 条件に一致するもののみ戻り値をチェック

Twitterの反応

スライドの絵が可愛いとのことで、使ってるらしいツールが紹介されてました * https://twitter.com/b1a9idps/status/1057542465844994048 * SIMPLEDIAGRAMS

Spriong Securityが怖い人向けに研修が紹介されてました * https://twitter.com/suke_masa/status/1057505713805844481

参考リンク

SpringFest2018の「実際のプロジェクトで Spring アプリを Kotlin で 開発して得た気づき集」聴講メモ

プレゼンター

長澤 太郎 Ubie株式会社

AI医療スタートアップ Ubie株式会社のプログラマー。日本Kotlinユーザグループ代表、日本Javaユーザグループ幹事を務める。著書に「Kotlinスタートブック」など、共同訳書に「Kotlinイン・アクション」がある。ビールとラーメンとディズニーが大好き。

概略

スピーカーが勤めるUbieでは、既存のRuby on RailsアプリをSpring Frameworkアプリへリプレースするプロジェクトが進行中です。使用言語はKotlinというJVM言語のひとつで、JetBrainsによって開発されている静的型付けオブジェクト指向言語です。 SpringはかねてよりKotlinをサポートしていましたが、Spring Framework 5.0でよりKotlinフレンドリなAPIを提供し始めました。本セッションでは、SpringアプリをKotlinで開発する基本的な話と、実際の開発を経験して得られた知見をTips集のような形で共有します。 KotlinあるいはSpringの入門的な話はしません。Kotlinを用いたSpringアプリ開発に興味がある方、始めて間もない方を対象としています。本セッションを聴いていただき、Kotlinへの関心を高め、Kotlin x Springにありがちな落とし穴を回避する策を学んでいただければ幸いです。 #sf_22 

聴講メモ

kotlinとspringは相思相愛

kotlinはデフォルトでfinalクラス

  • しかし、@Serviceなどは自動でサブクラスを使う
  • そのため、継承を許可するために、open修飾子を利用する必要がある ( 面倒だしダサい )

バリデーションに注意

  • プロパティに@NotNullや@NotBlankは利用できない
    • プロパティは、フィールドとアクセサーの合体なので
  • @field:@NotNullなどのように指定する必要がある
  • optionalと矛盾しないように

WebFlux

  • Reactorだけでなく、Coroutineを併用することで直感的な記述が可能になる ( 写真挿入 )

アノテーションという黒魔術をやめる

アノテーションがKotlin DSL

  • @Beanも不要
    • beansという関数を利用することで、beanの登録を行う
  • @RestControllerも不要
    • コントローラをbeanに登録し、ref関数でbeanを取得しインジェクト

テスト

  • JUnit5
    • @Nestedを利用することで、メソッドをグルーピング
    • assertThrowsに型を指定可能 ( kotlinらしい )
  • AssertJ
    • 変数?.プロパティでプロパティを取り出すとき
    • Kotlin1.3のContractsで、文脈によりnullでないことを示すことができる
    • Dataクラスを利用して比較することで、エラーメッセージが見やすくなる
  • MockK
    • kotlin用のモックライブラリ
    • coEveryにより処理を呼び出しやすい
    • @BeforeEachの中で、clearMockesメソッドを呼び出しモックをクリア
  • WebTestClientのexpectBodyメソッドはヌルポが発生するバグあり
    • 拡張関数のexpectBodyを利用することで解決
    • IntellijIDEAでサジェストされなかったけど、修正済み

ubieのkotlinガイドラインあり

  • ubie-inc/kotlin-coding-style

  • ktlintに従う

  • kotlinは表現力が高いので、シンプルであるように気をつける
  • テストコードはよりひと目見てわかるように
  • 型を明記
  • !!を利用しない
    • requireNotNull関数を利用
  • lateinitは使用しない
    • nullを許容する抜け道なので

まとめ

  • kotlinでも普通にspring利用可
  • javaとの違いを意識する必要がある
    • final / open の違いは意識しなくてもいい
    • バリデーション用のアノテーションは注意
  • coroutineとreactorの相性がよい
  • データクラス同士の比較はレポートが見やすいから推奨
  • モックライブラリはMockKがよさそう
  • 結論
    • サーバーサイドKotlin良い

質疑応答

アノテーションを避けることのメリットは?

DSLでのBean定義ですが、数が増えると大変では?

  • コードとして扱えるので、工夫可能

Mokiitだとデフォルトファイナルクラスは困る?

  • MockKだと、どういう仕組かわからないけど大丈夫

SpringFest2018の「決済システムの内製化への旅 ‒ Spring と PCF で作るクラウドネイティブなシステム開発」聴講メモ

プレゼンター

槙 俊明 Pivotal, Advisory Solutions Architect

Cloud Foundry / Kubernetesの構築・運用支援やその上でSpring Bootを使ったアプリケーション開発支援、Concourseを使ったCI/CD適用支援を行なっている。

鈴木 順也 ソフトバンク・ペイメント・サービス株式会社 シニアアーキテクト

決済システムの開発、運用企画、改善に従事

概略

ソフトバンク・ペイメント・サービス株式会社ではSpringとPivotal Cloud Foundryを使用して、次期決済システムを内製で構築しています。本セッションでは導入の背景や、Spring Boot/Cloudを使用したアーキテクチャの説明、CI/CDやロギング・モニタリングなど取り組み内容のご紹介とあわせて、プラットフォームの導入が開発にどのような効果をもたらすのかをお伝えします。Cloud Foundryを使用した事例となりますが、セッションの内容は他のプラットフォームについても当てはまることが多いため、Spring + クラウドネイティブなプラットフォームの導入を検討をされている方はぜひご参加ください。#sf_h1

聴講メモ

内製化に至る道程

PCFを選んだ理由

  • PCFのサービス
    • Pivotal Container Service
    • Pivotal Application Service ← 今回利用したのはこれ
      • Dockerファイルではなく、BuildPackを書くだけで環境構築ができる
    • Pivotal Function Service
      • OSSのKnaticeとriffベース技術

cf push だけでできること ( 写真挿入 )

  • 12Factorに従うと、開発と運用の責任分解点が明確なので、PCFを選択する理由の一つ
  • PaaS vs Kubernetes
    • どうしてKubernetesが流行っている中で、PaaSなのか
    • PaaSの方が、できることが少ない分、責任を減らせる

全体アーキテクチャ ( 写真挿入 )

  • Spring Cloud GatewayのProxyExchangeで実装
  • スライドで詳細URLあり
  • 加盟店で障害が発生した場合は、DeadLetterQueueにキューを追加

PCFを12Factorの対応 ( 写真挿入 )

  • CI/CDといえばJenkinsだけど、PCF製のConcourseを利用
  • JMeterによる負荷テストの自動化
    • JMeterのレポート機能が綺麗なので、通知して毎日開発前に確認
  • Concourseはコンテナベースなので、Java8~11全てのテストを自動で実施
    • アップデートによる弊害を早期発見
  • Zipkinで処理の実行時間を把握しやすくなる

参考リンク