nignx(日志文件)-->log_process(实时读取解析写入)-->influxdb(存储)-->grafana(展现)
常见并发模型
1.进程&线程(apache) C10K
2.异步非阻塞(nginx,libevent,nodejs) 复杂度高
3.协程(golang,erlang,lua)
goroutines(程序并发执行)
1.程序并发执行(goroutine)
2.多个goroutine间的数据同步和通信(channels)
3.多个channel选择数据读取或者写入(select)
golang的并发与并行
将复杂的任务拆分,通过goroutine去并发执行
通过channel做数据通信
goroutines(程序并发执行)
foo() //执行函数foo,程序等待函数foo返回
go foo() //执行函数foo
bar() //不用等待foo返回
channels (多个goroutine间的数据通信与同步)
c:=make(chan string) //创建一个channel
go func(){
time.Sleep(1*time.second)
c<-"message from closure" //发送数据到channel中
}()
msg:=<-c //阻塞直到接收到数据
select(从多个channel中读取或写入数据)
select {
case v:=<-c1:
fmt.println("channel 1 sends",v)
case v:=<-c2:
fmt.println("channel 2 sends",v)
default: //多选
fmt.println("neither channel was ready")
}
并发与并行
定义:
1.并发:指同一时刻,系统通过调试,来回切换交替的运行多个任务,“看起来”是同时进行
2.并行:指同一时刻,两个任务“真正的”同时进行
解析模块的实现
1.从read channel中读取每行日志数据
2.下则提取所需的监控数据(path,status,method等)
3.写入write channel
有疑问加站长微信联系(非本文作者)