互联网程序员必备的性能优化技术

时间:2020-12-24 10:32来源:未知 作者:中博IT教育

互联网的发展推动了越来越多的企业加入互联网,越来越多的产品出现在互联网,越来越多的网民涌现在互联网,除了提供基本的服务之外,还需要提供更好玩、更便捷稳定的服务,就
互联网的发展推动了越来越多的企业加入互联网,越来越多的产品出现在互联网,越来越多的网民涌现在互联网,除了提供基本的服务之外,还需要提供更好玩、更便捷稳定的服务,就像手机一样,我们对它最基本的性能要求就是待机时间长,在互联网的性能要求就是不慢不卡,因此性能优化技术是互联网程序员必须掌握的技术。
 
一套应用程序能运行起来,除了最上层的前端服务、业务层算法之外,还有数据库、操作系统,因此性能优化技术包含了负载均衡技术、缓存技术、数据库技术、RPC技术(RemoteP)、进程通信技术、IO多路复用技术、IO零拷贝技术,互联网程序员掌握了这些技术,就像学好了数理化一样,走到哪里都是香饽饽。
 
所谓负载均衡技术,就是用来将计算资源、存储资源、网络资源根据实际情况进行分配的一种技术,通过多个节点承载服务,用来达到最优的资源利用、最快的响应时间,实现了性能优化。负载均衡的分类也有很多,有客户端负载均衡、服务器端负载均衡、软件负载均衡、硬件负载均衡。以服务端负载均衡为例,用户在前端发起请求后,经过网络传输给服务端,再通过服务端的负载均衡算法去选择对应的服务器提供服务,最常见的就是nginx算法了。
 
在负载均衡之后,便是缓存技术,它是通过将访问的热数据提前存起来供业务访问,降低了数据库压力、降低了用户响应时间,实现了性能优化。负载均衡把请求分担为多个节点执行,每个节点都承载着服务的提供,当用户请求从前端经负载均衡算法分配过来后,如果直接去访问获取磁盘的数据库数据,就会非常慢。如果有了缓存,在用户请求到达之后,业务线程就会先访问缓存,如果缓存命中就直接返回用户,如果没有命中,则继续请求磁盘数据库数据,获取后返回用户,同时将磁盘获取的数据结果回写到缓存系统,为下次请求做好准备。
 
在缓存之后便是数据库技术,缓存访问热点数据后,执行的交易操作需要对数据库中的表进行增删改查,通过将数据库分为主库、读库、大表分为小表,让每个用户请求都能快速访问到数据、快速执行操作,降低了用户延迟,实现了性能优化。数据库的读写分离,使用一台数据库服务器作为主数据库(master),把业务数据都写入该数据库,再另外使用另一台数据库服务器来作为从数据库(slave),将业务数据同步到该数据库上,当业务进行读操作时就读取备数据库的数据即可,这样即缓解了数据库压力,又实现了备份。
 
在数据库技术之后,便是操作系统级别的IO多路复用技术。我们知道一个程序运行时是一个进程,而程序里有很多的方法要去执行,每个方法就是一个线程,通过并发处理客户端的多个线程请求,并同时等待多个连接发送的请求,减少系统的开销、降低用户延迟,实现了性能优化。此外,IO多路复用也不需要额外创建和维护线程监听客户端的大量连接,减少了服务器的开发和维护成本。典型的线程级别优化技术有java线程池、数据库连接池、PHP内存池。
 
在IO多路复用技术之后,便是IO零拷贝技术。在操作系统一般把内核划分成内核空间、用户空间,Linux操作系统中读取数据操作都是基于数据拷贝完成的,也就是说数据会在内核地址空间的缓冲区和用户地址空间的缓冲区进行拷贝,数据读取流程一般包含四部分,
1.操作系统需要先从磁盘里读取文件到内核页面的缓存;
2.用户态的应用程序从内核态读取数据到用户空间缓存区,由于内核态的资源比较宝贵会经常释放;
3.用户态的应用程序还需要将数据写回内核空间并放入socket缓冲区;
4.最后操作系统将数据从socket缓冲区复制到网卡接口,再经由网络发送给到消费者进程。
 
零拷贝技术,将磁盘文件的数据复制到页面缓存中,然后将数据从页面缓存直接发送到网络给到不同的订阅者,避免了重复拷贝操作,极大的提高了速度,实现了性能优化。
 
从负载均衡、缓存、数据库到IO多路复用、IO零拷贝技术,完成了单服务从业务级到操作系统级的性能优化,但微服务技术的出现将单服务拆分成了多个微服务,对于云原生、微服务时代的性能优化,那便是RPC远程调用技术。
 
远程是相对本地而言的概念,本地调用存在的场景是在一个服务中有不同的函数实现不同的功能,一个函数要使用另一个函数的功能,那必然要调用它。在本地函数调用时,一般会经过这几个步骤,即函数返回地址入栈、函数参数入栈、堆栈空间提升、函数参数复制、开始函数调用、堆栈情况。
 
当服务拆分成了微服务之后,函数是在不同的微服务、不同的机器上运行,一台机器想要调用另一台机器的函数执行某个功能,只能通过网络请求来实现(借助两个服务共同维护的关联式容器stub),不能再像本地调用一样使用函数指针实现了。有了RPC,不仅是微服务与微服务之间的调用变得简单,不同语言之间的调用也变得简单了。
 
以前JAVA语言想要调用C++语言,那是不可能的事,因为用不同语言写的代码,根本无法通信啊。而现在有了RPC,只要框架上支持该语言的解析,那么就可以了。Java语言传递过来函数1的参数1、参数2,通过RPC框架解析为C++语言可以识别的参数1、参数2。RPC技术通过降低了网络延迟从而降低了用户延迟,实现了性能优化。
 
互联网从网页时代走向互联网时代、移动互联网时代、物联网时代,基础设施从物理机走向虚拟机、容器,技术架构也从单体式服务走向SOA、微服务、分布式,一切技术都在不断的进化演变,唯一不变的便是性能优化技术。从单服务的负载均衡、缓存、数据库,到操作系统级别的IO多路复用、IO零拷贝技术,再到微服务的RPC技术,掌握了之后,任尔技术如何变迁,我自岿然不动~
(责任编辑:中博IT教育)

苏公网安备 32030302000649号