Home / 知识库 / 博客 / 短信博客

短信博客

县气象部门通过短信中间件发布未来灾害天气预报预警信息到乡镇防指,由乡镇气象协理员负责接收并报告乡镇防指成员。未来灾害天气预报预警信息包括:台风预报信息、短历时强风暴雨预报信息、未来24小时强降雨预报信息等。县防汛部门通过短信平台、电话等方式发布当前(已发生)雨情、水情预警信息及未来水情预报预警信息到乡镇防指办。

县国土部门通过短信中间件、电话等方式发布地质灾害预警信息到乡镇防指,由乡级小流域山洪地质灾害防灾责任人负责接收并报告乡镇防指成员。乡镇防指在收到以上以上各部门的预警信息后,按预案及时作出部署,并向可能受影响地区的村级防汛防台工作组及有关责任人发出预警;村级防汛防台工作组按预案组织开展防汛防台应急工作,并通知有关负责人及各网格责任人上岗履行职责。当巡查员、监测员、预警员等网格责任人发现可能出现致灾洪涝、险情等时,立即向村级防汛防台工作组负责人和乡级防指报告;乡镇防指和村级防汛防台工作组及时作应急处置,并视情况决定是否启动人员转移预案,并向上级防指报告。

当出现洪涝台灾害征兆或出现险情、灾情时,乡镇防指和村级防汛防台工作组按照预案和“乡自为战、村自为战”的要求,及时处置,并及时向上级防指报告。当山塘水库、堤防出现险情时,立即组织当地及临近抢险力量投入抢险,并向县级防指及水行政主管部门报告,请求派出水利技术人员赴现场指导抢险。当出现有人被洪水围困以及被山体滑坡、泥石流、倒塌房屋掩埋等时,及时组织解救。必要时请求上级防指支援。

内网通用短信告警平台可以对接内网各个预警应用系统, 实现短信告警、短信通知等功能。内网短信告警平台需要达到2个指标,短信发送的可靠性(到达率),短信发送的及时性(时效率)。 

dualgun2

一、可靠性的达成, 需要在硬件和软件2个层面进行设计。硬件方面需要通过多个硬件设备协同工作,避免单点故障。软件层面需要智能化,随时监测系统运行状态, 随时自动进行异常处理。

金笛短信中间件设计可以多个短信设备和多个短信网关进行连接, 在规定的时间内将短信发向指定的手机。金笛短信中间件还可以会定期地检查回叫短信, 并将其保存在数据库中。由其它系统完成对这些信息的后续处理。发送服务系统内部采用多线程和队列设计, 具备有平抑高峰和自动连接/撤销的能力。发送服务器可以同时连接多个短信设备和短信网关, 并可保证相互的独立性, 使其在其中某个连接发生障碍的时候,其他连接可正常运转。

 短信中间件属于信息整合型的系统, 有很多信息来源于其他的计算机应用系统。接口服务完成的就是将其他应用系统的信息汇入到短信中间件的工作。接口服务完成了获取其他系统信息的功能。获取信息的方式有:

1)         数据泵作用, 在外部系统的数据库中初始化几张表,定时检测表的数据变化,提取待发送的短信。

 2)         应用系统的连接接口。受理其他应用系统“推” 进来的信息。

 

 告警信息的接入方式有2种:

1)         直接访问短信中间件待发送数据库。将需要发送的短信内容及手机号码,通过程序自动导入到待发表中;

2)         由应用系统推人数据。这是一种被动服务的方式。中间件接受其他应用系统通过HTTP发送来的数据, 经解析整理之后, 保存在中间件的数据库中,然后再由发送服务从数据库提取来完成发送数据的工作。

 

dualgun

二、内网短信告警平台的广泛适配各种报警数据, 支持多通道4G或者5G短信设备,以并发形式达成快速下发短信目标。

(1)系统属于平台性质的多人使用系统, 其结构为B/S方式,保证了在较大地理范围内的多人使用。

(2)系统配备有发送服务, 属于无人看守、可自己运行的服务系统, 可以发送即时的和定时的短信。

(3)系统配备有接口服务,使其成为一个数据整合性的系统。它的出现使得企业内大量的其他信息系统的数据可以自动地汇入到本系统中来, 并整理成标准的短信发送形式, 按规定的受众和时间进行发送。

(4)在发送服务和接收服务中, 大量地使用了多线程和队列的技术,保证了短信中间件可以有效稳定的运行。

(5)实现了多种方式的数据汇入方式。包括信息直接录入、文档(text、excel)导人、数据库导入、应用系统数据推入等方式。

 

该系统自推出后,获得了良好的使用效果, 具体表现为以下几个方面:

–  (1)内部局域网所有授权用户可以使用短信中间件的功能。包括人力资源部面试通知,财务部工资发放短信提醒、财务公告,行政部会议通知、新闻通报,销售部客户节日问候等都巳通过短信中间件发送, 使信息能够做到高效快捷的传递;

–  (2)短信中间件和内部多个软件系统进行相连,可在无人介入的情况下,自动进行数据整合并发送短信。典型的连接数据有:

  • 1)办公自动化系统(O A系统);
  • 2)MIS管理信息系统等;
  • 3)客户关系管理系统;
  • 4)订单管理系统;
  • 5)机房监控及报警系统;
  • 6)网站需求表单提交后短信提醒。
  • 由于与多个应用系统做了接口, 大大提高了企业办公效率,节省人力资源,客户满意,员工满意。

 该系统软硬结合,双管齐下,双路齐发,国内首创,目前已经在各内网平台交付使用。

 

金笛在深入了解客户需求基础上不断创新,扩展与基础通信、内部办公、生产控制、服务营销等息息相关的领先移动应用,服务企业、政府、学校的方方面面。无论是政府客户,还是大型乃至跨国企业,以及成长中的中小企业,金笛不断创新的产品类型,量身定制的解决方案,提供最适合的解决之道,满足集团客户的增强工作效率,掌控通信成本,提升客户满意度的各种需求,提升市场反应速度和竞争力。

 

金笛短信中间件具有IT应用集成,信息安全管理、数据管理、路由管理、标准通信接口等功能。扩展性好,安全性高,易于集成,可以灵活进行二次开发。在企业移动信息化进程中,金笛短信中间件通过短信服务中间件+短信硬件终端的方式,实现了移动终端和企业已有的信息系统(OA、CRM、ERP)的无缝连接,把各种工作功能从电脑及网络平台延伸到手机上。通过手机实现原来只能在电脑上操作的各种功能。金笛短信中间件为客户提供及时、高效、快捷的服务,实现海量信息瞬间到达。

 

 

jdsmsmiddle

 

金笛软件推出开放式平台化的短信软件产品——金笛短信中间件,可以实现:

1)       由中间件和短信硬件、短信网关打交道,短信统一发送和接收,用户不需要和底层打交道,只需要和数据库打交道,方便二次开发,方便集成,方便管理和维护。

2)       中间件平台提供标准的数据库接口和 HTTP API 接口,统一各个应用同时使用,便于短信的集中管理。企业对于短信应用的需求整合在一个统一的平台之上,统一了接口程序,规范了短信应用的开发,减少了维护工作量,大大提高了工作效率和减低了相关应用的实施成本。

 

 

 

金笛短信中间件由一个数据库、构筑在数据库之上的Web服务、发送服务、接收服务构成。其运作的方式为: 由Web服务构成B/S结构的用户界面, 使用户可以管理该平台; 由发送接收服务连接外部的短信设备和短信网关, 发送、接收信息。实现:

 

1)         发送服务。定时扫描数据库数据变化,将待发送送出去。目前支持MySQL、SQLServer2000/SQLServer2005-2012、Oracle。

2)         接收服务。随时处理收到的短信,将收到的短信转存到数据库。

3)         web服务。是平台主要的功能服务器,这些功能包括: 针对所有用户的个人功能,针对系统管理员的管理配置方面的功能。这些功能采用Web的方式实现,使得在网内(internet或intranet)的任何一台计算机不需专门安装任何软件,直接通过浏览器即可使用本平台。

内网环境实现短信通知、短信告警、短信提醒等, 对接内网各应用平台,提高内网短信平台的可靠性, 使得紧急消息能可靠及时地发出,具有很高的实用价值。

相较于外网短信平台,内网短信平台多借助于硬件短信设备+短信服务软件+sim卡组成,由于sim卡存在欠费、sim卡被限制、机房手机信号弱等问题,都会影响短信及时发出。为实现内网短信平台的高可用,本设计可通过两套短信设备+两个sim卡+短信服务软件,实现负载均衡发送。当一路短信通道出现故障后,另一路短信通道可继续完成待发送短信任务。双路互为备份,从而实现较高的可靠性。

2channel

当一路短信设备后发送失败,会在数据库短信记录发送失败次数累计,当失败次数小于3,另一路正常的短信设备会继续抓取并发送。如果发送成功标记为发送成功状态,如果发送失败,继续累计发送失败次数,下次抓取时继续发送。只有当达到系统设置的最大失败尝试次数后,才会将此记录标记为发送失败记录。

发送最大失败次数可以通过系统后台调节。两路设备共同作用于发送队列。互为备份,从而实现了高可用。此方案的最大优势在于充分利用两路设备形成两个发送通道,正常时同时工作加快发送速度,异常时可接管发送任务继续发送。对于可靠性要求比较高的短信通知、短信告警等应用,此方案不失为一种低成本的高科用方案。

如果要实现进一步的可靠性, 还可用使用4路短信通道。

短信要想实现可靠发送,在任何时候都保证短信不丢失, 用队列来保存短信十分必要。短信有时候因为信号、欠费等原因,有时候会发送失败,在这种情况下要有重发的机制。短信只要在队列中保存,就比较容易实现二次发送、三次发送。

有好多技术可以实现队列,用数据库实现队列,即保证了速度,又实现了很好的可靠性。用数据库实现队列,还有很多好处。部署更加灵活,与应用系统集成更加便利。二次开发也很容易, 任何语言都可以实现数据库的操作。金笛短信中间件实现了短信与数据库的结合,通过数据库接口, 让客户实现应用层短信功能的集成, 屏蔽了硬件层所有操作,也屏蔽了各种硬件异常处理。如果对短信可靠性有要求的项目不妨一试。

e03fc11e2580e51ff049f2a65919c209

和市场上其它类型的短信猫不同,金笛网口短信猫主要用来发送短信通知,因此在设计时就侧重于使用上的方便性、可靠性和稳定性。

该产品可以用来发送短信通知和接收短信,广泛应用于呼叫中心、CRM系统、ERP系统、来电挂机短信和其它应用系统的短信通知模块中。

在局域网里部署1台(或多台)金笛网口短信猫,通过网线接到路由器或网络交换机上。每台短信猫分别设置一个固定IP。每台短信猫插上一张SIM卡,可以支持4G网络。在局域网里找一台电脑当作服务器,运行短信控制软件金笛短信中间件。用户可以使用http接口导入待发短信到数据库中,或者第三方业务系统要发送短信时,通过SQL写入数据库中。金笛短信中间件会定时轮询数据库,当检测到待发短信,就会自动发送出去。

和短信平台相比的特点和优势

和采用短信平台(或短信通道)进行发送和接收短信相比,采用金笛网口短信猫具有以下的特点和优势:

短信到达率高。本短信猫采用了一些特殊设计,以确保能够长时间稳定运行;配合上软件,在短信偶尔发送失败时,还可以重新发送,因此可以保证很高的到达率(99%以上)。

发送延时小且速度可控。采用短信猫发送短信,要发送的短信量是自己可以控制的。如果通知量大的话,还可以采用多个短信猫或猫池同时发送。闲时发条短信,字数长的,一般也能在一分钟内发出去。

短信内容保密性高。通过短信猫发送出去的短信,直接经过运营商,内容不容易泄露出去。相反,如果通过短信平台,短信提交到运营商之前,中间可能要经过一至多个短信平台;短信内容要先保存到平台的数据库,再提交给上一级平台。短信内容对短信平台一方是透明的,可能被截留,保密性低。

发送方号码形象可控,避免被拒收。通过短信猫发送出去的短信,发送方号码是所采用的11位SIM卡卡号;接收方收到后往往会打开看一下。而通过短信平台发送的,号码比如是以106开头的,由于很多垃圾广告都采用这种开头,导致这种号段的形象变差,有的人甚至在手机里将106开头的短信添加到黑名单。

金笛短信中间件Web版截图

和其它短信猫相比的特点和优势

和市场上的串口短信猫、USB短信猫或其它短信猫相比,金笛网口短信猫具有以下的特点和优势:

硬件连接方便,不挑服务器。采用嵌入式架构和以太网接口,通过网线接入路由器、电脑或服务器,接线方便。如果使用其它串口短信猫,因为最近出厂的电脑或服务器一般都没有串口,需要的话还得定制,比较麻烦。

可扩容。每台短信猫可分配一个固定IP,一台电脑可以同时控制多台网口短信猫。因此扩容的话,只需要在网络里增加短信猫。而串口短信猫,一台电脑只能控制一个猫,没法扩容。

开发接口更准确,避免并发问题。发送或接收短信,采用异步操作。有API接口,能知道当前短信发送是否完成,从而能够在发送完成后再发下一条,以避免出现发送失败问题。而有的短信猫,没法知道当前短信是否发送完成;如果在当前短信没完成之前,就发送下一条短信,将出现并发问题,发送会失败。

除了API接口,还可提供数据库表结构接口,节约开发时间。金笛短信中间件可同时控制一至多台短信猫,均衡发送短信;同时也可以接收短信。可设置每台短信猫每小时发送的短信最大数,以避免因超过运营商的发送数量限制而被封卡。用户只需往待发短信表里写入记录,软件自动会将其发送出去;收到的短信保存到已收短信表里,用户可以从中读取。

多种特殊设计,确保达到系统级的稳定性。设备采用嵌入式设计,内部运行服务程序,采用多种方式,确保稳定性。当发送短信失败时,会重启SIM卡模块;当设备连续运行时间超过24小时后,在空闲时会重启设备,从而确保设备能不间断可靠运行。设备可以将短信发送结束的状态返回给软件,从而使软件在本短信发送完成后再发送下一条,从而避免发送短信失败。设备在收到新短信后,会及时地通知软件进行接收。同时软件还可以搜寻并读取已保存在SIM卡内的已收短信,避免漏掉某些重要短信。而其它有些短信猫,无法保证长时间运行的可靠性,且没有机制获知短信发送状态,并行发送容易导致下一条发送失败。
发送和接收都支持长短信,一个接口兼容各种编码方式。发送短信统一采用UNICODE编码方式,PDU方式,支持中文、英文、数字和各种字符;超过70个字,默认采用长短信方式

可提供URL发送接口,兼容以往的短信平台接口。如果之前是采用短信平台的URL发送方式,那么可以平滑过渡短信猫。只需将之前URL中的短信平台的IP改成短信猫所在电脑的IP和端口。短信内容编码采用utf-8编码。

支持在Linux操作系统控制短信猫。支持通过命令行发送短信,发送方需要自己控制发送速度(等当前短信发送完成后再发送下一条)。这种简单的方式,适用于监控报警领域中的短信报警。

随着移动互联网的发展,短信成为了人们生活中必不可少的一部分,同时,短信也成为企业进行短信告警、短信通知、短信提醒、短信营销、客户服务等方面的通信渠道之一。对于一些需要内部沟通的企业,如何利用内网实现短信推送,成为了一个需要解决的问题。

内网实现短信推送需要满足以下几个要素:安全性、稳定性、实时性和成本效益。

首先,为了确保短信推送的安全性,需要在内网中建立一个独立的短信推送平台。这个平台需要对外屏蔽,只对内网用户开放。同时,平台的数据库和短信内容也需要进行秘密保护,确保信息安全。

其次,为了满足短信推送的稳定性和实时性,在选择内网短信平台的时候需要考虑其运行稳定性和响应速度。一个稳定的内网短信平台能够保证短信推送的及时性和准确性,并且确保短信能够稳定到达用户手中。

最后,为了满足成本效益,内网短信平台的建设和维护成本必须要控制在一个合理范围内。可以选择一些性价比比较高的短信平台来进行建设,同时需要对其进行有效的维护,确保系统的长期稳定。

总之,对于需要内部沟通的企业,内网短信推送具有很大的价值。在内网短信平台的建设和维护过程中,需要着重考虑安全性、稳定性、实时性和成本效益这几个方面,才能够真正做到让内网短信推送发挥其应有的作用。

利用金笛短信设备和金笛短信中间件,可以在最短时间内构建高可用的内网短信平台。

金笛短信中间件是通过数据库连接业务系统,实现无缝对接,让业务系统及时、可靠、方便地发出短信。数据库可以是任何平台、任何网络、任何数据库,基本上可以做到连接一切数据库。这是如何做到的呢? 核心就在于ODBC。

ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access 、MYSQL还是Oracle数据库,均可用ODBC API进行访问。

ODBC的最大优点是能以统一的方式处理所有的数据库。

可不要小瞧ODBC,它出现于1991年,至今已经有27年历史了,可以说非常成熟,非常普及。市场上公开发行的数据库版本,没有不支持ODBC的。

中间件连接示意图

中间件连接示意图

金笛短信中间件就是使用ODBC,实现短信连接一切,实现消息及时、可靠、方便地发出。具体来说:

一、消息如何及时发出?

及时,多长时间算及时?一般来说,10秒内,5秒内,2秒内,按秒计算,算是及时。比如地震预警,都是按秒算的。几秒内,短信出现在手机屏幕上,这是微信等APP比不了的。短信是通讯技术,APP通信技术,一字之差,一种是电路交换,一种是IP交换,速度也相差很远。大部分验证码都是通过短信发送,无它,唯速度尔。

二、消息如何可靠发出?

可靠,莫过于简单。连接简单、网络简单,减少对网络的依赖。网络拥堵、网络断线、网络故障依然能否发出短信,靠的就是简化系统架构,整个系统就像一部手机在工作,只要有电、只要有信号,就可以发出短信。另外可靠性在于软件的容错机制,针对运营商返回的信息调整软件运行姿态,或者重发、或者重新初始化,等等。

三、消息如何方便地发出?

方便的意义是,开发方便,部署灵活。灵活部署,也就是带来了方便。ODBC跨平台、跨网络,连接一切数据库,虽不如OLEDB、ADO等那么时髦,但是带来的是无比的开放性,无比的灵活性。只要你有一个可访问的数据库,就可以连上,抓取信息发送出去。

金笛VC版短信中间件通过ODBC,让SMS和DATABASE融为一体,真正实现了消息从有线到无线的及时、可靠、方便传递。

金笛4G全网通短信一体机是一款真正的全网通,支持七模十八频段,真正可以做到任何SIM卡盲插,全网通,通全网。这七模十八频段罗列如下:

七模:

GSM:850/900/1800/1900(移动和联通的2G,即B2 B3 B5 B8)

CDMA:800(电信2G,即BC0)

WCDMA:2100/1900/850/900(联通3G,即B1 B2 B5 B8)

TD-SCDMA:1880-1920/2010-2025(移动3G,即B34 B39)

CDMA:1920-1935/2110-2125(电信3G,即BC1)

TDD-LTE:1900/2300/2600(移动4G,即B38 B39 B40 B41)

FDD-LTE:1800/2600(联通和电信的4G,即B1 B3 B7)

金笛4G全网通短信一体机NM1604有两颗强劲的CPU,一颗是负责操作系统和网络,一颗负责短信。用一颗CPU负责短信,可见金笛对短信的重视程度。正是这块专用于发送短信的CPU,可以让短信发送速度达到3000条/小时,在网络比较好的情况下,甚至可以达到1秒1条。为了避免运营商对卡做限制,正常发送最好控制到1800条/小时以下。另外一颗CPU负责嵌入式操作系统和网络,在高速SD卡上存放有数据库和短信WEB服务,可以接入内网或者互联网,数据库可以使用内嵌的数据库,也可以通过JDBC连接用户自己的数据库。

NM1604除了可以使用自带的一个硬件SIM卡端口发送短信外,还支持通过手机APP和短信网关发短信。手机APP是在android手机上装一个APP软件,在APP里设定一体机的IP地址和端口号,可以直接连到数据库里定时抓取短信发送,并把发送结果填回数据库。网络发送是通过互联网连接到金笛短信平台,用户可以申请开通帐号,通过支付宝付款购买短信发送,支付宝充值成功后,短信条数自动充值到帐号里,操作起来都是自动化完成的,不需要人工干预。

NM1604支持市面上所有主流的数据库,包括国产数据库,通过JDBC实现跨网络、跨服务器连接异地数据库服务器。各种数据库的JDBC驱动都已经内嵌,无需手工配置。有的客户把NM1604部署到办公网络,通过互联网连接阿里云主机数据库服务器,也没有任何问题。NM1604内嵌光速数据库连接池,在网络出现异常时,可以不断尝试重新建立连接,直到网络恢复,所以不用担心断网,断网也会自动恢复,无需人工干预。设计的目的,就是一切自动化,智能化。

NM1604对于虚拟化环境尤其适合。虚拟化环境下,没法直接使用串口、USB口,可以通过IP地址连接短信一体机,建立通讯联系。NM1604是定时轮询数据库抓取数据发送,公有云、私有云、专有云、VMware等环境下,只要能和数据库建立连接就能发送,可以放在机房内,也可以放在机房外,哪里有信号就放哪里,部署起来非常灵活。

除了数据库接口外,NM1604还支持HTTP接口。这种方式是把一体机当成一个http server来使用,通过GET或者POST方式提交短信,获取发送结果,多个系统可以共享短信服务。

如果想收到短信后,立即做出响应,还可以通过回调功能执行用户自定义的工作,这时候一体机工作模式相当于http client,请求用户的URL。

失败重发机制,在发送失败后,可以根据预设的重发次数进行重发。对于CMS ERROR 512、CMS ERROR 515等运营商返回的错误系统会自动进行重发。

看门狗机制,每隔1分钟左右,会自动发送AT指令,如果能正常返回OK,如果连续几次不能正常返回OK,会自动重启短信发送端口。看门狗在系统可靠性方面也是一个有效的机制。

NM1604支持UCS2、7bit、8bit三种编码格式。UCS2就是普通的手机短信,可以是中文、日文韩文等双字节编码;7bit是发送英文短信;8bit是发送字节流,可以传输用户自定义的数据格式。

金笛短信一体机,集4G通讯技术和通信技术于一身,安全、可靠、方便,是网管类软件和各类业务系统触达用户手机,实现告警、通知、提醒功能的不二之选。

短信中间件核心在于中间层,把复杂的底层操作转换为简单、方便的数据库操作。软件设计为从客户的数据库自动定时提取数据发送。中间件需要和用户的应用程序共享使用数据库,这就要求中间件访问数据库既要快,又不能影响数据库的性能。数据库连接池是必不可少的。

jindi-web-5

数据库连接池就是一个池子,里面放着数据库连接,应用服务需要的时候就去池子里面拿,用完之后归还给池子。数据库连接池负责分配、管理、释放数据库连接,它允许应用服务重复使用数据库连接,而非重新建立。数据库的连接创建和关闭连接均由连接池来实现。应用访问时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。 当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留等待再次使用。

如果不使用数据库连接池,进行一次查询,要进行很多次网络交互,可以看到,这样的缺点是:

1. 网络IO多

2. 响应时间长,导致QPS降低

3. 频繁创建连接和关闭连接,浪费数据库资源,影响服务器性能

使用连接池的好处:

1. 减少网络开销

2. 提升数据库性能

金笛短信中间件对连接池有2个要求:一要快,二要稳。目前,流行的Java数据库连接池有dbcp,druid,HikariCP,tomcat-jdbc,c3p0。在对所有流行的连接池进行逐一比较之后,单从性能角度看,性能从高到低分别是:HikariCP,druid,tomcat-jdbc,dbcp,c3p0 。

关于HikariCP和druid的性能对比,在github/HikariCP上有过讨论,结果是HikariCP性能上优于druid,吃瓜地址:https://github.com/brettwooldridge/HikariCP/issues/232

HikariCP 脱颖而出,符合金笛短信中间件短信要求既要快,又要稳的要求。短信从提取到发送,在数据库这个环节,把时间压缩到毫秒内,只有短信发送的每个环节都榨干,才能保证最终短信发送秒到。

各种评测对比,也说明HikariCP是目前最快的Java数据库连接池,spring boot 2.x已经使用HikariCP作为默认的数据库连接池,足见其优秀。总代码量:代码体积更是少的可怜,130kb。代码量越少,一般意味着执行效率越高、发生bug的可能性越低。简单意味着可靠,好维护,兼容性好。

数据库连接池,在20年以前就有。经过20年的进化,已经非常犀利。日本人素来以工匠精神著称,一个人一辈子就做好一件事。HikariCP是日本人在boneCP基础上,把优化做到了极致:为什么这么说呢?

1. 优化并精简字节码,优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码。使用Java字节码修改类库Javassist来生成委托实现动态代理,JDK Proxy生成的字节码更少。例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一,对编译器不满意,就差重写java编译器了。

2. 定义集合类型(ConcurrentBag):提高并发读写的效率。

3. 自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描。

4. 其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的优化。

光速,每秒30万公里。没有比光速更快的了。HikariCP ,就是光速。

本着geek精神,在可靠性方面,继续研究。对于数据库连接中断的情况,通过测试getConnection(),各种CP的不相同处理方法如下:

(所有CP都配置了跟connectionTimeout类似的参数为5秒钟)

HikariCP:等待5秒钟后,如果连接还是没有恢复,则抛出一个SQLExceptions 异常;后续的getConnection()也是一样处理;

C3P0:完全没有反应,没有提示,也不会在“CheckoutTimeout”配置的时长超时后有任何通知给调用者;然后等待2分钟后终于醒来了,返回一个error;

Tomcat:返回一个connection,然后……调用者如果利用这个无效的connection执行SQL语句……结果可想而知;大约55秒之后终于醒来了,这时候的getConnection()终于可以返回一个error,但没有等待参数配置的5秒钟,而是立即返回error;

BoneCP:跟Tomcat的处理方法一样;也是大约55秒之后才醒来,有了正常的反应,并且终于会等待5秒钟之后返回error了;

也就是在数据库连接中断的情况下,HikariCP在5秒内就可以感知,并在最短时间内通知上层应用。这个响应够快,够及时。实际测试中,就是拔网线,等半分钟再插上,看谁最先恢复数据库连接。HikariCP 又胜出。

金笛短信中间件WEB版集成光速数据库连接池,在各种数据库环境下表现异常稳定。有的客户在局域网连接阿里云主机数据库因为不明原因,间歇性断网的情况,也没有影响短信发送。实测支持SQLServer、Oracle、MySQL,支持win和linux各个版本。

 

夏日来临, 随着极端天气出现, 各地自然灾害频发。 保障人民生命财产安全,在险情出现端倪时,将预警信息第一时间发出,显得非常重要。

 

在山洪预警系统中,可靠性非常重要。没有了可靠性,一切功能都无从谈起。前端所有的设备都是在出现危险的时候,让告警信息能够及时发出。构建高可用的告警系统,可靠性是关键。

 

如何提高可靠性呢?可靠性都是相对的。比如短信的可靠性肯定高于邮件等其它方式。我们还可以通过高可用的方式,来提高系统的可靠性。具体说来,有如下几点可以注意:

 

第一,   尽量减少各系统之间的耦合关系,用更底层、更简单、更模块化的系统替代复杂的系统。山洪预警从前端传感器,到后端短信告警,任何一个环节出问题,告警信息都不能正常发出。降低各系统的耦合关系,可以将信息象流水线一样,从一个节点流向下一个节点。

第二,   尽量实现双备双活,平时2套系统都可以正常工作,不是一主一备的关系,2套系统都是主系统。当发送告警信息时,同时通过2套系统发出。任何一套系统出现故障,都不影响信息的发出。

第三,   尽量使用软硬一体化设备,减少对操作系统和网络的依赖。同时可以减少病毒感染造成操作系统的故障。

第四,   平常注意维护。每隔一段时间,需要测试一下预警系统是否能正常工作,以便于紧急时能发出预警信息。