acl 服务器框架的几种服务器模型(进程模型,多线程模型,非阻塞模型,协程模型,触发器模型,UDP通信模型)中,使用比较多的是多线程模型、协程模块及非阻塞模型,这三种模型可以配置成启动多个进程实例(即成为:多进程多线程、多进程多协程及多进程非阻塞),但在实际应用中因为系统 TCP 连接分配的不均匀性,会导致每个进程实例的 TCP 连接数极不均匀甚至相差很大的问题(便出现了有的进程“撑死”,有的进程“饿死“的现象),acl 服务器框架提供了一个 TCP 连接分配器,该分配器负责接收外来 TCP 连接,然后将该 TCP 连接的文件句柄通过 UNIX 域套接字”平均传递给“后端的每一个子进程,从而保证了应用服务器进程池中的每个进程实例都能获得相等数量的 TCP 连接,从而达到负载均衡的目的。
如上图所示,整个网络连接处理过程如下:
一、在 acl_master 服务器框架下启动两个服务:TCP连接分配器和应用服务进程
二、TCP 连接分配器监听两个地址:一个是网络地址(如:192.168.188.1:80)和一个本机的 UNIX 域套接字(如:/opt/acl/var/private/dispatch.sock)
注:acl 服务器框架支持同时监听多个网络地址或 UNIX 域套口地址,参见:使用 acl 服务器框架编写监听多个地址的服务器程序
三、应用服务的每个进程通过该 UNIX 域套接口连接 TCP 连接分配器:
1、通过该连接向TCP连接分配器报告自己当前的 TCP 连接数
2、在该UNIX套接口接收TCP连接分配器发送的客户端TCP连接的套接字句柄
四、客户端通过网络连接 TCP 连接分配器监听的网络地址
五、TCP 连接分配器从后端进程池中选取一个连接数最少的进程,并通过与该进程的 UNIX 套接字将客户端的 TCP 连接句柄传递给该进程
六、后端获得 TCP 连接分配器传递来的 TCP 连接句柄,从而与前端客户端建立联系,开始处理客户端的请求。
通过以上处理流程,就可以保证客户端连接可以均匀地分配给后端服务进程池中的每一个进程实例,这样,每个进程实例占用的系统资源(如:CPU、内存、IO 等)就相对比较均匀。
在 UNIX/LINUX 平台下,通过 UNIX 域套接字传递描述字过程是由内核完成的,应用层只需负责相关的系统 API 调用即可,如何使用系统 API 传递描述字可以参考 acl 库中的 lib_acl/src/stdlib/sys/unix/acl_transfer_fd.c 源文件。
另外,上面所提的 TCP 连接分配器是使用 acl 服务器框架中的非阻塞服务模型编写的一个服务器程序,具体实现在 app/master_dispatch/server 目录下;应用服务器程序可以使用 acl 服务器框架中的线程池模型或非阻塞模型编写。
在部署时,需要将 TCP 连接分配器(app/master_dispatch/server/master_dispatch) 及用户自己写的服务器程序拷贝到执行目录下,在应用自己的服务器程序中需要将配置文件中的域接口连接地址打开(对于线程池模型需要打开 ioctl_dispatch_addr 配置项,对于非阻塞模型需要打开 aio_dispatch_addr 配置项)
参考:
3、使用 acl 的生成向导快速创建一个C++ WEB 服务器
下载:
acl 库下载:https://sourceforge.net/projects/acl/
svn: svn://svn.code.sf.net/p/acl/code/
github:https://github.com/acl-dev/acl
QQ 群:242722074
国内镜像:http://git.oschina.net/acl-dev/acl
微博:http://weibo.com/zsxxsz/
相关推荐
6. **性能优化**:为了确保流畅的用户体验,Web服务器还需要进行性能优化,例如通过负载均衡分散流量,使用缓存减少重复数据传输,或者利用多线程处理并发请求。 7. **安全性**:由于涉及到敏感的用户交互和实时...
1. **分布式服务框架**:Dubbo 是阿里巴巴开源的一个高性能 Java RPC 框架。 2. **核心特性**:提供服务自动注册、发现、负载均衡、容错、路由等能力。 **Dubbo 架构设计** 1. **分层架构**:Dubbo 分为服务提供者...
- 使用Dubbo的原因:提供高性能的远程方法调用方案,支持负载均衡、容错等特性。 - Dubbo架构设计分层:服务接口层、配置层、服务治理层。 - 默认通信框架:使用Netty作为默认通信框架,也可使用其他如Mina等。 ...
6. **负载均衡**:为了处理高并发和防止单点故障,系统可能使用负载均衡技术,将请求分发到不同的服务器。这可以由硬件负载均衡器或者软件实现,如Nginx、HAProxy等。 7. **安全性**:在线网盘系统需要保护用户数据...
在Python微服务场景中,Kubernetes提供服务发现、负载均衡、自动扩缩容等功能,确保服务的高可用性和弹性。 5. **AWS云平台** Amazon Web Services提供了全面的云服务,包括EC2(弹性计算云)用于运行微服务实例,...
16. **负载均衡**:ZooKeeper负载均衡与nginx负载均衡的区别在于ZooKeeper是分布式协调服务,而nginx是服务器负载均衡器。 17. **部署模式**:ZooKeeper有单机模式、伪集群模式和完全集群模式三种部署方式。 18. *...
1. **使用 Dubbo 的理由**:Dubbo 提供了丰富的企业级服务治理能力,如服务注册与发现、负载均衡、服务降级、容错处理等。 2. **整体架构分层**:Dubbo 架构主要分为服务提供者、服务消费者、注册中心和监控中心几...
- **服务器负载均衡**:通过多个服务器分散工作负载,提高系统可用性。 - **日志和数据库归档**:定期清理旧日志和数据库,节省磁盘空间。 5. **备份与恢复** - **计划备份**:定期备份Domino服务器和数据库,以...
- **zookeeper**:基于数据节点的状态来实现负载均衡,侧重于服务发现和集群管理。 - **nginx**:通过路由规则将请求转发到不同的后端服务器,侧重于HTTP层面的负载均衡。 #### 19、Zookeeper有哪几种几种部署模式...
14. ZooKeeper与nginx负载均衡的区别。 15. ZooKeeper的部署模式和集群规则。 16. ZooKeeper集群动态添加机器的支持情况。 17. ZooKeeper节点的watch监听通知机制。 18. ZooKeeper的Java客户端和chubby的比较。 19. ...
- **HAProxy**:一款提供高可用性、负载均衡及代理功能的软件。 #### 四、服务端架构选型 - **Linux**:不同的Linux发行版各有优势,如CentOS稳定性强、Ubuntu社区活跃等,可以根据项目需求进行选择。 - **Apache/...
例如,它可以作为Dubbo、Hadoop等分布式框架的注册中心,为服务提供者和服务消费者提供动态发现、负载均衡等功能。 **7. 实战案例** 在实际应用中,可以学习如何使用ZooKeeper实现分布式锁、集群管理、命名服务等...
ZooKeeper是分布式协调服务,主要提供数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举等服务。 #### 3.2 Zookeeper文件系统(Znode) ZooKeeper中的数据模型类似于一个文件系统的目录...
11. **集群与负载均衡**:在大型环境中,可以配置Tomcat集群实现负载均衡和故障转移,提高系统的可用性和伸缩性。 12. **热部署与自动重加载**:开发过程中,Tomcat可以设置为自动检测源代码变化并自动重新加载应用...
19. **负载均衡区别**:ZooKeeper负载均衡与nginx的负载均衡的主要区别在于前者侧重于集群管理,而后者更侧重于网络请求分发。 20. **部署模式**:ZooKeeper支持单机、伪集群和全分布式部署模式。 21. **集群规则*...
Nginx或Apache可以作为反向代理服务器,实现负载均衡。 8. **安全防护**: 系统安全包括SQL注入防御、XSS攻击防护、CSRF令牌验证等。使用预编译SQL、输入验证、安全框架特性可以有效防止常见攻击。 9. **版本控制...
7. **分布式服务**:如果项目规模较大,可能涉及负载均衡、分布式缓存(如Redis)、消息队列(如RabbitMQ或Kafka)等,以提高系统性能和可扩展性。 8. **版本控制与协作**:使用Git进行代码版本控制,GitHub或...
- 实现服务器集群的负载均衡。 - 提高应用响应速度。 **注意事项:** - 配置时需考虑网络拓扑结构。 - 定期评估负载均衡效果。 #### IP Event Dampening **概述:** IP Event Dampening用于抑制因网络故障等原因...