Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
シェアリングサービスのトランザクションを支えるGo
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
最新技術のエンジニア勉強会!シューマイ! ~Tech Lead Engineer~
September 23, 2020
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
シェアリングサービスのトランザクションを支えるGo
最新技術のエンジニア勉強会!シューマイ! ~Tech Lead Engineer~
September 23, 2020
More Decks by 最新技術のエンジニア勉強会!シューマイ! ~Tech Lead Engineer~
See All by 最新技術のエンジニア勉強会!シューマイ! ~Tech Lead Engineer~
Rails_and_spice
shuuumai
2
440
_何となく_世界からオファーが来る_エンジニアのなり方LT.pdf
shuuumai
1
510
循環的複雑度80超えの現行システムに Laravel × オニオンアーキテクチャ で立ち向かった話(栗原 史明 氏*株式会社うるる)
shuuumai
1
2.4k
シューマイ_Tech_Lead_Engineerから最新技術を学べ_Rails編_登壇資料.pdf
shuuumai
0
480
シューマツワーカー サービス資料
shuuumai
0
610
POL流レバレッジの効いたエンジニア組織を作る
shuuumai
1
490
REACT_NATIVE_EXPOで行うアプリの簡単最速運用_渡邊様_登壇資料_.pdf
shuuumai
0
330
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
700
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
BBQ
matthewcrist
89
10k
Site-Speed That Sticks
csswizardry
13
1.5k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
850
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
Transcript
シェアリング サービスの トランザクションを支える Go 2020/09/23 株式会社スペースマーケット 齋藤 哲
写真 2 自己紹介 経歴 NECソリューション イノベータ株式会社にて、 官公庁向けASPサービス事業にてソフトウェア 開発チーム リーダーとして事業拡大に貢献。 2019年に株式会社スペースマーケットへ入社。プ
ロダクト開発やエンジニア組織強化に従事。 2020 年よりCTOとして全社の技術戦略を担当。 趣味 カラオケ、ギター、機械学習 齋藤 哲・株式会社スペースマーケット
3 スペースマーケットのご紹介
4 スペースマーケットとは? 場所 (スペース) をシェアすることができるプラットフォーム 「働く」「遊ぶ」「暮らす」などのあらゆるシーンにおける選択肢を 広げると共に、遊休スペースの有効な活用・収益化に貢献 借りたい方や貸したい方の様々な “チャレンジ” をご支援しています
5 スペースマーケットのビジネスモデル
6 2020年8月にスペースマーケット WORK をローンチ 働くシーンに特化したスペースを貸し借りできるプラットフォーム 会議・テレワーク・セミナーなどスポット利用 (最短1時間15分単位) や 初期費用等不要でのオフィス レンタルでサテライトや
BCP 対策など
7 note で情報発信も積極的にやっています エンジニア マーケター ビジネス開発 デザイナー コーポレート
8 Go の採用に至るまでの経緯と内容
9 予約システムに係る課題
10 従前のアーキテクチャ フロントエンド、バックエンドからなる一般的なシステム構成 フロントは Node.js、API は Ruby on Rails
11 データ構造 1つのスペースに対し複数のプランが設定可能 さらにプランに対して複数の例外設定(特別営業)も可能 ※ 実際には他にもエンティティがありますが、主旨から外れるため省略しています
12 従前のアーキテクチャの問題点 様々にニーズをとらえるためにプランに工夫を重ねると 計算処理にかかる時間が増える(UX 低下)
13 そんな折に挙がった予約導線の改善施策 • 従前の UI ではプランを選択した上でカレンダーを表示 ◦ カレンダー表示の計算対象は1プランのみ ◦ この状態で
API 処理のみで平均およそ 500 ms • 施策の一環で、カレンダーで日時を決めた後にプランを選択 ◦ 全てのプランが計算対象に ◦ 10 以上のプランをもつスペースあり ◦ 従前のまま素直に実装すると数秒かかることに・・・
14 問題 • 予約直前までたどりついてくれたユーザーの体験が下がる • 予約まで進まずに途中で離脱 = コンバージョン低下 施策の目的が達成できないどころか場合によっては改悪に
15 課題 予約カレンダーの応答性能向上
16 目標 1. 予約カレンダーに必要な計算処理を、できるかぎりオンライン ではなく事前に計算してキャッシュする 2. キャッシュは、予約の状況にあわせてできるかぎり短時間で 更新されるようにする
17 予約カレンダーのキャッシュ
18 事前計算する仕組み作り スペースの営業時間や予約状況から カレンダーに表示する情報を事前計算する常駐バッチを追加
19 差分更新 前回実行時からの更新レコードを検出 カレンダー情報の差分のみを更新
20 キャッシュ更新時間の短縮
21 キャッシュの更新時間を短縮するには? [判断基準] • 計算処理のパフォーマンス • 並列処理の実装・保守の容易性 • 採用実績やエコシステムの充実 •
言語としてのシンプルさ(習得容易性) より効率的に計算ができる処理系を選択
22 処理系の比較結果 Go が最適と判断 判断基準 Go Java Node.js Rust C++
計算処理のパフォーマンス 3 2 1 5 4 並列処理の実装・保守の容易性 5 4 3 1 2 採用実績やエコシステムの充実 2 5 3 1 4 言語としてのシンプルさ 5 3 2 4 1 合計 15 14 9 11 11 ※ 社内での比較のため独自に調査した資料であり、処理系としての優劣を示す資料ではありません
23 [再掲] 事前計算する仕組み作り Go で新たにカレンダー構築ジョブを実装
24 並列処理の実装 Go に備わっている軽量スレッドにより とてもシンプルに並列処理を実装
25 苦労した点 • 性能最大化を図るため database/sql パッケージで SQL を直叩き • I
/ O スループットを高めることができたが・・・ • 並列処理も相まって接続プールの奪い合いからの実行時エラーが多発 • 以下のパラメータを調整してなんとか接続プールを循環できるように ◦ SetMaxOpenConns() ◦ SetMaxIdleConns() ◦ SetConnMaxLifetime() • ご参考:SQL ドライバ => go-sql-driver/mysql データベース接続プールの最適化
26 効果と課題
27 効果 • オンライン処理の応答性能 ◦ 平均およそ 500 ms から数十 ms
に向上 ◦ 性能テストの結果、平常時トランザクションの約5倍まで劣化 なし • キャッシュ更新の所要時間 ◦ 差分更新に当たり平均 15 分以内
28 課題 • カレンダー計算処理の重複解消 ◦ 予約確定時の在庫引当で再計算するため残存 ◦ 予約日時の範囲での計算になるため時間はかからないが保 守性が落ちるので解決したい •
キャッシュ更新のさらなる短縮 ◦ さらなるスケールや計算処理の一元化に向けて
29 さらなる改善後の姿
30 現在の仕組み 常駐バッチを廃し、元データ更新をトリガーにイベント発火 ジャスト イン タイムでカレンダーを更新
None