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
OutputとBufferedOutputの間の何か
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kazegusuri
December 13, 2013
Programming
3.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OutputとBufferedOutputの間の何か
Fluentd Casual Talks #3
kazegusuri
December 13, 2013
More Decks by kazegusuri
See All by kazegusuri
go-sqlite3を使ってCloud Spannerエミュレーターを作ってみた / Cloud Spanner emulator with go-sqlite3
kazegusuri
5
6.8k
handy-spanner GCPUG
kazegusuri
4
2.1k
Open SKT: メルペイ開発の裏側 / builderscon tokyo 2019 Open SKT
kazegusuri
22
28k
Keep watching and extending features of gRPC
kazegusuri
3
2.7k
Testing with microservices in merpay
kazegusuri
10
11k
Real World Mercari API Architecture
kazegusuri
1
6.5k
gRPC and REST with gRPC in practice
kazegusuri
19
8.2k
Fluentdで始めるPrometheus / Prometheus Tokyo Meetup #1
kazegusuri
1
2k
GRPCの実践と現状での利点欠点 / Go Conference 2016 Spring
kazegusuri
44
32k
Other Decks in Programming
See All in Programming
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
330
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
140
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
380
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
690
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.1k
Getting Started with Vibe Coding
miccheng
0
140
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
300
オーケストレーション記述言語 Katari
yukikurage
0
220
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
330
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
500
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
170
JIS keyboard support in Omarchy
lef237
0
180
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
A Soul's Torment
seathinner
8
3.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Visualization
eitanlees
153
17k
Code Review Best Practice
trishagee
74
20k
Optimising Largest Contentful Paint
csswizardry
37
4k
Bash Introduction
62gerente
615
220k
Building Applications with DynamoDB
mza
96
7.3k
Leo the Paperboy
mayatellez
10
2.4k
Embracing the Ebb and Flow
colly
88
5.2k
Transcript
Outputと BufferedOutputの間 の何か 風薬(@kazegusuri) Fluentd Casual Talks #3
自己紹介 • 風薬(@kazegusuri) • 最近Fluentd使い始めた – たまにPR投げたりしてます – GitHub: sabottenda
• LLVM/Clangとか – 夏と冬にあるお祭りに参加してます – http://motipizza.com
登場人物 • Outputプラグインさん • BufferedOutputプラグインさん • 何か
BufferedOutputさん便利 • BufferedOutputさん – リクエストをバッファリングしてくれる • 仕事が多い日も大丈夫 – 失敗しても再送してくれる •
しっかりもの
Outputさん便利 • Outputさん – 仕事はため込まないよ • ぼくの仕事はここまで • だけど仕事は速い –
失敗してもしらないフリ • お茶目さん
Output vs BufferedOutput • Outputさん – 普段の仕事はまかせよう – 失敗するものはまかせたらだめだぞ •
BufferedOutputさん – 時間のかかる仕事はまかせよう • 仕事がたまってもちゃんと片付けてくれる – 失敗しそうなものはまかせよう • 失敗時のケアも難なくこなすできる人
そんな彼らに 罠が!!
BufferedOutputさん不器用 • 失敗時の再送は最初から行う – リクエストはまとめて1リクエストですべき – そうじゃないと2回リクエストしちゃう • 冪等性あればいいよ #
あまり良くない例 def write(chunk) # メッセージ毎にAPIコール chunk.each do |tag, time, record| do_api_call(tag, time, record) end end
Outputさんその場しのぎ • Outputさんが仕事を押しつけられるケース – BufferedOutputさんができないので • 再送処理実装面倒だし~ – そもそもBufferedの書き方がわからない •
仕組みがわからないと少し複雑 だけど失敗時にロストします!!
間の何か • 二人の間の領域を満たす何かは無いのか… – バッファリングして欲しい – 再送して欲しい – 1リクエスト毎に処理したい
間の何か • 二人の間の領域を満たす何かは無いのか… – バッファリングして欲しい – 再送して欲しい – 1リクエスト毎に処理したい •
fluent-plugin-bufferizeだ! – なおネーミングは若干ミスった感があります
fluent-plugin-bufferize • Outputプラグインに以下の機能を付与する – バッファリング – 1リクエスト毎の再送 – チャンクの途中で再起動しても続きから再開 •
実装はBufferedOutput – オプションが全て使える • buffer_type: メモリ/ファイル選択 • flush_intervalなどなど • 既存のOutputプラグインをそのまま使える
設定方法 • BufferedOutputのオプションを書く • configディレクティブに以前の設定を書く <match *> type bufferize buffer_type
file buffer_path /var/log/fluent/myapp.*.buffer # outputプラグインの設定をconfigの中に書くだけ <config> type http endpoint_url http://foo.bar.com/ http_method put </config> </match>
再送の実装は? • BufferedOutputをそのまま利用 – BufferedOutputでは例外が発生時に再送 – Outputプラグインの例外をそのまま渡す • BufferedOutputは最初から再送しようとする –
どこまで処理したかをbufferizeが記憶 – 続きから再送
問題点 • Outputプラグインが例外をはかないと再送しない – 既存のプラグインは大抵エラーを無視する… – bufferize用に例外をはくようにする • 再送時のコストが大きい –
次のメッセージまで読みながらスキップしている – msgpackにIO#tellの機能が欲しい(もしくは自分の勘違いかも) • できたてほやほや
ご利用は計画的に fin