产品之惑--稳定性

产品名称:为方便交流给产品起一个名字:“UP”,全称Ugly Product。

产品定义:UP是一个服务性产品,集成不同厂家的硬件产品来供应用层使用,我们给硬件起名叫C,全称Card(一张嵌入式卡)

产品现状:

协议层

1.既然是集成不同厂家的硬件产品,就需要对同类硬件提取通用功能,并形成一个硬件接入规范,定义为CP(Card Protocol)

2.既然是一个服务性产品,肯定需要一套协议,所以定义一套产品协议,协议名字叫UPP(Ugly Product Protocol)

此时的UP变成了如下结构:

UPP-->CP-->Card

架构

3.既然是一个服务性产品,必定要考虑到高并发访问,因此将产品分为简单的两个模块(从最简单开始,这是从复杂的回归)

一个是对外提供服务的接口服务,我们起名叫Server

一个是向硬件下发消息的服务,我们起名叫Sender

此时的UP变成了如下结构:

UPP-->Server-->Sender-->CP-->Card
                                  -->CP-->Card

部署

4.既然是一个集成类产品,必定会遇到复杂的硬件环境,所以部署方案,要一对多方案,一个Server,多个Sender

此时的UP变成了如下结构:

UPP-->Server-->Sender-->CP-->Card
                                  -->CP-->Card
                   -->Sender-->CP-->Card
                                  -->CP-->Card

架构图

 

稳定性出现的地方

1.CP层,

超时,Sender到Card一个来回发生的周期太长,发生原因可能是网络延时大,也有可能是Card厂家提供的二次开发包出现的延迟(Sender与Card之间通信可能是串口,无线,CDMA,RJ45等,之间也可能出现防火墙
异常,Sender同时对应的多个Card发送时,可能造成异常情况出现,导致下发失败,发生原因可能是资源竞争,可能是内部异常(最后迫不得已同一个Sender同步向多个Card发送,唯有增加Sender数量,减少Sender对应的Card来提高并发行,减少等待)

2.Sender层

多线程的下发,在一个Sender带几百个Card,每一个Card一个线程时,造成多线程带来的异常

讨论后的解决方案

1.对各个厂家的Card形成一个测试报告,功能性,时效性,多线程下稳定性,成功率,大数据包的发送时长,将测试报告提供给客户采购参照,对比不同厂家,形成一个长期合作伙伴。
2.在32位机下分多个Sender部署,(很多厂家的二次开发包不支持64位),32位系统一个进程最大2GB内存,一个线程栈1MB,所以大约可启动2000个线程,在c#里最好用线程池管理线程。

posted @ 2013-11-27 11:56  Roader  阅读(326)  评论(0编辑  收藏  举报