Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20万超のIoTデバイス同時接続を支えるNature RemoのシステムとAWS / IoT ...
Search
Songmu
February 10, 2021
Technology
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20万超のIoTデバイス同時接続を支えるNature RemoのシステムとAWS / IoT AWS Loft Nature Remo 2021
Songmu
February 10, 2021
More Decks by Songmu
See All by Songmu
How to integrate AI into engineer recruitment / AIをエンジニア採用にどのように馴染ませていくか
songmu
5
2.2k
現役エンジニア兼採用担当から見たエンジニア採用アンチパターン / Engineer Recruitment Anti-Patterns
songmu
20
16k
GoとNature ~ Nature Remoの裏側 / Nature Bath vol6
songmu
0
7.3k
Nature Remoの裏側 ~ AWSとWeb技術をIoTの世界でフル活用する / Inside Nature Remo
songmu
11
15k
Other Decks in Technology
See All in Technology
サイバー捜査員研修(前半)
nomizone
1
1.8k
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
380
Redmine 7.0 新機能・機能強化解説(OSC2026京都ダイジェスト版)
vividtone
1
190
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
130
TypeScript入門 2026
recruitengineers
PRO
2
420
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
1
250
AIがAPIを書く時代に、私たちは何を設計すべきか
nagix
0
220
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
420
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
110
システム思考で問題に対処する
yussak
0
160
AI時代の強いチームの作り方
yuukiyo
25
16k
ブラウザ研修 2026
recruitengineers
PRO
4
650
Featured
See All Featured
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
680
The SEO Collaboration Effect
kristinabergwall1
1
520
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
430
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
200
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
170
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
200
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Transcript
ݫൿɿຊࢿྉͷҰ෦·ͨશ෦ΛɺNatureגࣜձࣾͷڐՄͳ͠ʹɺෳɺసࡌ͢Δ͜ͱΛې͡·͢ɻ Introduce about September 3, 201 9 Natureגࣜձࣾ 20ສͷIoTσόΠεಉ࣌ଓΛࢧ͑Δ IoT@Loft
#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! ੵۃ࠾༻தͰ͢ʂ • όοΫΤϯυΤϯδχΞ • εϚʔτϑΥϯΤϯδχΞ • ػցֶशΤϯδχΞ
• ΈࠐΈΤϯδχΞ