Slide 1

Slide 1 text

ࣗ࡞HTTPϧʔλʔ͔Β ৽͍͠ServeMux΁ @bmf_san
 Go Conference 2024 2024.6.8

Slide 2

Slide 2 text

Who am Iʁ • Kenta Takeuchi • @bmf_san • bmf-san • https://bmf-tech.com/

Slide 3

Slide 3 text

ࣗ࡞HTTPϧʔλʔ IUUQTHJUIVCDPNCNGTBOHPCMJO

Slide 4

Slide 4 text

࿩͢͜ͱ • Go1.22Ͱ௥Ճ͞ΕͨServeMuxͷػೳ • ServeMuxͱαʔυύʔςΟͷൺֱ • ServeMuxͷੑೳ • GoͷHTTPϧʔλʔબఆʹ͍ͭͯࢲݟ

Slide 5

Slide 5 text

ServeMuxͱ͸ʁ • net/http͕͍࣋ͬͯΔϚϧνϓϨΫα • ύεύλʔϯͱϦΫΤετΛϚονϯά͢Δϩ δοΫΛ࣋ͪɺϋϯυϥΛݺͼग़͢ • ServeMuxߏ଄ମ • cf. https://cs.opensource.google/go/go/+/refs/ tags/go1.22.2:src/net/http/server.go;l=2432

Slide 6

Slide 6 text

Go1.22Ͱ௥Ճ͞ΕͨServeMuxͷػೳ • HTTPϝιουʹΑΔϧʔςΟϯάͷఆ͕ٛ Մೳʹͳͬͨ

Slide 7

Slide 7 text

Go1.22Ͱ௥Ճ͞ΕͨServeMuxͷػೳ • ϫΠϧυΧʔυʹΑΔϧʔςΟϯάͷఆٛ ͕Մೳʹͳͬͨ

Slide 8

Slide 8 text

Go1.22Ͱ௥Ճ͞ΕͨServeMuxͷػೳ • ϫΠϧυΧʔυʹϚονͨ͠஋͸ɺ http.RequestͷPathValueϝιουͰऔಘՄ ೳ

Slide 9

Slide 9 text

Go1.22Ͱ௥Ճ͞ΕͨServeMuxͷػೳ • ׬શҰகͱ͍ͨ͠৔߹͸{$}Λ࢖͏

Slide 10

Slide 10 text

ServeMuxͱαʔυύʔςΟͷൺֱ • ServeMuxͱαʔυύʔςΟͷੑೳൺֱΛ࣮ࢪ • https://github.com/bmf-san/go-router-benchmark • ύεύλʔϯͷϚονϯάͷΈͰɺύεύλʔ ϯͷొ࿥ʢϧʔςΟϯάͷఆٛʣ͸ܭଌର৅֎ • gin-gonic/gin, go-chi/chi, gorilla/mux, labstack/ echoͳͲ

Slide 11

Slide 11 text

ServeMuxͱαʔυύʔςΟͷൺֱ • ServeMux͸ฏۉҎ্ͷύϑΥʔϚϯεΛ ͍࣋ͬͯΔ • ϫΠϧυΧʔυͷ਺ʢ/foo/{bar}/{baz}/ {baz}/…ʣ͕૿͑ΔͱੑೳྼԽ͕΍΍ݦஶ • ࣮ࡍͷϢʔεέʔεͱͯ͠͸ϨΞέʔε ͳͷͰؾʹ͢Δ͜ͱͰ͸ͳͦ͞͏

Slide 12

Slide 12 text

ServeMuxͷੑೳ • ੑೳͷྑ͍HTTPϧʔλʔ͸ϝϞϦޮ཰ͷྑ͍໦ߏ ଄ʢex. Radix TreeʣΛ࠾༻͍ͯ͠Δ • ServeMuxͰ͸ɺ࣮૷͕ෳࡶԽ͠΍͍͢σʔλߏ଄͸ ࠾༻͞Ε͍ͯͳ͍ • →༨ఔ࠷ѱͳσʔλߏ଄Λ࠾༻͠ͳ͍ݶΓɺ HTTPϧʔλʔ͕ϨΠςϯγ΍CPU࢖༻཰ʹେ͖ ͳӨڹΛٴ΅͞ͳ͍ʢͨͿΜʣ

Slide 13

Slide 13 text

GoͷHTTPϧʔλʔબఆʹ͍ͭͯࢲݟ

Slide 14

Slide 14 text

΋͏ͪΐͬͱਅ໘໨ͳ΍ͭ

Slide 15

Slide 15 text

GoͷHTTPϧʔλʔબఆʹ͍ͭͯࢲݟ • HTTPϧʔλʔͷҠߦΛݕ౼͢ΔͳΒɾɾ • ࢖͍ͬͯΔHTTPϧʔλʔͷnet/httpͱͷޓ׵ੑ ͸ʁ • ServeMuxʹ͸ͳ͍ػೳ΍ੑೳ͕ඞཁ͔ʁ • ϧʔςΟϯάͷ༏ઌॱҐʹಠࣗͷϩδοΫ͕͋ Δ͔ʁ

Slide 16

Slide 16 text

·ͱΊ • ϫΠϧυΧʔυΛ࢖ͬͨϧʔςΟϯά͕Ͱ͖ΔΑ͏ʹ ͳͬͨ • αʔυύʔςΟͱൺֱͯ͠΋ѱ͘ͳ͍ੑೳ • σʔλߏ଄ͱΞϧΰϦζϜͷબ୒͸อकੑͱੑೳͷό ϥϯε͕େࣄͦ͏ • ৽نʹબఆ͢ΔͳΒServeMuxɺطଘ৐Γ׵͑͸৭ʑݕ ౼͢Δͷ͕ྑͦ͞͏

Slide 17

Slide 17 text

ࣗ࡞HTTPϧʔλʔ͔Β৽͍͠ServeMux΁ • ࠓޙ͸ࣗ࡞HTTPϧʔλʔʢ≠αʔυύʔ ςΟʣͰ͸ͳ͘ServeMuxΛ࢖͍͍ͨͱࢥͬ ͍ͯ·͢ • αʔυύʔςΟ͸έʔεόΠέʔε

Slide 18

Slide 18 text

5IBOLZPVGPSZPVSXBUDIJOHʂ

Slide 19

Slide 19 text

Appendix • ࣗ࡞HTTPϧʔλʔ͔Β৽͍͠ServeMux΁ • https://bmf-tech.com/posts/ %e8%87%aa%e4%bd%9cHTTP%e3%83%ab%e3%8 3%bc%e3%82%bf%e3%83%bc%e3%81%8b%e3%82 %89%e6%96%b0%e3%81%97%e3%81%84ServeMu x%e3%81%b8#14- HTTP%E3%83%AB%E3%83%BC%E3%82%BF%E3 %83%BC%E3%81%AE%E3%83%91%E3%83%95% E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3 %E3%82%B9%E3%81%AB%E3%81%A4%E3%81% 84%E3%81%A6