高并发优化策略方法论与传统linux操作系统类似,都是从硬件、系统参数、网络、存储、应用这几个方面考虑。
硬件优化 :
垂直扩展 :提升单机处理能力,如增加CPU核数、升级更好的网卡(如万兆网卡)、升级更好的硬盘(如SSD)并扩充硬盘容量、扩充系统内存等。
水平扩展:通过增加服务器数量来线性扩充系统性能。这可以使用负载均衡器来分发请求到多个服务器上。
系统配置优化 :
文件句柄限制 :Linux内核为每个进程都有一个文件描述符(file descriptor)数组。在高并发场景下,进程所需的文件描述符数量会增加。可以通过 ulimit -n 命令来调整文件句柄限制。
进程数量限制 :在高并发场景下,进程数量可能会增加。可以通过修改 /etc/security/limits.conf 文件来调整进程数量限制。
TCP/IP参数优化:对于TCP/IP连接,可以调整相关的内核参数来提高性能,如 net.ipv4.tcp_synack_retries 、 net.ipv4.tcp_max_syn_backlog 等。
I/O调度器 :选择合适的I/O调度器(如NOOP、DEADLINE、CFQ、BFQ等)以适应不同的工作负载。
网络优化 :
负载均衡 :使用负载均衡器来分发请求到多个服务器上,以实现水平扩展。
连接池 :使用连接池来复用TCP连接,减少连接建立和断开的开销。
压缩传输 :使用压缩算法(如gzip、brotli等)来压缩传输的数据,减少网络带宽的使用。
应用程序优化:
使用事件驱动(如select/poll/epoll/kqueue等)的非阻塞IO模型或操作系统级别的异步IO接口(如posix的aio系列函数)来减少线程数目和上下文切换的开销,同时能够处理大量并发连接。
处理高并发场景,还是需要具体区分高并发下,对主机哪些资源消耗过高,再进行有针对性的调优:
1、高并发造成网络IO压力,如果每个TCP连接本身消耗服务端的内存过高,则大量并发场景下,可能会导致内存资源过度消耗,而无法处理新的请求,则需要扩容内存,这里推荐《信创操作系统层面tcp短时高并发短连接应当如何调优?》帖子中的回复;
2、高并发带来的CPU资源不足,如果每个请求所需要的计算资源较多,推荐《信创操作系统层面提供的CPU性能应当如何优化?》帖子中的回复内容;
3、高并发带来的磁盘IO负载过高,如瞬时的批量写入读出等,这种连续的大IO操作,建议调大磁盘预读块大小,在操作系统层没有太多太好的手段,可以考虑在存储侧增加不同层级的缓存大小,如增加控制器缓存或增加SSD缓存空间等来提高整体IO性能;
4、如果高并发对后端数据库造成压力,需要从数据库读写SQL上做文章,确认是否有全表扫描等情况发生,业务处理逻辑是否有优化空间;
5、另外高并发可以考虑做业务限流,如设定排队或熔断机制,保证已接入的请求能正常处置。
麒麟操作系统在处理高并发场景下可以采取多种性能优化策略,包括但不限于:
针对银行行业的高并发场景,可以通过调整麒麟操作系统的内核参数来优化网络I/O性能,具体步骤如下:
在高并发场景下,TCP连接的建立和维护会对系统性能产生较大的影响。可以通过调整TCP参数来优化TCP连接的性能,例如:
网络设备的性能也会对系统的网络I/O性能产生影响。可以通过调整网络设备的参数来优化网络I/O性能,例如:
在高并发场景下,文件系统的性能也会对系统的网络I/O性能产生影响。可以通过调整文件系统的参数来优化网络I/O性能,例如:
总之,通过调整麒麟操作系统的内核参数,可以优化网络I/O性能,提高系统的并发性能和稳定性,从而更好地满足银行行业高并发场景下的需求。