Slide 1

Slide 1 text

Fukuoka.go#16 Tomohisa Oda / July 14, 2020 VisualizeIMAP Everybody

Slide 2

Slide 2 text

Fukuoka.go#16 @linyows Blog: tomohisaoda.com Affiliation: GMO pepabo, inc.

Slide 3

Slide 3 text

Fukuoka.go#16 ๏ ϗεςΟϯάࣄۀ෦Senior Engineering Lead ࣄۀ෦ͷCTO΍VPoEͷΑ͏ͳ΋ͷ ๏ ϖύϘݚڀॴ۝भେֶڞಉݚڀ 2020Պݚඅ࠾୒IUUQTLBLFOOJJBDKQHSBOU,",&/)*130+&$5, ܰྔίϯςφʹΑΔେن໛ߴूੵϝʔϧϗεςΟϯάج൫ʹ͓͚Δૹ৴ػೳͷߴػೳԽ In Pepabo…

Slide 4

Slide 4 text

Fukuoka.go#16 Private Projects ΞϓϦέʔγϣϯࣗ਎͕ϦϙδτϦ͔Β࠷৽ͷίʔυΛݕ ஌ͯࣗ͠ಈͰσϓϩΠͱσϦόϦʔΛߦ͏πʔϧ MJOVYͷVTFS໊લղܾΛ(JU)VCͷ5FBNϝϯόʔ΍Ϧϙδτ ϦͷΞΫηεݖݶऀ͔Βߦ͏πʔϧ

Slide 5

Slide 5 text

Fukuoka.go#16 Pepabo͸ϗετ͍ͯ͠·͢

Slide 6

Slide 6 text

Fukuoka.go#16 ๏ Domain — DNS ๏ Web — HTTP, SSH, FTP and WebDav… ๏ Mail — SMTP, POP, IMAP… ๏ Database — (MySQL, SQLite…) ϩϦϙοϓ΍ϔςϜϧ͕ϗετ͍ͯ͠Δ΋ͷ ͍ΖΜͳٕज़Λѻ͍ͬͯ·͢

Slide 7

Slide 7 text

Fukuoka.go#16 ๏ Domain — DNS ๏ Web — HTTP, SSH, FTP and WebDav… ๏ Mail — SMTP, POP, IMAP… ๏ Database — (MySQL, SQLite…) ϩϦϙοϓ΍ϔςϜϧ͕ϗετ͍ͯ͠Δ΋ͷ ຊ೔͸ίίͷ࿩

Slide 8

Slide 8 text

Fukuoka.go#16 Mail ࢖͍ͬͯ·͔͢ʁ

Slide 9

Slide 9 text

Fukuoka.go#16 ͍·Ͳ͖ϝʔϧʁ͔ͭͬͯͳ͍ʁ͍΍͍΍͍΍ʜ — Chat Type — Messaging Type

Slide 10

Slide 10 text

Fukuoka.go#16 ΄Βɺࢥ͍ग़͠·͔ͨ͠ʁͪΌΜͱ࢖͍ͬͯ·͢Ͷʁ

Slide 11

Slide 11 text

Fukuoka.go#16 େมਃ͠༁͋Γ·ͤΜ

Slide 12

Slide 12 text

Fukuoka.go#16 େମ(NBJMPS(4VJUFͰ͢ΑͶʁ

Slide 13

Slide 13 text

Fukuoka.go#16 ͍ʹ͑͠ͷٕज़ͱ͸͍͑ɺMailʹมΘΔ ΦʔϓϯͳMessagingγεςϜ͸ͳ͍

Slide 14

Slide 14 text

Fukuoka.go#16 Mailͷ࢓૊Έ

Slide 15

Slide 15 text

Fukuoka.go#16 Architecture RFC 5598 ʹ͋Γ·͕͢ʜ

Slide 16

Slide 16 text

Fukuoka.go#16 Architecture ΋ͬͱγϯϓϧͳ΍ͭ ͜ΕͰ࠷খߏ੒ͳͷͰࠜຊతʹ ΢ΣϒΑΓෳࡶ Mail Submission Agent :587 Mail Transferring Agent :25 Mail Delivery Agent :993 Postfix Postfix Dovecot ✉ ✉ SMTP SMTP LMTP IMAP

Slide 17

Slide 17 text

Fukuoka.go#16 ϩϦϙοϓ΍ϔςϜϧʹ͍ͭͯ

Slide 18

Slide 18 text

Fukuoka.go#16 Our Status 120 100k 2.2k Over /min ͜ͷΑ͏ͳن໛ײ

Slide 19

Slide 19 text

Fukuoka.go#16 Our Status 120 100k 2.2k Over /min ͜ͷΑ͏ͳن໛ײ ϝʔϧαʔό୆ʹ৐Δ ϝʔϧΞΧ΢ϯτ Max ϝʔϧαʔόͷ਺ ෼ؒʹૹΔϝʔϧ ௨਺ʢDeliveredʣ

Slide 20

Slide 20 text

Fukuoka.go#16 Our Challenges ๏ ૹ৴ ๏ IP BanɺBlack ListೖΓ໰୊ ΞΧ΢ϯτ৐ͬऔΓ΍ෆਖ਼ར༻໰୊ ѱҙͷͳ͍େྔϝʔϧ഑৴ ๏ ड৴ ๏ ϑΟογϯάɺ΢ΟϧεɺεύϜϝʔϧഉআ໰୊ ๏ Disk I/Oෛՙ໰୊

Slide 21

Slide 21 text

Fukuoka.go#16 ๏ ૹ৴ ๏ IP BanɺBlack ListೖΓ໰୊ ΞΧ΢ϯτ৐ͬऔΓ΍ෆਖ਼ར༻໰୊ ѱҙͷͳ͍େྔϝʔϧ഑৴ ๏ ड৴ ๏ ϑΟογϯάɺ΢ΟϧεɺεύϜϝʔϧഉআ໰୊ ๏ Disk I/Oෛՙ໰୊ Our Challenges

Slide 22

Slide 22 text

Fukuoka.go#16 ๏ ͍͍ετϨʔδΛങ͑͹ղܾ͢Δ ๏ ௿Ձ֨ଳͷαʔϏεͳͷͰݫ͍͠ ๏ ݱঢ়ɺෛՙͷߴ͍ΞΧ΢ϯτΛҠઃͯ͠Ϧιʔε ফඅΛۉ͢ઓུ ๏ ࣌ʹ͸SFTUBSUʜ IMAP Disk I/O ໰୊

Slide 23

Slide 23 text

Fukuoka.go#16 ๏ ओʹPrometheusΛ࢖͍ͬͯΔ ๏ ֤Proxy΍ϝʔϧαʔόʹ͍Εͨnode_exporterʹΑΔϦιʔε؂ࢹ ๏ mtailͰϝʔϧΩϡʔ΍େखϓϩόΠμʔ΁ͷό΢ϯεϝʔϧͷ؂ࢹ ๏ blackbox_exporterͰsmtp, pop, imapͷPort؂ࢹ ݱঢ়ͷ؂ࢹ͸े෼Ͱ͸ͳ͍ Monitoring

Slide 24

Slide 24 text

Fukuoka.go#16

Slide 25

Slide 25 text

Fukuoka.go#16

Slide 26

Slide 26 text

Fukuoka.go#16

Slide 27

Slide 27 text

Fukuoka.go#16 imap_exporterΛ࡞ͬͨ

Slide 28

Slide 28 text

Fukuoka.go#16 ๏ ϛυϧ΢ΣΞʹґଘ͠ͳ͍ΑΓந৅తͳϓϩτίϧϨϕϧͳϝτϦΫεΛऔಘ͢Δ ๏ Mail User Agent͕ඞͣߦ͏Ұ࿈ͷίϚϯυΛൃߦ͔͔ͯͬͨ࣌ؒ͠ΛͱΔ ๏ Connection / Login / List / Select / Fetch / Logout ๏ IMAP Client͸ɺطଘϞδϡʔϧΛ࢖͏ͷͰͳࣗ͘લͰ࣮૷͢ΔʢIMAPͷؾ࣋ͪʹͳ Δʣ imap_exporter

Slide 29

Slide 29 text

Fukuoka.go#16 ๏ RFC2060ΛΑʔ͠ಡΉͧͱ ࢥͬͨΒ్தͰ૬౰ͳϘϦϡʔ Ϝ͕͋Δ͜ͱʹؾͮ͘ ๏ SMTP͕ϖʔδ΄Ͳʹରͯ͠ ϖʔδ IMAPͷ࢓༷͸RFC2060

Slide 30

Slide 30 text

Fukuoka.go#16 ๏ ͜Μͳ͜ͱ΋͋Ζ͏͔ͱɺຊ୨͔ΒऔΓग़͢ ిࢠϝʔϧϓϩτίϧʕجຊɾ࣮૷ɾӡ༻ 2000/11

Slide 31

Slide 31 text

Fukuoka.go#16 ๏ IMAPʹ͸ͭͷεςʔτ͕͋Γ ๏ ະೝূ ๏ ೝূࡁ ๏ બ୒ࡁ ๏ ϩάΞ΢τ ๏ ͦΕͧΕͷεςʔτʹ͓͍ͯΫϥΠΞϯτ͕ൃߦ͢ΔλάΛ࢖ͬͯαʔόʔͱΫϥΠΞϯ τͷίϛϡχέʔγϣϯΛߦ͏ IMAP ίϚϯυ λά

Slide 32

Slide 32 text

Fukuoka.go#16 IMAP ΫϥΠΞϯτͷ࣮૷

Slide 33

Slide 33 text

Fukuoka.go#16 Ϩεϙϯεʹλά͕͋Δ͔Ͳ͏͔Λ ൑ఆ͍ͯ͠Δ͚ͩͷγϯϓϧͳ࣮૷

Slide 34

Slide 34 text

Fukuoka.go#16 telnet΍opensslΛ࢖͏Α͏ͳΠϝʔδͰίϚϯυΛ࣮ߦ͢Δ

Slide 35

Slide 35 text

Fukuoka.go#16 ๏ ࠨͷάϥϑ͸खݩ͔ΒαϯϓϧΞΧ΢ϯτʹ઀ ଓͨ͠ྫ ๏ ͜ΕΛશͯͷϝʔϧαʔόʹಋೖ͢Δ༧ఆ ๏ Disk I/OෛՙʹରԠ͢Δࢳޱ͕Έ͔ͭΕ͹ͱ͍ ͏ఔ౓ ๏ IMAPͷঢ়ଶΛՄࢹԽ͢Δ͜ͱʹ͸ؒҧ͍ͳ͍ ๏ Ұ࿈ͷಈ࡞ΛFirst Loading Latencyͱ͍͏໊ લΛ͚ͭͨ First Loading Latency

Slide 36

Slide 36 text

Fukuoka.go#16 ๏ imap_exporterΛ࡞ͬͯMail Delivery AgentΛՄࢹԽ͠Α͏ͱ͍ͯ͠Δ ๏ IMAPϓϩτίϧ͸SMTPͱҧͬͯ૬౰ෳࡶ ๏ ϓϩτίϧ࢓༷Λཧղ͢Δ͜ͱͰGoඪ४ϥΠϒϥϦͰͬ͘͞ͱΫϥΠΞϯτ࣮૷Ͱ͖ͨ ͜ͷΑ͏ʹɺEngineeringͰϗεςΟϯάͷϝʔϧΛࢧ͍͑ͯ·͢ɻ࠷ۙɺMREͱ͍͏৬छ ΛͿ্͍ͪ͛ͯ·͢ʂʂʂʂ Conclusion

Slide 37

Slide 37 text

Fukuoka.go#16 Messaging Reliability EngineeringʢMREʣ͸ɺਓͱਓͱ͕ιϑτ΢ΣΞΛ௨ͯ͡ ίϛϡχέʔγϣϯΛ͢ΔγεςϜʹ͓͍ͯɺεέʔϥϒϧͰ৴པੑͷߴ͍ιϑτ ΢ΣΞγεςϜΛ࡞੒͠·͢ɻMRE͸ɺΠϯϑϥετϥΫνϟͱӡ༻ΛదԠͤ͞Δ Site Reliability EngineeringͷจԽΛMessaging෼໺Ͱड͚ܧ͍ͩ΋ͷͰ͢ɻجຊ తͳ͜ͱ͸SREͱಉ͡Ͱ͕͢ɺѻ͏ٕज़͕ओʹϝʔϧͰɺϝʔϧͷӡ༻Λιϑτ΢Σ ΞͰΤϯδχΞϦϯά͢Δ͜ͱʹͳΓ·͢ɻʮMREϖύϘʯͰݕࡧʂ Messaging Reliability Engineeringͱ͸

Slide 38

Slide 38 text

Fukuoka.go#16 Thank youaʕ⊙౪⚆ʔ