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
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
180
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
110
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
160
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
250
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
1B+ /day規模のログを管理する技術
broadleaf
0
130
フィードバックで育てるAI開発
kotaminato
1
110
共通化で考えるべきは、実装より公開する型だった
codeegg
0
210
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
160
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
250
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.1k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
A Modern Web Designer's Workflow
chriscoyier
698
190k
Embracing the Ebb and Flow
colly
88
5.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.6k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
AI: The stuff that nobody shows you
jnunemaker
PRO
8
820
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
Exploring anti-patterns in Rails
aemeredith
3
440
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
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ͷใΛՄࢹԽ -> ҟৗࣄଶʹؾ͖͍͢ ->
ϨεϙϯελΠϜͷײ͕֮ʹͭ͘
·ͱΊ • ϦϓϨʔεͱʹ͔͘খ͘͞ • ϞδϡʔϧԽͯ͠ςετ͘͢͠ • γϟυϓϩΩγͰຊ൪τϥϑΟοΫݕূ • ࢦඪՄࢹԽͯ͠ҟৗʹؾ͖͘͢