高性能服务器设计思路和方案

简介: 高性能服务器设计思路和方案

互联网海量并发和海量数据处理背后涉及到高性能服务器的请求和响应,这里面如何处理成千上万的的用户请求?涉及到哪些技术?有哪些方向是可以进行优化的呢?本文总结了几种方案供参考。

一、多进程和多线程

  • 多进程

在Linux的世界中,可以通过fork()方法来创建子进程,父进首先接收到用户请求,再自己创建子进程去处理用户的请求,这样每个用户的请求都得到了处理。

多进程的优点

  1. 多进程编程思路和实现比较简单;
  2. 由于线程间地址空间相互隔离,所以多进程编程中单个进程的奔溃不会影响到其他线程,起到了线程隔离的效果。
  3. 充分发挥机器多核的价值,多个进程能并行跑在不同的CPU上;

多进程的缺点

  1. 由于各个进程地址相互隔离,所以要实现进程中通信,需要借助进程中通信的相关机制;
  2. 创建和销毁进程的开销都比较大,所以频繁的进行进程的创建和销毁无疑会加重系统的负担;
  • 多线程

由于多进程的创建和销毁开销过大,所以引入了多线程方式,一个进程下的多个线程他们共用相同的地址空间,所以创建的时候开销相对较小,更重要的是他们有了更方便的线程间通信方式。

多线程的优点

  1. 创建线程的开销和负担相较进程更小;
  2. 多线程间共享相同的地址空间,能更好的实现线程间通信;
  3. 针对一些需要长时间执行的任务,利用多线程可以提高并行处理的性能;

多线程的缺点

  1. 多线程通信使用不当,存在线程安全问题,存在数据不一致的问题;
  2. 一个进程内可能存在多个线程,单个线程的奔溃,可能会引发进程的奔溃,所以安全隔离级别没有进程高;

二、事件驱动

事件驱动编程中2个最重要的角色为:

  1. 事件:就是在主线程中触发另个线程或逻辑处理的事件,一般事件可能会和IO操作相关,比如网络收发报文、磁盘读写文件等;
  2. 事件处理函数:就是获取到这个事件后,如何处理这个事件的逻辑;

一般的事件驱动编程模型为:

while(true){
    event = getEvent();//获取到事件
    result = handler(event);//处理事件
}

以上这种事件驱动的处理模型存在问题,因为getEvent()方法只能获取一种事件,handler(event)也只能处理一种事件,就是如何处理多种事件呢?

这个可以选择IO多路复用来解决,IO多路复用是通过单独一个dispatcher来监控事件,如果获取到了某个事件,就将该事件转发到对应的handler来进行处理,这也是Linux中epoll实现的主要思路。

三、异步和回调方式

同步调用的逻辑简单、易实现,在开发前期可以通过这样的方式迅速实现功能,进行功能验证,但是在生产环境面对高并发情况,同步调用的效率比较低下,这是由于工作现在会阻塞主线程的执行。有没有一种更好的方案来解决高并发场景?

一种更好的方案是通过异步和回调方式来实现,在主线程中调用工作线程时,采用的是一种异步调用的方式,这样就不会阻塞主线程的执行,如果异步线程还有返回值的话,可以在异步方法中传入回调函数,这样在异步线程执行完成后会自动调用回调函数。

一般的编程模式:

void handler(request){
   
    getInfoAsync(request, callBack())
}

getInfoAsync(request, callBack(){
   
    //异步处理
    callBack(returnInfo);//调用回调函数
}

callBack(returnInfo){
   
    //回调处理
}

在Java中可以通过CompletableFuture框架来实现异步和回调。

协程

todo

目录
相关文章
|
1月前
|
NoSQL 容灾 MongoDB
MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份
在资源受限的情况下,为了实现MongoDB的高可用性,本文探讨了两种在两台服务器上部署MongoDB的方案。方案一是通过主备身份轮换,即一台服务器作为主节点,另一台同时部署备节点和仲裁节点;方案二是利用`priority`设置实现自动主备切换。两者相比,方案二自动化程度更高,适合追求快速故障恢复的场景,而方案一则提供了更多的手动控制选项。文章最后对比了这两种方案与标准三节点副本集的优缺点,指出三节点方案在高可用性和数据一致性方面表现更佳。
|
1月前
|
存储 Unix Linux
服务器数据恢复—DELL EqualLogic PS6100系列存储简介及发生故障后的处理方案
DELL EqualLogic PS6100系列存储采用虚拟ISCSI SAN阵列,支持VMware、Solaris、Linux、Mac、HP-UX、AIX操作系统,提供全套企业级数据保护和管理功能,具有可扩展性和容错功能。
|
3月前
|
存储 运维 监控
服务器高效运维管理方案
智能运维作为保障业务连续性和提升系统性能的关键环节,其重要性日益凸显。服务器作为承载各类应用与数据的核心基础设施,其稳定性、安全性和性能直接关系到企业的业务运行效率和用户体验
145 1
|
3月前
|
存储 弹性计算 SDN
企业级 ECS 集群的构建需要综合考虑多个因素,通过不断的比较和对比不同的方案,选择最适合企业自身需求和发展的架构。
【9月更文挑战第5天】在数字化商业环境中,构建企业级ECS(弹性计算服务)集群对提升业务稳定性、扩展性和性能至关重要。本文将比较传统物理服务器与ECS架构,分析云服务商选择(如AWS和阿里云)、实例配置(CPU/内存)、网络架构(SDN vs 传统)及存储方案(本地存储 vs 云存储),帮助企业根据自身需求选出最优方案,实现高效稳定的ECS集群部署。
79 18
|
4月前
|
弹性计算 运维 搜索推荐
阿里云建站方案参考:云服务器、速成美站、企业官网区别及选择参考
随着数字化转型的浪潮不断推进,越来越多的企业和公司开始将业务迁移到云端,而搭建一个专业、高效的企业官网成为了上云的第一步。企业官网不仅是展示公司形象、产品和服务的重要窗口,更是与客户沟通、传递价值的关键渠道。随着阿里云服务器和建站产品的知名度越来越高,越来越多的用户选择阿里云的产品来搭建自己的官网。本文将深入探讨在阿里云平台上,如何选择最适合自己的建站方案:云服务器建站、云·速成美站还是云·企业官网。
219 13
阿里云建站方案参考:云服务器、速成美站、企业官网区别及选择参考
|
4月前
|
存储 安全 数据安全/隐私保护
服务器数据恢复—服务器raid常见故障的数据恢复方案
磁盘阵列(raid)是一种将多块物理硬盘整合成一个虚拟存储的技术。raid模块相当于一个存储管理中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对于单独的物理硬盘,raid可以为用户提供更大的独立存储空间,更快的读写速度,更高的数据存储安全及更方便的统一管理模式。磁盘阵列的正常运行是保障服务器中数据正常读写的关键。
服务器数据恢复—服务器raid常见故障的数据恢复方案
|
4月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
47 0
|
4月前
|
微服务
【Azure Cloud Services】云服务频繁发生服务器崩溃的排查方案
【Azure Cloud Services】云服务频繁发生服务器崩溃的排查方案
|
4月前
|
缓存 监控 Linux
在Linux中,如何设计一个高性能的Web服务器?
在Linux中,如何设计一个高性能的Web服务器?
|
6月前
|
弹性计算 运维 Java
解决方案测评(高效构建企业门户网站方案)基于ecs&云效&云解析DNS&VPC结合的自搭建方案报告
该文档是一个关于使用ECS、云效、云解析DNS和VPC结合的自搭建方案报告。主要内容包括前言部分,可能详细探讨了如何集成这些阿里云服务以构建自定义系统。由于提供的内容有限,具体的实施方案和细节未在摘要中体现。
231 2