恋恋风辰的个人博客


  • Home

  • Archives

  • Categories

  • Tags

  • Search

docker 基本命令

Posted on 2020-07-02 | In docker

docker 基本命令

今天介绍一些docker基本命令,自己最近在学习。docker安装就不介绍了,接下来介绍一些docker常用命令

Read more »

化繁为简,写一个简单好用的server

Posted on 2020-06-29 | In golang

为什么要造轮子

目前很著名的轮子有libevent,boost等高并发的网络库,可以说著名的网络库我都用过,用过才知道当要实现一些定制化的功能时并不方便,不但要了解底层源码,而且还要进行适当的改造,总有种黑盒开发的感觉,所以在15年我就开始自己封装一些epoll,select模型,当时基于多路复用用reactor模式封装了betternet,虽然稳定性不如成熟的网络库,但是可以根据需求灵活修改网络层和应用层,这是难能可贵的。市面上也有一些成型的即时通信server,使用过kbengine,origine等集成度较高的server,当要实现一些心跳,逻辑检测,连接管理等需求时,还是要修改底层的源码,感觉很糟糕。18年接触golang,net包里封装的网络模型和协程管理,很完善的调度策略让我眼前一亮,所以考虑能不能基于golang的官方net包做一些框架上的设计,搭建一个高可用的网络服务。19年基于net包实现了wentby这个服务器,并发和稳定性都不错,最近又翻看了原来的代码,觉得很多地方可以精简一下,而且不想为了兼容别人的开发习惯降低服务器的效率,也不想增加复杂度,所以干脆做一个精简的server给自己用,只要他稳定高效就可以了,线程安全这种问题交由开发者考虑。读了redis网络服务那块也就500行,简约而不简单。

Read more »

谈谈golang的netpoll原理(二)

Posted on 2020-05-20 | In golang

接上文我们查看了bind和listen流程,直到了listen操作会在内核初始化一个epoll表,并将listen的描述符加入到epoll表中

如何保证epoll表初始化一次

前文我们看到pollDesc的init函数中调用了runtime的pollOpen函数完成的epoll创建和描述符加入,这里再贴一次代码

1
2
3
4
5
6
7
8
9
10
11
12
13
func (pd *pollDesc) init(fd *FD) error {
serverInit.Do(runtime_pollServerInit)
ctx, errno := runtime_pollOpen(uintptr(fd.Sysfd))
if errno != 0 {
if ctx != 0 {
runtime_pollUnblock(ctx)
runtime_pollClose(ctx)
}
return errnoErr(syscall.Errno(errno))
}
pd.runtimeCtx = ctx
return nil
}

runtime_pollServerInit link的是runtime/netpoll.go中的poll_runtime_pollServerInit函数
由于serverInit是sync.Once类型,所以runtime_pollServerInit只被初始化一次,而epoll模型的初始化就是在该函数完成

Read more »

谈谈golang的netpoll原理(一)

Posted on 2020-05-17 | In golang

今天谈谈golang源码netpoll部分实现的细节和协程阻塞调度原理

epoll原理

epoll是linux环境下i/o多路复用的模型,结合下图简单说明epoll工作原理

Read more »

谈谈高并发秒拍系统架构设计

Posted on 2020-05-15 | In golang

缓冲系统结构

今天谈谈电商秒杀抢购或者高并发集中访问情况下,如何设计稳定高效的缓冲系统。常用的做法是采取逻辑分离,将秒杀功能分化为不同的逻辑进行设计,降低耦合度同时增加缓冲队列降低访问压力。

Read more »

Go项目实战:打造高并发日志采集系统(十)

Posted on 2020-04-02 | In golang

前情回顾

前文我们完成了日志管理系统后台开发。

本节目标

这次为日志管理搭建一个web管理平台,可以通过web端录入项目和配置信息,以及项目对应的日志路径和采集信息,并且写入etcd,
这样通过之前编写的日志采集系统可以根据etcd采集对应的日志。

Read more »

Go项目实战:打造高并发日志采集系统(九)

Posted on 2020-03-24 | In golang

前情回顾

前文我们完成了kafka消费逻辑实现,并将消息放入elasticsearch,然后通过kibana可视化工具查看我们的日志。

本节目标

前文只是完成了kafka消息消费以及放入elastic,这次将项目完善,使其支持热更新,就是当config.yaml中监控的日志改变,或者etcd数据有改变时,动态启动协程监控新增日志,关闭取消的日志监控协程。

Read more »

Go项目实战:打造高并发日志采集系统(八)

Posted on 2020-01-15 | In golang

前情回顾

前文我们完成了日志采集系统基本功能,包括日志监控,日志采集,配置热更新,协程动态启动和关闭,同时扩充支持了etcd管理文件路径。

本节目标

本节新增日志查询和检索功能。基本思路是将日志信息从kafka中读取,然后放到elasticsearch中,elasticsearch是一个分布式多用户能力
的全文搜索引擎,我们可以通过它提供的web接口访问和查询指定数据。另外,为了更方便的检索和查询,可以利用kibana配合elastic可视化
查询。Kibana 是为 Elasticsearch设计的开源分析和可视化平台。

Read more »

2019再见

Posted on 2019-12-31 | In 生活感悟

2019最后一天,做个总结吧

Read more »

Go项目实战:打造高并发日志采集系统(七)

Posted on 2019-12-27 | In golang

前情回顾

前文我们完成了日志采集系统基本功能,包括日志监控,日志采集,配置热更新,协程动态启动和关闭等。

本节目标

前文我们是通过将要监控的日志路径配置在配置文件中,根据配置文件热更新动态监控日志。
本节将etcd服务加入系统中,可以将要监控的日志文件路径和主题序列化为字符串保存到etcd中,这样系统可以监控etcd中该值得变化,从而动态启动协程和关闭协程监控指定日志。
这样可以通过etcd和配置文件两种方式监控日志。

图解系统监控日志流程

Read more »
<1…232425…37>

370 posts
17 categories
21 tags
RSS
GitHub ZhiHu
© 2025 恋恋风辰 本站总访问量次 | 本站访客数人
Powered by Hexo
|
Theme — NexT.Muse v5.1.3