SlideShare a Scribd company logo
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
2018年8月6日
スマートデバイス本部
大城卓
Go + Pulsar WebSocket APIの
利用事例
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
自己紹介
2
• 2012新卒入社
• プラットフォーム開発本部(2012-2016)
社内PF開発 C++ PHP
• スマートデバイス開発本部(2016-)
サーバサイド開発 C++ PHP Go
大城 卓(オオシロ タカシ)
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
目次
3
• スマートデバイス本部について
• システム概要・構成
• ハマったところ
• Pulsarを使ってみて
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
スマートデバイス本部について
• 将来の事業に大きな貢献をもたらすタネを
見つける
• スマホアプリの次を模索
4
https://mythings.yahoo.co.jp/
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
システム概要
5
• クライアントのデータをDBに
蓄積したい
• トラフィックは小さい
• レスポンスは速くしたい
• コード流用のため、
Apache + PHPで構築
WebAPI
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
システム構成
6
Consumer
MySQLPulsar
(Broker)WebAPI
WebSocket WebSocket
OpenStack
Apache
PHP
Cloud Foundry
Go言語
リクエスト
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
ハマったところ
Consumerが返したAckをBrokerが受け取ってくれない
→ LB(ロードバランサ)のセッション維持時間が2分だった
→ LBのセッション情報が2分で消え、パケットが破棄
されていた
7
Consumer
Pulsar
(Broker)
AckLB
Message
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
定期的なPing送信
8
// Ping
go func() {
ticker := time.NewTicker(time.Minute)
defer ticker.Stop()
for {
select {
case <-ticker.C:
conn.WriteMessage(websocket.PingMessage, []byte{})
}
}
}()
// Consume
go func() {
for {
m := msg{}
conn.ReadJSON(&m)
conn.WriteJSON(res{MessageID: m.ID}) // Ack
// DB登録処理
}
}()
https://tools.ietf.org/html/rfc6455#section-5.5.2
定期的にPing送信する
Goroutine
Messageを受け取り、DBに
書き込むGoroutine
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
Pulsarを使ってみて
• WebSocket APIで言語を選ばず使える
• 各言語のWebSocket実装を参考にできる
• Athenz認証の学習コストが高い
• 運用はこれからです
9
公開
Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.
おわり

More Related Content

PPTX
YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知
PDF
Bonfire API #1 APIのリトライ処理
PPTX
YJTC18 D-7 Yahoo!ショッピングのサービスデータ活用事例
PDF
Googleアシスタントアプリ実際のところ
PPTX
YJTC18 C-1 Kotlin導入の状況と展望
PDF
Serving Engine as a Service at Yahoo! JAPAN #SolrJP
PPTX
YJTC18 Keynote Shape the Future - through the Power of Technology
PDF
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知
Bonfire API #1 APIのリトライ処理
YJTC18 D-7 Yahoo!ショッピングのサービスデータ活用事例
Googleアシスタントアプリ実際のところ
YJTC18 C-1 Kotlin導入の状況と展望
Serving Engine as a Service at Yahoo! JAPAN #SolrJP
YJTC18 Keynote Shape the Future - through the Power of Technology
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes

What's hot (20)

PDF
YJTC18 A-1 大規模サーバの戦略
PDF
ソフトウェアベンチャーのサポートエンジニア
PDF
Bonfire API #1 生体認証のAPI化
PPTX
YJTC18 B-7 Yahoo! JAPANアプリの作り方
PDF
[社内合同勉強会]インフラ業務を開発エンジニアへ移譲して 移譲前-移譲後-そして今-
PPTX
SORACOM Harvest Dataを使ってHACCP向けPoCシステムを作る
PDF
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
PDF
Yahoo! JAPANの不正投稿対策 #yjmu
PDF
Yahoo! JAPAN MEETUP #21~Gitを使ったチーム開発体験@名古屋~
PDF
ヤフーにおけるHadoop Operations #tdtech
PDF
Yahoo!ブラウザーにおける市場環境の分析と戦略化
PDF
Prestoクエリログの保存/分析機能の構築 #yjdsnight
PDF
Bot Builder V4 SDK + QnA Maker / LUIS
PPTX
[デブサミ秋2015] 新卒入社エンジニアが 2年間fluentdを運用して学んだ事いろいろ
PPTX
Heroku meetup#15 lt
PDF
SQLiteDatabaseを無理矢理覗く
PDF
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
PDF
potatotips (iOS/Android開発Tips共有会) 第19回 資料
PPTX
TitaniumとNode.jsは兄弟
YJTC18 A-1 大規模サーバの戦略
ソフトウェアベンチャーのサポートエンジニア
Bonfire API #1 生体認証のAPI化
YJTC18 B-7 Yahoo! JAPANアプリの作り方
[社内合同勉強会]インフラ業務を開発エンジニアへ移譲して 移譲前-移譲後-そして今-
SORACOM Harvest Dataを使ってHACCP向けPoCシステムを作る
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
Yahoo! JAPANの不正投稿対策 #yjmu
Yahoo! JAPAN MEETUP #21~Gitを使ったチーム開発体験@名古屋~
ヤフーにおけるHadoop Operations #tdtech
Yahoo!ブラウザーにおける市場環境の分析と戦略化
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Bot Builder V4 SDK + QnA Maker / LUIS
[デブサミ秋2015] 新卒入社エンジニアが 2年間fluentdを運用して学んだ事いろいろ
Heroku meetup#15 lt
SQLiteDatabaseを無理矢理覗く
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
potatotips (iOS/Android開発Tips共有会) 第19回 資料
TitaniumとNode.jsは兄弟
Ad

Similar to Go + Pulsar WebSocket APIの利用事例 #pulsarjp (20)

PDF
メッセージキュー「Pulsar」の紹介 @OSC_20171007
PPTX
Pulsar Handson 20180226
PPTX
M-6 MQTTの使いどころ (JJUG CCC 2015 Spring)
PDF
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
PPTX
120512 metro styleapp_javascript
PDF
Web socketドロンくん その後-
PDF
Html5, Web Applications 2
PPTX
SL囲む会東京5 Nodejs×Silverlightではまったこと
PDF
WebSocket + Node.jsでつくるチャットアプリ
PDF
これからのHTML5の「つながる」
PDF
Node.jsでブラウザメッセンジャー
KEY
2012-09-09.nagoyapm07
PPTX
Interactive connection2
PDF
ヤフー発のメッセージキュー「Pulsar」のご紹介
PDF
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
PDF
WebSocket Protocol と Plack::Middleware::WebSocket
PDF
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
PDF
Janogia20120921 yoshinotakeshi
PDF
20130315 abc firefox_os
PDF
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
メッセージキュー「Pulsar」の紹介 @OSC_20171007
Pulsar Handson 20180226
M-6 MQTTの使いどころ (JJUG CCC 2015 Spring)
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
120512 metro styleapp_javascript
Web socketドロンくん その後-
Html5, Web Applications 2
SL囲む会東京5 Nodejs×Silverlightではまったこと
WebSocket + Node.jsでつくるチャットアプリ
これからのHTML5の「つながる」
Node.jsでブラウザメッセンジャー
2012-09-09.nagoyapm07
Interactive connection2
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
WebSocket Protocol と Plack::Middleware::WebSocket
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Janogia20120921 yoshinotakeshi
20130315 abc firefox_os
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
Ad

More from Yahoo!デベロッパーネットワーク (20)

PDF
ゼロから始める転移学習
PDF
継続的なモデルモニタリングを実現するKubernetes Operator
PDF
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
PDF
オンプレML基盤on Kubernetes パネルディスカッション
PDF
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
PDF
Persistent-memory-native Database High-availability Feature
PDF
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
PDF
eコマースと実店舗の相互利益を目指したデザイン #yjtc
PDF
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
PDF
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
PDF
ビッグデータから人々のムードを捉える #yjtc
PDF
サイエンス領域におけるMLOpsの取り組み #yjtc
PDF
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
PDF
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
PDF
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
PDF
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PDF
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
PDF
「新しいおうち探し」のためのAIアシスト検索 #yjtc
PDF
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ゼロから始める転移学習
継続的なモデルモニタリングを実現するKubernetes Operator
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Persistent-memory-native Database High-availability Feature
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
eコマースと実店舗の相互利益を目指したデザイン #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
ビッグデータから人々のムードを捉える #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc

Go + Pulsar WebSocket APIの利用事例 #pulsarjp

  • 1. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. 2018年8月6日 スマートデバイス本部 大城卓 Go + Pulsar WebSocket APIの 利用事例
  • 2. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. 自己紹介 2 • 2012新卒入社 • プラットフォーム開発本部(2012-2016) 社内PF開発 C++ PHP • スマートデバイス開発本部(2016-) サーバサイド開発 C++ PHP Go 大城 卓(オオシロ タカシ)
  • 3. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. 目次 3 • スマートデバイス本部について • システム概要・構成 • ハマったところ • Pulsarを使ってみて
  • 4. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. スマートデバイス本部について • 将来の事業に大きな貢献をもたらすタネを 見つける • スマホアプリの次を模索 4 https://mythings.yahoo.co.jp/
  • 5. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. システム概要 5 • クライアントのデータをDBに 蓄積したい • トラフィックは小さい • レスポンスは速くしたい • コード流用のため、 Apache + PHPで構築 WebAPI
  • 6. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. システム構成 6 Consumer MySQLPulsar (Broker)WebAPI WebSocket WebSocket OpenStack Apache PHP Cloud Foundry Go言語 リクエスト
  • 7. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. ハマったところ Consumerが返したAckをBrokerが受け取ってくれない → LB(ロードバランサ)のセッション維持時間が2分だった → LBのセッション情報が2分で消え、パケットが破棄 されていた 7 Consumer Pulsar (Broker) AckLB Message
  • 8. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. 定期的なPing送信 8 // Ping go func() { ticker := time.NewTicker(time.Minute) defer ticker.Stop() for { select { case <-ticker.C: conn.WriteMessage(websocket.PingMessage, []byte{}) } } }() // Consume go func() { for { m := msg{} conn.ReadJSON(&m) conn.WriteJSON(res{MessageID: m.ID}) // Ack // DB登録処理 } }() https://tools.ietf.org/html/rfc6455#section-5.5.2 定期的にPing送信する Goroutine Messageを受け取り、DBに 書き込むGoroutine
  • 9. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. Pulsarを使ってみて • WebSocket APIで言語を選ばず使える • 各言語のWebSocket実装を参考にできる • Athenz認証の学習コストが高い • 運用はこれからです 9
  • 10. 公開 Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2018 Yahoo Japan Corporation. All Rig hts Reserved. おわり