服务端架构中的“网关服务器”

这么一个场景:一个要承载高并发、具有高性能的后台服务,往往会有多个不同的应用服务。问题来了,你会怎样设计架构呢?

如下图所示,为了共用一个稳定高效的网络处理功能,把所有服务写在一个进程里。

wKioL1MgTQajZTkoAABdKDgaHU4008.jpg

接下来悲剧一幕幕就要上演了,如果各个模块是多人协作开发,网络库的作者得想办法设计个插件机制供各个应用挂载,开发时无论是人员或者代码都耦合非常严重,大大影响协作、开发效率,后期要增减一个应用也得大动手脚。好吧,这还可以忍受,问题是写应用的人技术水准还可能层次不齐,一个短板就可能造成整个服务崩溃。

彼此的依赖太严重,效率低下,责任推诿让各个协作者们苦不堪言,各个应用服务的作者决定在自己的服务里单独提供网络模块。就有了如下图的情况,每个应用服务的提供者自己还要提供网络功能模块

wKiom1MgTW-ShjenAACL5pf0yxI272.jpg

接下来悲剧又一幕幕上演了,要知道高性能网络服务模块需要的技术含量之高不是人人都可以写好的,即使咱都能写好或者统一使用了一个牛X的网络库,你对客户端暴露那么多服务地址不讨人嫌嘛,甚至在我身边还有采用专门写一个集中服务来供客户端获取各应用服务的地址的设计......。

通过对上面两种设计的批判,大家是不是会想,这架构缺陷很明显,肯定采用的人很少吧,但是说实在的我已经遇到多次这种设计了,也许是观点不同吧,我对以上两种设计在上述场景下持否定态度。

那我们应该采用怎样的设计适应这种场景呢?

如下图,这是腾讯和微信的部分后台设计架构图

wKioL1MgTbuxOT-sAADnpKMtLJw715.jpg

wKiom1MgTeOibfoUAAFbdUOTQus251.jpg

可以看到都会有个接入服务,然后把不同的请求分发给不同的应用服务。其实这个接入服务就是“网关服务”,这种设计在nginx的负载均衡和反向代理功能中都有体现,另外在网游服务器中也大量采用了这种设计思路,由网关服务器将不同的请求分发到不同的应用服务上,等应用服务器处理完后再通过网关服务器转发给客户。

那这种设计的优点在哪呢

借用知乎王明雨知友的一个比喻:

把服务器想象成饭店,没有网关服务器的情况,就如同每一个厨师服务一桌顾客,从点菜开始到炒菜到上菜到收银,有n个厨师就只能服务n桌顾客。有了网关服务器的话,网关服务器就成了强大的服务员,把招呼,点菜、上菜和收银的活都做了,厨师只需要专心炒菜就行。这样饭店的效率就大大提高了。

  1. 这样可以把要承载高并发,高性能任务的网络服务独立出来专门做好,做强(对于http协议的场景,可以直接用nginx做网关服务器)。这样各个应用只需把重点放在对业务逻辑的处理即可。从技术架构和项目协作上都做到了解耦。

  2. 增强了系统的健壮性,一个应用出现故障并不会对其他应用产生影响。后期运维也好做灰度更迭。

  3. 有应用集群的情况下,可以通过网关服务器做负载均衡,把请求分发在负载低的服务器上。


再引用一个游戏公司对网关服务器的评价:

服务器架构

采用带网关的服务器架构,将客户端与游戏服务器隔离,相比传统的客户端-服务端直连的架构有如下优势:

1作为网络通信的中转站,负责维护将内网和外网隔离开,使外部无法直接访问内部服务器,保障内网服务器的安全,一定程度上减少外挂的***。

2网关服务器负责解析数据包、加解密、超时处理和一定逻辑处理,这样可以提前过滤掉错误包和非法数据包。

3客户端程序只需建立与网关服务器的连接即可进入游戏,无需与其它游戏服务器同时建立多条连接,节省了客户端和服务器程序的网络资源开销。


服务端高度模块化

大厅服务端将登录、用户信息、房间信息、日常任务、道具、银行、比赛、排行、活动、网站等11个功能拆分成11个独立的服务端子模块,模块之间不会相互影响,即使某模块出错也不会影响全局,提高了服务端的稳定性;与子模块平行的新功能可以自由新增挂载,扩展性强。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OPC DA网关服务端源码是指一种采用OPC技术实现数据采集的软件源代码。OPC是OLE for Process Control的缩写,是一种标准化的工业自动化数据交换协议,可以方便地实现数据的采集、处理和应用。 OPC DA网关服务端源码的功能主要是将不同类型的数据源转化为OPC DA数据,供客户端使用。它可以采集各种不同的数据源,如PLC、传感器、仪表等,将它们转换为OPC的格式,供客户端(如SCADA、HMI等)调用和使用。此外,OPC DA网关服务端源码还可以实现数据的缓存、过滤、压缩等功能,提高数据的质量和可靠性。 OPC DA网关服务端源码的设计需要考虑多种因素,如数据源的类型、网络通信的方式、数据传输的速度、数据处理的功能等。通常,它采用C++等编程语言实现,使用一些常用的开源库和框架来实现数据采集和处理。此外,OPC DA网关服务端源码通常需要进行测试和调试,确保数据的正确性和稳定性。 总之,OPC DA网关服务端源码是一种实现数据采集和处理的软件源代码,能够将不同类型的数据源转换为OPC DA格式,供客户端使用。它设计需要考虑多种因素,并经过测试和调试来确保其稳定性和正确性。 ### 回答2: OPC DA网关服务端源码是一种技术方案,它可用于建立OPC DA兼容系统和SCADA/HMI应用程序之间的通信桥梁。该源码提供了完整的OPC DA规范实现,使应用开发人员可以直接编写通信协议来与OPC DA服务器进行通讯。 源码实现了OPC DA协议服务端的全部功能,并且可以根据实际应用需要进行修改和拓展。使用OPC DA网关服务端源码,可以快速构建一个高性能、稳定可靠的OPC DA服务器,提供通信接口和数据处理能力。 同时,该源码具有源代码开放、可定制化和可扩展性等特点。开发人员可以根据自身需求来进行代码修改和定制,以创造出更加适合特定场景的OPC DA服务器。在实现上,该源码使用C++语言和Visual Studio编译器,同时配备详细的开发文档和示例代码,方便开发人员进行学习和使用。 总的来说,OPC DA网关服务端源码是一种高端的工具,可以构建跨平台通信架构,提高软件开发效率,并为应用开发提供了强有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值