在研究了Nginx以及开发了几个服务器端的软件之后,对于支持高并发的C程序架构总结一下。一般都是多进程或者多线程。对于多线程,因为是一个process space,好处是线程间共享内存,通信方式相对比较丰富,坏处是如果一个线程出了问题,整个进程就会受到影响。个人比较偏好多进程的结构,在这里,梳理一下主要的架构设计,对于所有需要高并发的服务来说都可以套用。
主进程:
int main()
{
//initializations
//...
//init socket
listenfd = socket(...);
bind(listenfd, ...);
listen(listenfd, ...);
//fork worker processes
for(...)
{
pid_t pid = fork();
//child
if(pid == 0)
{
//worker main cycle
work_process_cycle();
}
//parent
else
{
//...
}
}
//...
}
子进程(worker)
void work_process_cycle()
{
//init epoll
int epfd = epoll_create(...);
//...
//add listenfd to epoll
struct epoll_event ep_ev;
ep_ev.data.fd = listenfd;
ep_ev.events = EPOLLIN | EPOLLET;
epoll_ctl(epfd, EPOLL_CTL_ADD, listenfd, &ep_ev);
while(1)
{
//epoll events
struct epoll_event events[EPOLL_MAX_EVENTS];
int nfds = epoll_wait(epfd, events, EPOLL_MAX_EVENTS, EPOLL_TIMEOUT);
for(i = 0; i < nfds; i++)
{
//accept connection
if(events[i].data.fd == listenfd)
{
int connfd = accept(listenfd, ...);
//add read event
struct epoll_event ep_ev;
ep_ev.data.fd = connfd;
ep_ev.events = EPOLLIN | EPOLLET;
epoll_ctl(epfd, EPOLL_CTL_ADD, connfd, &ep_ev);
}
else if(events[i].events & EPOLLIN)
{
//deal with read events
//recv, read, ...
}
else if(events[i].events & EPOLLOUT)
{
//deal with write events
//send, write, ...
}
}
//other events
//process events, timed events, etc.
}
}
这儿使用了epoll的IO触发机制,也可以用libevent之类的库来做IO事件监听。注意,如果是高并发服务,一个进程必然同时处理N个不同的连接,这样对于进程内的事件机制需要有一个比较好的设计。比如,对于服务中的某个功能,可以设计一系列的回调函数(callback),以及一个结构体来存放具体的上下文信息。每当完成功能中的某一个回调函数之后,更新事件的下一个回调函数,并将其放入事件队列(event queue),然后在下一个iteration进行FIFO的事件处理并调用回调函数。这样对于每个进程的时间分片就可以做到比较公平。事实上,Nginx正是上述架构的一个很好的例子。
分享到:
相关推荐
《高并发Web架构完整1》是一份关于优化和构建高性能Web站点的综合资源,共分为五个部分。在当今互联网行业中,随着用户数量的急剧增长...对于希望提升Web应用性能、应对高并发挑战的开发者来说,这是一个宝贵的资源库。
高性能高并发服务器架构1.pdf高性能高并发服务器架构1.pdf
- **微服务架构**:将应用拆分为多个独立的服务,每个服务运行在一个进程中,并通过轻量级通信机制(通常是HTTP资源API)进行通信。 - **容器化**:使用Docker等工具封装应用程序及其依赖项,实现轻松部署。 ####...
高性能高并发服务器架构是指一种能够处理大量用户请求和高并发访问的服务器架构解决方案。在当前的互联网时代,高性能高并发服务器架构已经成为网站运营商和开发者的必备技术之一。本文将从高性能高并发服务器架构的...
在IT行业中,Java是一种广泛应用的编程语言,尤其在构建高性能、高并发的服务器架构方面具有显著优势。本资源集合包含了关于“JAVA高性能高并发服务器架构”的PDF文档和视频,旨在帮助开发者深入理解如何利用Java...
非常全面的高性能高并发服务器架构解决方案.doc
在Web服务器的优化方面,Apache作为一个老牌的Web服务器软件,其性能优化是高并发架构中的重要一环。通过调整Apache的配置文件,设置合适的进程和线程数量,使用合适的模块来增强Apache的功能,以及进行内存管理,都...
#### 开源软件在高并发架构中的应用 - **Memcached**:分布式内存对象缓存系统,广泛应用于大型网站,如Facebook、Yeejee、mixi。 - **Squid**:高性能的代理缓存服务器,常与Memcached配合使用。 - **Apache ...
- **重要性**: 在当前互联网高速发展的背景下,越来越多的网站和服务需要面对大量的在线用户,因此构建高性能、高并发的服务器架构变得尤为重要。 #### 2. 关键技术与策略 - **负载均衡**: 使用负载均衡技术可以将...
一例千万级pv高性能高并发网站架构图,包括CDN、全局负载均衡、本地负载均衡、内网DNS、集群、Hadoop集群、数据库集群、缓存集群、NOSQL集群等
"互联网高并发技术架构图" 描述了如何构建一个能够应对高并发的复杂系统,涉及到多个关键领域和组件。 1. **生产环境**:生产环境是实际部署应用和服务的地方,它需要能够承受大量并发请求,同时保持高可用性和稳定...