gozero mapreduce源码分析和简单实现

2022-08-03
阅读 9 分钟
2.6k
Mapreduce是一种分布式并行编程模型,在一个函数或者一次接口调用中会出现大量的计算或者大量的调用第三方接口的情况。这个时候就可以使用Mapreduce这种变成模型,让大量的计算在一台或者多台机器上处理,最终汇总到一起输出结果。

Go gcache 源码分析(图解)

2019-08-07
阅读 17 分钟
4.5k
概述 gcache是一个用go实现的并发安全的本地缓存库。他可以实现如下功能: 指定缓存的的大小,初始化之时为cache设置size大小。 支持多种缓存的策略:Simple、LRU、LFU、ARC Simple:最普通的缓存策略,根据先存入的先淘汰。 LUR:Least Recently Used,意思是最近最少使用。LRU Cache 的替换原则就是将最近最少使用的内...

Go Context 使用和源码分析

2019-07-24
阅读 8 分钟
7.6k
Go语言中的Goroutine是go语言中的最重要的一部分,是一个用户级的线程是Go语言实现高并发高性能的重要原因。但是如何停止一个已经开启的Goroutine呢?一般有几种方法:

Go Micro Client 源码分析

2019-07-22
阅读 7 分钟
2.6k
概述 Client 主要是用来执行请求服务和订阅发布事件。是对于broker,Transort的一种封装方便使用。 Init 初始化客户端函数 初始化连接池数量和连接池TTL 调用注入的opts函数列表 最后初始化连接池 {代码...} ==Call== Call是Client接口中最主要的方法,在之前Go Micro Selector 源码分析 Client调用Call方法 Call方法调...

Go Micro Server 源码分析

2019-07-21
阅读 6 分钟
2.3k
在Go Micro框架中,Server是对Broker、Register、Codec、Transort等服务的一个封装,从下图中就可以看到。再看一下Server定义的接口

Go Micro Selector 源码分析

2019-07-18
阅读 8 分钟
5.1k
Micro中的Selector是客户端级别的负载均衡的组件。当客户端调用服务端方法时,会根据selector组件中定义的负载均衡策略来选择Register中注册的服务器列表中的一个。默认的有随机策略使用的是随机策略。使用的是cacheSelector组件,当然我们可以根据需求来替换这个组件只要实现Selector的接口就可以随时替换组件。下面可...

Go Micro Broker 源码分析

2019-07-15
阅读 8 分钟
4.6k
在第一篇概述文章中已经提到了在Micro中 Broker的作用,Go Micro 总体设计。我们也知道Micro是一个可插拔的分布式框架,我们可以使用kafka,rabbitmq,cache,redis,nats等各种实现具体可以在git上的插件库中找到go-plugins我们再来看一下接口:

Go Micro Register 源码分析

2019-07-14
阅读 7 分钟
5.2k
Go Micro是一个微服务框架分布式框架,既然是分布式那服务的注册和发现就是不可避免的。Micro又是一个可插拔插件的框架,只要实现下面代码中的接口就可以使用各种不同的服务注册发现。现在代码库中已经可以支持consul,etcd,zk等各种。下面我们来看一下Micro框架是如何注册和发现服务的。

Go Micro 总体设计

2019-07-10
阅读 4 分钟
5.2k
Go-micro 是什么 Go-micro框架是一套微服务分布式的框架,可以大幅度的提高开发效率。源码地址:[链接]Go-micro拥有很多特性: 服务注册、发现 负载均衡 消息解码,并默认支持json以及protobuf 基于rpc的请求响应 异步的消息通讯 接口可插拔 其中最值得一提的是最后一个特性,接口可插拔。只要实现上图的8个关键interfac...

Go Micro Options 函数选项模式

2019-07-10
阅读 3 分钟
6.9k
在Go语言中是没有默认函数的,但是我们可以使用函数选项模式来优雅的解决这个问题。函数选项模式不仅仅可以解决默认函数的问题还可以解决大量参数造成的代码复杂的问题。使用这个模式的有点:

Gorm 源码分析(二) 简单query分析

2019-06-16
阅读 9 分钟
8.8k
上一篇文章我们已经知道了不使用orm如何调用mysql数据库,这篇文章我们要查看的是Gorm的源码,从最简单的一个查询语句作为切入点。当然Gorm的功能很多支持where条件支持外键group等等功能,这些功能大体的流程都是差不多先从简单的看起。下面先看如何使用

Gorm 源码分析(一) database/sql

2019-06-04
阅读 7 分钟
7.6k
简介 Gorm是Go语言开发用的比较多的一个ORM。它的功能比较全: 增删改查 关联(包含一个,包含多个,属于,多对多,多种包含) CallBacks(创建、保存、更新、删除、查询找)之前 之后都可以有callback函数 预加载 事务 复合主键 日志 database/sql 包 但是这篇文章中并不会直接看Gorm的源码,我们会先从database/sql分...

Go Redigo 源码分析(三) 执行命令

2019-05-30
阅读 6 分钟
2.6k
上一篇看了Get方法获取连接池中的链接,获取到连接之后调用Do函数请求redis服务获取回复。现在我们就需要看Do函数的源码1. Conn接口 在rediso中有两个对象都实现了这个接口

Go Redigo 源码分析(二) 连接池

2019-05-27
阅读 7 分钟
5.2k
大家都知道go语言中的goroutine虽然消耗资源很小,并且是一个用户线程。但是goroutine也不是无限开的,所以我们会有很多关于协程池的库,当然啊我们自己也可以完成一些简单的携程池。redis也是相同的,redis的链接也是不推荐无限制的打开,否则会造成redis负荷加重。先看一下Redigo 中的连接池的使用

Go Scanner的使用和源码分析

2019-04-23
阅读 5 分钟
3.1k
go标准库bufio.Scanner,从字面意思来看是一个扫描器、扫描仪。 所用是不停的从一个reader中读取数据兵缓存在内存中,还提供了一个注入函数用来自定义分割符。库中还提供了4个预定义分割方法。