高性能服务器的分布式设计

简介: #何为高性能服务器 ##服务器分类 目前的高性能服务器,大家耳熟能详的有很多, 这里对通用的做了分类: http服务器:nginx, apache java http容器:tomcat, jetty java 服务器框架: jetty, mina 其中nginx/apache/tomcat已被用于各大在线业务,按各使用场景来看功能,可概览如下: ![image.png](ht

何为高性能服务器

服务器分类

目前的高性能服务器,大家耳熟能详的有很多,
这里对通用的做了分类:
http服务器:nginx, apache
java http容器:tomcat, jetty
java 服务器框架: jetty, mina

其中nginx/apache/tomcat已被用于各大在线业务,按各使用场景来看功能,可概览如下:
image.png

也可将这些功能分为基本与扩展。
基本功能:请求过滤,静态处理,长短连接,规则配置,动态容器,内容压缩。
扩展功能:负载均衡,反向代理, 容器。

为什么需要扩展功能

概括一些,基本功能可以被视为静态功能,扩展功能可被视为动态功能,所以问题被理解为为什么需要动态功能。
我们拿一个视频服务器来看,其需要具备哪些功能。
网页静态模板, 用户模块, 视频分发等。

静态服务器仅仅满足了静态模板的功能, 用户模块的鉴权与视频分发才是重点。

回过来看下服务器的动态扩展功能。

容器

这里以nginx, tomcat为例。
image.png

tomcat为java容器而生,其上可运行各种组件与servlet。
nginx与tomcat对容器的支持方式不太一样,nginx原生不支持容器,将其扩展后可运行lua脚本,参见openresty。

tomcat 加载容器的方式:
xml/jar
xml决定配置, jar包含逻辑。
tomcat运行jar包的方式比较方便, 因为tomcat与容器内jar包都是运行在jvm之上。

nginx加载配置的方式

location /test/hello{
    default_type 'text/plain';
    charset UTF-8;
    content_by_lua_file /data/test/htdocs/hello.lua;
}

nginx运行容器其实是加载了lua运行库。

反向代理

早期的服务器对cgi的支持以spawn的形式支持。

通过反向代理,server可以不用关注后端连接的是什么服务, 后端的服务崩溃了也不影响server的稳定性。

负载均衡

通过反向代理,可以使用后端的负载均衡:
image.png

通过配置规则,可以将负载均衡的负载到后面的各个点上。

有了容器,我们可以轻易定制业务逻辑。
有了反向代理与负载均衡,就可以异步化处理请求与前后分离。

还缺点什么

目前的主流服务器都支持http协议,原因并不是为了方便大家用浏览器,而是方便约定,通用。http+https 解决了加密的问题,于是所有对外的服务
都可以用http+https协议。
但是http包有点大了,对于高密度小包的服务,不太适用http了,需要定制的tcp/udp 协议,比如protobuf,这时就产生了各种服务器框架,如netty。

如何设计一个高性能服务器

框架

高性能服务器必须具备哪些素质,我们可以按互联网2个标准来定义:
高QPS,低响应时间。

有时候我们发现这两者有一定的关系,响应时间高的系统往往QPS低,对于同步处理可以套用公式:
QPS=1/响应时间
如果一个请求处理的平均时间为1mm,则QPS不会高于1K,假设每秒请求的次数为1W,则会形成请求堆积:
image.png

问题很大,举一个简单的例子,一条针对nginx请求某文本文件的请求, 假设响应时间为2mm,那QPS岂不只有500了。
对于多个服务器串型处理的业务,情况恶劣成:

image.png

一台服务器的瓶颈成为整条服务流的瓶颈。

简单一点类比,同步请求可以理解为:

A a = funcA();
B b = funcB(a);

funcA未结束是不能进行funcB的,线程在funcA是阻塞的。
如果funcA是IO处理(本地IO,网络IO),目前各操作系统已经提供异步库。
拿linux里的epoll为例, 可以在某fd可读可写时调用读写回调,而不可读不可写时不占用CPU时间。
可以理解为

func cb(A a)
{
    B b = funcB(a);
}
funcA(cb);

当调用funcA时,传入回调函数,等消息回调时才会处理funcB。虽然响应时间一样,线程不再阻塞了,QPS提高了。
这种做法叫异步。
异步大法好,前面列的nginx, apache, tomcat, jetty,netty都标配异步。
于是我们经常看到nginx读文本的QPS达到几万,虽然读一个文本的响应时间有几个耗秒。

业务为王, 没有最好的服务器,只有最满足业务的服务器,业务如果复杂,链路很深,就需要进行框架级的设计。
不能让所有业务都用一套框架,也不能为某个业务开发一个框架,但是不同的业务可以有不同的架构,在框架上可以对非业务逻辑部分进行抽象,整合,以期尽量简单的满足所有的业务。
所以架构应该分为框架架构与业务架构。
框架架构的目标功能:异步、反向代理,规则配置、均衡负载

为何需要业务架构

假设我们为了处理一个业务,
业务条件:平均一个业务的处理时间为5mm,无后端资源依赖。
要求:QPS 达到1W。
变量:机器数N, CPU核M, 内存数K
无论N等于几,无论同步还是异步,我们知道必须要启动20个线程或者进程,

假设业务条件改为:5个业务必须中行处理,平均一个业务的处理时间为5mm,无后端资源依赖,
QPS还是要求1W。
我们对数据整理:
5个业务的合并处理时间为25mm
每mm需要的业务处理数为10
单线程每秒的QPS为40,则需要250个线程处理,这250个线程分担到N个机器,假设机器数为1, 无论同步还是异步,单机器需要运行250个业务线程或者进程。
因此依靠框架的功能是解决不了具体业务的性能提升的。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
4月前
|
消息中间件 NoSQL Java
Java高级开发:高并发+分布式+高性能+Spring全家桶+性能优化
Java高架构师、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师之路
|
23天前
|
存储 缓存 NoSQL
Redis 服务器指南:高性能内存数据库的完整使用指南
Redis 服务器指南:高性能内存数据库的完整使用指南
|
2月前
|
存储 缓存 网络协议
Go语言并发编程实战:构建高性能Web服务器
【2月更文挑战第6天】本文将通过构建一个高性能的Web服务器实战案例,深入探讨如何在Go语言中运用并发编程技术。我们将利用goroutine和channel实现高效的请求处理、资源管理和并发控制,以提升Web服务器的性能和稳定性。通过这一实战,你将更好地理解和掌握Go语言在并发编程方面的优势和应用。
|
2月前
|
存储 缓存 物联网
DP读书:鲲鹏处理器 架构与编程(二)服务器与处理器——高性能处理器的并行组织结构、ARM处理器
DP读书:鲲鹏处理器 架构与编程(二)服务器与处理器——高性能处理器的并行组织结构、ARM处理器
251 0
|
2月前
|
弹性计算 安全 数据中心
阿里云香港服务器提供高性能、安全、CN2高速网络、BGP多线精品
阿里云香港服务器提供高性能、安全、CN2高速网络、BGP多线精品
|
3月前
|
负载均衡 Java 调度
【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(Dispatcher和EventListener)(下)
经过阅读《【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)》,相信您已经对网络通信框架的网络通信层的实现原理和协议模型有了一定的认识和理解。
41 0
【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(Dispatcher和EventListener)(下)
|
3月前
|
JavaScript 前端开发 数据安全/隐私保护
深入探讨Node.js:构建高性能服务器端应用
深入探讨Node.js:构建高性能服务器端应用
174 1
|
3月前
|
Dubbo Java 应用服务中间件
【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)
今天,我要向大家实现一个基于Netty实现的高性能远程通信框架!这个框架利用了 Netty 的强大功能,提供了快速、可靠的远程通信能力。 无论是构建大规模微服务架构还是实现分布式计算,这个分布式通信框架都是一个不可或缺的利器。
64 2
【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)
|
3月前
|
缓存 负载均衡 应用服务中间件
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
在本章内容中,我们将深入探讨 Tomcat 服务器的运行架构、LVS 负载均衡的运行机制以及 Cache 缓存机制,并提供相应的解决方案和指导。通过理解这些关键概念和机制,您将能够优化您的系统架构,提高性能和可扩展性。
207 4
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
|
3月前
|
存储 负载均衡 网络协议
高性能网络编程 - 关于单台服务器并发TCP连接数理论值的讨论
高性能网络编程 - 关于单台服务器并发TCP连接数理论值的讨论
55 0

热门文章

最新文章