前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、nginx 最为分布式web服务网关为什么有那么高的性能?
1. nginx 是基于C 语言开发的,越底层的语言写中间件个人感觉性能是越高的。nginx 是采用多进程的方式实现高并发高负载的。一个主进程,N 个工作进程,工作进程负责具体的连接/读写等事件。主进程负责协调/监控工作进程。
2. 在通常的理解中,进程通常是隔离的。进程间的通信往往通过管道,tcp/ip协议,消息队列进行通信。还有一个进程间的通信就是共享内存。nginx 就是通过共享内存的方式实现进程间通信。因为nginx 每个进程都有可能接收到客户端的网络传输请求,所以就需要进程间有一种通信机制保证一个请求只能被一个进程处理
3. 什么是共享内存?linux 提供了fork函数创建子进程,fork会把父进程拥有的资源拷贝一份到子进程,所以父进程和子进程拥有一部分共享内存。当nginx 的 master进程启动监听socket时,所有worker进程的监听描述符listenfd在新连接到来时都变得可读。nginx使⽤互斥锁来保证只有⼀个workder进程能够处理请求,拿到互斥锁的那个进程注册
listenfd读事件,在读事件⾥调⽤accept接受该连接,然后解析、处理、返回客户端
4. 基于多进程模型的nginx,每个进程是相互独立的,不需要加锁,节省开销。异常时不回影响其他的进程。
5. nginx 采用epoll IO 模型, 比较select , poll 模型,性能优化更好。
二、分析
1.进程分配和进程间通信
服务器核心数为4核,nginx 的Worker线程为4,master 线程为4, 充分利用多核CPU的资源。nginx.conf 可以配置工作进程数。auto 表示默认为CPU核心数。我们可以根据应用场景修改为合理的配置。
2. 负载均衡算法
作为应用网关入口,nginx 提供了多种负载均衡算法:
1. 随机
2. 轮询
3. 加权
4. ip_hash
5. 最小连接数
我们还可以安装第三方模块,实现一致性hash算法。