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
あんしん大規模リプレースサポート
Search
takanamito
June 15, 2016
Programming
1.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
あんしん大規模リプレースサポート
takanamito
June 15, 2016
More Decks by takanamito
See All by takanamito
ActiveModel::Attributes APIとSwaggerでRailsのAPIレスポンスに型を持ち込む
takanamito
0
670
ドキュメントとテストのないプロジェクトを引き継ぐ
takanamito
2
3.6k
Siriに身の回りのお世話をしてもらう
takanamito
0
6.9k
PHPで運用中のサービスをRubyに切り替える
takanamito
0
5.5k
安心してフレームワークをのりかえたい
takanamito
0
1.3k
HLSでやっていく 動画ストリーミング配信
takanamito
0
2.6k
Other Decks in Programming
See All in Programming
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
290
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
360
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
180
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
530
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.9k
AIが無かった頃の素敵な出会いの話
codmoninc
1
390
テーブルをDELETEした
yuzneri
0
140
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
240
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
580
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
220
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Fireside Chat
paigeccino
42
4k
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
380
RailsConf 2023
tenderlove
30
1.5k
Documentation Writing (for coders)
carmenintech
77
5.4k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
So, you think you're a good person
axbom
PRO
2
2.1k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
260
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Transcript
͋Μ͠Μ େنϦϓϨʔεαϙʔτ
ւ֎ϝσΟΞ 2015 • ඦສPV/݄ • 2΄ͲFuelPHP͕Քಇ • 1action 100~200ߦͷcontroller͕ෳ •
ແବͳϖʔδ͕ͨ͘͞Μ
None
FuelPHP -> Ruby on Rails
ϦϓϨʔεཁ݅ • FuelPHPΛ٫͍ͨ͠ • SEOతʹΑ͘ͳ͍ͱ͜ΖΛͳ͍ͨ͘͠ • ແఀࢭͰҠߦ͍ͨ͠ • ϚελσʔλΛ৽͍ͨ͠ •
σβΠϯϦχϡʔΞϧ͍ͨ͠
͍͢͝େม
Ҿ༻5FDIOJDBM4VDDFTTFTBOE'BJMVSFTJOUIF)JTUPSZPG$PPLQBE%FWFMPQNFOU4QFBLFS%FDL IUUQTTQFBLFSEFDLDPNNJSBLVJUFDIOJDBMTVDDFTTFTBOEGBJMVSFTJOUIFIJTUPSZPGDPPLQBE EFWFMPQNFOU Cookpad Techconfʹͯ
Ҿ༻5FDIOJDBM4VDDFTTFTBOE'BJMVSFTJOUIF)JTUPSZPG$PPLQBE%FWFMPQNFOU4QFBLFS%FDL IUUQTTQFBLFSEFDLDPNNJSBLVJUFDIOJDBMTVDDFTTFTBOEGBJMVSFTJOUIFIJTUPSZPGDPPLQBE EFWFMPQNFOU
ͬͯΔ
ͦ͏ͳͷͰ νʔϜͰۓٸձٞ
• FuelPHPΛ٫͍ͨ͠ • SEOతʹΑ͘ͳ͍ͱ͜ΖΛͳ͍ͨ͘͠ • ແఀࢭͰҠߦ͍ͨ͠ • ϚελσʔλΛ৽͍ͨ͠ • σβΠϯϦχϡʔΞϧ͍ͨ͠
ϦϓϨʔεཁ݅ ूத
༷Λ࠷খݶͷείʔϓʹ ߜ࣮ͬͯ
10ສҎ্͋ΔURLͷ 301ϦμΠϨΫτ͕ා͍
301ϦμΠϨΫτ͕ා͍ • 10ສҎ্ଘࡏ͢ΔURL • ৽URLSEOධՁΛҾ͖ܧ͍͗ͨ • ϛεΔͱτϥϑΟοΫͷμϝʔδ͕Ͱ͔͍ • ςετͰͳΜͱ͔୲อͰ͖ͳ͍͔ʁ
ϦμΠϨΫτॲཧ • concernsͱservicesʹॲཧΛӅṭ • ϩδοΫͱσʔλͷςετΛ४උ
concernsͱservicesʹӅṭ class AreasController < ApplicationController include Redirectable # چURL def
area_list redirect(:area) if redirectable?(:area) end # ৽URL def show ~~ ϖʔδੜॲཧ ~~ end end
concernsͱservicesʹӅṭ concern :Redirectable do def redirectable?(controller_name) path = request.path case
controller_name when :area results = REDIRECT_PATHS.map { |target| path.include? (target) } results.include?(true) end def redirect(controller_name, request_params = nil) redirector = Redirector::Factory.create(controller_name) redirect_path = redirector.redirect_path(request_params) redirect_to(redirect_path, status: :moved_permanently) end end ϦμΠϨΫτՄ൱Λ ఆ TFSWJDFΫϥεͰ ઌͷύεΛੜ
ϦμΠϨΫτͷઃܭ • ͍ΘΏΔStrategyύλʔϯ • ServicesԼʹ֤URLʹରԠͨ͠ΫϥεΛ࣮ • ΫϩʔϥʔͳͲͷॲཧͷྲྀΕҰॹͰ தͷ࣮͕ҟͳΔ߹ʹ༗ޮ
ϦμΠϨΫτ • concernsͱservicesʹॲཧΛӅṭ -> ςετ͕ॻ͖͍͢ • ϩδοΫͱσʔλͷςετΛ४උ -> શURLςετͰྲྀͯ͠ΈΔ ->
Ϛελσʔλͷϛεൃݟ
10ສҎ্͋ΔURLͷ ςετ࿙Ε͕ා͍
ຊ൪ݕূ • γϟυϓϩΩγͰͷಈ࡞֬ೝ • nginxͷใΛՄࢹԽ
kage • γϟυϓϩΩγαʔόʔͷgem • cookpadࣾ • ຊ൪ͷτϥϑΟοΫΛෳ͠ ։ൃαʔόʔʹྲྀ͢
None
kage Kage::ProxyServer.start do |server| server.port = 8090 server.host = '0.0.0.0'
server.add_master_backend(:production, 'localhost', 80) server.add_backend(:sandbox, 'localhost', 80) server.client_timeout = 15 server.backend_timeout = 10 server.on_select_backends do |request, headers| if request[:method] == 'GET' [:production, :sandbox] else [:production] end end ~~ தུ ~~ end def compare(production_res, sandbox_res, url) # ͜ͷลͰresponseݟͯϩάग़ͨ͠Γ͢Δ end
kageͷϩά
kage • ग़ྗ͞ΕͨϩάΛோΊΔ • ҧײͷ͋ΔՕॴSTGͰݕূ • ͣͬͱ͑Δ
DatadogͰnginxͷ ϩάΛάϥϑԽ
<source> @type tail path /var/log/nginx/access.log format ltsv time_format %d/%b/%Y:%H:%M:%S %z
pos_file /tmp/fluent.log.pos tag nginx.access </source> <match nginx.access> @type copy # εςʔλεͷΧϯτ <store> @type datacounter tag status.count count_key status unit minute pattern1 2xx ^2\d\d$ pattern2 3xx ^3\d\d$ pattern3 4xx ^4\d\d$ pattern4 5xx ^5\d\d$ @label @status </store> # ϨεϙϯελΠϜຖͷׂ߹ <store> @type numeric_counter tag response_time.percentage unit minute count_key response_time pattern1 u10ms 0 0.01 pattern2 u50ms 0.01 0.05 pattern3 u100ms 0.05 0.1 pattern4 u500ms 0.1 0.5 pattern5 u1s 0.5 1 pattern6 u3s 1 3 pattern7 long 3 @label @response_time </store> # ϨεϙϯελΠϜͷύʔηϯλΠϧ <store> @type numeric_monitor tag response_time.percentile unit minute monitor_key response_time percentiles 50, 90, 95, 98 @label @percentile </store> </match>
Datadog • fluentdͰnginxͷlogΛtailͯ͠ूܭ • fluentd -> datadog-agent -> datadog •
#monitoring Ͱ৭ʑͬͯ·͢
ຊ൪ݕূ • γϟυϓϩΩγͰͷಈ࡞֬ೝ -> ຊ൪ڥͰͷΈى͖Δόάͷൃݟ • nginxͷใΛՄࢹԽ -> ҟৗࣄଶʹؾ͖͍͢ ->
ϨεϙϯελΠϜͷײ͕֮ʹͭ͘
·ͱΊ • ϦϓϨʔεͱʹ͔͘খ͘͞ • ϞδϡʔϧԽͯ͠ςετ͘͢͠ • γϟυϓϩΩγͰຊ൪τϥϑΟοΫݕূ • ࢦඪՄࢹԽͯ͠ҟৗʹؾ͖͘͢