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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: #何为高性能服务器 ##服务器分类 目前的高性能服务器,大家耳熟能详的有很多, 这里对通用的做了分类: 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个业务线程或者进程。
因此依靠框架的功能是解决不了具体业务的性能提升的。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
80 5
|
14天前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
41 3
|
1月前
|
自然语言处理 搜索推荐 数据库
高性能分布式搜索引擎Elasticsearch详解
高性能分布式搜索引擎Elasticsearch详解
64 4
高性能分布式搜索引擎Elasticsearch详解
|
14天前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
33 1
|
14天前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
32 1
|
14天前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
35 0
|
2月前
|
存储 固态存储 虚拟化
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN ESXi超融合HCI分布式存储数据恢复案例
近期,我司处理了一个由10台华为OceanStor存储组成的vSAN超融合架构,其中一台存储闪存盘出现故障,用户取下后用新的闪存盘代替,然后对该闪存盘所在的磁盘组进行重建,导致集群中一台使用0置备策略的虚拟机数据丢失。
64 6
|
2月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
36 0
|
2月前
|
缓存 监控 Linux
在Linux中,如何设计一个高性能的Web服务器?
在Linux中,如何设计一个高性能的Web服务器?
|
3月前
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
48 0

热门文章

最新文章