论坛首页 Java企业应用论坛

电信行业Http接口(通道)设计思路与实现过程

浏览 22495 次
精华帖 (1) :: 良好帖 (5) :: 新手帖 (11) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-31  
这东西应该没有那么复杂吧?
其实说来说去,最需要的就是定义一个调用者和服务者之间的数据交换协议.
调用者把要调用的请求按照这个数据交换协议发过来,这边服务者收到一个数据包,然后拆包分析,将结果按照约定的数据交换格式发回去.
这样整个过程就解决了.
至于服务方具体如何存储信息,如何处理信息,这是服务方要解决的问题,和调用者无关.
应该属于两个问题分别进行讨论研究才对.
0 请登录后投票
   发表时间:2009-05-31  
fjlyxx 写道
天机老人 写道
fjlyxx 写道
总感觉你这个东西做的 网关不像网关,接口不像接口. 有点粗糙的感觉.
1,根据你业务我任务可以定位成一个短信网关.
……

恩楼上两位的发言都非常中肯,都是金砖。
……
quote]
楼主,可能你有点误解我的意思了.我说的第二点 并不是指错误代码.和你举个例,比如你去银行取钱,你要先拿个流水号吧.我说的返回信息其实是指这个流水号,这个流水号是让企业用户能够查看这次任务的执行情况的.因为你上线程队列后其实用户是不知道执行情况如何的,你也不可能让用户一直保持连接 然后告诉他执行结果


了解你的意思了,这有点像队列。
目前我们就有用户差不多有这种需求,他需要了解有哪些号码的内容没有发送成功。就是你说的这种实现方式,每次请求就给分返回一个流水号(像去银行先领一张排队号)。然后能根据流水号返回相应的执行情况。
  不过我们这个体系目前还不是建的很完整,需要更健全一点。谢谢你的提醒,我们当时有点是被这个需求牵着走不得以做了这么一个功能。你这么一说我倒提醒我了,有必要把这个功能做的更健全一些,以应对合作商的需求!



哥们 你们是不是返回一个叫messageid的东西啊?这个就是她说的流水号的东西,这个号码可以用来才客户发的信息,这个接口下发情况,网关下发情况,移动返回情况。。。晕
0 请登录后投票
   发表时间:2009-05-31  
那是  移动的SP网关不是这么简单. 个人觉得移动的SP网关没有联通的做的好. 联通的技术确实不错  不过不知道为什么就是搞不过移动. 可能是销售,商务没有移动厉害. 技术评论本人不是联通的.
0 请登录后投票
   发表时间:2009-05-31  
考虑到单条数据量不会很大,所以没有必要把通讯协议做成二进制的。所以我个人推荐已经非常普及的 xml-rpc。

然后是系统的瓶颈,总的来说瓶颈一分为二:
第一个就是数据库的瓶颈。这里都是插入数据的操作,所以效率上应该是不会有什么大的问题。
第二个系统能不能抗得住并发的压力,在并发很多的情况下响应时间和吞吐率是不是会直线下降。这可是HTTP接口。

然后还有安全的问题,基本上和楼主说的一样。当然还有另外的做法,比如新建用户的时候生成一对密钥,分配给客户端一个,服务器端自己保留一个。信息提交过来的时候都是经过客户端密钥加密的,只有服务器端密钥能够解密。这样很安全,可是效率上会有一些损伤。我觉得限制IP地址这个就足够了。

我们有一个类似的东西,下面是用jmeter的测试结果。
系统很简单,就是传递两个数字,做两个数的加法运算。此处单纯测试HTTP并发压力。
我的机器配置是
2G内存
1.73GHZ的CPU
O(∩_∩)O~



请求数据
<?xml version="1.0"?>
<methodCall>
   <methodName>com.join.rpc.server.test.Calculator.add</methodName>
   <params>
      <param>
         <value><i4>200</i4></value>
         </param>
       <param>
          <value><i4>200</i4></value>
       </param>
      </params>
   </methodCall>

断言
200+200当然是400咯。O(∩_∩)O~


测试结果




  • 大小: 15.8 KB
  • 大小: 14 KB
  • 大小: 38.2 KB
  • 大小: 31 KB
0 请登录后投票
   发表时间:2009-05-31   最后修改:2009-05-31
chenyongxin 写道
fjlyxx 写道
天机老人 写道
fjlyxx 写道
总感觉你这个东西做的 网关不像网关,接口不像接口. 有点粗糙的感觉.
1,根据你业务我任务可以定位成一个短信网关.
2,前端请求应该是一个短连接请求,只是负责发送指令,企业发送完指令后服务的应该给它一个服务令牌标识(标识这次任务的) 这样交互就完成了.
3,服务的(短信网关)在收到指令后应该是进行静默处理的.日志应该批量写(10000条写一次或者10分钟写一次), 线程也许可以帮你解决一些问题 但是要考虑线程的模型,这种我推荐用LF线程模型.
4,服务的应该有一个完整的任务处理机制,提供包括重试,任务状态定位,任务日志记载,容错处理等功能 比如某些任务可以进行重试的,某些任务不能重试直接到失败状态的等等
5,对于楼上agapple的建议,楼主可以考虑在设计模式上进行解决.应用链模式(可以包括校验链,任务链等等).服务的的框架应该是基于会话的,一个客户请求是一个会话,这个会话包括的流程可以有 合法性校验链(IP,用户,时间,业务ID等等), 前期处理逻辑链条(解压,加密,编码转换等等),业务处理链.这些JAVA的接口可以帮你的忙.这样做基于两个地方考虑 第一.你的领域是一个会话,领域模型很固定 第二,方便扩展,可以实现热插拔功能.代码也容易维护

6,客户端要跟踪这个任务的情况,可以根据2的任务标识进行跟踪.所以你的服务的应该有几个子处理逻辑 最少要包括 登入,提交,跟踪,退出.
个人意见仅供参考!

恩楼上两位的发言都非常中肯,都是金砖。
楼上说的第二点我们确实是做了,每次请求结束,我们也会返一个信息给合作商。同时对于各种错误我们也约定好一些错误码:比如返回0100就是成功,0200ip验证无效等!
非常感谢大家提的一些好建议!

楼主,可能你有点误解我的意思了.我说的第二点 并不是指错误代码.和你举个例,比如你去银行取钱,你要先拿个流水号吧.我说的返回信息其实是指这个流水号,这个流水号是让企业用户能够查看这次任务的执行情况的.因为你上线程队列后其实用户是不知道执行情况如何的,你也不可能让用户一直保持连接 然后告诉他执行结果


楼主是那公司的?你的设计怎么这么熟悉呢?
不过要说一点哦,你这个接口只是一个接收数据的功能,正真和移动通信的功能不在这。。。呵呵



人肉公司就莫有意思了!
只谈业务与技术,别的没必要!
我们这个通道会经过这样一个步骤:
1 合作商发下信息经过我们的通道,将短信内容+N个手机号
2 重新组装成N(个短信内容+手机号)然后下发到网关
  在与网关通信的时候,调用了公司已经做好的接口。(所以很大的压力在这里,但这一块对我们来说是透明的!)
3 返回发送报告
0 请登录后投票
   发表时间:2009-05-31  
fjlyxx 写道
那是  移动的SP网关不是这么简单. 个人觉得移动的SP网关没有联通的做的好. 联通的技术确实不错  不过不知道为什么就是搞不过移动. 可能是销售,商务没有移动厉害. 技术评论本人不是联通的.

与网关的接口有专门的底层人员开发,专职的。
我们负责把合作商的信息重新组装,通过网关下发,并返回发关情况!
0 请登录后投票
   发表时间:2009-05-31  
楼上的 loadrunner 啊   还要自己开发压力测试工具啊.
0 请登录后投票
   发表时间:2009-05-31  
fjlyxx 写道
那是  移动的SP网关不是这么简单. 个人觉得移动的SP网关没有联通的做的好. 联通的技术确实不错  不过不知道为什么就是搞不过移动. 可能是销售,商务没有移动厉害. 技术评论本人不是联通的.

不过我确实有几个朋友在联通开发,好像听说很累,全国各个点都是实地开发的!
0 请登录后投票
   发表时间:2009-05-31  
jmeter
apache的。
0 请登录后投票
   发表时间:2009-05-31   最后修改:2009-05-31
fireflyc 写道
考虑到单条数据量不会很大,所以没有必要把通讯协议做成二进制的。所以我个人推荐已经非常普及的 xml-rpc。

然后是系统的瓶颈,总的来说瓶颈一分为二:
第一个就是数据库的瓶颈。这里都是插入数据的操作,所以效率上应该是不会有什么大的问题。
第二个系统能不能抗得住并发的压力,在并发很多的情况下响应时间和吞吐率是不是会直线下降。这可是HTTP接口。

然后还有安全的问题,基本上和楼主说的一样。当然还有另外的做法,比如新建用户的时候生成一对密钥,分配给客户端一个,服务器端自己保留一个。信息提交过来的时候都是经过客户端密钥加密的,只有服务器端密钥能够解密。这样很安全,可是效率上会有一些损伤。我觉得限制IP地址这个就足够了。

我们有一个类似的东西,下面是用jmeter的测试结果。
系统很简单,就是传递两个数字,做两个数的加法运算。此处单纯测试HTTP并发压力。
我的机器配置是
2G内存
1.73GHZ的CPU
O(∩_∩)O~



请求数据
<?xml version="1.0"?>
<methodCall>
   <methodName>com.join.rpc.server.test.Calculator.add</methodName>
   <params>
      <param>
         <value><i4>200</i4></value>
         </param>
       <param>
          <value><i4>200</i4></value>
       </param>
      </params>
   </methodCall>

断言
200+200当然是400咯。O(∩_∩)O~


测试结果







哈哈,你这不会是自己写的测试吧!
我手里的工作下来也要为我们这个通道写个测试。想做一个能全面测试又能单个测试的!
看来我这块“砖”是抛对了,学了不少东西,呵呵!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics