`
天机老人
  • 浏览: 151434 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多

  最近接口做了好长时间了,觉的有必要记录点什么下来!(虽然最近这一块不是我负责了有别的事要忙去,但是我还是经常会去看看项目开发情况。)

  

  项目主要是一个Http接口的开发,利于与其它公司合作在信息交互!因为我们这个是电信行业的项目,所以呢,在与合作商合作的时候会下发大量的短信,走数据库这有点太不专业了!用Ejb?这有点太过份了,而且很多公司赚钱是赚了不少钱,但技术实力不行。别的不说,就Http接口合作的好几家公司还真不会。 

  先说一下这个接口设计的一些重点:

  1、安全:这是肯定的,不能随便一个家伙跑过来就要用我们的接口发短信啊。

  2、效率:一家合作商用户订阅量在100多万,一天十几家下去,你的接口的扛的住啊。

  3、备份:这合作商发的信息你得有详细log啊,要是出了问题,这能找责任人啊。

 

  出于以上三点要抓信核心要点:

  1、加入安全验证机制

  2、减少数据库访问量,重构代码注重条理减少没效率的代码。采用Http能还有个好处就是规避了多线程的问题。

  3、采用log4j把详细的下发日志记录到log上,每个log的大小限制在1M.

 

 

      一、安全

  在安全方面最先考虑的是一个合作商就给他一个http链接,同时定义一个合作商编号,这样就可能起到隔离,起码你不是我和合作商你不知道发哪个Url,更别说编号了.

  但往深层想想这也不妥当:

  1、每加个合作商你得再搞个Url链接吧,这你多少还得重写点代码吧。不利于扩展。

  2、万一要是人家利用了别人的通道如何?Url发错了,编号通过了。或者更极端点。这安全级别不够。于是想到一个办法,在服务器Apache上做了手脚:验证IP(非合作商无法进入)。同时共用一个Url,会将合作商编号与产品编号一起生成一个md5号,通过后去验证一下md5就行了。虽然不是在最大程序上做到安全,不过我们都建立在友好合作的前提下的,没必要那么干,冒充别人的发。而且md5值你也无法知道。

  3、在实体类中加入:周未是否充下发(本来还想搞节假日,这太不靠谱了除非专门找人维护这个去,一年一个变。)、开启状态(关闭,暂停,运行)。从而决定这一堆信息能否下发。

  

  二、性能

  说实话安全这块做到这基本上就算成了。但还并不是很完美,但是有时候在性能上考虑,还真不能再加太多东西了,一天量一大必然影响性能。

  1、为了能够更好的实现性能上的最优,大家都知道减少数据库访问次数,这是最先考虑的,因为代码的速度运行远远高于数据库啊。所以呢我们的数据库就采用了一张大表设计(把合作商id,名称,产品,发送所有方式,发送方向,合作商md5编号等)。有些东西并不怎么符合范式,但是为了效率吗,这种东西多一张表,他就会多更多的复杂度。性能上会有更多的损耗。基本上每一个产品发送取一次数据库就行了。(一个产品上百万手机号+信息内容)

  2、其次就是代码了,数据库已经不是瓶颈了,基本上用户从进为就已经通过Ip验证了,也就是有钥匙了,而且去数据库取的东西无非就是“指纹验证”,并且预读入一些用户信息。数据库就算是一个钟头下发两三百个产品也不是问题。

      3、 所以现在的优化方向是代码:做的第一件事就是重构。大家也注意到了其实有多个下发方式,选择的下发方式不同那么实现代码也不同。原来写的代码if else过多,基本上代码没有可阅读性。于是采用策略模式重构了一下,把相同的代码抽出来,这样代码条理就清晰了。在策略模式上我们没有选择反射,更没有选择数据库,因为怕效率上跟不上,为了效率我们有context里写了个静态map用于存储各种实现方法。因为我们的下发方式非常固定,基本上大半年也改不了一两次,所以写到代码上比较合适。

  4、第四点从一定程度上还是讲的第一点,但是我还是有必要提一下。就是尽量把通用性的属性用静态方法写到代码里,这样会好很多。(虽然在数据库上数据是一口气全拿上来的,但是感觉这样会好点。至少便于阅读

   

  三、日志

  这一点非常重要,说难听的,以后出了问题打官司还得用他呢(至于能不能作为呈堂证供就是我们要过分研究的东西了。)。但我们的记录的详细,啥时间,啥内容,发向啥手机,发送状态等。这里主要就使用log4j.

      这个现在实现有点凌乱(到处乱加log),但是吧。主要是原来那个程序,一起还没按我写好的代码把东西重构好,不然这log得在一个统计的地方调用他。

 

  

      这个接口的设计吧我就写这么多,但是,总感觉不是很全面,也希望听听大家的想法。有什么砖可以拍。不过目前我们还没用上好的http接口的框架啊啥的。大家也可以推荐一下!

  

     

分享到:
评论
54 楼 mx122723 2009-06-04  
是做SP的吗? 感觉您这对电信的网关,还不是很了解啊
53 楼 kunee 2009-06-02  
参考facebook,肯定够用了
52 楼 netstorm 2009-06-02  
我这边也做过类似的移动接口,大致是这样的

1. 颁发数字证书给合作商(山塞版)
2.合作商先进行登录认证
ip认证,平台号认证,数字签名认证
3. 登录成功后,服务端分配一个session 给合作商
4. 合作商用这个session做业务认证
5. 设置闲时机制,超过n分钟没有交易的,自动把合作商session删除
6. 设置同异步开关,业务量大时也切换到异步模式
7. 后台数据库会记录每笔交易日志

51 楼 天机老人 2009-06-02  
josen 写道
如果没有猜错,分众无线的...

很高兴告诉你,猜错了!
50 楼 josen 2009-06-01  
如果没有猜错,分众无线的...
49 楼 xiuxiuxiu 2009-06-01  
关于接口可以参考facebook.com或者51.com的实现吧.通过public key和private key来实现安全认证.性能和可靠性大家都看得到.
48 楼 chen4059 2009-06-01  
几个运营商的sp平台都支持地址群发。1l的是不是做sp代理的?
小的sp不能直连运营商,听说注册资金过千万的才能连。。。。
47 楼 lottons 2009-06-01  
wzpwork 写道
lottons 写道
wzpwork 写道
lottons 写道
前面好像有人回复了这个问题了:
1.如果采用HTTP协议POST XML请求固然能规避你对多线程了解的缺乏,但是最好你的HTTP是长连接,否则你会发现挺多消耗都在TCP握手、WEB服务器响应HTTP请求上。

其实大家最担心的就是HTTP的响应问题,目前就我了解电信有的项目使用的是webservice,其实应该说性能还好(我之前做过中国电信的一个项目,使用的就是webservice)。至于安全性,我个人认为采用验证IP应该就可以了,没有必要搞得太复杂,一般来说能连到电信网络的系统不是一般系统做得到的。



这个网关其实可以参考一下MM7 API,发送跟接收在里面都有实现,只要再稍稍改造下即可.


何必这么复杂参考MM7呢,其实很简单,用xml消息,按照一定的格式整合消息在服务端解析就可以了。而且还方便以后的扩展,解析消息的类是可以扩展的。且,即使以后不使用HTTP而改用MQ的方式(电信行业系统大多数都会使用MQ)因为性能和系统压力的需要。
网关其实也需要分层的,安全性我觉得还是直接有专业的安全网关来作吧,要接入到电信系统第一步要做的就是先通过验证,这个应用网关采用客户端地址校验足够了。



在这个API中多线程,长短连接,还有安全验证都有很好的实现.这个API是中兴给移动写的,它的并发我测试过,可以达到每秒100以上.


移动的网络和系统建设我不是很清楚,中国电信我倒是比较了解。但是就我个人了解到的情况是其实移动的系统建设的不如电信,移动靠的是什么我觉得就是垄断(无线的发展,因为移动在初期垄断了无线)。
现在移动也慢慢在像电信的系统学习,开始构造CRM这些东西了。(都是题外话了)

其实我的最主要目的就是怕过渡的设计,适合的就是最好的。
46 楼 wzpwork 2009-06-01  
lottons 写道
wzpwork 写道
lottons 写道
前面好像有人回复了这个问题了:
1.如果采用HTTP协议POST XML请求固然能规避你对多线程了解的缺乏,但是最好你的HTTP是长连接,否则你会发现挺多消耗都在TCP握手、WEB服务器响应HTTP请求上。

其实大家最担心的就是HTTP的响应问题,目前就我了解电信有的项目使用的是webservice,其实应该说性能还好(我之前做过中国电信的一个项目,使用的就是webservice)。至于安全性,我个人认为采用验证IP应该就可以了,没有必要搞得太复杂,一般来说能连到电信网络的系统不是一般系统做得到的。



这个网关其实可以参考一下MM7 API,发送跟接收在里面都有实现,只要再稍稍改造下即可.


何必这么复杂参考MM7呢,其实很简单,用xml消息,按照一定的格式整合消息在服务端解析就可以了。而且还方便以后的扩展,解析消息的类是可以扩展的。且,即使以后不使用HTTP而改用MQ的方式(电信行业系统大多数都会使用MQ)因为性能和系统压力的需要。
网关其实也需要分层的,安全性我觉得还是直接有专业的安全网关来作吧,要接入到电信系统第一步要做的就是先通过验证,这个应用网关采用客户端地址校验足够了。



在这个API中多线程,长短连接,还有安全验证都有很好的实现.这个API是中兴给移动写的,它的并发我测试过,可以达到每秒100以上.
45 楼 lottons 2009-06-01  
whaosoft 写道
电信业的那数据库设计看的我脑袋那个疼啊 我在也不想碰了~


呵呵, 复杂也是因为业务上复杂造成的。其实现在软件系统最怕的就是过渡设计,这种情况在电信行业也比较突出。为了一个无足轻重或者是添花的小功能都会导致设计上的过渡和复杂,这就需要很好的谈判与周旋技巧了。

以后电信行业逐渐会做到融合(无论是电信网和互联网的融合,还是预付费与后付费的融合)。
44 楼 pipilu 2009-06-01  
怎么建立长连接?一个客户端一个长连接?客户端每次调用都使用已有的连接?没明白具体是咋回事。
另外,生命期要多长?
43 楼 lottons 2009-06-01  
wzpwork 写道
lottons 写道
前面好像有人回复了这个问题了:
1.如果采用HTTP协议POST XML请求固然能规避你对多线程了解的缺乏,但是最好你的HTTP是长连接,否则你会发现挺多消耗都在TCP握手、WEB服务器响应HTTP请求上。

其实大家最担心的就是HTTP的响应问题,目前就我了解电信有的项目使用的是webservice,其实应该说性能还好(我之前做过中国电信的一个项目,使用的就是webservice)。至于安全性,我个人认为采用验证IP应该就可以了,没有必要搞得太复杂,一般来说能连到电信网络的系统不是一般系统做得到的。



这个网关其实可以参考一下MM7 API,发送跟接收在里面都有实现,只要再稍稍改造下即可.


何必这么复杂参考MM7呢,其实很简单,用xml消息,按照一定的格式整合消息在服务端解析就可以了。而且还方便以后的扩展,解析消息的类是可以扩展的。且,即使以后不使用HTTP而改用MQ的方式(电信行业系统大多数都会使用MQ)因为性能和系统压力的需要。
网关其实也需要分层的,安全性我觉得还是直接有专业的安全网关来作吧,要接入到电信系统第一步要做的就是先通过验证,这个应用网关采用客户端地址校验足够了。
42 楼 whaosoft 2009-06-01  
电信业的那数据库设计看的我脑袋那个疼啊 我在也不想碰了~
41 楼 wzpwork 2009-06-01  
lottons 写道
前面好像有人回复了这个问题了:
1.如果采用HTTP协议POST XML请求固然能规避你对多线程了解的缺乏,但是最好你的HTTP是长连接,否则你会发现挺多消耗都在TCP握手、WEB服务器响应HTTP请求上。

其实大家最担心的就是HTTP的响应问题,目前就我了解电信有的项目使用的是webservice,其实应该说性能还好(我之前做过中国电信的一个项目,使用的就是webservice)。至于安全性,我个人认为采用验证IP应该就可以了,没有必要搞得太复杂,一般来说能连到电信网络的系统不是一般系统做得到的。



这个网关其实可以参考一下MM7 API,发送跟接收在里面都有实现,只要再稍稍改造下即可.
40 楼 lottons 2009-06-01  
前面好像有人回复了这个问题了:
1.如果采用HTTP协议POST XML请求固然能规避你对多线程了解的缺乏,但是最好你的HTTP是长连接,否则你会发现挺多消耗都在TCP握手、WEB服务器响应HTTP请求上。

其实大家最担心的就是HTTP的响应问题,目前就我了解电信有的项目使用的是webservice,其实应该说性能还好(我之前做过中国电信的一个项目,使用的就是webservice)。至于安全性,我个人认为采用验证IP应该就可以了,没有必要搞得太复杂,一般来说能连到电信网络的系统不是一般系统做得到的。
39 楼 天机老人 2009-06-01  
pypcjs 写道
安全性:
使用https
1、验证CA(机构证书)。
2、验证客户端证书。(这个证书有客户信息,由某机构授权的)
3、限制IP合法性。
4、拼url的时候,用md5算一下摘要防止修改。

并发性:
client -> httpd -> db_server -> db
这样设计可以扩充方便,而且易于做优化。

楼主参考一下在线支付公司的案例。

不过有些东西还真想问一下!
为什么大家都喜欢用长连接呢?在我看来一个Url把所有的信息传回就行了。处理完一个结果返回去不就好了吗!
38 楼 天机老人 2009-06-01  
vlinux 写道
呵~~pypcjs的安全性方法我的确忘记了https了,B4自己一下
对了,关于并发性的解释,我有点看不明白你的这个解决方案有什么特别的地方呢,感觉原来就这样设计的呀

恩,pypcjs这个还是比较专业的!
37 楼 vlinux 2009-06-01  
呵~~pypcjs的安全性方法我的确忘记了https了,B4自己一下
对了,关于并发性的解释,我有点看不明白你的这个解决方案有什么特别的地方呢,感觉原来就这样设计的呀
36 楼 pypcjs 2009-06-01  
安全性:
使用https
1、验证CA(机构证书)。
2、验证客户端证书。(这个证书有客户信息,由某机构授权的)
3、限制IP合法性。
4、拼url的时候,用md5算一下摘要防止修改。

并发性:
client -> httpd -> db_server -> db
这样设计可以扩充方便,而且易于做优化。

楼主参考一下在线支付公司的案例。
35 楼 天机老人 2009-05-31  
swen00 写道
vlinux 写道
我这个菜菜觉得优化的地方还有很多,

2.海量的日志,最好还是记录到数据库里,按日期或者月份建表,不建索引。为什么呢?很明显,以后你查日志的时候,不会乐意到处去grep的,我就曾经遇到过接口挂了,对方说是我们某个时间段请求的请求太多导致的,我们没有数据库日志,都是我按时间段grep出来后wc -l才解决纠纷,如果再麻烦点我就顶不住了。


4.异常返回代码。个人建议最好是用NUMBER,因为可以swtich(){case}呵呵,编码简单,而且效率比字符串要高。异常返回代码尽可能丰富、细致,最好有规律,比如说网络原因的以2开头等等,这样以后在统计的时候会帮助你节省不少时间。


以上是我这个小菜菜提出的观点...不知道是否正确



wzpwork 写道
2、万一要是人家利用了别人的通道如何?Url发错了,编号通过了。或者更极端点。这安全级别不够。于是想到一个办法,在服务器Apache上做了手脚:验证IP(非合作商无法进入)。同时共用一个Url,会将合作商编号与产品编号一起生成一个md5号,通过后去验证一下md5就行了。虽然不是在最大程序上做到安全,不过我们都建立在友好合作的前提下的,没必要那么干,冒充别人的发。而且md5值你也无法知道。

安全这块你可以先用IP验证,每个合作商分配一个企业ID,产口ID,密码,另外加一个时间戳,由企业ID+密码+时间戳生成MD5. 这样每次的MD5值都不会一样,防止网络上的嗅探器.


结合下以上几位提到的,我比较支持,也是目前采用的方法.

通信协议比较重要,LZ可以贴出来看看.

发送速率是否也要限制下,短信网关我这是1秒只能发3条,如果不限制,当大量请求过来,排队是否有性能问题?

如果发送失败,超时,是如何处理的?简单丢弃还是会记录到数据库中?







我这里是一秒400!

相关推荐

    单片机课程设计:数字电压表(8路通道)

    总的来说,这个“单片机课程设计:数字电压表(8路通道)”项目涵盖了51单片机的基础操作、C语言编程技巧、模拟-数字转换技术以及嵌入式系统的设计思路。对于电信专业的学生来说,这是一个很好的实践平台,能提升...

    电信设备-一种方便滚轮拆装更换的移动框架侧板.zip

    在电信行业中,设备的可维护性和灵活性至关重要,尤其是在需要频繁移动或调整位置的场景下。标题中的“电信设备-一种...这一设计思路在现代电信设备制造中具有广泛的借鉴意义,尤其是在强调效率和适应性的应用场景中。

    单逻辑芯片多通道频率计的虚拟仪器设计.pdf

    考虑到FPGA芯片的性能以及软件控制的优势,该设计方案在石油石化行业具有实际的应用价值,为石油井下传感仪器的检测提供了一种新思路和解决方案。通过虚拟仪器的设计,不仅能够提供更为精准的测量,还能通过软件界面...

    电信设备-一种基于模块相对位置的信息组合系统.zip

    在电信行业中,设备的复杂性和多样性使得信息处理与通信系统的集成变得尤为重要。"电信设备-一种基于模块相对位置的信息组合系统"是一个针对这个问题提出的一种创新解决方案。这种系统的设计理念是利用模块之间的...

    电信设备-一种基于单片机的多串口多路分时复用串行通信装置.zip

    下面我们将详细解析这一技术的核心原理、设计思路以及其在电信设备中的应用。 首先,让我们了解单片机的基本概念。单片机,也称为微控制器,是集成在一个芯片上的微型计算机,包含了CPU、内存、定时器/计数器和输入...

    综合复用技术中基于HDLC的MCC驱动设计

    **设计思路**:MCC驱动设计的核心在于如何有效地整合HDLC协议与MCC硬件,实现数据的高效处理和传输。设计时需考虑HDLC协议的特性,如帧结构、同步模式、错误检测机制等,以及MCC硬件的性能指标,如数据吞吐量、延迟...

    电信设备-信封类快件自动供件结构.zip

    通过深入学习"信封类快件自动供件结构.pdf"这份资料,可以详细了解每个部分的设计思路、工作原理、安装维护要点以及可能遇到的技术挑战。这对于电信设备制造商、物流系统集成商、快递公司等相关领域的技术人员来说,...

    电信设备-一种模块化移动房屋.zip

    6. **运维与维护**:设计可能考虑到了设备的易于维护和升级,如预留扩展接口、便捷的维修通道等,确保了系统的长期稳定运行。 7. **案例分析**:文件可能包含了一些实际应用案例,展示模块化移动房屋在不同场景下的...

    硬件工程师基础知识

    - **定义与重要性**:调研同类产品的设计思路和技术实现,为自身项目提供参考。 - **具体内容**:现有产品的优缺点分析、新技术的应用前景等。 **4. 总体架构,CPU选型,总线类型** - **定义与重要性**:确定系统...

    对于面向移动互联网的融合通信方案具体分析.docx

    融合通信的设计思路主要包括以下几点: 1. 利用社交媒体的力量,通过用户的通信连接掌握其社交关系,强化和扩展用户的社会网络。 2. 充分发挥移动设备的优势,结合现有通信手段,提供更丰富的互动体验。 3. 引入...

    基于FPGA和光纤通信的数据采集系统设计.doc

    此外,硬件电路设计也是论文的重点,包括FPGA与AD转换器、存储器以及其他外围设备的接口设计,以及光纤通信模块的设计。 在国内外研究现状中,数据采集系统的控制芯片经历了从单片机到DSP,再到FPGA的演变。尽管DSP...

    基于RS232的简易逻辑分析仪原理图

    这种分析仪的设计思路是将输入的数字信号通过RS232接口传输到主机,主机上的软件再进行解析和显示,以实现对信号的分析。 **工作原理** 1. **信号采集**:简易逻辑分析仪通过一组输入通道(例如,多位开关或逻辑...

    广西国信呼叫中心及增值业务平台项目建设规划书

    - 具有开放的CTI接口,与计算机业务系统之间实现高速带宽连接,确保交换网络与计算机网络无缝集成。 - 支持多媒体应用和信息处理,兼容ATM、IP等多种接入方式。 2. **综合接入平台**: - 能够同时处理语音、传真...

    电子信息系统中信息传输控制技术 (1).pdf

    它不仅为专业人士提供了研究和开发的新思路,也为信息系统的设计者和运营商提供了实用的技术指南。 综上所述,电子信息系统中信息传输控制技术的发展和应用,是保障现代通信系统高效、安全运行的关键。随着技术的...

    CPCI-E163.zip

    CPCI-E是一种基于PCI Express(PCIe)接口标准的板级互连技术,广泛应用于工业控制、电信和军事等领域,因其高带宽、低延迟的特性而受到青睐。 描述中提到这是一个“cpcie标准的pcb”,表明这是一个遵循CPCI-E规范...

    通信与网络中的德州仪器推出高端口密度千兆以太网收发器

    总的来说,德州仪器的TLK2226千兆以太网收发器通过其高密度、低功耗和灵活的设计选项,为通信和网络设备制造商提供了全新的设计思路,推动了行业向更高效、更节能的方向发展。它在满足高速数据传输需求的同时,也为...

    工程维护\传输网日常维护操作

    业务网通过这些接口与传输网交互,实现信号的高效传输。 - **常用传输设备与结构**:传输设备通常以子框为单位,安装在机架中,由机架提供必要的电源、告警、冷却等功能。子框内包含复用单元、线路单元等,可实现多...

Global site tag (gtag.js) - Google Analytics