自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Go标准库Context

Context 原理Context 的调用应该是链式的,通过WithCancel,WithDeadline,WithTimeout或WithValue派生出新的 Context。当父 Context 被取消时,其派生的所有 Context 都将取消。通过context.WithXXX都将返回新的 Context 和 CancelFunc。调用 CancelFunc 将取消子代,移除父代对子代的引用,并且停止所有定时器。未能调用 CancelFunc 将泄漏子代,直到父代被取消或定时器触发。go

2020-06-22 16:22:28 256

原创 GO 消息队列NSQ的使用

NSQNSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ。NSQ介绍NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异。 NSQ的优势有以下优势:NSQ提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性,并提供可靠的消息交付保证NSQ支持横向扩展,没有任何集中式代理。NSQ易于配置和部署,并且内置了管理界面。NSQ的应用场景通常来说,消息队列都适用以下场景。异步处理参照下图利用消息队列把业务流程中的非关键流程异步化,从而显著

2020-06-22 12:39:13 696

原创 Go运维开发之日志收集(1)收集应用程序日志到kafka中

Kafka库的基本操作我们需要先把两者启动,先启动Zookeeper,再启动Kafka启动ZooKeeper:./bin/zkServer.sh start启动kafka:./bin/kafka-server-start.sh ./config/server.properties我这里使用的是Golang1.14最新版本,并且开启了Go Module, 所以下载的包都会整合在go.mod下这里使用sarama对kafka进行操作Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规

2020-06-22 12:12:55 424

原创 Go运维开发之日志收集(1)技术选型和架构设计

Go运维开发之日志收集(1)收集应用程序日志到kafka中一 , 需求背景每个业务系统都有自己的⽇志,当业务系统出现问题时,需要通过查找⽇志信息来定位和解决问题。 当业务系统服务器⽐较少时,登陆到服务器上查看即可满⾜。但当系统机器规模巨⼤,登陆到服务器上查看⼏乎不现实(分布式的系统,⼀个系统部署在⼗⼏甚至几十台服务器上)解决方案把服务器上的⽇志实时收集,统⼀存储到中⼼系统。 再对这些⽇志建⽴索引,通过搜索即可快速找到对应的⽇志记录。 通过提供⼀个界⾯友好的web⻚⾯实现⽇志展示与检索。业界方案有

2020-06-22 11:23:12 394

原创 Go语言 etcd/clientv3报错: etcd undefined: resolver.BuildOptio 问题解决思路

故障描述github.com/coreos/etcd/clientv3..\..\github.com\coreos\etcd\clientv3\auth.go:125:72: cannot use auth.callOpts (type []"github.com/coreos/etcd/vendor/google.golang.org/grpc".CallOption) as type []"go.etcd.io/etcd/vendor/google.golang.org/grpc".CallOpt

2020-06-22 09:48:45 1090

原创 搭建Zookeeper-3.4.14分布式集群

搭建Zookeeper-3.4.14 分布式集群1.简介zookeeper:分布式协调应用程序 官方网站:http://zookeeper.apache.org最新版本:3.4.14下载地址:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz(官方3.5版本的包有问题)zookeeper-3.4.14详细安装(1)解压并安装tar -zxvf zookeeper-3.4.14.t

2020-06-22 09:29:35 173

原创 CentOS 7 安装 GlusterFS

一、分布式文件系统分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源并不直接与本地节点相连,而是分布于计算网络中的一个或者多个节点的计算机上。目前意义上的分布式文件系统大多都是由多个节点计算机构成,结构上是典型的客户机/服务器模式。流行的模式是当客户机需要存储数据时,服务器指引其将数据分散的存储到多个存储节点上,以提供更快的速度,更大的容量及更好的冗余特性。目前流行的分布式文件系统有许多,如MooseFS、OpenAFS、GoogleFS,具体实现原理我这里不

2020-06-21 22:59:34 355

原创 go语言实现GRPC远程调用

protobuf协议定义创建一个 protobuf package,如: my_rpc_proto;在$GOPATH/src/下创建 /my_grpc_proto/文件夹里面创建 protobuf协议文件 helloServer.proto#到工作目录$ CD $GOPATH/src/#创建目录$ mkdir grpc/myproto#进入目录$ cd grpc/myproto#创建proto文件$ vim helloServer.proto文件内容syntax = "proto3

2020-06-21 21:21:19 526

原创 实现可扩展的分布式系统(1)

分布式系统的好处在于可扩展性,只需要加入节点就可以扩展集群的性能。常规的存储方式是:接口和数据存储被紧密耦合到一起。这样的系统不是分布式的,无法扩展。

2020-06-17 22:06:16 483

原创 Go语言实现几种常见的排序算法

前面已经介绍golang基本的语法和容器了,这一篇文章用golang实现四种排序算法,快速排序,插入排序,选择排序,冒泡排序。既可以总结前文的基础知识,又可以熟悉下golang如何实现这四种排序。快速排序算法介绍:假设用户输入了如下数组:下标 | 0 | 1 | 2 | 3 | 4 | 5 |数值 | 6 | 2 | 7 | 3 | 8 | 9 |创建变量i=0(指向第一个数据), j=5(指向最后一个数据), k=6(赋值为第一个数据的值)我们要把所有比k小的数移动到k的左面,所以我们可以

2020-05-30 11:14:37 491

原创 实现将构建的稀疏数组存盘,稀疏数据从磁盘读取转换成原始数据

package main import ( "bufio" "fmt" "log" "os" "strconv" "strings") type nodeval struct { row int col int val interface{}} //文件读取转成原始数据func ReadData(filename string) { file, err := os.OpenFile(filename, os.O_RDONLY, 0666) if err != nil

2020-05-30 10:36:27 180

原创 Go micor 入门

1.1.1. go-micro简介 Go Micro是一个插件化的基础框架,基于此可以构建微服务,Micro的设计哲学是可插拔的插件化架构在架构之外,它默认实现了consul作为服务发现(2019年源码修改了默认使用mdns),通过http进行通信,通过protobuf和json进行编解码1.1.2. go-micro的主要功能服务发现:自动服务注册和名称解析。服务发现是微服务开发的核心。当服务A需要与服务B通话时,它需要该服务的位置。默认发现机制是多播DNS(mdns),一种零配置系统。您可以选

2020-05-29 16:53:27 171

原创 7.Go退出向Consul反注册服务,优雅关闭服务

注册和反注册代码package utilsimport ( consulapi "github.com/hashicorp/consul/api" "log")var ConsulClient *consulapi.Clientfunc init() { config := consulapi.DefaultConfig() config.Address = "192.168.3.14:8500" client, err := consulapi.Ne

2020-05-29 16:17:02 833

原创 6.使用Go向Consul注册的基本方法

编写注册函数package utilsimport ( consulapi "github.com/hashicorp/consul/api" "log")func RegService() { config := consulapi.DefaultConfig() config.Address = "192.168.3.14:8500" reg := consulapi.AgentServiceRegistration{} reg.Name =

2020-05-29 16:14:37 357

原创 5.服务注册与发现Consul,简学API,手动注册和删除服务

今天我们在这里入手,开始学习:使用Go向Consul注册服务的基本方法package mainimport (httptransport "github.com/go-kit/kit/transport/http"mymux "github.com/gorilla/mux""gomicro/Services""net/http")func main() { user := Services.UserService{} endp := Services.GenUserEn

2020-05-29 16:12:01 609

原创 4.通过HttpMethod执行不同的服务方法

通过HttpMethod执行不同的服务方法:代码实现如下:package Servicesimport ( "context" "fmt" "github.com/go-kit/kit/endpoint")type UserRequest struct { //封装User请求结构体,包含参数名和方法 Uid int `json:"uid"` Method string}type UserResponse struct { Resul

2020-05-29 16:05:45 138

原创 3.让我们的服务支持外部路由

package mainimport ( httptransport "github.com/go-kit/kit/transport/http" "github.com/gorilla/mux" "gomicro/Services" "net/http")func main() { user := Services.UserService{} endp := Services.GenUserEnPoint(user) serverHan.

2020-05-29 16:02:32 74

原创 2.搭建第一个http服务:三层架构

搭建微服务的三层架构代码如下:package mainimport ( "github.com/go-kit/kit/transport/http" "gomicro/Services")func main() { user := Services.UserService{} endp := Services.GenUserEnPoint(user) http.NewServer(endp, Services.DecodeUserRequest, Se

2020-05-29 15:47:08 156

原创 Go kit(1)微服务入门

1.基础入门第一步创建UserServicepackage Servicestype IUserService interface { GetName(userid int) string}type UserService struct{}func (this UserService) GetName(userid int) string { if userid == 101 { return "jerry" } return "guest"

2020-05-29 15:43:36 258

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除