推送系统架构如何设计?

个性化的新闻推送系统设计与实现_中华文本库
第1页/共55页
个性化的新闻推送系统设计与实现
在网络发展的新时代,越来越多的信息在网上发布,新闻作为信息的一个重要的主题也不例外。为使用户轻松获得更新最好的新闻信息,每天的信息发布、更新都需要投入很大的人力和物力。
本文通过研究ASP.NET技术+数据库SQL Server 2008结合的方式,以 Microsoft公司Internet Information Server 7.0作为Web服务器,实现了一个基于浏览器/服务器(Browser/Server)模式的网络新闻发布系统,完成了用户浏览及管理员操作的各项功能,如:栏目菜单的显示、栏目内新闻的显示、新闻搜索、新闻评价、添加新闻、新闻的修改和删除、新闻栏目管理、用户管理等。系统设计严格遵循软件工程思想,完成了系统的可行性分析,需求分析,概要设计和详细设计等工作。
关键词: 网络,信息,ASP.NET,浏览器/服务器
第1页/共55页
寻找更多 ""微信公众号的运营 如何让公众号推送内容的排版更漂亮?
作者:佚名
字体:[ ] 来源:互联网 时间:10-12 09:22:40
谈到微信公众号的运营,还是少不了内容,基本上全部公众号都会推送内容,而推送内容就又要涉及到内容的阅读率和转化率这个问题,所以除了内容质量,公众号内容的编辑排版就显得尤为重要。下面我们找到了排版很好的微信作为例子,需要的朋友可以参考下
  在这个&全民皆微信,人人是朋友&的年代,微信营销真的是太火爆了,不仅是小屁孩在讲、企业再讲、老专家在讲、甚至连一些重要部门都在讲。而对于现在企业的网络营销,如果仅靠搜索引擎,已经远远不够,越来越多的企业开始微信营销,而其中微信公众号成了很多企业的选择。
  谈到微信公众号的运营,还是少不了内容,基本上全部公众号都会推送内容,而推送内容就又要涉及到内容的阅读率和转化率这个问题,所以除了内容质量,公众号内容的编辑排版就显得尤为重要。可以多看看那些做得不错的公众号,他们都是很在意细节,推送内容的排版都非常漂亮。
  无疑,一篇好的内容,再加一个赏心悦目,与众不同的排版,那确实增亮不少。
  然而,微信公众号的内容编辑框很简单,没有多少编辑功能,如果你懂一些代码还好,可以在其他地方排版编辑好再直接复制过来,这样稍稍麻烦一点,并且大多数微信运营人员是没有代码编辑基础的,那怎么办?
  工欲善其事,必先利其器!
  其实,有些东西不一定你自己要会,找到合适的方法轻而易举的就可以解决。很多人为什么没有去好好给微信内容排版?不是他们不想做,他们看到别人做出来的也觉得很牛,但是不知道怎么做,不知道方法,没有好的工具。现在木木就给大家推荐一些微信内容编辑的工具,就算是技术再差,也能轻松为微信排版!
  如下就是一个微信编辑工具,没有难度,你进去随便琢磨一下就会。
  很简单,只需要选择合适的样式,然后到页面左下部分,修改文本和颜色,然后复制到右侧编辑框中进一步编辑完整,最后直接把编辑好的复制到你的微信公众号就OK了。模板都给你提供了,只需套用编辑一下就可以了,轻松快捷,而且漂亮美观。
  下面就是我随便做的一些内容的排版:
  好了,就举这么多例子,还有很多排版形式可以很快的在编辑工具中完成。由于平台问题,适合微信的很多排版这里展示不出。
  以防一个网址不够或被删除,下面再给大家推荐几个可以进行微信内容排版的页面:
  小易微信编辑
  微信超级编辑器
  易点微信编辑器
  微信在线编辑器
  秀米微信编辑助手
  微信图文排版系统
  留链接有限制,如果你有需求,以上工具页面链接原文中都有。除此之外,微信内容的排版形式重在积累,最牛的方法就是学习,多看别人做得好的内容排版,直接复制下来,下次要用可以直接拿出来,或者你勤快一点,可以做一些修改。谢谢阅读,希望能帮到大家,请继续关注脚本之家,我们会努力分享更多优秀的文章。
大家感兴趣的内容
12345678910
最近更新的内容系统架构和设计(4)
一、消息推送系统设计需求
1、高性价比,在有限的硬件资源下,尽可能的提高消息系统的性能和可用性。
2、提高数据的一致性。
消息推送,按数据量划分,包括两类:
1)持续的大量数据(比如:持续的物联网GPS上报等)推送,单类数据量大于 10 kb 每秒 。
2)低频率、数据量小的偶发事件、通知类的数据推送。
消息重要性和实时性分级:( “四象限” 划分)
& & & & & & & & & & & & & & 不重要 & & & & & & & & & & & & & &| & & & & & & & & & & & & &不重要
& & & & & & & & & & & & & & 可延时 & & & & & & & & & & & & & &| & & & & & & & & & & & & &低延时
& & & & & & & & & & & & & & ——————————————————————
& & & & & & & & & & & & & & 很重要 & & & & & & & & & & & & & &| & & & & & & & & & & & & &很重要
& & & & & & & & & & & & & & 可延时 & & & & & & & & & & & & & &| & & & & & & & & & & & & &低延时
& & & & 备注:
& & & & & & & & & 很重要 &= &非常重要,数据不丢、不乱。
& & & & & & & & & 不重要 &= &可接受偶尔出现问题。
& & & & & & & & & 低延时 &= &延时低(平均在3秒以内)。
& & & & & & & & & 可延时 &= &有一定延时(3秒以上)。
大部分消息处于 (2) (3) (4) 象限。针对消息的特性,应采用不同性能和稳定级别的推送方案。
根据 CAP 定理:
& & Consistency(一致性), 数据一致更新,所有数据变动都是同步的。
& & Availability(可用性), 好的响应性能。
& & Partition tolerance(分区容错性) 可靠性。
& & 定理:任何分布式系统只可同时满足二点,没法三者兼顾。
没有一个分布式系统是C、A、P同时都达到完美的,要么损失性能来保障一致性和可用性;要么损失一致性来提高性能。
理想模型如下:
A、牺牲 性能 来提高 可用性和一致性。
B、牺牲 一致性 来提高 性能和可用性。
C、牺牲 可用性 来提高 性能和一致性。
对于上面的 A 模型,用得非常广泛,比如消息的ACK机制,用法比较简单,不多说。
对于上面的 B 模型,经常使用 BASE (牺牲高一致性,保证最终一致性) 方案。
& & Basically Available 基本可用。
& & Soft state 软状态 状态可以有一段时间不同步,异步。
& & Eventually consistent 最终一致,最终数据是一致的就可以了,而不是实时高一致。
对于上面的 C 模型,用得比较少,也不好理解。牺牲可用性,来保证一致性和性能,我的理解是,除非服务不可用,否则服务一定是高性能且高一致性的。
也就是说,当服务不能保证一致性和高性能的时候,就降低可用性,宁愿服务不可用,也不能让服务出现不一致或者性能低的情况。
C模型的关键点在于,C模型的系统,系统自身不保证高可用,出现异常(性能降低或者一致性出现问题)时,它有意降低可用性,来保障服务期间的高性能和数据的强一致性。
所以如果使用C模型,则需要考虑,如何通过外部手段来保证系统的可用性(加强监控,出现不可用时,人工介入恢复,或者启动临时方案)。
延伸知识:分布式系统的容错模式
电路熔断器模式(Circuit Breaker Patten), 该模式的原理类似于家里的电路熔断器,如果家里的电路发生短路,熔断器能够主动熔断电路,以避免灾难性损失。在分布式系统中应用电路熔断器模式后,当目标服务慢或者大量超时,调用方能够主动熔断,以防止服务被进一步拖垮或者导致其他系统故障(雪崩效应);如果情况又好转了,电路又能自动恢复,这就是所谓的弹性容错,系统有自恢复能力。
参考文章:q.com/cn/articles/basis-frameworkto-implement-micro-service/
上面的A、B、C模型对于推送系统来说,
对于上面处于(2) 象限的消息推送,可以考虑 能否采用上面 C模型,如果不能接受C模型的服务(暂时)不可用,则可能会降级为 A、B 模型,A模型牺牲性能,整个系统是否存在性能问题?B模型牺牲一致性,是否能采用软状态、最终一致性方案来弥补?
对于上面处于(3) 象限的消息推送,宜采用 A 模型。
对于上面处于(4) 象限的消息推送,宜采用 B 模型,A模型也可以,具体视情况而定。
A模型数据推送系统设计方案
在A模型中,性能不是关键。它的关键词:性能不是瓶颈 &数据要准确可靠
& 1、如何保证数据100%不丢失?
& 2、如何保证数据100%不重复?
不丢失:数据来后,先以最稳当的方式持久化下来,再推送出去,推送成功后,才删掉持久化的数据,否则数据一直持久化直到超过保存容量或者时间上限。(如果使用数据库,可以考虑事务)
不重复:能够识别每条数据的唯一性(最简单的办法就是每条数据有一个唯一标识),在内存数据库中保存一段时间已推送的数据标识(ID)的列表,当新的数据来了之后,和数据标识列表中的ID进行比较,如果存在则说明之前已经推送过这条数据,直接pass,否则推送数据并加入数据标识列表。
技术选型和系统处理数据流程:(纯Java + Redis缓存ID + 本地磁盘缓存数据)
1)收到数据后,先将数据ID取出,去Redis里已推送的数据ID的列表中查找,如果找到这个ID,则说明数据已处理过,重复了,则丢弃该数据。否则继续下面的步骤。
2)将数据和ID用Producer线程尽快写入本地磁盘,以防丢失。
3)然后用Consumer线程将数据从磁盘读取出来,然后尝试推送出去。
4)如果推送成功,则标记该ID的数据为success并保存到磁盘,然后继续处理后面的数据。否则暂停或关闭接收 后续的数据(如果可以),如果不能暂停,则直接进入下面的第(5)步骤),
5)无限尝试推送当前数据,直到故障解除,当前数据推送成功,
7)故障解除时,如果之前暂停或关闭了数据接收,则将其恢复。
8)继续从磁盘取后面未处理的数据。
9)定期触发一个异步线程去清理磁盘上推送成功的数据,保持磁盘空间良好。
其他说明:
1)尽量将多种消息合并在一个线程处理,如果技术或者业务上不能在一个线程去处理,则另起线程(或进程),与其他线程(或进程)隔离、数据完全独立。
2)尽量控制在单机处理,如果一台机器不够,则多加几台机器,但每台机器处理的数据完全独立。
3)数据缓存在本地磁盘上,只是一种简单高效的策略,但使用不够方便,也不便于管理,如果有高可用、高性能的redis,则建议建将数据缓存在redis上。次之,可以换成mysql,如果网络环境稳定,可以连远程mysql,否则可以将mysql和应用安装在同一台服务器上。另外,也可以用sqlite文件数据库。
B模型数据推送系统设计方案
B模型的系统,不保证数据一致性。它的关键词:性能和可用性优先。
设想这种场景:
一天有1亿的数据要推送出去,但是在处理某条数据的时候报错了,且重试了3次仍然不成功,后面还有大量数据等着推送,线程不能阻塞,那么只能将推送失败的数据记录下来,继续处理后面来的数据。
可以在 数据推送失败或者接收方响应非常缓慢时,将数据记录下来(比如记日志,供人工排查补数据;或者转存kafka,由补偿程序处理),然后继续接收后面的数据继续推送。
首先,我们将容易产生故障的业务和数据分类,将容易发生故障的数据与其他数据隔离,以保证发生故障时,不影响其他数据的处理。
根据业务场景,按照数据分类,用单独的线程处理,做故障隔离(某个线程发生故障时,不影响其他线程)。
其次,在故障发生持续时间长,或者故障发生频繁的场景下,可能不适合用B模型,因为B模型不保证数据一致性,故障发生得越多,数据问题就会越严重,处理起来越麻烦。
在推送数据项目里,如果发生故障可能持续时间很长,数据堆积很多,有这种情况下,就不建议使用B方案。
在故障发生率低、故障持续时间短的前提下,可以如下操作:
& 如果推送失败,不要阻塞后面的数据,采用将数据记录下来(放内存里面),等后面一批数据来后,同时处理,再次推送,如果这次推送仍然失败,则再重复这个过程,一共重试3~5次,如果都失败则进入C方案的流程(下面会讲)。
上面这个方案,可以在故障持续时间短的情况下,解决推送问题。
C模型数据推送系统设计方案
C模型的系统,不保证系统高可用,换句话说,它宁愿系统不可用,也要保证在系统可用的时间段内系统的高性能和数据的强一致性。它的关键词:牺牲可用性 换一致性和性能。
可以在 数据推送失败或者接收方响应非常缓慢时,且在C方案的补偿机制下,系统仍无好转,则关闭该数据的推送,同时触发监控程序,通知人工处理,或者由 故障处理程序 去处理。
根据具体的业务场景,如果当某类数据多次无法推送时,主动关闭该数据的推送,同时触发监控程序,通知维护人员,由维护人员决定,是否去处理故障,如果不需要处理,则该数据就一直关闭,如果需要处理,则当故障恢复时,重新启动该数据的推送任务。也可以由monitor主动去监控数据推送是否恢复正常,恢复正常后,自动恢复推送。
一、消息推送系统设计需求
1、高性价比,在有限的硬件资源下,尽可能的提高消息系统的性能和可用性。
2、提高数据的一致性。
消息推送,按数据量划分,包括两类:
1)持续的大量数据(比如:持续的物联网GPS上报等)推送,单类数据量大于 10 kb 每秒 。
2)低频率、数据量小的偶发事件、通知类的数据推送。
消息重要性和实时性分级:( “四象限” 划分)
& & & & & & & & & & & & & & 不重要 & & & & & & & & & & & & & &| & & & & & & & & & & & & &不重要
& & & & & & & & & & & & & & 可延时 & & & & & & & & & & & & & &| & & & & & & & & & & & & &低延时
& & & & & & & & & & & & & & ——————————————————————
& & & & & & & & & & & & & & 很重要 & & & & & & & & & & & & & &| & & & & & & & & & & & & &很重要
& & & & & & & & & & & & & & 可延时 & & & & & & & & & & & & & &| & & & & & & & & & & & & &低延时
& & & & 备注:
& & & & & & & & & 很重要 &= &非常重要,数据不丢、不乱。
& & & & & & & & & 不重要 &= &可接受偶尔出现问题。
& & & & & & & & & 低延时 &= &延时低(平均在3秒以内)。
& & & & & & & & & 可延时 &= &有一定延时(3秒以上)。
大部分消息处于 (2) (3) (4) 象限。针对消息的特性,应采用不同性能和稳定级别的推送方案。
根据 CAP 定理:
& & Consistency(一致性), 数据一致更新,所有数据变动都是同步的。
& & Availability(可用性), 好的响应性能。
& & Partition tolerance(分区容错性) 可靠性。
& & 定理:任何分布式系统只可同时满足二点,没法三者兼顾。
没有一个分布式系统是C、A、P同时都达到完美的,要么损失性能来保障一致性和可用性;要么损失一致性来提高性能。
理想模型如下:
A、牺牲 性能 来提高 可用性和一致性。
B、牺牲 一致性 来提高 性能和可用性。
C、牺牲 可用性 来提高 性能和一致性。
对于上面的 A 模型,用得非常广泛,比如消息的ACK机制,用法比较简单,不多说。
对于上面的 B 模型,经常使用 BASE (牺牲高一致性,保证最终一致性) 方案。
& & Basically Available 基本可用。
& & Soft state 软状态 状态可以有一段时间不同步,异步。
& & Eventually consistent 最终一致,最终数据是一致的就可以了,而不是实时高一致。
对于上面的 C 模型,用得比较少,也不好理解。牺牲可用性,来保证一致性和性能,我的理解是,除非服务不可用,否则服务一定是高性能且高一致性的。
也就是说,当服务不能保证一致性和高性能的时候,就降低可用性,宁愿服务不可用,也不能让服务出现不一致或者性能低的情况。
C模型的关键点在于,C模型的系统,系统自身不保证高可用,出现异常(性能降低或者一致性出现问题)时,它有意降低可用性,来保障服务期间的高性能和数据的强一致性。
所以如果使用C模型,则需要考虑,如何通过外部手段来保证系统的可用性(加强监控,出现不可用时,人工介入恢复,或者启动临时方案)。
延伸知识:分布式系统的容错模式
电路熔断器模式(Circuit Breaker Patten), 该模式的原理类似于家里的电路熔断器,如果家里的电路发生短路,熔断器能够主动熔断电路,以避免灾难性损失。在分布式系统中应用电路熔断器模式后,当目标服务慢或者大量超时,调用方能够主动熔断,以防止服务被进一步拖垮或者导致其他系统故障(雪崩效应);如果情况又好转了,电路又能自动恢复,这就是所谓的弹性容错,系统有自恢复能力。
参考文章:q.com/cn/articles/basis-frameworkto-implement-micro-service/
上面的A、B、C模型对于推送系统来说,
对于上面处于(2) 象限的消息推送,可以考虑 能否采用上面 C模型,如果不能接受C模型的服务(暂时)不可用,则可能会降级为 A、B 模型,A模型牺牲性能,整个系统是否存在性能问题?B模型牺牲一致性,是否能采用软状态、最终一致性方案来弥补?
对于上面处于(3) 象限的消息推送,宜采用 A 模型。
对于上面处于(4) 象限的消息推送,宜采用 B 模型,A模型也可以,具体视情况而定。
A模型数据推送系统设计方案
在A模型中,性能不是关键。它的关键词:性能不是瓶颈 &数据要准确可靠
& 1、如何保证数据100%不丢失?
& 2、如何保证数据100%不重复?
不丢失:数据来后,先以最稳当的方式持久化下来,再推送出去,推送成功后,才删掉持久化的数据,否则数据一直持久化直到超过保存容量或者时间上限。(如果使用数据库,可以考虑事务)
不重复:能够识别每条数据的唯一性(最简单的办法就是每条数据有一个唯一标识),在内存数据库中保存一段时间已推送的数据标识(ID)的列表,当新的数据来了之后,和数据标识列表中的ID进行比较,如果存在则说明之前已经推送过这条数据,直接pass,否则推送数据并加入数据标识列表。
技术选型和系统处理数据流程:(纯Java + Redis缓存ID + 本地磁盘缓存数据)
1)收到数据后,先将数据ID取出,去Redis里已推送的数据ID的列表中查找,如果找到这个ID,则说明数据已处理过,重复了,则丢弃该数据。否则继续下面的步骤。
2)将数据和ID用Producer线程尽快写入本地磁盘,以防丢失。
3)然后用Consumer线程将数据从磁盘读取出来,然后尝试推送出去。
4)如果推送成功,则标记该ID的数据为success并保存到磁盘,然后继续处理后面的数据。否则暂停或关闭接收 后续的数据(如果可以),如果不能暂停,则直接进入下面的第(5)步骤),
5)无限尝试推送当前数据,直到故障解除,当前数据推送成功,
7)故障解除时,如果之前暂停或关闭了数据接收,则将其恢复。
8)继续从磁盘取后面未处理的数据。
9)定期触发一个异步线程去清理磁盘上推送成功的数据,保持磁盘空间良好。
其他说明:
1)尽量将多种消息合并在一个线程处理,如果技术或者业务上不能在一个线程去处理,则另起线程(或进程),与其他线程(或进程)隔离、数据完全独立。
2)尽量控制在单机处理,如果一台机器不够,则多加几台机器,但每台机器处理的数据完全独立。
3)数据缓存在本地磁盘上,只是一种简单高效的策略,但使用不够方便,也不便于管理,如果有高可用、高性能的redis,则建议建将数据缓存在redis上。次之,可以换成mysql,如果网络环境稳定,可以连远程mysql,否则可以将mysql和应用安装在同一台服务器上。另外,也可以用sqlite文件数据库。
B模型数据推送系统设计方案
B模型的系统,不保证数据一致性。它的关键词:性能和可用性优先。
设想这种场景:
一天有1亿的数据要推送出去,但是在处理某条数据的时候报错了,且重试了3次仍然不成功,后面还有大量数据等着推送,线程不能阻塞,那么只能将推送失败的数据记录下来,继续处理后面来的数据。
可以在 数据推送失败或者接收方响应非常缓慢时,将数据记录下来(比如记日志,供人工排查补数据;或者转存kafka,由补偿程序处理),然后继续接收后面的数据继续推送。
首先,我们将容易产生故障的业务和数据分类,将容易发生故障的数据与其他数据隔离,以保证发生故障时,不影响其他数据的处理。
根据业务场景,按照数据分类,用单独的线程处理,做故障隔离(某个线程发生故障时,不影响其他线程)。
其次,在故障发生持续时间长,或者故障发生频繁的场景下,可能不适合用B模型,因为B模型不保证数据一致性,故障发生得越多,数据问题就会越严重,处理起来越麻烦。
在推送数据项目里,如果发生故障可能持续时间很长,数据堆积很多,有这种情况下,就不建议使用B方案。
在故障发生率低、故障持续时间短的前提下,可以如下操作:
& 如果推送失败,不要阻塞后面的数据,采用将数据记录下来(放内存里面),等后面一批数据来后,同时处理,再次推送,如果这次推送仍然失败,则再重复这个过程,一共重试3~5次,如果都失败则进入C方案的流程(下面会讲)。
上面这个方案,可以在故障持续时间短的情况下,解决推送问题。
C模型数据推送系统设计方案
C模型的系统,不保证系统高可用,换句话说,它宁愿系统不可用,也要保证在系统可用的时间段内系统的高性能和数据的强一致性。它的关键词:牺牲可用性 换一致性和性能。
可以在 数据推送失败或者接收方响应非常缓慢时,且在C方案的补偿机制下,系统仍无好转,则关闭该数据的推送,同时触发监控程序,通知人工处理,或者由 故障处理程序 去处理。
根据具体的业务场景,如果当某类数据多次无法推送时,主动关闭该数据的推送,同时触发监控程序,通知维护人员,由维护人员决定,是否去处理故障,如果不需要处理,则该数据就一直关闭,如果需要处理,则当故障恢复时,重新启动该数据的推送任务。也可以由monitor主动去监控数据推送是否恢复正常,恢复正常后,自动恢复推送。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:536462次
积分:6215
积分:6215
排名:第3303名
原创:145篇
转载:24篇
评论:62条
(39)(1)(1)(7)(4)(1)(1)(1)(1)(2)(1)(1)(2)(1)(4)(5)(2)(3)(6)(4)(2)(4)(7)(1)(6)(5)(6)(7)(8)(9)(12)(10)(6)966,690 二月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
新形势下的推送系统架构升级
新形势下的推送系统架构升级
日. 估计阅读时间:
不到一分钟
Author Contacted
相关厂商内容
相关赞助商
QCon北京-18日,北京&国家会议中心,
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。人人文库美如初恋!
资源预览需要最新版本的Flash Player支持。 您尚未安装或版本过低,建议您
I华中科技大学硕士学位论文摘要信息推送技术是20世纪90年代中期发展起来的一种基于网络的应用技术,在推送技术问世之前,人们往往不得不利用浏览器在搜索以获得信息,一方面,面对互联网的海量信息,很多用户花费相当多的时间也难以拉取到自己希望得到的信息另一方面,信息发布者也希望能能够及时主动的提供信息给那些感兴趣的用户,而不是被动的等着用户来拉取。在如今互联网,电子商务如此发达时代,给采用信息推送技术开展信息推送服务带了更大的发展空间。消息推送系统是以消息盒子的方式推送消息给用户的系统。本文首先介绍了推送技术以及相关网络技术知识,重点介绍了基于事件驱动的务器模型的特点以及其使用方法。随后按照软件工程方法,首先对系统进行了业务描述和需求分析,并对系统进行了总体的设计。然后在总体设计的基础上,进一步对系统进行详细设计并且分析系统整体的运行流程。按照功能将系统分为务模块,务模块和消息管理模块3大模块。务模块处理用户的求以及组装返回的应务模块负责读取消息并对消息进行处理消息管理模块负责消息的录入和删改。系统使用C/S结构,选择开发平台。系统通过使用基于事件驱动的务,来处理请求,大大提高了对大量请求的处理,同时使服务器端更加的安全和可靠。关键词推送技术互联网事件驱动中科技大学硕士学位论文isainoftotoinOninofofitistoaoftotototoInsissoisaistotoofononininoftobeonofoftobeissisbeor,astosofisey中科技大学硕士学位论文目录摘要...............................................................................................................I..........................................................................................................绪论课题背景...............................................................................................1国内外研究现状..................................................................................1本文主要工作及论文结构..................................................................32相关技术介绍推送技术简介......................................................................................4P协议族.....................................................................................6撑技术.....................................................................................8系统的并发和同步机制....................................................................10务器模型...............................................................................14本章小结.............................................................................................173基于消息推送系统需求分析....................................................................18消息推送系统的总体设计................................................................19务的设计.............................................................................24通用线程池的设计............................................................................27通用线程池的组合...........................................................29消息管理系统的界面设计................................................................30本章小结.............................................................................................32中科技大学硕士学位论文4基于开放环境的选用................................................................................33接口代码的封装................................................................................34部的解析和组装.................................................................38通用线程池的实现............................................................................40数据库的连接....................................................................................42系统的性能测试................................................................................43本章小结.............................................................................................445总结与展望全文总结.............................................................................................45展望.....................................................................................................45致谢..........................................................................................................47参考文献......................................................................................................481华中科技大学硕士学位论文1绪论课题背景随着社会信息化的不断发展,互联网已经渗透到人们日常生活、工作、学习、娱乐的每一个角落。信息爆炸,是对信息近几年来快速发展的一种描述,形容其发展的速度如爆炸一般席卷整个地球。借助互联网技术的发展,每天在我们所生活在的这个世界出现了大量的信息,信息的增长速度绝对是一件近乎恐怖的事情我们称之为信息爆炸。人们往往要耗费大量时间在浩瀚如海的互联网信息中去检索自己需要的信息,一种全新的互联网模式孕育而生,推送技术的出现,为人们展现了展的一个新方向。的信息不仅可以拉取,而且还能推送。如果说,用户以拉取方式获取信息是大海捞针的话,那么将信息主动及时地推送使用户可以坐享其成则可以称得上是以逸待劳1。网络信息推送是利用推送术根据用户需要,有目的、按时将用户感兴趣的信息主动发送到用户的计算机中。就像是广播电台一样,推送技术主动将最及时的信息广播给客户,用户不必费时费力的去搜索。信息推送现如今在行业内有着大量的应用方向,是当今互联网非常火热的一个技术方向。因为搜索引擎和互联网广告的发展,信息推送最热门的应用方向是广告推送,也就是互联网效果营销的应用方向。推送技术的主要优点第一是对用户要求低,普遍适用于广大公众,不要求有专门的技术第二是及时性好,信源及时地向用户推送不断更新的动态信息。推送技术同时可以给企业带来显而易现的效果和收益,第一为企业开辟了新的营销模式,使得企业能够更好的迎合用户,第二消息由企业方面控制,使得消息主动性和实时性更强。国内外研究现状在客户机/服务器的应用程序中,推技术能够向客户机传送数据而无需其发出请求,例如发送电子邮件。相比较而言,万维网却是基于拉技术因2华中科技大学硕士学位论文此客户机浏览器必须事先向网页发出请求,所需信息才能被传送过来。传播媒介都属于推技术的应用范畴,因为不管是否有人接收,他们的信息都照发不误。普及型互联网推送技术为司网络,该网络在1990年代获得了知名度。它传递新闻和股市数据。推送服务通常是推送用户在事先表达过喜好的信息。这就是所谓的发布/订阅模型。一个客户端可能订阅的各种信息通道。每当新的内容可以在这些渠道之一,服务器会推出的信息给用户。这意味着发送者发起数据传输,而不是接受者。系统消息是推动服务的典型例子。系统消息是指网站管理者以信息广播形式向目标用户发布的公开的消息、公告、通知、提示等。具有群发性,高可达性等消息特性。众多企业通过消息盒子的形式,向他们的用户群体发送系统消息。推送服务是从服务器端发起的,而如何构建高效可靠的服务器是实现推送服务的关键。在有众多网络服务器模型,在型之前普遍使用的型,但是在核中,型是采用轮询这个描述符数组,当连接数很多的时候就会导致效率下降,当连接数目大于一定数目是效率会下降到不能接受,并且在通常情况下,最大连接数的限制,一般048个连接数。了改进而处理大批量连接而作了改进的,是多路复用本。在件描述符增加而成线性下降趋势。因为件,事件到来的时候,它不会像历整个被侦听的描述符集,只要遍历那些被内核绪(队列的描述符集合从而大大提高了I/T(模式外,还提供了模式,这就使得用户空间程序有可能缓存少调用,提高应用程序的效率2。3华中科技大学硕士学位论文本文主要工作及论文结构本课题主要实现了基于消息推送系统。它可以主动推送信息给用户,实现信息的主动性,实时性,从而大幅度的降低用户去互联网中繁琐重复的搜索信息,可为用户节省了大量的时间,同时消息发布者通过控制信息的投放更加主动的宣传和营销。我们在课题中以典型的基于息推送系统的开发过程作为实例,具体的研究内容如下(1)通过使用C语言在台下利用型实现了一个基于C/S结构的消息推送系统。(2)介绍了系统实现的主要技术,包括推送相关技术,P协议、撑技术、系统的并发与同步机制、型等。(3)分模块实现了消息推送系统的每个子模块和消息管理界面。(4)探讨了系统实现中设计的关键技术问题,包括求和响应格式、通用线程池的设计与实现、型与通用线程池的组合使用。本论文通过对以上相关知识的介绍和推送系统这个具体实例的开发,研究一个推送信息系统的实际开发过程。4华中科技大学硕士学位论文2相关技术介绍本章简单阐述系统开发中应用的关键技术,包括推送技术简介,以及相关的P协议等网络知识,以及系统的并发与同步机制。推送技术简介客户端拉取(客户端拉取是用户通过问某一网址的服务器,将客户端求发送给服务器端,服务器返还一批数据,并将数据插入到应或文档头标记中,让用户的浏览器装入这些数据,显示给用户。服务器推送(服务器推送是通过一定的技术标准或协议,把用户感兴趣的信息直接推送给用户而无需他们自己来拉取,从而提高了用户对信息的获取效率。推送技术的基础思想是将用户通过浏览器主动在互联网上搜索信息改为服务器端主动将信息发送到用户的浏览器上。服务器发送一批数据,则这些数据就在用户的浏览器上显示,同时客户端与服务器端进行长连接,并保持连接不断开。当服务器再次发送一批数据时,浏览器便直接显示数据并继续保持连接。以后,以此类推,直到客户端主动退出连接3。在客户端拉取技术中,使用短连接,连接并不保持,每次访问时与服务器时进行建立连接。而在服务器推送技术中,客户端与服务器的之间一直保持这个连接,直到服务器本身已无发送数据并且以一个结束信号为终止,或者客户端主动中断连接。在推送过程中,客户端处于被动,服务器端处于主动,客户端被告知何时建立连接,以及建立连接后从服务器端获取什么数据。服务器推送通常要比客户端拉取的效率高,主要因为它使用长连接,不必耗费时间为后续数据建立新的连接。在实际情况中,接的建立通常代价很大,需要花费多达一秒甚至更多的时间。因此从性能上来进行评估,服务器推送有相当大的优势,特别是对于那些需要随时得到最新信息的用户。服务器推送相5华中科技大学硕士学位论文对客户端拉取的另一大优势在于,服务器推送是在服务器端实现的,不管是对于服务器负载还是对于数据的控制起来都相对容易。例如,服务器每一次推送都与客户端保持一个连接,但如果客户连接数目过多,服务器负载过大时,又可以随时关闭其中的任何连接以缓减服务器端的压力同时消息也是由服务器端录入,对于企业来说,可以更好把握消息的投放来适应时代潮流和企业的营销策略。服务器推送方式(1)务器扩展式。这种方式是使用服务器扩展扩充原有务器的功能,实现信息推送。一般来说,务器不响应终止后,已送达数据连接到客户端。如果接收到事件时,可以立即被发送到一个或多个客户端。否则数据将被排队,直到客户端的下一个请求被接收。大多数务器通过如非解析头在本)。(2)页面轮询方式。在期,这一点常使用新实现。这并不是真正意义上的服务器推送,而是使用签自动指示浏览器在指定秒数之后重新装载页面,从而支持简陋的轮询。例如在件中加入,实际上就是标告知浏览器每12秒更新一次文档。这样频繁的请求对服务器的压力很大,并且造成带宽极大的浪费。而在背景下,有了论询方式,一段时间(通常使用数)就去服务器查询是否有改变,从而进行增量式的更新。虽然降低带宽的负荷,但是对服务器的压力并不会有明显的减少,而且间隔多长时间去查询成了问题,因为性能和即时性造成了严重的反比关系。间隔太短,连续不断的请求会冲垮服务器,间隔太长,务器上的新数据就需要越多的时间才能到达客户机。(3)式。式通俗的说就是一种长连接机制同样是由浏览器主动发起请求,但是服务器端以一种似乎非常慢的响应方式给出回答。这样在这个期间内,服务器端可以使用同一个连接要更新的数据主动发送给浏览器。如果期间没有任何数据返回,则连接可能等待较长的时间并一直保持,但是一旦有了新的数据,它将立即被发送到客户机。有很多种实现方式,但是总的来说对服务器端的负载都会有增加华中科技大学硕士学位论文说,每次只需要建议一次连接,但是由于连接是保持较长时间的,对于服务器端的资源的占用要有所增加4。因特网中的所有活动,凡事涉及到两个或者多个通信的远程实体都受到协议的制约。协议定义为一系列描述控制和数据信息如何在通信实体间传递的规则。一个协议定义了在两个或者多个通信实体之间交换的报文格式和次序,以及在报文传输和接受或其他事件方面所采取的动作5。网际协议缩写,通俗而言责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而给因特网的每一台电脑规定一个地址。P协议的设计起始于70年代,经过10多年的时间,在80年代初,P的转换工作完成,P协议正式开始作为因特网上所有主机间的共同协议,从此以后被作为一种必须遵守的规则被肯定和应用。同时加州伯克利大学将作系统的通信协议栈放入内核中5。虽然协议族被称为P,但除了P这两个主要协议外还有很多成员。P协议族体系结构如下,均是由下层为上层提供接口,上层为下层提供服务。P协议族体系,如图2示。图2议族体系网络应用程序可以使用多种传输层协议,而在因特网有两种协议中,即输控制协议)和户数据报协议)。这两个协议转而为应用进程提供服务。传输层以下是网络层,议就是网络层的协议,也是P体系的核心协议。7华中科技大学硕士学位论文调用它的程序提供一种可靠的,面向连接的服务。首先供客户与服务器之间的连接。户先与某个指定服务器建立一个连接,在跨过该连接与那个服务器交换数据,然后终止那个连接。其次提供了可靠性。当另一端发送数据时,它要求对端返回一个确认。如果没有收到确认,自动重传数据并等待更长的时间,在数次重传失败后,放弃,如此在尝试发送数据上所花的总时间一般为410分钟。同时过给其中每个字节关联一个序列号,对所发送的数据进行排序,在传输时,如果这些分节非顺序到达,接收端把结果数据传给应用程序。如果接受端受到来自对端的重复数据,它可以判定数据是重复的,而丢弃数据6。立连接的工作过程如图2示。图2建立连接接的终止的工作过程如图2示。图2连接终止8华中科技大学硕士学位论文调用它的应用程序提供一种不可靠的,无连接的服务。输层协议,应用进程首先往一个写入消息,该消息随后被封装到一个固定形式的后在网络层进一步被封装,变成一个后通过网络发送到目的主机。能保证终到达目的主机,也没有为数据的先后顺序进行编号保证各个数据报跨网络后能按照原有顺序进行组装,并且不保证每个数据报不重复到达目的主机7。是提供无连接的路由服务。在传输包时并不首先建立连接,也没有失败重发机制,这一切都由上层协议保障。一资源定位符也命名为网页地址,是互联网上的标准资源的地址。它最初是作为万维网的地址。现在已经被万维网联盟定制为因特网标准9。一个标准的部分组成协议名、主机名和文件名10。协议//授权/路径查询议指明了检索指定文档所使用的传输通信协议的类型。授权部分一般是服务器的名称或时后面还跟一个冒号和一个端口号。它也可以包含接触服务器必须的用户名称和密码。路径部分包含等级结构的路径定义,一般来说不同部分之间以斜线(/)分隔。询问部分一般用来传送对服务器上的数据库进行动态询问时所需要的参数。完整的、带有授权部分的普通统一资源标志符语法看上去如下协议//用户名密码子域名顶级域名端口号/目录/文件名参数值。9华中科技大学硕士学位论文文本标记语言,是目前因特网上应用最为广泛的语言,也是构成网页文档的主要语言11。、本是由义的一组签命令组成的,签命令可以是文字、图形、动画、声音、链接、表格等。一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。结构包括了头部(主体(大部分,头部包括关于页面脚本语言和页面样式的信息,而主体部分则包含了页面的具体内容,即用于页面显示的标签集。面制作并不困难,且功能十分强大,在面中还可以嵌入面以及其他格式的标签等,这也使得用的非常广泛,其主要特点如下(1)简易性,本使用超集的方式进行升级,使得便捷性和灵活性大大增强。(2)可扩展性,泛使用下的必然要求,以按照规范定制各种标签以应对不同系统的扩展。(3)平台无关性。虽然大行其道,以使用在台上,这种平台无关性,也是分盛行的原因之一。议文本传输协议是一套计算机通过网络进行通信的规则。用于从务器传输超文本到本地浏览器的传送协议12。一个客户端和服务器端请求和应答的标准。通常,由户端发送一个请求,建立一个到服务器指定端口(默认是80端口)的接。连接一旦建立后,务器就通过那个端口开始监听客户端发送过来的逐个请求。一旦收到请求,服务器就会响应客户端的请求,服务器处理请求后,就向客户端发回一个状态行,比如00和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息14。10华中科技大学硕士学位论文议的工作过程如图2示。图2议的工作过程系统的并发和同步机制什么是并发并发是操作系统最重要的特性。并发是指两个或多个事件在同一时间间隔内发送,在多道程序运行环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但是在单处理系统中,同一时刻却仅能有一道程序执行,故微观上这些程序只能是分时的交替执行。并发技术在网络服务程序设计中是相当重要的一部分内容,是网络服务程序的一项性能指标。大部分的操作系统均为多任务操作系统,大多支持两种方式并发即多进程和多线程13。进程与线程进程是指在系统中能够独立运行的并作为资源分配的基本单元,它是由一组机器指令,数据和堆栈等组成的,是一个能独立运行的活动实体。在传统的型中,当一个进程需要由另一个实体执行某件事时,该进程派生个子进程,让子进程去进行处13。两个典型的用法(1)一个进程创建一个自身的副本,这样每个副本都可以在另一个副本执行其他任务的同时处理各自的某个操作。这是网络服务器的典型用法。(2)一个进程想执行另一个程序。既然创建新进程的唯一方法是调用数,该进程于是首先调用法创建自身副本,然后其中一个副本(通常成为子进程)调用数把自身替换成新的程序。虽然满足创建多进程的要求,但是任然存在不少问题。11华中科技大学硕士学位论文首先为父进程的内存映像要从父进程拷贝给子进程,所有描述字要在子进程中复制等等其次子进程后,进程之间相互隔离,进程间需要交换信息,只有借助内核的帮助,所以和系统调用相关。由于进程拥有自己的资源,故使得调度付出的开销很大。于是人们提出了比进程更小的单位线程。通常在一个进程中包含若干个线程,它们可以利用进程所拥有的资源。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销会小很多,能更高效的提高系统的内多个程序间并发执行的程度。通过数来创建线程。每个创建的线程返回一个线程程的创建可能比进程的创建快1013。进程间通信进程间通信(指运行在某一个操作系统之上的不同进程间各种消息的传递的方式。其中主要得三种为管道,消息队列,和共享内存13。为应用程序使用实质是名管道技术在网络条件下的实现。驻留在本地或远地的地址绑定在一起。一个完整的用一个相关描述{协议,本地地址,本地端口,远程地址,远程端口}进行定义。对于每一个操作系统都会在本地给它分配一个唯一的套接字编号17。程序通信口如图图口12华中科技大学硕士学位论文套接字的类型有三种流式套接字(数据报套接字(原始套接字。流式套接字可以提供可靠的、面向连接的通讯流,基于流式套接字的特性,使用的据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,基于数据报套接字的特性,使用的原始套接字主要用于一些协议的开发,可以进行比较底层的操作。它功能强大,但是没有上面介绍的两种套接字使用方便,一般的程序也不会涉及到原始套接字17。口含有的系统调用,可分为以下类型(1)本地管理信息提供以下函数分配一个未用的非负的述符用于网络通信将和分别确定址关闭套接字。(2)连接建立和连接终止于示内核应接受该套接字的请求。于从已完成连接队列队头返回下一个已连接完成的连接,建立与客户端的连接。有选择地终止一个写端流。(3)数据传输机制/连接的套接字流进行通讯的函数。通过特定收和传输数据缓冲区/与它们提供一个额外的送标记来控制特定的/交换无连接13华中科技大学硕士学位论文下面分别给出使用如图22图2接字的C/S结构图2接字的C/S结构14华中科技大学硕士学位论文线程间同步同一进程中的所有线程共享相同的全局内存。这些线程相互之间除了共享全局变量外还共享以下信息(1)进程指令(2)大多数数据(3)打开的描述符(4)信号处理的函数(5)当前的工作目录(6)用户组使得线程之间信息的共享使得线程间的通信变得简单,然而伴随线程通信的简易带了的却是共享信息同步的问题。解决多个线程并发时更改一个共享变量的最简单的方法是有一个互斥锁(保护这个共享变量,而访问该变量的前提条件是持有该互斥锁。互斥锁数来进行初始化,分别调用数进行加锁和解锁操作13。这种模型的特征在于每一个执行周期都会探测一次或一组事件,一个特定的事件会触发某个特定的响应。我们可以将这种模型归类为事件驱动模型。在本之后,增加了核为了改进大连接数限制从而处理大批量连接而作了改进的,是多路复用口改良版本。它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统用率。相比于大的好处在于它不会随着监听连接数目的增长而降低效率28。接口十分简单,一共就三个函数(1)建函数,用于创建一个句柄,函数只有一个参数个参数用来定义内核监听的套接字数目的大小。这个参数与中的第一个参数5华中科技大学硕士学位论文的区别在于,的第一个参数是指定待测试的描述符个数,它的值是待测试的最大描述符加1,而的第一个参数给出需要监听的最大值,函数其实是在内核申请一空间,用来存放你想关注的是否发生以及发生了什么事件。需要特别注意的是,当柄创建好后会首先占用一个的,所以每次在使用完,必须记得调用函数来关闭这个则可能因为被释放而导致耗尽。(2)事件注册函数,它不同与型是在调用函数时设置其中参数来告知内核要监听那些类型的事件,型是在函数这里先注册要监听的事件类型。第一个参数的生成的用的文件描述符,第二个参数表示事件操作,有注册事件,修改事件,删除事件三个操作,分别用三个宏来定义注册事件,将新的入到用描述符修改事件,修改已注册的监听事件删除时间,将一个用描述符删除数第三个参数是需要监听的关联的文件描述符四个参数是一个指向指针,告诉内核那些需要监听事件,结构体如下__监听的件/用户可以传递的变量/};其中个联合体,可以使用针指向将需要传递的结构体,/指向需要传递的数据//套接字描述符/____16华中科技大学硕士学位论文}构体中的件可以由以下几个宏的组合而成示对应的文件描述符可以读表示对应的文件描述符可以写示对应的文件描述符有紧急的数据可读示对应的文件描述符发生错误示对应的文件描述符被挂断将为边缘触发式,这是相对于水平触发说的。监听一次事件,当监听完这次事件之后,如果还需要继续监听这个话,需要重新把这个入到列里(3)该函数用于轮询I/O事件的发生,类似于调用的轮询,但是轮询只在于注册事件的轮询,而不是全部文件描述符的轮询。参数来从内核得到用于回传代处理事件的数组,数定义内核每次能处理的最大事件数,这个值不能大于创建时的为义的是内核需要关注的最大,参数超时时间(单位为毫秒),如果设置为0会立即返回,设置是永久阻塞,一般用可返回发生事件数。该函数返回需要处理的事件数目,如返回0表示已超时。(4)种工作模式缺省的工作方式,并且同时支持阻塞套接字(非阻塞套接字(。使用式,型的效率并不会比为在这种做法中,每当内核告诉你一个文件描述符已就绪,然后你可以对这个已就绪的描述符进行作。但是如果你不对这个已就绪的描述符进行任何操作,只要该描述符在内核缓存区上有数据,内核就会继续通知你,这样的话并不能真正的提高I/O复用的效率,传统的是这种模型的代表。所以尽管这个模式在数据接受是出现错误的几率较小,但是为了使用真正的高I/O复用的一般使用式。17华中科技大学硕士学位论文高速工作方式,只支持非阻塞套接字(。使用这种模式理I/O请求的能力会大大提高,因为在这种模式下,描述符状态从未就绪状态变为就绪状态的时候,内核通知使用者描述符以就绪。然后它会假设使用者知道文件描述符已经就绪,便不会在去管这个文件描述符而继续去处理别的文件描述符的。这个以就绪的文件描述符不会在接受到更多的内核通知告知使用者此文件描述符已就绪,除非某些操作导致此文件描述符的状态的改变,使其不再为就绪状态了。比如,使用者再次对该描述符发送新的请求或者该描述符接收新的请求,或者发送接收的数据少于一定量时导致了误时该文件描述符便可以再次就绪。但是如果一直不对这个文件描述符
编号:58996 && 大小:973.26KB && 格式:PDF && 上传时间:
关&键&词: 基于 Epoll 消息 推送 系统 设计 实现
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。5. 人人文库网仅提供交流平台,并不能对任何下载内容负责。6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
& 人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
当前资源信息
官方联系方式
客服手机:&&& 1:&&&
2:不支持迅雷下载,请使用浏览器下载&&&
3:不支持QQ浏览器下载,请用其他浏览器&&&
4:下载后的文档和图纸-无水印&&&
5:文档经过压缩,下载后原文更清晰&&&
&& && && && && && &&
copyright@
人人文库网网站版权所有 苏ICP备号-5

我要回帖

更多关于 dpi系统信息推送特点 的文章

 

随机推荐