随笔分类 - golang
golang
摘要:原文链接: https://llfc.club/category?catid=20RbopkFO8nsJafpgCwwxXoCWAs#!aid/21lXHiY0k69T0TXhqqk9BsrlPZy 本节目标 上一节完成了模板渲染,业余时间我增加了几个页面,大家可以根据分支去查看每天做的工作,这一节
阅读全文
摘要:原文链接 https://llfc.club/category?catid=20RbopkFO8nsJafpgCwwxXoCWAs#!aid/21lVoQbhTZo83drdNp10Iv2WOfc 本节目标 上一节我们添加了主页的路由和主页html模板,本节返回一个带参数渲染的模板,并从数据库中lo
阅读全文
摘要:原文链接:https://llfc.club/category?catid=20RbopkFO8nsJafpgCwwxXoCWAs#!aid/21lUkTERfTx7NocPnRLqSK2pwog 简介 基于gin框架搭建一个博客系统后台,返回html,json等数据与前端交互,包括登录模块,ses
阅读全文
摘要:本文采用mongo-driver/mongo驱动操作数据库 设计mongo插件结构 将代码分为如下结构model : odm模型,主要是映射为数据库存储的表结构constants : 存储一些常量config : mongo的配置信息,比如空闲时长,连接数,超时时间等mongodb : 实现了mon
阅读全文
摘要:为什么要造轮子 目前很著名的轮子有libevent,boost等高并发的网络库,可以说著名的网络库我都用过,用过才知道当要实现一些定制化的功能时并不方便,不但要了解底层源码,而且还要进行适当的改造,总有种黑盒开发的感觉,所以在15年我就开始自己封装一些epoll,select模型,当时基于多路复用用
阅读全文
摘要:接上文我们查看了bind和listen流程,直到了listen操作会在内核初始化一个epoll表,并将listen的描述符加入到epoll表中 如何保证epoll表初始化一次 前文我们看到pollDesc的init函数中调用了runtime的pollOpen函数完成的epoll创建和描述符加入,这里
阅读全文
摘要:今天谈谈golang源码netpoll部分实现的细节和协程阻塞调度原理 epoll原理 epoll是linux环境下i/o多路复用的模型,结合下图简单说明epoll工作原理上图说明了epoll生成描epoll表的基本流程,生成socket用来绑定和监听新的连接,将该socket放入epoll内核表,
阅读全文
摘要:缓冲系统结构 今天谈谈电商秒杀抢购或者高并发集中访问情况下,如何设计稳定高效的缓冲系统。常用的做法是采取逻辑分离,将秒杀功能分化为不同的逻辑进行设计,降低耦合度同时增加缓冲队列降低访问压力。可以将秒杀抢购功能分为接入层和逻辑层,接入层主要负责基本的判断如token检测,用户检测,请求是否合法等,逻辑
阅读全文
摘要:前情回顾 前文我们完成了日志管理系统后台开发。 本节目标 这次为日志管理搭建一个web管理平台,可以通过web端录入项目和配置信息,以及项目对应的日志路径和采集信息,并且写入etcd,这样通过之前编写的日志采集系统可以根据etcd采集对应的日志。 选择beego作为web后台开发 web端采用bee
阅读全文
摘要:前情回顾 前文我们完成了kafka消费逻辑实现,并将消息放入elasticsearch,然后通过kibana可视化工具查看我们的日志。 本节目标 前文只是完成了kafka消息消费以及放入elastic,这次将项目完善,使其支持热更新,就是当config.yaml中监控的日志改变,或者etcd数据有改
阅读全文
摘要:前情回顾 前文我们完成了日志采集系统基本功能,包括日志监控,日志采集,配置热更新,协程动态启动和关闭,同时扩充支持了etcd管理文件路径。 本节目标 本节新增日志查询和检索功能。基本思路是将日志信息从kafka中读取,然后放到elasticsearch中,elasticsearch是一个分布式多用户
阅读全文
摘要:前情回顾 前文我们完成了日志采集系统基本功能,包括日志监控,日志采集,配置热更新,协程动态启动和关闭等。 本节目标 前文我们是通过将要监控的日志路径配置在配置文件中,根据配置文件热更新动态监控日志。本节将etcd服务加入系统中,可以将要监控的日志文件路径和主题序列化为字符串保存到etcd中,这样系统
阅读全文
摘要:前情回顾 前文我们完成了日志采集系统的日志文件监控,配置文件热更新,协程异常检测和保活机制。 本节目标 本节加入kafka消息队列,kafka前文也介绍过了,可以对消息进行排队,解耦合和流量控制的作用,为什么一定要用kafka呢?主要原因就是在日志高并发读取后,如果直接将消息发给前端或者写入数据库,
阅读全文
摘要:前情回顾 前文我们完成了如下功能1 根据配置文件启动多个协程监控日志,并启动协程监听配置文件。2 根据配置文件热更新,动态协调日志监控。3 编写测试代码,向文件中不断写入日志并备份日志,验证系统健壮性。 本节目标 我们旨在编写一个健壮性较强的日志监控系统,不得不考虑这样一个问题,当某个日志监控协程崩
阅读全文
摘要:前情回顾 前文我们完成了如下目标1 项目架构整体编写2 使框架支持热更新 本节目标 在前文的框架基础上,我们1 将之前实现的日志监控功能整合到框架中。2 一个日志对应一个监控协程,当配置热更新后根据新配置动态关闭和启动协程。3 编写测试代码,模拟向文件中不断写入日志,并备份日志,观察监控功能是否健壮
阅读全文
摘要:前文中已经完成了文件的监控,kafka信息读写,今天主要完成配置文件的读写以及热更新。并且规划一下系统的整体结构,然后将之前的功能串起来形成一套完整的日志采集系统。 前情提要 上一节我们完成了如下目标1 完成kafka消息读写2 借助tailf实现文件监控,并模拟测试实时写文件以及文件备份时功能无误
阅读全文
摘要:日志统计系统的整体思路就是监控各个文件夹下的日志,实时获取日志写入内容并写入kafka队列,写入kafka队列可以在高并发时排队,而且达到了逻辑解耦合的目的。然后从kafka队列中读出数据,根据实际需求显示网页上或者控制台等。 前情提要 上一节我们完成了如下目标1 配置kafka,并启动消息队列。2
阅读全文
摘要:项目结构 本系列文章意在记录如何搭建一个高可用的日志采集系统,实际项目中会有多个日志文件分布在服务器各个文件夹,这些日志记录了不同的功能。随着业务的增多,日志文件也再增多,企业中常常需要实现一个独立的日志采集系统,实时采集各个日志信息,并记录和输出到控制台或网页上,方便监控和查询。本文日志采集系统架
阅读全文
摘要:非缓冲chan,读写对称 非缓冲channel,要求一端读取,一端写入。channel大小为零,所以读写操作一定要匹配。 我们启动了一个协程从channel中读取数据,在主协程中写入,程序的运行流程是主协程优先启动,运行到nochan<-5写入是阻塞,然后启动协程读取,从而完成协程间通信。 程序输出
阅读全文
摘要:生产者消费者模型分析 操作系统中的经典模型,由若干个消费者和生产者,消费者消耗系统资源,生产者创造系统资源,资源的数量要保持在一个合理范围(小于数量上限,大约0)。而消费者和生产者是通过并发或并行方式访问系统资源的,需要保持资源的原子操作。其实就是生产者线程增加资源数,如果资源数大于最大值则生产者线
阅读全文