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

추천 API 최적화하기

Avatar for RIDI RIDI
August 31, 2018

추천 API 최적화하기

Avatar for RIDI

RIDI

August 31, 2018
Tweet

More Decks by RIDI

Other Decks in Technology

Transcript

  1. 1. ୶ୌ API ࣗѐ • Book-to-book ୶ୌ • Book-to-user ୶ୌ

    • API ҳઑ
 2. ୶ୌ API ୭੸ച ೞӝ • উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ • ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ ܻ࠙ೞӝ • API ਽׹दр ઴੉ӝ 2 ݾର ୶ୌ API ୭੸ച ೞӝ
  2. 5 بࢲр ਬࢎب ҅࢑ ୶ୌ API ࣗѐ 1. ҳݒݾ۾ •

    ଲ਋: ؀ా۸੄ Ӗॳӝ • അ୍: ؀ా۸੄ Ӗॳӝ, যڌѱ ࢓ Ѫੋо • ޹ࢳ: যڌѱ ࢓ Ѫੋо 2. بࢲӝળ ҳݒݾ۾ • ؀ా۸੄ Ӗॳӝ: ଲ਋, അ୍ • যڌѱ ࢓ Ѫੋо: അ୍, ޹ࢳ 3. ਬࢎب (؀ా۸, যڌѱ) = |{അ୍}| / |{ଲ਋, അ୍, ޹ࢳ}| ≈ 0.33 ?
  3. بࢲр ਬࢎب৬ ਬ੷ ೐۽౵ੌਸ ࢎਊ • അ੤ח ҳݒ৬ ୭Ӕ ઑഥೠ

    بࢲٜ۽ ೐۽౵ੌ ࢤࢿ • ೐۽౵ੌҗ ਬࢎبо ֫਷ بࢲٜਸ ୶ୌ 7 ܻ٣࠘झ੄ Book-to-user ਗܻ ୶ୌ API ࣗѐ
  4. recommend-api data-api.ridibooks.com Classic Load Balancer Store Web Server Client Store

    Web Elasticache (Redis) proxy-azure.data.ridi.io hbase.data.ridi.io HAProxy 192.168.0.200:33309 HAProxy 192.168.0.200:33319 HAProxy aurora-db.data.ridi.io aurora-db.ro.data.ridi.io Aurora HBase Cluster HTTP Request Thrift RPC MySQL CRUD Cache MySQL Write MySQL Read Plain Requests Load Balancing ridibooks.com HTTP Request 8 API ҳઑ ୶ୌ API ࣗѐ
  5. 1. উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ 2. ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ

    ܻ࠙ೞӝ 3. API ਽׹दр ઴੉ӝ 9 ୶ୌ API ୭੸ച ೞӝ ୶ୌ API ୭੸ച ೞӝ
  6. 11 ୶ୌ ؘ੉ఠ উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ • Bulk

    write৬ real-time read • ড 150݅Ѥ੄ book-to-book ୶ୌҗ 
 ড 90݅Ѥ੄ book-to-user ୶ୌਸ 
 पदрਵ۽ ࢲࡂೞҊ ੓ח ੷੢ࣗী স۽٘ • Key-value • Key: b_id/u_idx • Value: بࢲ ୶ୌ ܻझ౟੄ JSON String
  7. After • Scala, Python • Multi-machine batch • ড 2दр

    • MongoDBী স۽٘ Before • C++ • Single-machine batch • ড 10दр • MariaDBী স۽٘ 12 ௿۞झఠ بੑ ੹/റ উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ
  8. 13 Bulk Loadী ஂডೠ MongoDB উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ

    • ড 1.6রѐ੄ rowܳ bulk loadೡ ٸ, load average ҃Ҋ ߊࢤ • Bulk loadܳ ೡ ٸ݅ ೐۽ࣁझ੄ ࣻܳ ઴ৈࢲ प೯ => ৈ੹൤ ޙઁ ߊࢤ!
  9. 14 HBase بੑ উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ 1. Bulk

    loadী ੸೤ 2. ೞن ী௏दझమীࢲ ࢎਊ оמ • औѱ بੑೡ ࣻ ੓਺ • ഛ੢ࢿ੉ ڪযթ
  10. 16 উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ • HBase ࢲ࠺झܳ प೯ೞ૑

    ঋח machineীࢲ݅ 
 ׮ܲ batch ੘স੉ प೯غب۾ ࢸ੿ 1. ׮ܲ Batch ੘স੄ ৔ೱਸ ߉Ҋ ੓૑ ঋਸө? => ৈ੹൤ ޙઁ ߊࢤ! ޙઁ ૓ױ 1
  11. 17 উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ • VCNC৬ IBM੄ о੉٘

    ١ਸ ଵҊೞৈ ౚ׬: 2. HBase ౚ׬੄ ޙઁ ইקө? => ઑӘ աই૑ӟ ೮૑݅, ৈ੹൤ ޙઁ ߊࢤ! ޙઁ ૓ױ 2 * http://engineering.vcnc.co.kr/2013/04/hbase-configuration/ * https://www.ibm.com/support/knowledgecenter/en/SSPT3X_4.2.0/ com.ibm.swg.im.infosphere.biginsights.analyze.doc/doc/bigsql_TuneHbase.html ড 20ѐ੄ ౵ۄ޷ఠܳ Ѩషೠ റ, 5ѐ੄ ౵ۄ޷ఠܳ ౚ׬.
 ৘) ৻ࠗ ਃ୒ਸ ୊ܻೞח ؘ ࢎਊೡ Thread੄ ࣻܳ ૐо
  12. 18 ޙઁ ૓ױ 3 উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ 3.

    HappyBase (Python-HBase connector) ੄ ޙઁо ইקө? • Locust۽ ۽٘ పझ౟ܳ ೮ਸ ٸ, ௾ ੉गо হ਺ • HappyBase৬ Django৬੄ ഐജࢿ ੄ब => ೞ૑݅, Thrift RPC ࢲߡীࢲ response time ۽Ӓ ߂ 
 ठ۽਋ ௪ܻ ࠙ࢳ ١ਸ ೡ ࣻ হ਺.
  13. 19 1. ElastiCache + Redis উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ

    ҙܻഋ ੋ ݫݽܻ ؘ੉ఠ झషয ࢲ࠺झ • ੢੼ • Key-value ߑधী ੸೤ • ࡅܲ ਽׹ ࣘب • ױ੼ • ࠺ਊ; DB੄ ਊ۝݅ఀ ݫݽܻо ೙ਃ • ௼ӝ: 60GB (୭ࣗ cache.m4.4xlarge ೙ਃ)
 => 1֙ ৘ডী $3100. replica setਸ ҳࢿೞҊ, ਊ۝੉ טযաݶ…?
  14. 20 2. DynamoDB উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ ৮߷ೞѱ ҙܻغח

    NoSQL ؘ੉ఠ߬੉झ ࢲ࠺झ • ੢੼ • Key-value ߑधী ੸೤ • ױ੼ • ࠺ਊ; ೠ ۨ௏٘੄ ௼ӝо ੘ਸ ٸ݅ ਬܻ • ௼ӝ: 60GB (ೠ ۨ௏٘੄ ௼ӝ: 100KB) • ੍ӝ/ॳӝ പࣻ: ୡ׼ 40/100ഥ
 => ೠ ׳ী $5782.80
  15. 21 3. Elasticsearch উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ ࠙࢑ഋ RESTful

    Ѩ࢝ ߂ ࠙ࢳ ূ૓ • ੢੼ • Ѩ࢝ APIীࢲ উ੿੸ਵ۽ ੜ ࢎਊೞҊ ੓਺ • ױ੼ • Bulk loadী ੸೤ೞ૑ ঋ਺; load average ޙઁ ߊࢤ • Key-value ߑधী ੸೤ೞ૑ ঋ਺
  16. ׮द MongoDB۽… উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ • Үള: ਋ܻ

    ࢚ടী MongoDBо ઁੌ ੜ ݏח Ѫ э׮. • HBaseࠁ׮ উ੿੸ੋ ࢲࡂ • ࠺Ү੸ ੷۴ೠ ࠺ਊ (ElastiCache + Redis, DynamoDB, …) • Bulk loadೡ ٸ ޙઁ੼਷… • Bulk loadೡ ٸ݃׮ ࢜ instance۽ Ү୓ೞ੗! 22
  17. 1. উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ 2. ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ

    ܻ࠙ೞӝ 3. API ਽׹दр ઴੉ӝ 23 ୶ୌ API ୭੸ച ೞӝ ୶ୌ API ୭੸ച ೞӝ
  18. SPoF ੄ ৔ೱ ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ ܻ࠙ೞӝ • ؘ੉ఠࣃఠ ੹ਗ

    ੢গ۽ ੋ೧ ؘ੉ఠ౱ ݃झఠ DB ׮਍ • DB ࢲߡ ࠂҳदө૑ ୶ୌઁ৻ ӝמ ࢎਊࠛо • DB ࢲߡ ݫݽܻ ૐࢸਸ ਤ೧ ࢲߡ ੤ࠗ౴ ೙ਃ • ੤ࠗ౴ೞח زউ ୶ୌઁ৻ ӝמ ࢎਊࠛо
  19. ࢿѺ੉ ׮ܲ ప੉࠶ٜ੄ ҕઓ 30 ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ ܻ࠙ೞӝ •

    ୶ୌઁ৻ ప੉࠶ • 24दр ղղ INSERT ߊࢤ • ؀Ҋё ࢲ࠺झ৬ ޻੽ೠ ҙ۲ • ా҅ ప੉࠶ • ࢜߷ ߓ஖ प೯दী݅ INSERT ߊࢤ • ഥࢎ ղ ࢲ࠺झী݅ ҙ۲ => ߹ب੄ ੋ೐ۄী فחѱ જѷ׮!
  20. ୶ୌઁ৻ ప੉࠶ਸ Aurora۽ ܻ࠙ೞӝ۽ Ѿ੿ 31 ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ ܻ࠙ೞӝ

    • ҙܻഋ ࢲ࠺झ੄ ಞܻೣ • ഛ੢ࢿ, উ੿ࢿ ഛࠁ • 10ms ޷݅੄ ܻ೒ܻா੉࣌ ۑ
  21. Aurora ܻ࠙੉੹ റ 32 ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ ܻ࠙ೞӝ • ӝઓ

    DB ࢲߡח ঱ઁٚ ੤ࠗ౴ оמ • ୶ୌઁ৻ ӝמী Րӣহ੉ ݫݽܻ ૐࢸী ࢿҕ • DB ਍৔ উ੿ࢿ ૐо • ׮ܲ ࢲ࠺झী ৔ೱ߉૑ ঋ਺ • ݃झఠо ইצ ठۨ੉࠳ীࢲ ੍ب۾ ߸҃ • ઴যٚ ܻ೒ܻா੉࣌ ۑ ؋࠙ী оמ
  22. թ਷ ࣼઁ 33 ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ ܻ࠙ೞӝ • Auroraীח JOINী

    ೙ਃೠ ప੉࠶੉ হ਺ • (അ੤) য೒ܻா੉࣌ ױ҅ীࢲ JOIN ࣻ೯ • ܻ೒ܻா੉࣌ ࢸ੿ • APIܳ ࢎਊೠ ઱ӝ੸ੋ সؘ੉౟
  23. 1. উ੿੸ੋ ࢲࡂਸ ਤೠ ੷੢ࣗ ଺ӝ 2. ୶ୌ ઁ৻ ؘ੉ఠ߬੉झ

    ܻ࠙ೞӝ 3. API ਽׹दр ઴੉ӝ 34 ୶ୌ API ୭੸ച ೞӝ ୶ୌ API ୭੸ച ೞӝ
  24. 37 ޙઁ ഛੋ API ਽׹दр ઴੉ӝ 2׳ р 3ୡ ੉࢚੄

    ਽׹दрਸ о૓ AI ୶ୌ੄ API ਃ୒ = ড 4݅Ѥ (੹୓ ਃ୒੄ 0.1359%)
  25. 38 ޙઁ ૓ױ 1 API ਽׹दр ઴੉ӝ Django ORM੉ ࢤࢿೠ

    ҳݒݾ۾ ઑഥ ௪ܻ: EXPLAIN SELECT `tb_user_book`.`pk_id`, `tb_user_book`.`u_id`,… => tb_user_book ઑഥо ੄बػ׮.
  26. 39 ޙઁ ૓ױ 2 API ਽׹दр ઴੉ӝ • Ѩૐ •

    ؘ੉ఠ౱ MariaDBо ಣࣗ੄ ౟ې೗ (࠙׼ ୭؀ 600ߣ ઑഥ) ਸ Ѽ٣ח૑ ഛੋ • Ѿҗ • ҳݒݾ۾ ઑഥীࢲ ठ۽਋ ௪ܻ ߊࢤ! • ؘ੉ఠ౱ DBח நएо ੸ѱ غҊ ੓਺ “ࢲ੼ DBীח ੉۠ ޙઁо হ঻؍ Ѫ э਷ؘ…?”
  27. ࢎਊ੗ ೐۽౵ੌ - ҳݒ - ୭Ӕ ઑഥ 41 API ਽׹दр

    ઴੉ӝ بࢲр ਬࢎب Batch API AI ୶ୌ ୶ୌ ܻझ౟ ࢤࢿ җ੿
  28. ࢎਊ੗ ೐۽౵ੌ - ҳݒ - ୭Ӕ ઑഥ 42 API ਽׹दр

    ઴੉ӝ بࢲр ਬࢎب Batch API AI ୶ୌ ୶ୌ ܻझ౟ ࢤࢿ җ੿
  29. 43 ҳݒݾ۾ ӝ߈ ୶ୌ ܻझ౟ܳ ޷ܻ ҅࢑ೞ੗! API ਽׹दр ઴੉ӝ

    بࢲр ਬࢎب Batch API ҳݒ ೐۽౵ੌ ҳݒӝ߈ ୶ୌ ઑഥ ೐۽౵ੌ ઑഥӝ߈ ୶ୌ AI ୶ୌ
  30. 44 ೧Ѿ଼ Ѩૐ API ਽׹दр ઴੉ӝ 3ୡ ੉࢚੄ ਽׹दрਸ о૓

    AI ୶ୌ੄ API ਃ୒ = ѐࢶ ੹੄ 1/8 
 (੹୓ ਃ୒੄ 0.0176%) * MongoDBܳ ࢎਊೞݶ ੉ ࠗ࠙ب ѐࢶؼ Ѫਸ ৘࢚೤פ׮.
  31. 45 Ѿۿ • ו՛ ੼ • ݣ૽൤ ੜ ࢲࡂೞח Ѥ

    য۰਍ ੌ • ݽܰҊ ࢎਊೞח Ѫҗ ঌҊ ࢎਊೞח Ѫ਷ ׮ܰ׮ • খਵ۽ ೡ ੌ • ؘ੉ఠ ࢎ੉঱౭झ౟ ࡳӝ • അ ࢚ടী উ઱ೞӝ ঋӝ ୶ୌ API ୭੸ച ೞӝ