Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CNDF2023前夜祭 - 玄界灘のクラウドネイティブなデータ基盤運用の実践
Search
Kazuhiko Yamashita
August 02, 2023
Technology
820
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CNDF2023前夜祭 - 玄界灘のクラウドネイティブなデータ基盤運用の実践
CNDF2023前夜祭で話したデータ基盤のSREに関連する話です。
Kazuhiko Yamashita
August 02, 2023
More Decks by Kazuhiko Yamashita
See All by Kazuhiko Yamashita
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2.3k
継続的な負荷検証を目指して
pyama86
3
1.7k
成長期における、 ユーザー領域の複雑さと 整備の進め方
pyama86
1
690
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
6.5k
Managing Database Migrations in Go Backend Systems
pyama86
0
540
新しい職場の CI が 20 分かかっていたらあなたならどうする?
pyama86
2
1.5k
事業を差別化する技術を生み出す技術
pyama86
4
2.3k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
11k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
2.1k
Other Decks in Technology
See All in Technology
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
490
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
410
シンガポールで登壇してきます
yama3133
0
340
[Droidcon Orlando '26] The Android Lens: Applying Mobile Forensics to AI Performance
amanda_hinchman
1
110
ダッシュボード"開発"について 〜使われるダッシュボードのつくりかた〜
kimichan
0
190
Aurora MySQL 8.4リリース! Rubyistが備えること / what-rubyist-should-prepare-for-aurora-mysql-8-4
fkmy
0
580
データエンジニアリングとドメイン駆動設計
masuda220
PRO
14
2.5k
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
520
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
280
AI_Dev_Day_製造業領域でのAI活用から見た活用の罠と成功に導く実践知.pdf
kintotechdev
0
160
AIエージェントがあれば技術書なんてすぐ書けるでしょ→無理でした
watany
2
170
生成 AI 時代にいま一度「問い合わせ」について考えてみる
kazzpapa3
1
130
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
sira's awesome portfolio website redesign presentation
elsirapls
0
310
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
GitHub's CSS Performance
jonrohan
1033
470k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
390
Done Done
chrislema
186
16k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Paper Plane (Part 1)
katiecoart
PRO
1
9.8k
Discover your Explorer Soul
emna__ayadi
2
1.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Transcript
ݰքṗͷΫϥυωΠςΟϒͳ σʔλج൫ӡ༻ͷ࣮ફ ʙॵ͍ʂʂՆͩʂʂʂૣ͘ϏΞΨʔσϯߦ͖͍ͨʂʂ̍ฤʙ
ࢁԼ!QZBNB (.0ϖύϘٕज़ج൫νʔϜ γχΞɾϓϦϯγύϧ ɹΩϟϯϓɺཱྀߦɺώϧτϯ८ΓɺιϫχΤ८Γ ($1ɺ"JS fl PXɺ1VC4VCɺ%BUB fl PX
ࠓ͢͜ͱ γεςϜ֓ཁ ͦ͜ʹ͋ͬͨ՝ ͲͷΑ͏ʹղܾͨ͠ͷ͔
ϗεςΟϯάࣄۀ &$ࢧԉࣄۀ ϋϯυϝΠυɾͦͷଞࣄۀ
γεςϜߏ Ingest Pipeline DataFlow CloudComposer Extract Analytics ML BigQuery Vertex
AI source monitor Cloud Logging Cloud Monitoring DBσʔλɺϩάΛBigQueryʹू Pub/Sub
σʔλج൫ͷར׆༻ ྨࣅը૾ݕࡧ ਪન ੜ࢈ੑࢦඪͷଌఆ
ͳ͕ͥʁʁʁ
https://note.com/udzura/n/n5c8647d38 ff f ΑΓҾ༻
ͦ͜ʹ͋ͬͨ՝ མͪଓ͚ΔDAGͱຫੑతͳτΠϧ ΤϯυϢʔβʔ͔ΒͷϑΟʔυόοΫͰݦࡏԽ͢Δো ޮͷѱ͍։ൃ
མͪଓ͚ΔDAGͱ ຫੑతͳτΠϧ
γεςϜߏ Ingest Pipeline DataFlow CloudComposer Extract Analytics ML BigQuery Vertex
AI source monitor Cloud Logging Cloud Monitoring DBσʔλɺϩάΛBigQueryʹू Pub/Sub
མͪଓ͚ΔDAGͱຫੑతͳτΠϧ DAG = Directed Acyclic Graph = ༗ඇ८ճάϥϑ https://air fl
ow.apache.org/docs/apache-air fl ow/stable/core-concepts/dags.html ΑΓҾ༻
DAGͷࣦഊཁҼ 1.༷ʑͳλΠϜΞτ 2.࿈ٳʹΑΔσʔλͷܽଛ 3.ιʔεͷσʔλߏͷมߋɺଐੑ 4.มߋʹΑΔΤϯόά
τΠϧͨΔॴҎ 1.༷ʑͳλΠϜΞτ → ϦτϥΠɺλΠϜΞτᮢมߋ 2.࿈ٳʹΑΔσʔλͷܽଛ → ϦτϥΠɺεΩοϓ 3.ιʔεͷσʔλߏɺଐੑͷมߋ → มߋ͓ͯ͠͠·͍
4.มߋʹΑΔΤϯόά → मਖ਼͓ͯ͠͠·͍
None
ॳख SLI/SLOͷࡦఆ
SLO/SLOͷࡦఆ ʮͳʹ͔ΒΔ͔ʁʯ - վળͷ༏ઌॱҐ ʮͲΕ͘Β͍Δ͔ʯ - Ͱվળͷ߹͍ΛܾΊΔ ·ͣࢦඪΛ࡞Δ͜ͱͰɺۦಈͰҙࢥܾఆͰ͖Δ
SLO/SLOͷࡦఆ SREϫʔΫϒοΫ - Ch 13. Data Processing Pipelines ͲͷΑ͏ʹܾΊΔ͔ʁ https://sre.google/workbook/data-processing/
https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/sli-metrics/data-proc-metrics?hl=ja Google Cloud ΦϖϨʔγϣϯεΠʔτ σʔλॲཧαʔϏε
SLO/SLOͷࡦఆ GrafanaͰ؆୯ʹμογϡϘʔυԽͰ͖Δ
SLO/SLOͷࡦఆ 1.DAGͷޭ 2.DataFlowδϣϒʹ͓͚ΔΤϥʔͷൃੜ 3.DataFlowδϣϒͷεςοϓʹ͓͚Δσʔλͷ
վળͷଧͪख λΠϜΞτͷཁҼͱͳΔɺԆΛऔΓআ͘ɺՁ؍Λৢ͢Δ λΠϜΞτʹ͍ͭͯɺϝτϦΫε͔Βଥͳ͔Λ֬ೝ͢Δ 1. ༷ʑͳλΠϜΞτ
վળͷଧͪख holiday-jpΛ׆༻ͯ͠ɺ࿈ٳ࣌ͷॲཧΛ࣮ BigQuery͔ΒUDFͰ࿈ٳͷ݅ΛఆٛͰ͖ΔΑ͏ʹͨ͠ 2.࿈ٳʹΑΔσʔλͷܽଛ
վળͷଧͪख DebeziumͰDDLΛݕͨ͠ΒSlack௨͢Δ σʔλͷNULLൺ͕૿͑ͨΒ௨͢Δ 3.ιʔεͷσʔλߏɺଐੑͷมߋ https://github.com/pyama86/debezium-ddl-noti fi er/
վળͷଧͪख ຖશDAGΛޕલɺޕޙʹ࣮ߦͯ͠ɺຊ൪࣮ߦΑΓ σʔλͷෆ߹ͳͲΛૣ͘ݕ Ϣχοτςετͷ֦ॆ 4. มߋʹΑΔΤϯόά
࠷͓ۙئ͍ͯ͠ɺTABΛԡ͚ͩ͢ͷࣄͰ͢ ## ೖྗ༷ - Air fl owͷDAGͷϑΝΠϧΛೖྗͱ͠·͢ ## αϯϓϧ࣮1 ```python
{sample1} ``` ## αϯϓϧ࣮2 ```python {sample2} ``` ## ࢦࣔ - ೖྗͱͯ͠͞ΕͨDAGͷςετίʔυΛpytestΛ༻͍࣮͍ͯͯͩ͘͠͞ɻ - Ϋϥεʹ͍ͭͯspymockΛ༻͍ͯϞοΫԽ͍ͯͩ͘͠͞ɻ - 2ͭͷαϯϓϧ࣮Λࣔ͠·͢ɻͦΕΛࢀߟʹ͍ͯͩ͘͠͞ɻ - ͋ͳ͕ͨੜͨ͠ςετͦͷ··ϑΝΠϧʹอଘͯ͠ɺ࣮ߦ͠·͢ɻग़ྗ༰ͷઆ໌ͳͲෆཁͰ͢ɻ ## ೖྗ ϑΝΠϧ໊:{dag_ fi le_path} ```python {dag_ fi le_content} ``` ... $ poetry run python bin/test_generator.py dags/example.py
ΤϯυϢʔβʔ͔Βͷ ϑΟʔυόοΫͰݦࡏԽ͢Δো
ʁʁʁʮࠓͷσʔλ͕ೖͬͯͳ͍Έ͍ͨ ͳΜͰ͚͢ͲɺͳΜ͔͋Γ·ͨ͠ʁʯ
ͳΜͱɺࢹ͕ ΄ͱΜͲͳ͍ͷͰ͋Δ (؆қతͳσʔλ߹ੑͷςετ͕͋Δ͚ͩ)
γεςϜߏ Ingest Pipeline DataFlow CloudComposer Extract Analytics ML BigQuery Vertex
AI source monitor Cloud Logging Cloud Monitoring DBσʔλɺϩάΛBigQueryʹू Pub/Sub
ࢹࣾձ AWSͰECS͍ͬͯΔͱ͜ΖMackerel Container Agentಋೖ Cloud MonitoringͷΞϥʔτఆٛΛSLIʹ߹ΘͤͯTerraformͰ࣮ GCPͱൺͯར༻ن͕খ͍ͨ͞ΊɺશࣾͰར༻͞Ε͍ͯΔMackerelΛར༻͢Δ͜ͱͰ ֶशɺಋೖίετͷݮ
σʔλύΠϓϥΠϯͷࢹ ΰʔϧσϯσʔλͷೖ <source> @type dummy @label @INPUT tag example dummy
{ "accessed_at": "2022-01-01T00:00:00Z", "account_id": 1, "client_id": "12345abcde", "event": "example_event", } </source> https://docs. fl uentd.org/v/0.12/input/dummy ຖඵμϛʔσʔλΛ ύΠϓϥΠϯʹྲྀ͠ɺ ΤϯυϙΠϯτͰࢹ
ޮͷѱ͍։ൃ
γεςϜߏ Ingest Pipeline DataFlow CloudComposer Extract Analytics ML BigQuery Vertex
AI source monitor Cloud Logging Cloud Monitoring DBσʔλɺϩάΛBigQueryʹू Pub/Sub
։ൃڥͱۚͱݖྗ Cloud ComposerͷڥͰ݁߹ςετΛ࣮ߦ͢ΔͨΊʹɺ ςετ༻ͷڥΛຖேࣗಈ࡞ɺຖ൩ࣗಈআ ίετͱνʔϜߏΛؑΈͯɺຖே̎ڥ࡞ͯ͠ɺڞ༻
։ൃڥͱۚͱݖྗ Cloud ComposerͷڥͰ݁߹ςετΛ࣮ߦ͢ΔͨΊʹɺ ςετ༻ͷڥΛຖேࣗಈ࡞ɺຖ൩ࣗಈআ → ো࣌ɺ࣌ؒ֎ʹ͑ͳ͍ ίετͱνʔϜߏ͔Β̎ڥ࡞ͯ͠ɺڞ༻ → ςετͪͷൃੜɺग़ྗ݁Ռͷࠞ߹
I'm Kubernetes Rock Star ΦϯϓϨϛεͷKubernetes্ͰPR͝ͱʹ࣮ߦڥΛ࡞ https://tech.pepabo.com/2023/07/07/data-platform-ci/
ਓͱνΣοΫϦετ DAG A DAG B ࣮ͷ֬ೝΛਓ͕͍ͬͯͨ EmptyOperator( taks_id="external_task_sensor_target )
ྲྀΕͷRuby Rock Star ʮͦΕASTݟͨΒ͍͍͡ΌΜʯ
Abstract Syntax Tree from air fl ow.operators.empty import EmptyOperator EmptyOperator(task_id="child_task3")
% python -m ast example.py Module( body=[ ImportFrom( module='air fl ow.operators.empty', names=[ alias(name='EmptyOperator')], level=0), Expr( value=Call( func=Name(id='EmptyOperator', ctx=Load()), args=[], keywords=[ keyword( arg='task_id', value=Constant(value='child_task3'))]))], type_ignores=[]) grepͰͰ͖ͳ͍͜ͱɺ੩తղੳͳΒղܾͰ͖Δ
͜͜·Ͱͨ͜͠ͱ σʔλج൫ͷ։ൃɺӡ༻ʹ͓͚Δ՝Λ SREͷεΩϧͰվળ
Ҿୀࣦഊʂʂ1
શํҐ࠾༻͍ͯ͠·͢ɻ .-ͬͱΓ͍ͨ͠ɺ43&ͬͱ͓͠Ζ͍ͨ͘͠ ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU
ಥવͰ͕͢ɺ ൧ͷΛ͠·͢
झຯιϫχΤΊ͙Γ https://www.web-soigner.jp/magazine_hakata_gourmet_guide/ Α͏ͦ͜Ԭʂʂ̍
ډञ
ར͖ͷ͔ͨࢤ ٬୯Ձ :4000ʙ6000ԁ ॴ: ᷫԂ ਪਓ: 2 - 4ਓ ਪ͠ɿڕ͔Βͳʹ·Ͱɺ͕ͯ͢ඒຯ͍ɺ
ຊञछྨ͕͋Γ๛ɻ ͦͯ͠ɺWEB༧Ͱ͖Δɻ ࢲతNo.1
͍ͤΜ͍ ٬୯Ձ :6000ʙ8000ԁ ॴ: தऱ ਪਓ: 2 - 8ਓ ਪ͠ɿ҆͘ͳ͍͕ɺԿ৯ͯඒຯ͍ɻ
ΤϏϑϥΠ͕৴͡ΒΕͳ͍σΧ͞ͳͷͱ ͠ඒຯ͍ɻ
ḉ ٬୯Ձ :4000ʙ8000ԁ ॴ: தऱ ਪਓ: 2 - 8ਓ ਪ͠ɿͱʹ͔͘ḉͱञɻ
͋Μ·ΓຊभͰ৯Εͳ͍ḉͩͱࢥ͏
ڕࡾಙ ٬୯Ձ :3000ʙ5000ԁ ॴ: ᷫԂ ਪਓ: 2 - 8ਓ ਪ͠ɿڕͱञ͕͍҆ɻͱʹ͔҆ͯ͘͘ɺඒຯ͍
ୋউ ٬୯Ձ :4000ʙ6000ԁ ॴ: தऱ ਪਓ: 2 - 8ਓ ਪ͠ɿ෦ͷ໊લ͕ϗʔΫεͷબखɻ
ΊͪΌඒຯ͍Θ͚͡Όͳ͍͚Ͳɺ ԿͰ͋Δɻศརɻ
ϥʔϝϯ
Ұ ٬୯Ձ :1000ԁ ॴ: ᷫԂɺതଟ ਪ͠ɿಲࠎofಲࠎ ͍͍ͩͨ৯͏ͱ͖ ᬦᬡͯ͠Δ͔Β ࣸਅͳ͔ͬͨ
໊ౡ ٬୯Ձ :1000ԁ ॴ: തଟɺ໊ౡ ਪ͠ɿͦΜͳʹ͍ڧ͘ͳͯ͘ɺ ɹɹɹόϥϯε͕͍͍ɻ͖
݉ދ ٬୯Ձ :1000ԁ ॴ: ఱਆɺതଟ ਪ͠ɿԬͰྲྀߦͬͯΔ͚ͭ໙ɻ ɹɹɹύϧί͕Ұ൪ฒͳ͍͔
φϯόʔϫϯ ٬୯Ձ :1000ԁ ॴ: ఱਆɺതଟɺᷫԂ ਪ͠ɿ͜ͷลͰ৯ΕΔܥͰҰ൪͖ɻ ී௨ͷϥʔϝϯʹމຑͱߚੜᇙ͍Εͯ ৯Δͷ͕͓͢͢Ί
ͦͷଞ
Τετ ٬୯Ձ :1000ԁ ॴ: Ͳ͜Ͱ͋Δ ਪ͠ɿϩʔΧϧ͏ͲΜνΣʔϯɻ ͏ͲΜࡉ໙ʹωΪଟΊ͕͖ɻ ډञͰɺ৴͡ΒΕͳ͍ίεύ
ؒඈߦ ٬୯Ձ :3000-5000ԁ ॴ: തଟ ਪ͠ɿޫʹೖͬͯΔϗςϧόʔɻ Ҝࢠ͕͍͍ͷͱΏͬ͘ΓͤΔɻ ɹɹɹτϫΠϥΠτͱ͍͏ΧΫςϧ͕͖
ϐΤτϩ ٬୯Ձ :1000-3000ԁ ॴ: Ͳ͜Ͱ͋Δ ਪ͠ɿϥϯνͰͰɺεύʔΫϦϯάͱ ɹɹɹύελorϐβͰܹ҆ඒຯ͍
࠷ߴͷCNDF2023ʹ ͠·͠ΐ͏ʂʂʂ