Skip to main content

开发方案介绍

9.1 前端开发方案

9.2 分布式配置中心方案介绍

1)为什么选择Etcd?

Etcd是一个用于存储分布式系统中最关键数据的仓库,它是分布式的、可靠的键值对仓库。可以用来实现服务注册与发现,分布式配置中心,基于Go语言开发,能够跟爱星物联的后端技术栈完美结合。

2)什么是Etcd?

etcd 是一个一致的分布式键值存储。提供了一种可靠的方法来存储通过一个分布式系统或者机器集群的数据,在网络分区和能够容忍机器下线的情况下,能够优雅的处理Leader选举的问题,甚至包括Leader节点。

随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用、强一致性的服务发现存储仓库,渐渐为开发人员所关注。

主要具有具有以下几个特点:

  • 简单:基于HTTP+JSON的API让你用curl命令就可以轻松使用。
  • 安全:可选SSL客户认证机制。
  • 快速:每个实例每秒支持一千次写操作。
  • 可信:使用Raft算法充分实现了分布式。
  • 数据:数据持久化。etcd默认数据一更新就进行持久化。

3)Etcd的应用场景

场景一:服务发现

服务发现(Service Discovery)要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能通过服务名找到对方并建立连接。从本质上说,服务发现就是想要了解集群中是否有进程在监听udp或tcp端口,并且通过名字就可以进行查找和连接。首先,服务侧需要先将服务名及IP地址或者域名注册到Etcd分布式配置中心,客户端会通过服务名去注册中心拿到一个服务名到IP地址或者域名的列表映射,然后通过客户端侧的选择器,通过一定的负载均衡算法(如随机,轮询等),拿到一个唯一的IP地址或者域名,然后向这个地址发起连接并进行通讯。

微服务调用流程1

场景二:配置中心

考虑到后续生产环境应用是以集群的方式运行,需要在etcd改动相关配置后,应用集群能够及时更新配置,做到一次改动,批量更新服务配置,能够有效减少运维部署的时间成本。部署时将服务配置文件自动或者手动写入Etcd配置中心,主要分为基础配置和服务私有配置,服务启动时,从Etcd配置中心拉取基础配置和服务私有配置,并进行配置合并,然后按配置启动服务,当配置需要更新时,用户可以操作etcdkeeper可视化界面客户端来更新配置,Etcd配置中心会将配置实时推送给各微服务,当更新端口等配置时,需要通过kubectl等命令来批量重启服务,来拉取最新配置。

4)etcd配置中心流程图

用户通过etcdkeeper的UI界面,更改etcd集群的配置文件,服务启动时,会从etcd集群拉取相关配置文档,进行服务初始化。

Etcd配置中心架构图

9.3 MCU SDK开发方案介绍

MCU SDK 是根据爱星物联开放平台上定义的产品功能,自动生成的 MCU 代码。主要流程是用户点击开放平台下载按钮,平台拉取MCU SDK模板,通过从数据库或者缓存查询到产品的功能点信息,执行模板,生成MCU SDK代码,将MCU_SDK.zip压缩文件以文件流的形式传给客户端,MCU SDK 已包含通讯架构及协议解析架构,可以将 MCU SDK 直接添加到原有工程中,快速完成 MCU 程序开发。

MCU_SDK下载流程(1)

9.4 爱星物联错误码方案介绍

1)爱星物联错误码处理流程图

错误码处理流程图

2)错误码格式

错误码设计统一采用6位数字的形式,具体格式如下所示:

统一格式: A-BB-CCC
A: 表示错误类别,如1代表系统级错误,2代表输入参数错误,3代表业务级错误,4代表内部服务错误
B: 表示微服务项目名称,一般微服务项目数量不会超过99个,已经够用,范围01-99
C: 表示具体错误编号,自增即可,范围001-999

B段编号划分,需要按业务域进行分类划分,且每个业务域预留一定的编号段,以应对新需求的增加,B段对应的服务分配如下所示:

B段编号对应服务
01iot-user-service
02iot-auth-service
03iot-mqtt-service
04iot-mqtt-data-service
05iot-sys-notifier-service
06-20暂时预留
21iot-cloud-api-service
22iot-product-service
23iot-device-service
24iot-intelligence-service
25iot-device-simulator
26iot-system-service
27iot-open-system-service
28iot-basic-service
29iot-log-service
30iot-statitstics-service
31iot-oss-service
32iot-language-service
33iot-document-service
34-50暂时预留
51iot-app-api-service
52iot-app-build-service
53iot-app-message-service
54iot-app-notifier-service
55iot-app-oem-service
56iot-job-service
57iot-device-job-service
58iot-ip-service
59iot-weather-service
60-99暂时预留

3)错误码类别

a) 系统级错误

当为系统级错误时,A段为1,B段可以表示为00,C段自增即可,例如100001代表系统错误,以下为常用系统级错误码表,需要逐步补充或替换:

错误代码错误信息详细描述
100001system error系统错误
100002service unavailable服务不可达
100003remote service error远程服务错误
100004rpc errorRPC错误
100005illegal request非法请求
100006invalid user非法用户
100007request body length over limit请求长度超过限制
100008request api not found接口不存在
100009http method not support请求方法不支持
100010ip requests  over limitIP请求频次超过上限
100011user requests over limit用户请求频次超过上限
100012api request over limit接口请求频次超过上限

b)输入参数错误

当为输入参数错误时,A段为2,B段按服务分类填充,C段按具体错误填充即可,例如251001代表iot-app-api-service服务的产品key为空错误,以下为输入参数错误码表,需要逐步补充:

错误代码错误信息错误描述
251001product key is empty产品key为空
.........

c)业务级错误

当为业务级错误时,A段为3,B段按服务分类填充,C段按具体错误填充即可,例如351001代表iot-app-api-service服务的手机号码为空错误,以下为业务级错误码表,需要逐步补充:

错误代码错误信息错误描述
355001flash screen create error闪屏创建错误
.........

d)内部服务错误

当为内部服务错误时,A段为4,B段按服务分类填充,C段按具体错误填充即可,例如402001代表iot-auth-service服务的auth服务不可用错误,以下为内部服务错误码表,需要逐步补充:

错误代码错误信息错误描述
402001auth service unavailableauth服务不可达
.........

注意:以上输入参数错误,业务级错误,内部服务级错误码表,只是为了说明该如何定义错误码的示例,并不代表错误码顺序就一定是按这个开始。