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
The Design Philosophy of Kuroko2
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Naoto Takai
January 18, 2017
Programming
2.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Design Philosophy of Kuroko2
Internal lightning talks in Cookpad
Naoto Takai
January 18, 2017
More Decks by Naoto Takai
See All by Naoto Takai
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.7k
Building the Perfect Custom Keyboard
takai
2
950
キースイッチ潤滑入門 / A Brief Introduction to Lube MX Switches
takai
2
920
みなさん、分かっていますか / What is a difference?
takai
1
1k
Agile and DevOps with Ruby
takai
2
1.3k
Software Quality and Testing #1
takai
6
750
Microservices in Action
takai
36
5.5k
Ruby App on Netflix Microservices Stack
takai
6
1.2k
How We Use Jenkins?
takai
21
8.7k
Other Decks in Programming
See All in Programming
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
290
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
620
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
190
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
280
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.1k
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
240
オーケストレーション記述言語 Katari
yukikurage
0
220
Spec-driven Development with AI
simas
PRO
0
2.2k
Engineering Biometric UX Across Android Versions | DroidKnights 2026
ryunen344
1
180
GraphQL の onError と Nullability のこれから
quramy
0
210
AI-Powered Domain-Driven Design
ziobrando
0
390
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
200
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
699
190k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Designing for Timeless Needs
cassininazir
1
550
エンジニアに許された特別な時間の終わり
watany
109
250k
From π to Pie charts
rasagy
1
440
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
530
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
Thoughts on Productivity
jonyablonski
76
5.4k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Scaling GitHub
holman
464
140k
Transcript
The Design Philosophy of
• Web-based (not “enterprisy”) • Embedded workflow engine (ruote). •
Distributed architecture • with on demand EC2 provisioning. • communicates with message queue. Kuroko1
kuroko-console RabbitMQ kuoko-worker workflow engine worker process EC2 API launch
exec command web interface web workflow Kuroko1 Overview
kuroko-console RabbitMQ kuoko-worker workflow engine worker process EC2 API launch
exec command web interface web workflow Kuroko1 Pitfalls × × × × × × × × × ×
• It’s really hard to isolate the problem in a
distributed environment. • “Programmable” means programming is always needed. • Nothing is reliable except MySQL. Lessons from Kuroko1
There is data inconsistency between the actual state and the
stored state. Lessons from Kuroko1 (cont.)
State management is a key factor.
• Monolithic is the best. • Data oriented, not process
oriented. • Monitor as possible. Kuroko2
Monolithic Architecture kuroko-console kuoko-worker workflow engine worker process exec command
web interface DB
Kuroko2 Job State job_definitions job_instances tokens noop noop noop noop
/0-noop A job definition A launched job A job state
it do engine.process(token) expect(token.path).to eq '/0-noop' engine.process(token) expect(token.path).to eq '/1-noop'
engine.process(token) expect(token).to be_finished expect(Kuroko2::Token.all.count).to eq 0 end
Kuroko2 Execution State kuroko-worker kuroko-console executions workflow-processor command-executor exec command
loop do execution = Execution.unstarted.take() execution.touch(:started_at) execute_shell(execution.shell) execution.update(exit_status: exit_status, finished_at:
Time.current) execution.finish() end
kuroko-worker kuroko-console executions workflow-processor command-executor exec command Kuroko2 Pitfalls ×
× ×
Kuroko2 Worker Processes command-executor kill process monitor process shell process
exec command
def check_assignment_delay(exec_no_pid) if exec_no_pid.started_at < 1.minutes.ago Kuroko2::Notifications .not_assigned(exec_no_pid, @hostname).deliver_now exec_no_pid.touch(:mailed_at)
end end
def check_process_absence(execution) begin Process.kill(0, execution.pid) rescue Errno::EPERM true rescue Errno::ESRCH
if Execution.exists?(execution.id) notify_process_absence(execution) end end end
• /v1/stats/waiting_execution • /v1/stats/instance Kuroko2 Monitoring API
• State management is a key factor: • monolithic is
the best. • data oriented, not process oriented. • monitor as possible. Kuroko2
is open source product. We are waiting your contributions!