Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
20万超のIoTデバイス同時接続を支えるNature RemoのシステムとAWS / IoT AWS Loft Nature Remo 2021
Songmu
February 10, 2021
Technology
0
790
20万超のIoTデバイス同時接続を支えるNature RemoのシステムとAWS / IoT AWS Loft Nature Remo 2021
Songmu
February 10, 2021
Tweet
Share
More Decks by Songmu
See All by Songmu
GoとNature ~ Nature Remoの裏側 / Nature Bath vol6
songmu
0
5.6k
Nature Remoの裏側 ~ AWSとWeb技術をIoTの世界でフル活用する / Inside Nature Remo
songmu
11
14k
Other Decks in Technology
See All in Technology
創業1年目のスタートアップでAWSコストを抑えるために取り組んでいること / How to Keep AWS Costs Down at a Startup
yuj1osm
3
2.1k
金属加工屋の営業マンがSTマイクロで・・・
usashirou
0
160
経営統合をきっかけに会社をエンジニアリングした話 / btconjp-2023
carta_engineering
0
150
ECテックカンファレンス2023 EC事業部のモバイル開発2023
tatsumi0000
0
290
オンプレk8sとEKSの並行運用の実際
ch1aki
0
270
API連携に伴う規制と対応 / Regulations and responses to API linkage
moneyforward
0
150
OCI技術資料 : ロード・バランサー 詳細 / Load Balancer 200
ocise
2
7.2k
データ分析基盤の要件分析の話(202201_JEDAI)
yabooun
0
250
AI Services 概要 / AI Services overview
oracle4engineer
PRO
0
170
ROS_Japan_UG_#49_LT
maeharakeisuke
0
220
OpenShift.Run2023_create-aro-with-terraform
ishiitaiki20fixer
1
240
IoTを始めたきっかけの話と個人でできるIoTの今後 / 新年LT会「私の愛するIoT 2023」
you
0
230
Featured
See All Featured
Designing with Data
zakiwarfel
91
4.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
152
13k
Become a Pro
speakerdeck
PRO
6
3.2k
Pencils Down: Stop Designing & Start Developing
hursman
114
10k
Embracing the Ebb and Flow
colly
75
3.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
500
130k
Design by the Numbers
sachag
271
18k
The Cult of Friendly URLs
andyhume
69
5.1k
Thoughts on Productivity
jonyablonski
49
2.7k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
214
12k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
2
400
Bootstrapping a Software Product
garrettdimon
299
110k
Transcript
ݫൿɿຊࢿྉͷҰ෦·ͨશ෦ΛɺNatureגࣜձࣾͷڐՄͳ͠ʹɺෳɺసࡌ͢Δ͜ͱΛې͡·͢ɻ Introduce about September 3, 201 9 Natureגࣜձࣾ 20ສͷIoTσόΠεಉ࣌ଓΛࢧ͑Δ
[email protected]
#17 - IoT։ൃͷల 10th Feb, 2021 Nature RemoͷγεςϜͱAWS
2 Me • দ խ (id:Songmu) • Nature גࣜձࣾ औకCTO
• https://songmu.jp/riji • https://github.com/Songmu • ͖ͳݴޠGoͱPerlͱதࠃޠ • 3 Times ISUCON Winner • ஶॻʹʮΈΜͳͷGoݴޠʯ • झຯOSS׆ಈͰ͢
ࠓ͢͜ͱ Agenda 3
4 Agenda • ϓϩμΫτͷհ • γεςϜ֓ཁ • AWS׆༻ • ࠓޙͷ՝
ձࣾͱ Company and Product 5
Mission 6 Mission ⾃然との共⽣を テクノロジーでドライブする Vision インターネットとセンサー技術を活⽤し、分散型で再⽣可能な電 源を普及させ、エネルギーを⾃給⾃⾜出来る未来を創造する
6,980ԁ ʢ202012݄24ൃചʣ 7 Product 9,980ԁ ʢ20208݄5ൃചʣ (ୈ̏ੈʣ (ୈ̎ੈʣ
֎ग़ઌ͔ΒεϚϗͰΤΞίϯΛON εϚʔτεϐʔΧʔͱ࿈ܞͯ͠ͰՈిΛૢ࡞ 8 Features
How It Works
User Feedback NPSスコア30ポイント
Traction 20ສಥഁ ೝˍγΣΞۀքNo.1 ʢ20202݄࣮ࢪɺࣗࣾௐʣ
14,800ԁ ʢ20204݄27ൃചʣ 14,800ԁ 29,800ԁ ʢ201912݄17ൃചʣ 32,780ԁ 12 Product ઌߦ༧ ಛผՁ֨
Unattached Area = Demand Side 常に供給を需要に合わせて調整 IoTでつながり家庭の需要を制御
Home Automation to Virtual Power Plant 14 2019- Phase 1
ホームオートメーション 2020- Phase 2 エネルギーマネージメント 2022 Phase 3 Virtual Power Plant
Phase 2 : Energy Management AC Control Appliances
IoT機器を束ねた仮装発電所でよりクリーンな世界へ 関⻄電⼒と2年間実証済み。 Phase 3: Virtual Power Plant
地元のコミュニティの個⼈間で電気をシェアするプラットフォームを実現 A => B (10) A => C (30) D
=> C (20) A : ༨40 C : ෆ50 B : ෆ10 D : ༨20 Beyond
Nature RemoγεςϜͷཪଆ Inside Nature Remo 18
Features • ͍ΘΏΔIoTͷεϚʔτϦϞίϯ • εϚʔτϑΥϯεϚʔτεϐʔΧʔ͔ΒՈిૢ࡞ • ΤΞίϯɾTVɾϥΠτ • طଘͷ֎ઢϦϞίϯΛͦͷ··ஔ͖͑ΒΕΔ •
؆୯ʹ͑ΔϦϞίϯֶश(ݕग़)ػೳ • ηϯγϯάϢʔβʔͷҐஔใΛͱʹՈిૢ࡞ • Թɾ࣪ɺՈ͔ΒΕͨ࣌ɺ͍ۙͮͨͱ͖ͳͲ
How It Works
Conditions • Nature RemoࣗͷWi-Fiʹଓͯ͠ϩʔΧϧIPอ࣋ • → ͔ࣗΒΠϯλʔωοτʹग़͍ͯ͘͜ͱͰ͖Δ͕ɺ֎͔Βͷ ϦΫΤετΛड͚͚Δͷ༰қͰͳ͍ • ͔͠͠֎ͷεϚϗɺεϚʔτεϐʔΧʔɺϧʔϧͳͲʹରͯ͠ૉ
ૣ͘Ԡ͢Δඞཁ͕͋Δ • → Ͳ͏ͬͯʁ 🤔 • Nature RemoϚΠίϯϘʔυ্ͰCͷFirmware͕ಈ࡞ • ͋·Γෳࡶͳ͜ͱΛͤͨ͘͞ͳ͍
Possible Solutions (?) • UPnPʹΑΔϙʔτ։์ͱDDNSͷΈ߹Θͤ • ηΩϡϦςΟ্ͷݒ೦ • UDPϗʔϧύϯνϯάͷNATӽٕ͑ज़Λ༻͍ͨP2P •
ଓҡ͕࣋ͦ͠͏ɻಛʹҠಈମ(εϚʔτϑΥϯ) ↑͜ΕΒ͔͍͍͚ͬ͜Ͳɺݱ࣮తͰͳ͍
Realistic Solution • εϚϗΞϓϦ͔ΒAPIϦΫΤετ (։ൃऀ͚APIఏڙ) • զʑͷΫϥυγεςϜ͕Nature RemoʹWebsocktܦ༝ͰࢦྩΛૹΔ • ʮ͜ͷ֎ઢ৴߸Λग़ͯ͠ʯ
HTTP API WebSocket - ֎ઢ - ηϯαʔใ - Թ - ࣪
Why WebSocket? • ϦΞϧλΠϜʹํ௨৴͕͓खܰʹͰ͖Δ • ʮී௨ͷʯWebٕज़ • ଓஅ࣌ͷ࠶ଓNature Remoଆ੍͕ޚ •
ৗ࣌ଓʹͳΔͨΊଓཧׂ͕ͱେมͰ͋Δ • 20ສ+૿ՃͷҰ్
ΞʔΩςΫνϟ Architecture 25
API Stream Worker Amazon ECS Subscribe Publish WS WS Pub/Sub
System Diagram
Components • API • εϚϗΞϓϦεϚʔτεϐʔΧʔͱͷ௨৴ • Stream • Nature RemoͱͷWebSocket௨৴
• Worker • ϧʔϧͷ࣮ߦ ͯ͢GoͰAmazon ECS্Ͱಈ͔͍ͯ͠Δ
Remarkable Points • ૉͳGoͷWebΞϓϦέʔγϣϯ • Redis Pub/SubΛ༻͍ͨɺAPI - StreamؒͷΓͱΓ •
Nature RemoALBΛܦ༝ͯ͠streamαʔόʔʹ Websocketଓ͍ͯ͠Δ • AlexaͷΧελϜεΩϧAWS Lambdaܦ༝Λ࣮ͬͯߦ ͞ΕΔ
Simple Web Applications with Go • ී௨ͷWebΞϓϦέʔγϣϯ • ͱͱherokuͰϗετ໊͍ͯͨ͠ •
ϑϨʔϜϫʔΫ • github.com/nbio/hitch • Gorilla web toolkitΛ෦తʹར༻ • MySQL/Redis • gorp/redigo • guregu/dynamo
Utilize Redis Pub/Sub • Redis Pub/SubΛ׆༻͍ͯ͠Δ • API͔ΒRedisʹPublish • StreamRedisΛSubscribe
• ૬ޓ௨৴͠ͳ͍ૄ݁߹Λ࣮ݱ͍ͯ͠Δ • Streamଆ͋͘·ͰWebSocketͱRedis͔ΒͷSubscribeͰ ड໋͚͚ͨྩͷ࣮ߦ͔͓͜͠ͳΘͣঢ়ଶΛ࣋ͨͳ͍
WebSocket connection via ALB • Nature RemoALBΛܦ༝ͯ͠streamαʔϏεʹ WebSocketଓ͍ͯ͠Δ • ҰͭͷGoΞϓϦͷίϯςφͰສଓ͚͞Δʂ
• Goͷ͓खܰͳྑ͞Λ࣮ײ
ར༻͍ͯ͠ΔAWSαʔϏε AWS Services 32
Amazon ECS (on EC2) • ecspresso(ޙड़)ͰͷλεΫఆٛཧ͕ศར • ࢹΤʔδΣϯτؚΊඞཁͳσʔϞϯECS্ʹدͤͯߏங • ࠔ͍ͬͯͳ͍ͷͰEKSk8sͷҠߦࠓͷॴߟ͍͑ͯͳ͍
AWS Lambda • Amazon EchoͱͷεΩϧ࿈ܞ෦ͰͷΈར༻ • όονܥͷλεΫECS Scheduled TaskͰ࣮ߦ
Application Load Balancer • ಛघͳ༻్ͱͯ͠WebsocketαʔόʔͱͷதܧʹALBΛར༻ • ݩʑؤுͬͯConsulͰσΟεΧόϦػߏΛΜͰ͍ͨ • Nature RemoͱWebsocketαʔόʔΛܨ͢ΔͨΊ
• ALBʹΑΓϓϩΩγϊʔυ͕উखʹεέʔϧ͢ΔΑ͏ʹ • ෦IPͷࢹΛಠࣗͰߦͳ͍ͬͯΔ
Amazon RDS • MySQLΛී௨ʹ͍ͬͯ·͢ • ଟ͘ͷϢʔεέʔεʹ͓͍ͯRDBMSͰͳ͍
Amazon ElastiCache Redis • PubSub༻: ඇΫϥελRedis • ηϯαʔσʔλͷҰ࣌อଘ: ΫϥελϞʔυ •
࠷ׂۙ • Ϋϥελ༻Redis 6ޓͷM6gΛೖ • ఆΑΓશવCPUΛΘͣ • Graviton͍͢͝
Amazon DynamoDB • ిྗσʔλͷ࣌ܥྻσʔλอଘ • ిྗ༻ྔάϥϑͷඳըʹར༻ • ηϯαʔσʔλͳͲͰͷ׆༻Λ͍͛ͨ • ॻ͖ࠐΈίετ͕݁ߏ͔͔͍ͬͯΔͷͰޮԽΛਤΓ͍ͨ
• Ͳ͔͜ʹͨΊ͓͍ͯͯ·ͱΊͯॻ͘ͳͲ • Amazon TimeStreamؾʹͳΔ
Log Monitoring • go.uber.go/zap Ͱඪ४ग़ྗͷJSONϩάΛCloudWatch Logs ʹૹ৴ • CloudWatch Logs
Insights҆ఆ͖ͯͯ͠ศར • ͔͠͠ԿͤΜߴ͍💸 • Ұ෦ͷϩάGoΞϓϦ͔ΒAmazon Kinesis Data FirehoseΛୟ͍ͯS3ૹ৴ • Amazon AthenaͰௐࠪ
Further use AWS • AWS IoT • ແཧͯ͠͏ඞཁͳ͍ͱߟ͍͑ͯΔ͕ɺબࢶΛ͛ ͯඞཁʹԠ͍͍ͯͨ͡ •
ػցֶशܥػೳ • Ϣʔεέʔε • ࣨԹշదͷࣗಈௐ • ిྗͷ࠷దԽधڅௐ
ศརϥΠϒϥϦͳͲ Topics 41
ECSͷdeployʹecspressoಋೖ • github.com/kayac/ecspresso • ecs-deploy͔ΒΓ͑ • Γ͑ઌͱͯͪ͠ΐ͏ͲΑ͔ͬͨ • طଘͷTask DefinitionΛར༻ͯͦ͠ͷ··γʔϜϨεʹ
ҠߦՄೳ • binaryΛrepoʹಥͬࠐΜͰCircleCI͔Βdeploy
ECS Task Definition͕reviewableʹ • TaskͷαΠυΧʔՃύϥϝʔλʔมߋ͕reviewable ʹͳͬͨͷྑ͔ͬͨ
ECS Scheduled TaskཧͷͨΊͷπʔϧecschedule • github.com/Songmu/ecschedule • όονྨɺECSͷScheduled TaskΛར༻͍ͯ͠Δ͕ͦ ΕΛόʔδϣϯཧ͍ͨ͠ͱ͍͏ಈػ
github.com/natureglobal/firequeue • Amazon Kinesis Data Firehoseͷૹ৴ࣦഊ࣌ͷϦτϥΠ • ΠϯϝϞϦΩϡʔͳͷͰشൃͷՄೳੑ͋Δ • ׂͦ͜ΓΓ
• Ұ෦ͷϩάΛGoͷΞϓϦ͔ΒKinesis Data Firehoseʹ ͍͛ͯΔͨΊ • ϩάίϨΫλܦ༝Ͱͳ͍(ཱ͍ͯͯͳ͍) • ͦ͜ͷૹ৴ͷ࣮֬ੑΛ্͛ΔͨΊʹϥΠϒϥϦ࡞
ࠓޙͷ՝ 46
IoTػثଆͷ՝ • Observabilityͷ্ • ղܾ࣌ͷΓ͚͕͍͠ • ΤοδଆͰͷ੍ޚ • ػثͰͰ͖Δ͜ͱΛ૿͍ͨ͠ •
ػثଆͷεϖοΫΞοϓؚΊͯ
·ͱΊ 48
Nature Remoͷཪଆ • サーバーサイドはほぼ全てGo • 実は割と普通のWeb技術を使って実現している • インフラはAWSに寄せているし、もっと寄せていきたい • 本質的なサービス開発に注⼒したい
• IoT機器側でのエッジコンピューティング • Observability向上 • 機械学習
We are Hiring! ੵۃ࠾༻தͰ͢ʂ • όοΫΤϯυΤϯδχΞ • εϚʔτϑΥϯΤϯδχΞ • ػցֶशΤϯδχΞ
• ΈࠐΈΤϯδχΞ