青岛建设厅网站,福田网页设计,WordPress感觉很慢,lnmp lamp wordpress这么一个场景#xff1a;一个要承载高并发、具有高性能的后台服务#xff0c;往往会有多个不同的应用服务。问题来了#xff0c;你会怎样设计架构呢#xff1f;如下图所示#xff0c;为了共用一个稳定高效的网络处理功能#xff0c;把所有服务写在一个进程里。接下来悲剧…这么一个场景一个要承载高并发、具有高性能的后台服务往往会有多个不同的应用服务。问题来了你会怎样设计架构呢如下图所示为了共用一个稳定高效的网络处理功能把所有服务写在一个进程里。接下来悲剧一幕幕就要上演了如果各个模块是多人协作开发网络库的作者得想办法设计个插件机制供各个应用挂载开发时无论是人员或者代码都耦合非常严重大大影响协作、开发效率后期要增减一个应用也得大动手脚。好吧这还可以忍受问题是写应用的人技术水准还可能层次不齐一个短板就可能造成整个服务崩溃。彼此的依赖太严重效率低下责任推诿让各个协作者们苦不堪言各个应用服务的作者决定在自己的服务里单独提供网络模块。就有了如下图的情况每个应用服务的提供者自己还要提供网络功能模块接下来悲剧又一幕幕上演了要知道高性能网络服务模块需要的技术含量之高不是人人都可以写好的即使咱都能写好或者统一使用了一个牛X的网络库你对客户端暴露那么多服务地址不讨人嫌嘛甚至在我身边还有采用专门写一个集中服务来供客户端获取各应用服务的地址的设计......。通过对上面两种设计的批判大家是不是会想这架构缺陷很明显肯定采用的人很少吧但是说实在的我已经遇到多次这种设计了也许是观点不同吧我对以上两种设计在上述场景下持否定态度。那我们应该采用怎样的设计适应这种场景呢如下图这是腾讯和微信的部分后台设计架构图可以看到都会有个接入服务然后把不同的请求分发给不同的应用服务。其实这个接入服务就是“网关服务”这种设计在nginx的负载均衡和反向代理功能中都有体现另外在网游服务器中也大量采用了这种设计思路由网关服务器将不同的请求分发到不同的应用服务上等应用服务器处理完后再通过网关服务器转发给客户。那这种设计的优点在哪呢借用知乎王明雨知友的一个比喻把服务器想象成饭店没有网关服务器的情况就如同每一个厨师服务一桌顾客从点菜开始到炒菜到上菜到收银有n个厨师就只能服务n桌顾客。有了网关服务器的话网关服务器就成了强大的服务员把招呼点菜、上菜和收银的活都做了厨师只需要专心炒菜就行。这样饭店的效率就大大提高了。这样可以把要承载高并发高性能任务的网络服务独立出来专门做好做强对于http协议的场景可以直接用nginx做网关服务器。这样各个应用只需把重点放在对业务逻辑的处理即可。从技术架构和项目协作上都做到了解耦。增强了系统的健壮性一个应用出现故障并不会对其他应用产生影响。后期运维也好做灰度更迭。有应用集群的情况下可以通过网关服务器做负载均衡把请求分发在负载低的服务器上。再引用一个游戏公司对网关服务器的评价服务器架构采用带网关的服务器架构将客户端与游戏服务器隔离相比传统的客户端-服务端直连的架构有如下优势1作为网络通信的中转站负责维护将内网和外网隔离开使外部无法直接访问内部服务器保障内网服务器的安全一定程度上减少外挂的***。2网关服务器负责解析数据包、加解密、超时处理和一定逻辑处理这样可以提前过滤掉错误包和非法数据包。3客户端程序只需建立与网关服务器的连接即可进入游戏无需与其它游戏服务器同时建立多条连接节省了客户端和服务器程序的网络资源开销。服务端高度模块化大厅服务端将登录、用户信息、房间信息、日常任务、道具、银行、比赛、排行、活动、网站等11个功能拆分成11个独立的服务端子模块模块之间不会相互影响即使某模块出错也不会影响全局提高了服务端的稳定性与子模块平行的新功能可以自由新增挂载扩展性强。