MOBILITY:dev 2019の聴講メモ
10-31_MOBILITY-dev-2019
ITエンジニアこそ実現できるモビリティのサービス化(keynote session)
登壇者
内容
- CASE : 自動車産業が見据えている方向性の頭文字
- Connected ( ネットワーク化 )
- Autonomous ( 自動運転 )
- Shared and Service ( サービス化 )
- Electric ( 電動化 )
- TESLA
- MaaS
- 所有から利用へ
- PaaSだと、オンプレミスからクラウド
- MaaSだと、車を所有するのではなく、サービスとして利用する時代へ
- 高額な初期費用はなくなり、少額の都度払いか、定額制か
- 所有から利用へ
- MaaS Global社が提供するWhim
- 鉄道、バス、車などの複数の交通機関統合したナビゲーションサービス
- MaaS Global社によるMaaSの定義
- 単一の直感的なモバイルアプリ
- シームレスな利用
- Uber Express Pool
- タクシーが乗客を拾うというより、乗客が歩いて、待つことで更に効率的なライドシェア
- 自動運転の普及による都市への影響
- Drive Sweden - Our Vision - A new approach to mobility - YouTube
- 車ではなく人間が利用するスペースが増える
- 駐車場が減る、無くなる
- センシング技術により車道が狭くなる
- 車ではなく人間が利用するスペースが増える
- Drive Sweden - Our Vision - A new approach to mobility - YouTube
GTFSオープンデータで公共交通をアップデート
登壇者
内容
- GTFSとは
- GTFSの一覧
- GTFSの作り方
- GTFSを作るのは大変だけど、いくつか便利なツールが存在
- 西沢ツール
- GTFS-JP出力機能を持ったExcelマクロ
- ダイヤ編成支援システム「その筋屋」 バス・鉄道会社向けダイヤ編成システム(業務用)
- 品質
- GTFSデータのよくある落とし穴
- バスの停位置が不明確
- 乗り場が複数あっても代表点が使われていたり
- 乗り場が分からない
- バスターミナルのどこから乗ればいいのか不明
- 工事などの理由で乗り場がちょこっと変わるけど、データは変わる以前のままだったり
- 臨時便への対応漏れ
- バスの停位置が不明確
- GTFSデータのよくある落とし穴
- 日本での乗り換え案内データの流通経路
- バス会社は直接データを乗り換え案内サービス事業者の渡している
- 私鉄は交通新聞社やJTBパブリッシングでデータを公開し、乗り換え案内サービス事業者
- JRも交通新聞社経由
- GTFSデータの使い方
秘伝のソースがつなぐ技術と人
登壇者
- 見川 孝太
- 株式会社ヴァル研究所/執行役員CTO 兼 ナビゲーション開発部部長
内容
- 30年前からの秘伝をソースを使っている
- 経路検索か経路探索か
- 探索とは
- 特定の制約条件を満たす物を見つけ出す行動
- 検索とは
- データの集合から目的のデータを見つけ出すこと
- 駅すぱあとは、本当経路探索だけど、検索と言ったほうがわかりやすいから検索ということにした
- 探索とは
- ちょっとアプリの紹介→EMot[エモット] もっといい「いきかた」
- 「最短」を見つけるのではなく、「最適」を見つけたい
- 現在の経路探索結果は、カーナビのような案内と違い、駅と路線のみで抽象化している
- そもそも、本当の発着時点は駅ではなく場所(家など)
- 雨や雪でも大丈夫な経路なのか
- 車い椅子や、スーツケースを持っていても大丈夫な経路なのか
- 駅での乗り換えも、初めての駅で複雑な乗り換えだと具体的にどう歩けば良いのか分からないかも
- 現在の経路探索結果は、カーナビのような案内と違い、駅と路線のみで抽象化している
Webエンジニアが自動運転企業でやっていること
登壇者
- 森本 潤一
- 株式会社ティアフォー/技術本部エンジニア
内容
- Autowareについて
- 自動運転のOS
- OSS
- AutowareのROSノード
- 個別の処理毎にノードがある
- Pub/Sub通信
- 実際に動かしたときのROSのトピックをタイムスタンプと共にROSBAGというファイルに保存
- 過去のROSBAGファイルからアルゴリズムだけ変更して再現することも可能
- 地図データ
- Lanelet2を使っている
- OSM形式を拡張した地図データ
- Lanelet2を使っている
- 検索してみたらこんな資料も… : Autowareにおける三次元物体認識アルゴリズム「PointPillars」の紹介 - Tier IV Tech Blog
- Webでやっていること
アプリケーション エンジニアのための Cloud Spanner Deep dive と BigQuery GIS
登壇者
内容
- Cloud Spanner
- Big Query GIS
- Big Query Geo Vizで可視化
自動運転車を動かすサーバレスシステムの中身
登壇者
- 須山 温人
- SBドライブ株式会社/CTO
- 関谷 博之
- SBドライブ株式会社/バックエンドエンジニア
内容
- Dispatcher | SBドライブ株式会社 | ソフトバンク
- ↑のサービスの紹介
- ↓の技術を利用
- AWS Lambda
- Amazon elasticsearch
- Amazon API Gateway
- Amazon RDS
- Amazon DynamoDB
- Amazon S3
- Amazon DynamoDB
- kibana
- redis
- protocol buffer
- fluentd
SpringFest2018のランチセッション「エンタープライズアジャイル と Spring/Wagby の親和性」聴講メモ
プレゼンター
贄 良則 株式会社ジャスミンソフト 代表取締役
ジャスミンソフト社長。Wagbyのコンセプトデザイン、アーキテクチャ設計を行う。超高速開発コミュニティ幹事。IT ベンダーとユーザーの関係性はどうあるべきかを日々、模索中。
概略
エンタープライズアジャイルとは、SoRとSoEの垣根をなくすムーブメント(運動)である” という視点から、そのプラットフォームとして Spring が優れている理由を考察します。さらに具体的事例として Spring をベースとした超高速開発ツール Wagby のアプローチを紹介します。 #sf_lunch
聴講メモ
- これはスポンサーによるセッションなので、若干広告的な要素を含みます
- プレゼンターによる主観が多く含まれます
SoRとSoE
- SoR
- 社内 ( 基幹系、エンタープライズ )
- 経費削減のためのIT
- 計画的設計
- 仕様が無ければ仕方ない
- 枯れた技術が安心
- SoE
- 社外
- 売上UPのためのIT
- 進化的設計 ( アジャイル )
- 仕様は作るもの
- 先端技術でなければ競争に勝てない
- DX ( デジタルトランスフォーメーション ) は、SoEしなければAmazonに蹂躙されるという恐怖感?
アジャイル的なアプローチを取りれたいという視点 ( 下流・上流 )
エンタープライズアジャイルは多分こんな感じ? ( 提案 )
エンタープライズとの違い
- 進化的設計
- 枯れた技術と先端技術のハイブリッド
- 自己組織化
- 開発費と保守費の削減
- 大規模開発を少人数でやる?
- 開発スピードアップ
- ユーザによるシステムイニシアチブの確保
システム・アーキテクチャ的な視点
- SoEがSoRを飲み込んでいく
- SoRを支える情報システム部の心構え
Wagbyの立ち位置 ( 広告部分 )
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
- Micrometer
- メトリクス収集ライブラリ
- Dependency追加&多少の設定追加で動作
- 様々なモニタリングシステムと連携可能
- カスタムメトリクス
MicrometerとPrometheusの採用理由
- Micrometer
- 複数のプラットフォームで導入可能
- IaaS, PaaS, CaaS
- 監視対象アプリケーションへの導入が容易
- Spring Boot公式サポート
- 基本的なことができる
- 複数のプラットフォームで導入可能
- Prometheus
- pull方式なので、エージェントレス
- 大規模システムで利用可能
- GoogleのSRE本で紹介
モニタリングシステム
- 数千インスタンスをPrometheusに設定するのが大変 ( 課題 )
- サービスディスカバリ ( Netflix-Eureka ) を導入
- Prometheusの鑑賞対象を変更する運用コストの作成
- サービスディスカバリ ( Netflix-Eureka ) を導入
- 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の広告プラットフォーム
- SSPとDSPのやり取りと50ms以内に行う必要がある
- RTB ( Real Time Bidding )
- 三者三様のニーズ
- 広告主はROIの最大化
- メディアは利益を最大化したい
- ユーザはUXが最高であることがが望ましい
- CTR ( Click Through Rate ) は事後の数値
- 事前の数値はpCTR ( 予測されたCTR )
- 機械学習で様々な特徴量から推定値を出す
- LINE DEVELOPER DAY 2018で話すので詳細は割愛
- 事前の数値はpCTR ( 予測されたCTR )
Spring in LINE Platform
- 50msを維持する工夫
- SSP
- DSP
- メモリに乗る量なら全てメモリに乗せる
- 乗らないのもは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
- 広告主埋め込むJSタグ
- 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の翻訳ボットで頑張る
- 韓国語は単語の並びが近いので、翻訳ボットでなんとかなる
- 韓国の人とは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を併用することで直感的な記述が可能になる ( 写真挿入 )
アノテーションという黒魔術をやめる
- @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ガイドラインあり
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
聴講メモ
- ソフトバンクペイメントの決済代行に絞った話
内製化に至る道程
- 2016年時点では、サービス開発はベンダに依存
- 2017年導入ツール
- Spring Boot
- Spring Cloud
- Jenkins
- sonarqube
- Nexus
- 2018年決済システム内製化
- スポード感のある開発とリリース
- 継続的な改善サイクル
- 監視が容易で障害に強いシステム
- →PCFとConsourceの導入
PCFを選んだ理由
- PCFのサービス
- Pivotal Container Service
- Kubernetesを利用した環境
- Pivotal Application Service ← 今回利用したのはこれ
- Dockerファイルではなく、BuildPackを書くだけで環境構築ができる
- Pivotal Function Service
- OSSのKnaticeとriffベース技術
- Pivotal Container Service
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で処理の実行時間を把握しやすくなる
- 特にDB周りはボトルネックになりやすい