当前位置: 首页 > 科技观察

服务器性能优化的8种常用方法

时间:2023-03-18 12:05:07 科技观察

1.使用内存数据库内存数据库其实就是把数据放在内存中,直接操作的数据库。与磁盘相比,内存的数据读写速度要高出几个数量级。将数据保存在内存中比从磁盘访问数据可以大大提高应用程序的性能。内存数据库摒弃了传统的磁盘数据管理方式,重新设计了基于所有数据在内存中的架构,并在数据缓存、快速算法、并行运算等方面做了相应的改进,因此数据处理速度比传统数据库更快数据库。数据处理要快得多。但是安全问题可以说是内存数据库最大的硬伤。因为内存本身存在掉电丢失的天然缺陷,所以我们在使用内存数据库时,通常需要提前对内存上的数据采取一些保护机制,比如备份、日志记录、双机热备或集群、同步等用磁盘数据库等方式。对于一些重要性不高但又想快速响应用户请求的数据,可以考虑将其存储在内存数据库中,同时可以定期将数据固化到磁盘中。2、使用RDD在一些与大数据云计算相关的应用中,可以使用Spark来加速数据处理。Spark的核心是RDD,而RDD最早的出处是伯克利实验室的一篇论文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》。现有的数据流系统对于两种类型的应用程序来说效率不高:迭代算法(在图形应用程序和机器学习中很常见)和交互式数据挖掘工具。在这两种情况下,将数据保存在内存中可以极大地提高性能。3.增加缓存。许多Web应用程序有很多静态内容。这些静态内容主要是小文件,会被频繁读取。Apache和nginx用作Web服务器。在web访问量不大的时候,这两个http服务器可以说是非常快速高效的。如果负载较大,我们可以使用前端缓存服务器,将静态资源文件缓存在服务器中。读操作是直接在系统内存中进行的,因为直接从内存中读取数据的速度要比从硬盘中读取快很多。这其实就是增加内存以减少访问磁盘的时间消耗的代价。4.除了优化内存,使用SSD还可以优化磁盘。与传统机械硬盘相比,固态硬盘具有读写速度快、重量轻、能耗低、体积小等特点。但是ssd的价格比传统的机械硬盘贵,有条件的可以用ssd代替机械硬盘。5.优化数据库。大多数服务器请求最终都会落入数据库。随着数据量的增加,数据库的访问速度会越来越慢。为了提高请求处理速度,必须改变原来的单表。目前主流的Linux服务器使用的数据库是mysql。如果我们用mysql把数据存储在单表上千万条记录,查询速度会很慢。根据合适的业务规则对数据库进行分区,可以有效提高数据库的访问速度,提高服务器的整体性能。另外,对于业务查询请求,可以在建表时根据相关需求设置索引,提高查询速度。6、选择合适的IO模型IO模型又分为:(1).阻塞I/O模型:在数据到达之前,I/O一直处于阻塞状态,如果数据到达,则返回。典型的就是recvfrom,一般默认是屏蔽的。(2).非阻塞I/O模型:与阻塞相反,只要得不到结果,I/O立即返回。不会阻塞当前线程。IO复用模型:就是你要学习的部分。多路复用就是将多个信号合并为一个进行处理,类似于将多条流水线集合为一条流水线,与之相反的是多路分解。IO多路复用模型主要是select、poll、epoll;对于一个IO口,调用两次,返回两次,比阻塞IO没有优势;关键是能够同时监控多个IO口;该函数也会阻塞进程,但与阻塞I/O不同的是,这两个函数可以同时阻塞多个I/O操作。而且可以同时检测多个读操作和多个写操作的I/O函数,直到有数据可读或可写时才真正调用I/O操作函数。信号驱动:首先开启socket信号驱动I/O功能,通过系统调用sigaction安装一个信号处理函数。当数据报准备好被读取时,会为进程生成一个SIGIO信号。然后就可以在信号处理程序中调用recvfrom读取数据报,并通知主循环数据已准备好进行处理。也可以通知主循环让它读取数据报。异步IO模型:告诉内核开始一个操作,让内核在整个操作完成后通知我们(包括从内核拷贝数据到用户自己的缓冲区)。这并不是说一定要使用某种模型,epoll并不是在所有情况下都比select有更好的性能。选择时要结合业务需求。7.采用多核处理策略。目前运行服务器的主流机器配置都是多核CPU。在设计服务器时,我们可以利用多核的特性,采用多进程或多线程的框架。关于选择多线程还是多进程,大家可以根据实际需要,结合各自的优缺点来选择。对于多线程的使用,尤其是使用线程池时,可以通过测试不同线程池服务器的性能来设置合适的线程池。8、分布式部署方案当单机服务器再也找不到合适的优化点时,我们可以通过分布式部署来提高服务器的响应能力。优秀的服务器开发都会针对自己服务器的扩容和容灾提出一些解决方案。个人觉得还是简化服务器设计比较好,这样后期扩展会很方便。