我过去参与的一个项目的服务端为了处理高并发设计如下:
1个linux系统 with 4 cores
1个nginx with 4 worker_processes
1个mysql 实例
4个业务进程
nginx将接受到的请求随机分配给4个业务进程,每个业务进程如果有mysql写入操作,则在 /tmp 产生 project.sock 文件,内容是进程号,待操作完成后,该业务进程负责销毁文件。
我是移动端开发人员,对 iOS_GCD 熟悉,然后也看过 golang_goroutine,所以想如果用 golang 写服务端的话,这个问题怎么解决? 还是多进程+进程锁?
------------------------------------------------------------------
附加问题:
1. nginx 有4个 worker_processes 意思是不是有4个消息队列,虽然能接受每秒十万次请求,但是同时最多只有4个消息被处理?
2. 整个处理流程是不是,一个http请求到达nginx,被nginx通过fcgi转发到业务进程(阻塞nginx的一个worker_process),业务进程接受该请求并进行处理,然后将处理结果返回给nginx,nginx再返回给客户端?如果是这样,那实际上这种架构最多只能同时处理4个请求?再考虑到数据库写操作的锁,那业务效率不是很低么?
1个linux系统 with 4 cores
1个nginx with 4 worker_processes
1个mysql 实例
4个业务进程
nginx将接受到的请求随机分配给4个业务进程,每个业务进程如果有mysql写入操作,则在 /tmp 产生 project.sock 文件,内容是进程号,待操作完成后,该业务进程负责销毁文件。
我是移动端开发人员,对 iOS_GCD 熟悉,然后也看过 golang_goroutine,所以想如果用 golang 写服务端的话,这个问题怎么解决? 还是多进程+进程锁?
------------------------------------------------------------------
附加问题:
1. nginx 有4个 worker_processes 意思是不是有4个消息队列,虽然能接受每秒十万次请求,但是同时最多只有4个消息被处理?
2. 整个处理流程是不是,一个http请求到达nginx,被nginx通过fcgi转发到业务进程(阻塞nginx的一个worker_process),业务进程接受该请求并进行处理,然后将处理结果返回给nginx,nginx再返回给客户端?如果是这样,那实际上这种架构最多只能同时处理4个请求?再考虑到数据库写操作的锁,那业务效率不是很低么?