1. 首页 > 快讯

Tengine 进化之路:从 Web 代理到分布式推送

各位老铁们,大家好,今天由我来为大家分享Tengine 进化之路:从 Web 代理到分布式推送,以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

作为代理服务器,Tengine 在集团内拥有广泛的应用基础。从部署在单台应用机上的Tengine,到统一接入集群部署的Aserver,可以说集团内几乎所有应用机都运行着Tengine。当然,Tengine的不同部署形式具有不同的功能。这一切都得益于Tengine作为一款优秀的反向代理服务器,具有高性能、低延迟、高可用性的特点。

[[317809]]

下图是常见的统一接入模型:

当前HTTP长连接业务现状无论客户端发起的请求是HTTP2还是HTTP 1.1,Tengine都作为反向代理服务器,与应用服务器的连接都是短连接(除非Tengine配置了keepalive),如图下图:

Tengine 负责保持与客户端的长连接,并使用特定的负载均衡算法调度与应用服务器的短连接。

当前HTTP的推送解决方案通常推送的请求是定时向终端发送数据。

轮询终端定时发送请求轮询获取业务数据。

这是最简单、最容易想到的方法,但在实际项目中往往最不可能使用。因为它的缺点非常明显:

1、间隔太短的轮询请求会导致服务器无端处理无用的QPS,而QPS与终端数量成线性正比。

2. 对于间隔较长的轮询请求,无法保证推送时效性。

应用服务处理

缺点是很明显的。应用需要自行维护长连接的生命周期,而推送场景的用户往往是规模非常大的终端设备。非常大规模的长连接显然会消耗大量的应用机器资源。

HTTP2 推送(Server Push)其实HTTP2的推送功能是指单次请求多次响应,这与我们通过长连接通道持续传输数据的需求并不相符。

Server Push功能的RFC介绍已经贴在这里,这里不再展开。

HTTP/2 允许服务器先发制人地将响应(以及相应的“承诺”请求)发送到与先前客户端发起的请求关联的客户端。当服务器知道客户端需要提供这些响应才能完全处理原始请求的响应时,这会很有用。Tengine 单机推送目前主流开源的N个ginx模块都支持单机推送功能。

推送流程

其实它和MQTT的SUB PUB模式很相似,只不过是使用HTTP来实现的。具体流程如下:

1、A发起请求,Tengine劫持请求并持有,Tengine为其产生对应的KeyA。

2、如果B希望向A推送数据,可以使用KeyA作为参数(或Header),将POST数据发送到指定的Tengine。

3、Tengine会接收B的POST数据,获取KeyA对应的连接,然后返回给A。

缺点1.B需要感知A的存在。B

即当A的请求到达Tengine时,Tengine需要将其旁路发送给B,即需要告知B A的存在,并且B需要记录A对应的KeyA。

解决方案:可以使用Tengine的auth_request函数。当然,等效地,你也可以使用Lua的ngx.location.capture方法。

2、如果Tengine集群部署,B需要集中存储。

B通常是非单体应用,即由多个微服务组成。无论在哪个环节,当B需要向A推送消息时,显然需要知道A在Tengine集群中的哪台机器。因此,在B应用中,至少有一个微服务需要集中存储(如redis、memcache)来决定将请求发送到哪个Tengine。

Tengine实现方案一、Tengine 自带 中心 化存储Tengine为每个TCP连接生成一个密钥(也可以使用请求头等作为密钥),并将该密钥与对应机器IP的映射信息保存在集中存储中。应用程序只需将数据推送到Tengine集群中的任何机器,Tengine将进行分布式路由。下图从推送的角度描述了Tengine 的工作原理。

1. 将应用推送到Tengine集群中的随机机器上。推送时携带相应的Key来指示你要推送到哪个连接。

2. Sc收到推送消息,在Tair中查找哪台Tengine机器维护了相应的请求。例如,它发现推送目标连接在Sb中。

4. Sb收到后,找到对应的客户端连接,将数据推送给客户端。

应用程序可以使用vipserver随机搜索Tengine机器。 Tengine还可以申请vip/slb进行业务访问,并依靠vip/slb的负载均衡能力随机访问Tengine。

二、支持流式传输通常,长连接希望接受多个推送消息,而不是在结束后创建新的推送消息。 Tengine依托其丰富的HTTP处理能力,采用multipart/form-data,使得推送数据边界清晰。多个推送数据可以有清晰的分割线,客户端只需一次连接即可获取多个推送数据。

三、多协议支持Tengine本身支持多种协议。无论客户端发起HTTP还是HTTP2,都可以继承上述推送功能。

四、高性能

好了,文章到这里就结束啦,如果本次分享的Tengine 进化之路:从 Web 代理到分布式推送和问题对您有所帮助,还望关注下本站哦!

用户评论

冷嘲热讽i

哇,Tengine一路走来真不容易啊!从web代理扩展到分布式推送,功能越来越强大。

    有13位网友表示赞同!

疲倦了

这篇文章挺专业的,看得我受益匪浅。了解了Tengine的发展历程很有帮助。

    有8位网友表示赞同!

长裙绿衣

没想到Tengine还有这么个应用场景,看来技术发展果然日新月异啊!

    有12位网友表示赞同!

哽咽

一直用着Tengine做代理服务器,现在看来还能用来做推送?可以试试这个新功能。

    有20位网友表示赞同!

?娘子汉

读完这篇文章,我对Tengine的应用范围有了更深入的理解。

    有10位网友表示赞同!

♂你那刺眼的温柔

分布式系统的架构设计确实比较复杂,Tengine能做到这一点挺厉害的。

    有9位网友表示赞同!

爱到伤肺i

现在数据传输越来越快了,推送服务器的需求也越来越大吧?

    有9位网友表示赞同!

她的风骚姿势我学不来

Tengine这种开源的技术是实惠又好用啊,值得支持!

    有7位网友表示赞同!

◆乱世梦红颜

这个文章应该会对想了解Tengine发展方向的人很有帮助。

    有19位网友表示赞同!

三年约

从代理到推送,Tengine这波操作真是出其不意!

    有18位网友表示赞同!

残留の笑颜

希望Tengine能够继续保持创新,为开发者提供更多强大的工具。

    有20位网友表示赞同!

你是梦遥不可及

在快速发展的互联网时代,这种不断迭代的技术才更能跟上潮流。

    有19位网友表示赞同!

志平

学习一下Tengine的相关技术,说不定以后在工作中能派上用场。

    有6位网友表示赞同!

南初

分布式系统的概念还是比较新的,以后有机会得好好深入学习一下。

    有19位网友表示赞同!

若他只爱我。

文章写的很详细,讲解到位,能让普通用户也能理解。

    有7位网友表示赞同!

大王派我来巡山!

支持开源项目!Tengine这样的优秀的开源软件都是宝啊!

    有19位网友表示赞同!

蹂躏少女

对技术发展方向感兴趣的朋友可以看看这篇文章

    有18位网友表示赞同!

花开丶若相惜

未来的web技术趋势是不断向异步化、分布式化发展?

    有5位网友表示赞同!

半梦半醒i

Tengine能帮助开发者构建更高效、更强大的应用系统?

    有13位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7322.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666