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
The Design Philosophy of Kuroko2
Search
Naoto Takai
January 18, 2017
Programming
3
2k
The Design Philosophy of Kuroko2
Internal lightning talks in Cookpad
Naoto Takai
January 18, 2017
Tweet
Share
More Decks by Naoto Takai
See All by Naoto Takai
Building the Perfect Custom Keyboard
takai
0
380
キースイッチ潤滑入門 / A Brief Introduction to Lube MX Switches
takai
2
750
みなさん、分かっていますか / What is a difference?
takai
1
840
Agile and DevOps with Ruby
takai
2
1k
Software Quality and Testing #1
takai
5
610
Microservices in Action
takai
37
5.2k
Ruby App on Netflix Microservices Stack
takai
6
990
How We Use Jenkins?
takai
21
8.1k
COOKPAD and Test Automation
takai
19
2.6k
Other Decks in Programming
See All in Programming
チーム立ち上げにAWSを活用したらClaudeさんに褒められた話
mkdev10
3
230
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
75k
RubyGems on ruby.wasm
kateinoigakukun
0
180
WinActorの勉強を継続する方法
tamai_63
0
130
The Hotwire Landscape After Turbo 8 @ Helvetic Ruby 2024, Zurich
marcoroth
0
120
『WordPressコミュニティで学ぶ』OSS貢献の多様性
ippey
0
310
JS RPCを理解する
yusukebe
5
310
Namespace, What and Why
tagomoris
5
2.6k
Documentation testsの恩恵 / Documentation testing benefits
ssssota
1
580
TypeScriptコードの漸進的改善 / Progressive Improvement of TypeScript Code
medley
1
480
TypeScriptから始める VR生活
tamagokakeg
2
140
教えて!スクラムコーチ品質とスピードのバランスはどうすりゃいいの?
pinboro
0
170
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
Rails Girls Zürich Keynote
gr2m
91
13k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
Optimizing for Happiness
mojombo
371
69k
A Philosophy of Restraint
colly
197
16k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
4 Signs Your Business is Dying
shpigford
176
21k
How GitHub (no longer) Works
holman
305
140k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
2k
How to Ace a Technical Interview
jacobian
273
22k
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!