GO 日志监控系统(并发与并行)

Sunshine_洋洋 · · 1349 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Sunshine_洋洋

查看原文:GO 日志监控系统(并发与并行)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1349 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传