服务器注册发现在Go微服务中的使用

2022-08-07
阅读 6 分钟
1.8k
服务注册:将提供某个服务的模块信息(通常是这个服务的IP和端口)注册到1个公共的租价你上去(比如:zookeeper、consul、etcd)

gozero mapreduce源码分析和简单实现

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

熔断器在微服务中的使用

2022-07-23
阅读 7 分钟
2.2k
在微服务中服务间的相互调用和一栏非常常见。一个下游的服务出现了问题可能会影响这个调用端的所有请求或者功能。这是我们不想看到的情况。为了防止被调用服务出现问题进而导致调用服务出现问题,所以调用服务需要进行自我保护,二保护的常用手段就是熔断。

docker安装多环境Apollo

2022-07-13
阅读 3 分钟
2.4k
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

Go unsafe 包的使用

2020-01-20
阅读 2 分钟
7.5k
golang是一种静态的强类型的语言,所有的类型都是不能随意转换的,Go语言是不允许两个指针类型进行转换的。go官方是不推荐使用unsafe的操作因为它是不安全的,它绕过了golang的内存安全原则,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护。但是在很多地方却是很实用。在一些go底层的包中unsafe包被很频繁...

Go gcache 源码分析(图解)

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

Go cond 源码学习

2019-08-02
阅读 4 分钟
3.6k
cond是go语言sync提供的条件变量,通过cond可以让一系列的goroutine在触发某个条件时才被唤醒。每一个cond结构体都包含一个锁L。cond提供了三个方法:

Go WaitGroup 源码分析

2019-08-02
阅读 3 分钟
2k
go语言sync库中的WaitGroup是用于等待一个协程或者一组携程。使用Add函数增加计数器,使用Done函数减少计数器。当使用Wait函数等待计数器归零之后则唤醒主携程。需要注意的是:

Go RWMutex 源码学习

2019-08-01
阅读 4 分钟
2k
上一篇文章我们看go了互斥锁的具体实现。但是如果业务逻辑是读多写少,如果每次读写都使用互斥锁那么整个效率就会变得很低。其实如果只是读的话并不需要互斥锁来锁住数据。只有写操作的时候需要互斥锁,但是如果有人读那么写操作也应该被锁住。在Go语言中提供了读写锁:RWMutex,并且提供了4个方法 读锁、读解锁、写锁、...

Go Mutex 源码学习

2019-07-31
阅读 6 分钟
2.5k
互斥锁是并发程序中对共享资源进行访问控制的主要手段,Mutex是go语言提供的简单易用的互斥锁。Mutex的结构很简单,暴露的方法也只有2个,一个加锁 一个解锁。那么我们每天用的Mutex互斥锁是如何实现的呢?其实使用的是go语言automic包中的院子操作,具体如何使用可以参考之前写的文章。在Mutex中的state是状态码,在mut...

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 Redigo 源码分析(一) 实现Protocol协议请求redis

2019-05-24
阅读 5 分钟
3.1k
Redis是我们日常开发中使用的最常见的一种Nosql,是一个key-value存储系统,但是redis不止支持key-value,还自持很多存储类型包括字符串、链表、集合、有序集合和哈希。在go使用redis中有很多的开源库可以使用,我经常使用的是redigo这个库,它封装很多对redis的api、网络链接和连接池。分析Redigo之前我觉得需要知道如果...

Go Jwt使用和源码学习

2019-05-17
阅读 8 分钟
5.8k
JWT(JSON Web Token)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。一个JWT由3个部分组成:头部(header)、载荷(payload)、签名(signature)。这三个部分又是由一个分隔符“.” 分割开的。

Go Gin源码学习(五) 基数树自我实现

2019-05-14
阅读 3 分钟
2.7k
经过上一篇的学习笔记,我们已经知道了Gin router的主要流程。但是我们看到代码和方法体总体很长,其中大部分是参数路由的判断。这些零散的小逻辑,让我们阅读源码的时候更难理解了一些。但是其实基数树的逻辑兵没有这么的复杂,所以我们还是按照老规矩,自己实现以下这个简单的基数树值包含主流程。代码如下:

Go Gin源码学习(四) 路由基数树

2019-05-11
阅读 15 分钟
6.4k
这次学习的是Gin中的路由,在学习源码一种我们看到了Gin的路由是它的特色。然而基础数据使用了基数树也提供了性能的保障。因为路由这部分比较独立而且逻辑相对复杂,所以需要单独学习。首先我们需要了解的是基数树,百度百科中的解释其中有一个图可以让我们更加直观的看到数据是如何存储的。基数树,相当于是一种前缀树...

Go Gin源码学习(三) 参数解析

2019-05-09
阅读 5 分钟
4.6k
其中从url中获取 从get参数中获取 从post拿数据相信我们都可以想象的到,基本就是从request中的url或者body中获取数据然后返回但是其中的数据绑定我自己开始是很疑惑的,到底是怎么实现的。疑惑的是如果object中我客户端少输入了参数 或者多输入的参数会是怎么样。举个例子:

Go Gin源码学习(二) 主流程模拟

2019-05-08
阅读 5 分钟
1.9k
上一篇学习了Gin框架的总体流程,但是自己查看源代码中被许多的零散小功能影响了主体流程的研究。所以觉得可以模仿Gin框架,自己写一个最简单仅仅含有主流程的demo。可以让我们更加深入了解Gin自己也可以再模仿的过程中更加了解源码。

Go Gin源码学习(一) 主流程

2019-05-07
阅读 7 分钟
5.1k
Gin的基本使用 Gin是一个比较轻量级的http框架,主要是提供了几个便于使用的功能: 简单的中间件注册,可以很方便的实现通用中间件的使用注册 提供了比较方便和全面的路由注册,方便的实现RESTful接口的实现 提供了便捷的获取参数的方法,包括get、post兵可以可以把数据直接转换成对象 对路由的分组,Gin可以对一组路由...

Go Scanner的使用和源码分析

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