缓存一致性协议 MESI 随笔

因为CPU的多核存在,然后每个核都有自己的独立的工作空间,所以当两个核都需要处理同一个内存中的数据的时候,他们都会将数据从内存中拷贝到自己的缓存中,我们这里先把他这块叫工作内存,这样如果2个核心对应的线程都需要修改这个值的时候,那么就会出问题,当处理完成后,我们还是要将数据写回到缓存中去的,但是因为这2个互相独立的核心,他们都写回的话,肯定会有一个被另外一个给覆盖了(还有相关的一系列的并发读写引发的问题)。 ...

Read More...


COPY ON WRITE (COW) 随笔

最近在看 redis rdb 持久化备份,引起了思考 ...

Read More...


Golang Gitlab CI 的二、三事

随着项目逐渐庞大,需求日益增长,我们开始考虑引入 CI ,帮助我们进行 代码的 review 以及 测试。 ...

Read More...


一文纵览 ELK + Filebeat(Elastic Stack)

ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。 ...

Read More...


字节跳动的网络库 netpoll 源码解析

在微服务盛行的现在,内部服务通常以长连接为主,而 Go 原生 net 网络库却无法提供足够的性能和控制力,如无法感知连接状态、连接数量多导致利用率低、无法控制协程数量等。为了能够获取对于网络层的完全控制权,同时先于业务做一些探索并最终赋能业务,所以有了 netpoll ...

Read More...


GO网络模型分析以及 GNET 源码解析

GO网络模型分析,GO使用EPOLL以及REACT的网络模型,但是 one-routine-perconnection 的概念,在内部服务大量长链接的情况下,并不适用,相对的,gnet的 multi react 网络模型,解决了这个问题。但是生态并不成熟,以下是解析 ...

Read More...


浅谈Go中的定时器以及时间轮算法实现

在实现需求的过程中, 经常会遇到如下的一类需求: 在一个间隔时间之后做某事: 例如在最后一次消息发送的5分钟之后, 断开连接 在一个间隔时间之后不停的做某事: 例如每隔5分钟之后刷新内存中的缓存 ...

Read More...


微服务学习-day 3-Go Concurrency(1)

操作系统会为该应用程序创建一个进程。作为一个应用程序,它像一个为所有资源而运行的容器。这些资源包括内存地址空间、文件句柄、设备和线程。线程是操作系统调度的一种执行路径,用于在处理器执行我们在函数中编写的代码。一个进程从一个线程开始,即主线程,当该线程终止时,进程终止。这是因为主线程是应用程序的原点。然后,主线程可以依次启动更多的线程,而这些线程可以启动更多的线程。无论线程属于哪个进程,操作系统都会安排线程在可用处理器上运行。每个操作系统都有自己的算法来做出这些决定。 ...

Read More...


微服务学习-day 2-Go的错误处理

Go 的处理异常逻辑是不引入 exception,支持多参数返回,所以你很容易的在函数签名中带上实现了 error interface 的对象,交由调用者来判定。 ...

Read More...


微服务学习-day 1-微服务概览

大家经常谈论的是一个叫SOA(面向服务的架构模式,它和微服务又是什么关系?你可以把微服务想成是SOA的一种实践。 ...

Read More...


好好学习,天天向上