by id:y_uuki
ͦͯ͠ޠԿ͔ͷRedis CPUෛՙରࡦΛܴ͑Δ
View Slide
RedisͷCPUෛՙରࡦύλʔϯid:y_uukiKyoto.ͳΜ͔#3
Redis͔ͭͬͯ·͔͢ʁ
RedisͰCPUফඅ͕ϘτϧωοΫʹͳΔέʔε• ܦݧతʹඵؒສίϚϯυ҆• ΫΤϦͷछྨΞΫηεύλʔϯʹΑͬͯɺಉ͡ϋʔυΣΞͰ͋ͬͯCPUར༻มԽ͢Δ• CPUੑೳʹΑͬͯɺಉ͡ϫʔΫϩʔυͰ͋ͬͯCPUར༻มԽ͢Δ
RedisͷCPUϦιʔεফඅߏ• γϯάϧεϨουͰಈ࡞͢ΔͨΊɺϚϧνίΞڥͰ͋ͬͯɺ1CPUίΞ͔͑͠ͳ͍• MySQL/PostgreSQLίωΫγϣϯ͝ͱʹεϨου/ϓϩηεΛىಈ͢ΔϚϧνεϨου/ϓϩηεϞσϧ
RedisͷCPUෛՙͱઓ͏ͨΊʹͲͷΑ͏ͳ࡞ઓΛͱΓ͏Δ͔
εέʔϧΞοϓ εέʔϧΞτCPU1ίΞੑೳ͋͛Δਨׂࢀর༻εϨʔϒਫฏׂ - ࣗલਫฏׂ - Redis ClusterCPUෛՙݮRedisύΠϓϥΠϯLua scriptingLinux RPS(Redis modules)
εέʔϧΞοϓ• RedisαʔόͷCPUΫϩοΫΛߴ͍ͷʹมߋ• EC2ͳΒc4ܥͷΠϯελϯε• ίΞΛ૿ͯ͋͠·Γҙຯͳ͍• CPUར༻͕90%͔Β40%ʹͳͬͨ͜ͱ͕͋Δ• Xeon E5-2650L v2 @1.70GHz (Ivy Bridge)• Xeon E5-2670 v3 @2.30GHz (Haswell)• CPUΫϩοΫʹରͯ͠ઢܗʹมԽ͢ΔΘ͚Ͱͳ͍
CPUෛՙݮ
CPUෛՙݮ - Linux RPS• redisεϨουͱΧʔωϧͷωοτϫʔΫI/OεϨουΛผʑͷίΞͰॲཧ͢Δ• RPSͰύέοτॲཧΛCPU0Ͱड͚ͯ• redisεϨουͷCPU AffinityͰύέοτॲཧͱผ# echo ‘3’ > /sys/class/net/eth0/queues/rx-0/rps_cpus# taskset -pc 3-4 $(cat /run/redis/redis-server.pid)
https://speakerdeck.com/yuukit/linux-network-performance-improvement-at-hatena
CPUෛՙݮ - RedisύΠϓϥΠϯ• ΫϥΠΞϯτ͕ϨεϙϯεΛ·ͨͣʹޙଓͷϦΫΤετΛೖ͢Δ͜ͱͰɺύέοτԟ෮ճΛݮΒ͢• ωοτϫʔΫI/OॲཧΛ·ͱΊ࣮ͯߦͰ͖ΔͷͰɺCPUॲཧ͕ݮΔ• 1ճͷread(2)ͰෳͷίϚϯυΛಡΈग़ͤΔͷͰɺγεςϜίʔϧճ͕ݮΓίϯςΩετεΠονݮΔ• ਅͷRedisύΠϓϥΠϯ(by id:ichirin2501)https://redis.io/topics/pipelining
CPUෛՙݮ - Lua scripting• ͋ΔίϚϯυͷ݁ՌΛ࣍ͷίϚϯυ͕ར༻͍ͯ͠ΔҰ࿈ͷίϚϯυྻύΠϓϥΠϯ࣮ߦෆՄ• Lua scriptingͳΒҰ࿈ͷίϚϯυྻΛluaίʔυͱͯ͠ૹΓࠐΈɺ݁Ռ͚ͩड͚औΕΔ• ύΠϓϥΠϯಉ༷ɺΫϥΠΞϯτͱͷԟ෮ճ͕ݮΓɺI/OγεςϜίʔϧΛ·ͱΊΒΕΔhttps://redis.io/commands/eval
εέʔϧΞτ
εέʔϧΞτ-ࢀর༻εϨʔϒ• RedisϚελʔɾεϨʔϒߏ͕ͱΕΔ• ࢀরΫΤϦΛεϨʔϒʹ͚ͯϚελʔͷෛՙΛݮ• εϨʔϒͷલஈʹϩʔυόϥϯα͕ඞཁ• MySQLͳͲͷRDBMSͰΑ͘ͱΒΕΔ࡞ઓ• ϨϓϦέʔγϣϯԆʹҙ• ॻ͖ࠐΜͩͣͷσʔλ͕·ͩεϨʔϒʹൖ͍ͯ͠ͳ͍Մೳੑ͕͋Δ
εέʔϧΞτ- ਨׂ• RedisͷϚελʔϊʔυΛෳ༻ҙ͢Δ• ػೳAϚελʔ1Λ͏ɺػೳBϚελʔ2Λ͏• ػೳͷͿΜ͚ͩɺϚελʔϊʔυΛӡ༻͢Δίετ͋Δ• ͋ΔҰͭػೳͷෛՙ͕ࢧతͳ߹ʹ͑ͳ͍• Ωϟογϡ༻్ͳΒ͚ͦͩ͜memcachedΛར༻
εέʔϧΞτ- ਫฏׂ• γϟʔσΟϯάͱݺͿ• ಉ͡༻్ͷ֤ΩʔΛෳͷϚελʔϊʔυʹࢄ• ΩʔͱϊʔυͷϚοϐϯάΛࣗͰΔ• Ϛοϐϯάํ๏༷ʑ• ϢʔβID xxx ϊʔυYʹϚοϓ• ϢʔβID yyy ͷ༨͕ z ͳΒϊʔυXʹϚοϓ• γϟʔυΛ૿ݮͨ͠ͱ͖ͷσʔλ࠶ஔ͕͗͢͠ΔͷͰͱʹ͔͘Γͨ͘ͳ͍
εέʔϧΞτ- Redis ClusterʹΑΔਫฏׂ• ࠷ऴԞٛ• Ωʔͷࢄஔͱ࠶ஔ/ϑΣΠϧΦʔόʔͳͲαϙʔτ• redis-tribͱ͍͏ެࣜπʔϧͰࣗಈ࠶ஔͰ͖Δ• ࠷6ϊʔυඞཁ• database͕1͔͔ͭ͑͠ͳ͍• ෳΩʔʹର͢ΔίϚϯυ࣮ߦʹҙ• 1000ϊʔυ͙Β͍·Ͱεέʔϧ͢ΔΒ͍͠
ເ
Redis modules• Redus 4.0͔ΒϞδϡʔϧػೳ͕࣮͞Εͨ• Redisͷ෦APIΛͬͯಠࣗͷσʔλߏίϚϯυΛ࣮Ͱ͖ΔʢΒ͍͠ʣ• ΞϓϦέʔγϣϯʹ࠷దԽͨ͠σʔλߏΛ࡞ΕɺΊͪΌͪ͘ΌCPUޮΑ͘ͳΔͷͰʁʁʁʁʁ
εέʔϧΞοϓ εέʔϧΞτCPU1ίΞੑೳ͋͛Δਨׂࢀর༻εϨʔϒਫฏׂRedis ClusterCPUෛՙݮRedisύΠϓϥΠϯLua scriptingLinux RPS(Redis modules)
ޠ͔Βઓུ
ઓུΛཱͯΔͨΊʹͱΓ͏Δઓज़Λ͓ͬͯ͘