Upgrade to Pro — share decks privately, control downloads, hide ads and more …

システムリプレースの中でCDCを取り入れている話/chugokudb32-cdc

 システムリプレースの中でCDCを取り入れている話/chugokudb32-cdc

第32回 中国地方DB勉強会 において、発表させてもらいました。

Change Data Capture についての紹介です。

Avatar for Takahashi Ikki

Takahashi Ikki

October 06, 2023
Tweet

More Decks by Takahashi Ikki

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ • ߴڮ Ұٍ (@ikkitang) • ελʔϑΣεςΟόϧגࣜձࣾ Tech Product Manager

    • TypeScriptͱGo • ೔ຊPostgreSQLϢʔβʔձ தࠃࢧ෦௕
  2. ஫ҙࣄ߲ • εϥΠυ͸ެ։ࡁΈͰ͢ • ࣭໰ͱ͔͋Ε͹ #ChugokuDB Λ͝׆༻͍ͩ͘͞ʂ • ࿩ͷ࣠ͱͯ͠"γεςϜϦϓϨʔε"͕ग़ͯ͘ΔͷͰ ՝୊ײͷڞײͷҙਤΛࠐΊͯ

    ॴଐͷձࣾͷ࿩Λଟ͘͠·͕͢࠾༻໨త͡Όͳ͍Ͱ͢ • ※ CDC࠾༻ͷഎܠ͕݁ߏϘϦϡʔϜΛ͠Ίͯ͠·͍·ͨ͠
  3. CDC࠾༻ͷഎܠ Apache Ka)aΛ༻͍ͨ ΠϕϯτۦಈܕΞʔΩςΫ νϟ • ੡଄ύʔτφʔ༻ͷΞϓϦέʔγϣϯ • SoEʢྑ͍UXΛఏڙ͍ͨ͠!ʣ •

    ࣾ಺޲͚؅ཧը໘ͷΞϓϦέʔγϣϯ • SoRʢ͍ͭ୭͕ͲΜͳࢦࣔͷجͰ࣮ߦ͔ͨ͠. ཤྺʹ ॏ͖Λஔ͘ʣ • ΞΫλʔ΍ΞϓϦέʔγϣϯͷੑ࣭ͷҧ͍Λka-aΛ෗ ഊ๷ࢭ૚ͱͯ͠औΓೖΕΔࣄͰંΓ߹͍͚ͭͯΔ
  4. CDCͱ͸ • Change Data Capture • σʔλϕʔεͷมߋʢInsert,Update,DeleteʣΠϕϯτΛݕ஌͠ ผͷΞϓϦέʔγϣϯʹ఻ୡ͢ΔͨΊͷٕज़΍ख๏ • ࠾༻ࣄྫ

    • ৯΂ϩά͞Μɿ Elas5cSearch IndexͷϦΞϧλΠϜߋ৽ • Chatwork͞Μɿ CQRSϞσϧͷߋ৽(ಡΈࠐΈϞσϧͷߋ৽) • ΦϛΧϨ͞Μɿ σʔλϕʔεϦϑΝΫλϦϯά • Debezium ౕ͕ͬͯྑ͍Β͍͠
  5. Debezium ͷಛ௃ • Apache Ka*a Connect ʹ४ڌͯ͠࡞ΒΕͨ CDCͷπʔϧηοτ • Debeziumࣗମ͸

    DBͷมߋΠϕϯτΛKa*aͷϝοηʔδͱͯ͠ ൃՐ͢Δ੹຿ • DB͝ͱʹConnectorΛ࢖ͬͯมߋΠϕϯτͷݕ஌Λ࣮ݱ͢Δ • MySQL, PostgreSQL, SQL Server, Oracle, MongoDB, Cloud Spanner, ...
  6. ࢖༻ྫ ͜ΜͳJSONΛ࡞Δ. { "name": "connector໊", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "ུ":

    "ུ", "database.hostname": "{mysql}", "database.port": "{port}", "database.user": "{user}", "database.password": "{password}", "database.include.list": "{schema}", "table.include.list": "{schema.table1,...}", "snapshot.mode": "initial" } } ͜Μͳσʔλ͕ಘΒΕΔ // Insert { "before": null, "after": { "id": 1, "name": "init name" } } // Update { "before": { "id": 1, "name": "before name" }, "after": { "id": 1, "name": "after name" } } // Delete { "before": { "id": 1, "name": "after name" }, "after": null }
  7. ӡ༻ʹ͓͍ͯؾΛ͚ͭΔࣄ Debezium • ConnectorͰಡΈࠐΉςʔϒϧΛ௥Ճ͢Δ࣌͸ ৬ਓ͕ܳඞཁ ʢΫισΧίωΫλʔ໊Λ͚ͭͳ͍ʂ 1ഊʣ MySQL • ίωΫλఆٛ࣌ͷσϑΥϧτͷڍಈͱͯ͠

    ςʔϒϧͷશϨίʔυΛಡΈऔΔʢεφοϓγϣοτʣ • ಡऔதʹಉ͡Ϩίʔυ͕ಡΊΔΑ͏ʹϩοΫऔΔ ʢάϩʔόϧϦʔυϩοΫ or ςʔϒϧϩοΫʣ • ΊͪΌͪ͘ΌͰ͔͍ςʔϒϧΛಡΉ࣌͸΍͹͍ʢ΍͹͍ 1ഊʣ PostgreSQL • ಡऔઐ༻γϦΞϥΠβϒϧ෼཭Ϩϕϧͷ τϥϯβΫγϣϯΛషΔ • ϩοΫ͸ແ͍
  8. (10ϲ݄)ӡ༻ͯ͠ΈͯಘΒΕͨ஌ݟɾײ૝ • ΊͪΌͪ͘Ό଎͍ • APIʹϦΫΤετ౤͛ͯ Ϧϩʔυͨ͠Β൓ө͞ΕͯΔ • RESTͰͷઃఆָ͕ • IaaC

    • ެࣜυΩϡϝϯτͷ໢ཏੑ • ϋϚͬͯ΋ɺجຊެࣜDoc͕Ҿ༻ ͞ΕͯΔ • ϑϧϚωʔδυ͡Όͳ͍ • MSKͰka'a-connectαϙʔτͯ͠ Δ͚Ͳɺӡ༻ʹͷͤΔͷ͕ϦεΫ • ઃఆϛεͬͯΔͱͣͬͱϦτϥΠ ʢREST࢖͑ͳ͍ʣ • ϩʔΧϧ؀ڥ • DBͱͷ઀ଓ͕Ұఆࢭ·Δ࣌ʹ૬ ੑѱΊ