分布式应用运行时的落地实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 分布式应用运行时落地
实践
郭智勇
2. ON
1 云平台概述
2 分布式运行时
3 实践分享
4 展望
3. 01
CHAPTER
云平台概述
• 平台概览
• 技术挑战
4. 平台概览
智能设备
智能家电
核心服务
内容 国内美居 设备控制 设备管理 实时消息推送 国际美居 MSmart life
设备影子 Serverless 消息分发 实时计算 国际东芝 ToshibaHA
安全服务 设备升级 规则引擎
接入服务
接入服务
生态设备
业务应用
物模型 用户
数据存储
智能音箱
开放平台业务
网关设备
接入路由
设备事件
任务调度
监 控报表
美居
5. 技术挑战
多样的连接
终端碎片化
巨量的数据
1
3
5
欢迎加入
2 技术链路长
4 海量的连接
6 部署多样性
6. 02
CHAPTER
分布式运行时
• 现实问题
• dapr
• 多运行时
7. 现实问题
服务开发使用的语言各不相
同,有java、c++、
python、go,一些公共的库
需要编写多种版本,升级维
护需要投入不少人力
服务代码中引入越来越多的
SDK,有一些与云厂商强相
关,不同的云厂商提供的
SDK不一样,多云部署时需
要调整代码(例如:KMS
服务)
服务的治理,服务间的限
流、降级、熔断;服务与外
部的交互;整个调用链路的
追踪,出现问题时如何快速
定位
技术链路长,关联的部门
多,联调、测试、压测大家
都需要有一个稳定的环境互
不干扰
8. 多运行时
infoq.com:
业务运行时和技术运行时分离;
《Multi-Runtime Microservices
业务运行时专注于业务的逻辑实现;
Architecture》
技术运行时关注于业务所依赖的技术中间件能
将各种各样的分布式能力外移到独立
力。二者分离开,各自维护,但又相互依存。
Runtime,最后和应用 Runtime 共同组成微
多运
行时
架构
开源社区框架 :
服务,形成所谓的“Multi-Runtime”(多运
行时)架构
从实际出发,选用Dapr,在此基础上扩展自己
的业务组件,满足自身的需求,同时回馈社区
9. Dapr APIs
Application code
Microservices
Microservices written
written in
in
Any code or framework…
gRPC API
HTTP API
Service-
to-service
invocatio
n
State
management
Publish
and
subscribe
Resource
bindings
and triggers
Actors
Observability
Secrets
Configuration
Distributed
Lock
Workflow
Any cloud or edge infrastructure
virtual or
physical machines
10. Dapr APIs
Publish &
Subscribe
Trigger
Get
state
Application
Configuration
Get
config
v2
Publish
Subscribe
Call
method
Retrieve
secret
Service
Invocation
Secret
Management
Output
Binding
11. 03
CHAPTER
一些实践分享
• 多泳道环境隔离
• 服务治理
• 多云配置管理
12. 1.1多泳道环境隔离-全览
南向消息
设备上行,按照设备白名单将上行消息按泳道投递,分发到MQ的不同前缀topic
设备下行,无需处理,接入层只需要一个
北向业务
在网关层通过用户白名单将业务请求按泳道投递,实现不同来源(开发人员、品质、事业部等)用户分别投递到对应的泳道。
13. 1.2多泳道环境隔离-服务间调用示例
DNS
Name Resolution component for service discovery
(mDNS, Kubernetes DNS, Hashicorp Consul)
二开扩展能力:基于泳道特征,服务发现优先匹配同泳道下的目标服务节点,不存
在时调用回目标服默认节点
Send order
Checkout
Order
Processor
mTLS encryption
POST
http://localhost:3500/v1.0/invoke/orderprocessor/method/orders
{"data":"order1"}
POST
http://10.0.0.2:3501/orders
{"data":"order1"}
14. 2.1配置管理-业务配置
Configuration
My App
key
appconfig1
value
”setting A"
GET
http://localhost:3500/v1.0/configuration/store/appconfig1
"setting A"
二开扩展支持ETCD方式的存储
结合自研配置管理后台,实现配置的增、删、改、查、发布
基于http api交互,业务侧中不关注具体的配置存储方式(etcd\redis\mysql),不依赖业务具体的开发语言(java\go\c++\python),
不需要集成sdk,可主动读取配置
业务提供回调路由地址,也可实现及时接收配置的热更新
15. 2.2配置管理-安全配置
二开扩展支持对接不同云服务厂商的密钥管理云服务或自建的KMS服务
业务侧不需要集成sdk,与开发语言无关
服务的移植性大大提升
16. 3.1服务治理-更多探索
混合部署下的服务发现
可观察性
云原生演进
统一的限流、降级
17. 展望
18. 谢谢
19.