专栏首页程序员的SOD蜜“批量少次”还是“少量多次”--邮件通信系统效率浅谈

“批量少次”还是“少量多次”--邮件通信系统效率浅谈

    在做Web开发的时候,相信很多人都看过一个“批量少次”原则:

    Web服务器采用HTTP协议,它是一个非持久连接的协议,是无状态的(虽然可以采用多种方式来模拟Web会话状态,但本质上Web是无状态的),由于每一次连接都要耗费相当的资源,所以尽量减少连接的次数,每次连接发送尽量多的数据也是顺理成章,这样它能够提供极大的吞吐量,可以提高Web应用系统的处理效率,这便是著名的“批量少次”原则。

    这个原则在很多情况下都适用,比如ADO.NET相比原来的ADO数据访问,由于采用了断开式连接,极大地提高了系统的处理能力,又比如商业贸易中的“批发”模式,分销商每次从批发商那里批量进货,可以得到更高的价格折扣。因此,在实际工作中,“批量少次”原则,也是我极力推崇的一个原则。

    我们通常情况下手工收发邮件,如果有很多文件或者内容,也是希望对方一次发过来的,这也符合“批量少次”的原则。但是我们使用的邮件系统都有限制,即每次发送的附件数量和大小有一定的限制,比如4M,所以有更大的文件,就必须分割多次发送了,因此“批量少次”的原则也有不适用的场景。为什么会有这样的问题?发送超过1M大小的邮件,对于现在的网络系统和大多数邮件系统而言,发送速度都有点慢了,我测试使用FoxMail发送4M以上的邮件,大概有10%-40%的失败率,要么我这边的网络速度太慢,邮件服务器提示处理超时,要么对方邮件服务器拒绝接收或者接收很慢。

    每次发送多大的邮件速度和成功率最高?经过很多次试验,我发现如果内容在1M内成功率接近100% ,2M以内有95%左右,3.5M以后成功率大幅下降,只有60%左右。看来,要发送大量的邮件,必须采用另外一个原则:“少量多次”,每次发送成功率最高的最大容量(少量)的邮件,分多次连续发送。这样做还有一个好处,每个“任务”可以发送远大于邮箱容量的邮件,比如发送上G大小的邮件。

    WCF邮件通信系统之文件同步程序采用了“少量多次”的原则,来处理将整站文件同步到远程服务器的任务,发送的文件大小没有限制,它会自动切割大文件,每次发送一个分部文件,多次发送邮件,从而完成文件同步任务。

    对于数据同步的应用该采用那种模式?如果每个任务要同步多个表的数据,而且某个表的数据可能很大,“批量少次”的处理方式有可能增加处理的复杂度和消耗更多的资源,比如将数据打包成压缩文件,对方接收到压缩文件并解压缩,然后将内容很大的数据载入内存,再慢慢导入数据库,处理的最终结果,要等这个操作完成之后才能知道。如果采用“少量多次”的处理方式,每次只发送一个表的数据,如果表比较大分页发送,接收端处理后及时反馈处理结果,而不是等到全部处理完成后。由于每次发送的数据相对较少,所以系统通信的成功率很高,而且处理效率也很好。

    下面是数据同步程序处理“大数据量”的一个测试结果:

========================

网络情况:

测试环境:一个外网263邮箱,一个外网Notes邮箱,源数据库在外网,目标数据库在内网;

数据情况:

待同步的表:XX净资产值表;

记录数量:57万条;

记录大小:每2万条约4M(非压缩),总共约 1032M;

单次发送邮件的记录条数:2万条(数据经过自定义压缩);

测试结果:

自开始发送到全部导入的时间:6分钟左右(受网络环境影响);

===========================================================

6分钟处理50多万条记录的邮件通信系统,可以跟“批量少次”模式对比一下,相信这个速度还是令人满意的。

而且,采用“少量多次”的方案,提高了方案的灵活性,比如上面测试的这个表,如果一开始就发现对方数据库无法使用或者目标表结构不一致,从而及时终止这个表的同步,是不是比一次把所有数据发过去(姑且认为你有办法),然后在发送端傻等要好得多?

总结一下“少量多次”在邮件通信系统中的意义:

  • 可以处理超过邮箱容量的数据;
  • 可以适时了解接收端的工作状态;
  • 可以应对网络状况不好的问题,提高系统的稳定性。

小技巧:

很多邮箱只是限制了“附件”的大小,但不会限制邮件正文的大小,所以WCF邮件通信系统的数据同步程序采用了“正文发送数据”的模式,不过该模式太过“非主流”,以至于得不到领导的认可,但这不失为“突破附件大小限制”的一个方案。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • “批量少次”还是“少量多次”--邮件通信系统效率浅谈

     在做Web开发的时候,相信很多人都看过一个“批量少次”原则:     Web服务器采用HTTP协议,它是一个非持久连接的协议,是无状态的(虽然可以采用多种...

    用户1177503
  • 卓越软件工程--《微软360度》读后感

    卓越软件工程 --《微软360度》读后感 卓越软件工程 这一段时间,读了《微软360度—成功与成长》这本书,感觉微软之所以取得巨大成功,与微软重视人才,重视知...

    用户1177503
  • 敏捷和架构

    为了理解敏捷和架构的关系,我们继续讨论第1部分曾经讨论的3个主要的方法:XP、Scrum和RUP。 1,极限编程:架构形成 XP是以程序员为中心的开发,其中没有...

    用户1177503
  • “批量少次”还是“少量多次”--邮件通信系统效率浅谈

     在做Web开发的时候,相信很多人都看过一个“批量少次”原则:     Web服务器采用HTTP协议,它是一个非持久连接的协议,是无状态的(虽然可以采用多种...

    用户1177503
  • HBase入门

    HBase在大数据生态中的地位举足轻重,它是谷歌bigtable的开源实现,是一种分布式存储的NoSQL数据库,能自动分片和故障转移,与HDFS高度集成,适合海...

    soundhearer
  • Kubernetes 集群监控 kube-prometheus 自动发现

    前面我们一起配置了如何在 kube-prometheus 下面新增一个监控项 Kubernetes 集群监控 ETCD 组件。如果我们在 Kubernetes ...

    高楼Zee
  • Apache Thrift环境配置

    当我看到windows安装需要Cygwin或MinGW时,我就直接放弃在windows中配置的想法了,直接打开虚拟机用CentOS进行安装,使用一堆命令安装毕竟...

    砸漏
  • 【重磅来袭】在Power BI 中使用Python(5)——数据预警与邮件通知

    某连锁门店的区域经理助理小朱为当前区域门店创建了多个重要指标看板,但无论是区域经理还是店长,因为日常工作太忙,经常没空细看所有数据看板。小朱希望对于重要指标,特...

    陈学谦
  • MailSploit:30多种邮件客户端存在电邮身份伪造漏洞

    近日,德国安全研究员 Sabri Haddouche发现30多种邮件客户端中存在漏洞,可以让任意用户伪造身份发送欺诈邮件并绕过反欺诈保护机制(如 DMARC 等...

    FB客服
  • 微软与OpenAI达成合作,获GPT-3独家授权,马库斯:呵呵?

    当地时间 9 月 22 日,微软执行副总裁兼首席技术官 Kevin Scott 在官方博客上正式宣布:微软已与 Open AI 达成合作,获得 GPT-3 语言...

    新智元

扫码关注云+社区

领取腾讯云代金券