Go语言中文网 为您找到相关结果 143

golang使用服务发现系统consul

本文的完整代码见 https://github.com/changjixiong/goNotes/tree/master/consulnotes ,如果文中没有显示链接说明链接在被转发的时候被干掉了,请搜索找到原文阅读。consul是什么"Consul is a distributed, highly available, datacenter-aware, service discovery and configuration system. It can be used to present services and nodes in a flexible and powerful interface that allows clients to always have an up-to...阅读全文

博文 2017-06-08 03:47:27 changjixiong

etcd 使用小记

咱们这不讲安装, 只讲使用. etcd,consul 都是分布式KV, 一般用于服务发现; 1 注册服务 这里使用 etcd.clientv3搞事情, GoDoc在 这, 以下是伪代码 // key 随你制定, 只要能标识是那个服务器(比如 root/game/node_1)即可. value 可以包含addr, 状态, 优先度等信息 client.OpPut(key,value) 这里的小提示: 最好实现健康检查, 再好的代码也有跑不动的一天, 好像etcd的健康检查只支持ttl(服务向etcd定时重新PUT), 所以记得设置TTL并整一个Tick定时执行以上代码吧. 不过consul支持两种健康检查, 一种是ttl, 一种是consul主动去检查服务状态(详情看最底下 ↓ 的参考), 个...阅读全文

博文 2017-06-07 06:07:03 bysir

golang key/value 工具consul-kv

consul大家都知道,是一个分布式支持多数据中心的系统,一般用在微服务的注册/发现服务上,开箱即用。他同时集成了key/value系统,虽然对比redis的吞吐量不高,但是有着比redis更高的一致性,并且可以监测改变的数值。基于这些特点,consul也是比较适合存放服务配置的,所以写了这么一个工具,方便读取、修改、获取更新的工具...阅读全文

开源项目 2019-12-03 19:19:03

RPCX使用案例

花了一个礼拜整理了一下 RPXC的使用方法,大致过程如下:服务器端开发首先,我们需要实现自己的服务,这很简单,就是定义普通的方法即可:package example import ( "context" "fmt" ) type Args struct { A int B int } type Reply struct { C int } type Arith int func (t *Arith) Mul(ctx context.Context, args *Args, reply *Reply) error { reply.C = args.A * args.B fmt.Printf("call: %d * %d = %d\n", args.A, args.B, reply.C) ret...阅读全文

博文 2018-08-07 16:59:58 lsr199461

跨境电商平台为何抛弃C#转投Go的怀抱

前言:跨境电商平台如何将业务从 C# 转换到 Go 语言,并最终均使用 Go 来实现?怎样从零打造一整套 Go 服务体系?怎样避免遇到转型微服务的坑?本文将通过 ezbuy 的资深开发工程师陈冶在 Gopher China 2017大会上的分享做详细介绍。正文:我们的平台在整个 Go 语言转型过程中涉及到一些微服务的转型,牵扯到微服务,如何管理这些服务,包括环境,这次分享我会从开发环境的构建,微服务选型,分布式追踪和跨数据中心四个方面来说。 一、开发环境构建1、规范开发环境每个人都有自己开发的环境,公司层面上很难保证每个人的环境是一样的,这样会导致很多兼容性的问题。有很多时候在本地开发很顺利,但一部署到线上或者到其他人的电脑就出现了莫名奇妙的问题,根源就在于环境不同。另一方面,我们在用微服务...阅读全文

博文 2017-08-10 00:48:21 陈治

go-micro 入门教程1.搭建 go-micro环境

微服务的本质是让专业的人做专业的事情,做出更好的东西。 golang具备高并发,静态编译等特性,在性能、安全等方面具备非常大的优势。go-micro是基于golang的微服务编程框架,go-micro操作简单、编码高效、功能强大。但是网络上资料偏少,本系列文章定位最简单最容易上手的go-micro入门教程,所有案列来自实操,而非网络上的复制粘贴。 本章节的目的是让大家最快速搭建好go-micro环境 软件 环境 操作系统 win10 golang go 12.7/AMD64 micro micro version 1.8.4 consul consul 1.5.4 安装micro 最快速有效的方法是使用GO1.11以上版本并且设置环境变量 #linux 下 export GO111MODUL...阅读全文

博文 2019-08-19 20:02:42 非正式解决方案

Golang 通过 Consul 实现分布式锁

Consul 是什么 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对. 命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品. 一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制. Consul 的使用场景 docker 实例的注册与配置共享 coreos 实例的注册与配置共享 vitess 集群 SaaS 应用的配置共享 与 confd ...阅读全文

博文 2017-07-11 11:04:05 徐学良

Consul使用手册

Consul是什么 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。它具备以下特性 : service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。 health checking:健康检测使consul可以快速的 告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。 key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。 multi-datacenter:无需复杂的配置,即可支持任意数量的区域。 1.png 图比较简单,这边文字描述下。...阅读全文

博文 2019-08-07 08:32:56 强某某

跟大家一起学习golang

之前一直在华为做C++开发,现在从华为毕业出来了,找了一个大牛当师父,努力学习互联网技术。基础比较差,只有多努力了。现在做这个项目 是一款 金融类 APP,用golang开发,以后经常来这里跟大家进行技术交流。先介绍一下我们这个项目用到的大致技术 整体架构:采用微服务模式的架构,前台开发就是 IOS, Android, WEB, 通过调用http接口 调到后台,后台gateway部分实现主要采用 github.com/codegangsta/negron, github.com/gorilla/mux/mux.go, github.com/dgrijalva/jwt-go 这三个第三方库。gateway只负责 数据校验,请求转发,权限验证 这三个模块工作,具体业务逻辑交给...阅读全文

Go实践微服务 -- 服务发现

服务的注册发现对于微服务来说是一个非常重要的环节,在单一架构应用中,service之间的互相调用,通过一个固定的host和port来发起REST或者RPC来调用,但是在微服务架构中,各个服务往往是动态变化的,所以需要一个服务发现机制来发送客户端的请求到动态的service实例中去。 在利用go micro来实现服务发现便利很多,micro中默认支持使用 Consul 来做服务发现,当然它使用插件机制(go-plugins)还支持 Etcd, Gossip, NATS等其他的第三方服务注册发现工具。在每个服务启动的时候,都将自己注册到registry上,退出时也自动解注册,具体实现我们可以来看一下go-micro/service.go的相关代码片段: ...... func (s *servi...阅读全文

博文 2018-07-11 10:34:45 Ryan是菜鸟

grpc+consul

最近在学习研究golang的rpc框架,这两天学习了grpc,学习demo,https://github.com/nosixtools/LearnGrpc目前两大主流跨语言的RPC框架:gRPC,Thrift 算是屠龙刀跟倚天剑吧,萝卜青菜各有所爱,就看各位看官的实际需求和兴趣了。开始主题,gprc-go官方未提供目前主流(consul,zookeeper,etcd)服务注册和发现的实现,这部分需要根据自己公司的注册中心实现就好了,官方给出了基于DNS的实现,可以查看这个文件https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go 。官方虽然没有给出具体的实现,不过给出这部分的接口的定,这样方便了各语言这...阅读全文

博文 2018-08-22 19:35:12 何亚祥

Golang的Etcd客户端

Etcd和Consul都是非常出名的服务化治理工具。本篇先来讲一下Etcd的使用。 学会使用 安装 go get github.com/coreos/etcd/client 引用 "github.com/coreos/etcd/client" Example cfg := client.Config{ Endpoints: []string{"http://127.0.0.1:2379"}, Transport: client.DefaultTransport, // set timeout per request to fail fast when the target endpoint is unavailable HeaderTimeoutPerRequest: time.Second...阅读全文

博文 2017-08-20 12:04:58 leegoway

HTTP(S) 路由器fabio

fabio 是一个快速、现代、zero-conf 负载均衡 HTTP(S) 路由器,用于部署 consul 管理的微服务。 fabio 由 eBay Classifieds Group 开发, 用于处理 marktplaats.nl 和 kijiji.it 的流量。Marktplaats 所有的流量都经过 fabio ,每秒有数千个请求,分发于数个 fabio 实例。但我们并没有观察到任何延迟。 特性: * Go 语言单一二进制,没有额外的依赖。 * Zero-conf * 通过后台观察器热重载路由表 * 轮转和随机分布 * Traffic Shaping (send 5% of traffic to new instances) Graphite metrics * 请求跟踪 * W...阅读全文

使用golang库props轻松使用配置源文件,zookeeper、consul

``` props是统一的配置工具库,将各种配置源抽象或转换为类似properties格式的key/value,并提供统一的API来访问这些key/value。支持 properties 文件、ini 文件、zookeeper k/v、zookeeper k/props、consul k/v、consul k/props等配置源,并且支持通过 Unmarshal从配置中抽出struct;支持上下文环境变量的eval,`${}`形式;支持多种配置源组合使用。 github地址:https://github.com/tietang/props ``` # props 统一的配置工具库,将各种配置源抽象或转换为类似properties格式的key/value,并...阅读全文

PostgreSQL 管理工具Stolon

Stolon是一个cloud native的PostgreSQL高可用管理工具。它之所以是cloud native的是因为它可以在为容器内部的PostgreSQL提供高可用(Kubernetes 集成),而且还支持其他种类的基础设施(比如:cloud IaaS,旧风格的基础设施等) ![image](https://static.oschina.net/uploads/space/2017/0314/175929_Rxas_2903254.png)、 Stolon 是由3个部分组成的: keeper:他负责管理PostgreSQL的实例汇聚到由sentinel(s)提供的clusterview。 sentinel:it负责发现并且监控keeper,并且计算最理想的clustervie...阅读全文

基于微服务库的可插拔RPC go-micro

示例服务可以在 [examples/service](https://github.com/micro/go-micro/tree/master/examples/service) 找到。 特征 **特征 ** **包 ** **内置插件 ** **描述** Discovery [Registry](https://godoc.org/github.com/micro/go-micro/registry) consul 用来沟通的一种 定位服务 方式 Client [Client](https://godoc.org/github.com/micro/go-micro/client) rpc 用来将RPC请求变成服务 Cod...阅读全文

开源项目 2016-03-21 16:00:00 micro

go-micro 框架初探

得益于Go语言的编译快性能高特点,在云原生时代其作为服务端编程语言发展迅速,尤其是微服务领域,已逐渐形成一个良好的生态,基于Golang的微服务框架如今有很多,如go-kit、go-micro、kite、gizmo等,每一种都自有其优点。今天就来探一探go-micro框架。 一、go-micro是什么 go-micro是基于Go语言实现的插件化RPC微服务框架,与go-kit,kite等微服务框架相比,它具有易上手、部署简单、工具插件化等优点。 go-micro框架提供了服务发现、负载均衡、同步传输、异步通信以及事件驱动等机制,它尝试去简化分布式系统间的通信,让我们可以专注于自身业务逻辑的开发。所以对于新手而言,go-micro是个不错的微服务实践的开始。 二、go-micro 架构 2.1...阅读全文

博文 2018-12-30 23:34:46 yabohe

HTTP反向代理、负载均衡软件 Traefik

![traefik.logo.png](https://github.com/containous/traefik/blob/master/docs/img/traefik.logo.png?raw=true) Træfɪk 是一个新型的http反向代理、负载均衡软件,能轻易的部署微服务. 它支持多种后端 ([Docker](https://www.docker.com/), [Swarm](https://docs.docker.com/swarm), [Mesos/Marathon](https://mesosphere.github.io/marathon/), [Consul](https://www.consul.io/), [Etcd](https://coreos.com/e...阅读全文

开源项目 2016-04-07 16:00:00 containous

grpc(5):使用grpc+consul 开发服务调用

1,consul 服务发现 在使用了几次之后终于感受到了这个系统挺好的了。 在一个小的团队里面,要做服务发现,做的简单高效。 可以直接使用 consul 作为服务发现,服务检查的系统。 不用自己去开发了。真的很方便,只要部署下就可以了。 github 上放了代码,都是很简单的。 https://github.com/freewebsys/grpc-go-demo 2,重新研究consul启动 发现之前是使用dig 进行操作的,因为consul官方网站也是推荐使用的。 但是其实可以使用ping ,nslookup 也是一样的。 但是需要修改consul的端口。 consul agent -dev -ui -server -node=consul-dev -client=10.0.2.15 -d...阅读全文

博文 2017-07-12 02:30:18 freewebsys

golang consul-grpc 服务注册与发现

在微服务架构里面,每个小服务都是由很多节点组成,节点的添加删除故障希望能对下游透明,因此有必要引入一种服务的自动注册和发现机制,而 consul 提供了完整的解决方案,并且内置了对 GRPC 以及 HTTP 服务的支持 总体架构 服务注册与发现 服务调用: client 直连 server 调用服务 服务注册: 服务端将服务的信息注册到 consul 里 服务发现: 客户端从 consul 里发现服务信息,主要是服务的地址 健康检查: consul 检查服务器的健康状态 服务注册 服务端将服务信息注册到 consul 里,这个注册可以在服务启动可以提供服务的时候完成 完整代码参考: https://github.com/hatlonely/hellogolang/blob/master/sa...阅读全文

博文 2018-06-23 23:34:39 hatlonely

服务发现之Consul

consul是一个可以提供服务发现,健康检查,多数据中心,Key/Value存储等功能的分布式服务框架 用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、Windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。 Consul 的使用场景 docker 实例的注册与配置共享 coreos 实例的注册与配置共享 vitess 集群 SaaS 应用的配置共享 ...阅读全文

博文 2018-10-12 18:34:40 Kernel_Panic

基于Consul的分布式锁实现

我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问。这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如:基于Redis的实现、基于Zookeeper的实现。本文将介绍一种基于Consul 的Key/Value存储来实现分布式锁以及信号量的方法。 http://blog.didispace.com/spring-cloud-consul-lock-and-semphore-2...阅读全文

Micro 安装

下载micro $ go get -u -v github.com/go-log/log $ go get -u -v github.com/gorilla/handlers $ go get -u -v github.com/gorilla/mux $ go get -u -v github.com/gorilla/websocket $ go get -u -v github.com/mitchellh/hashstructure $ go get -u -v github.com/nlopes/slack $ go get -u -v github.com/pborman/uuid $ go get -u -v github.com/pkg/errors $ go get -u -v ...阅读全文

博文 2019-05-08 03:35:00 张家驹

golang微服务框架go-micro 入门教程1.1 10分钟搭建go-micro开发环境

>微服务的本质是让专业的人做专业的事情,做出更好的东西。 `golang`具备高并发,静态编译等特性,在性能、安全等方面具备非常大的优势。`go-micro`是基于`golang`的微服务编程框架,`go-micro`操作简单、编码高效、功能强大。但是网络上资料偏少,本系列文章定位最简单最容易上手的`go-micro`入门教程,所有案列来自实操,而非网络上的复制粘贴。 >本章节的目的是让大家最快速搭建好`go-micro`环境 |软件|环境| |----|----| |操作系统|win10| |golang|go 12.7/AMD64| |micro|micro version 1.8.4| |consul|consul 1.5.4| # 安装micro 最快速有效的方法是使用`GO1.11...阅读全文

博文 2019-08-19 16:53:37 winlion

Microservices

<p>Hi all<br/> Can someone please explain me, what are microservices?<br/> Can I use for communication with web browser like with REST/API.<br/> I am imaging a microservice like: a web server that waiting for incoming requests. When a request comes in, I will call a session service(microservice) that validate, if the request...阅读全文

资源 2015-05-17 19:14:08 blov

Consul 入门笔记

Consul [ˈkɑ:nsl] 是一个分布式的服务发现和配置管理工具,本文是根据consul 入门指南 整理的笔记。 1. 安装 系统是三台虚拟机: CentOS release 6.8 CentOS release 7 Ubuntu 16.04 LTS 前往 官网下载地址 下载相应系统最新的二进制包,复制consul_VERSION_linux_amd64.zip 到3个节点的 consul 目录下。 cd ~/consul unzip consul_VERSION_linux_amd64.zip // 解压得到 consul 二进制文件 // 将consul 软链到环境变量目录 sudo ln -s ~/consul/consul /bin/consul // 验证是否安装成功 con...阅读全文

博文 2017-03-10 05:49:06 xugang

基于Consul的分布式信号量实现

本文将继续讨论基于Consul的分布式锁实现。信号量是我们在实现并发控制时会经常使用的手段,主要用来限制同时并发线程或进程的数量,比如:Zuul默认情况下就使用信号量来限制每个路由的并发数,以实现不同路由间的资源隔离。http://blog.didispace.com/spring-cloud-consul-lock-and-semphore-2...阅读全文

[jaeger] 四、微服务之调用链(Feign+SpringCloud)

终于到了我们的重点,微服务了。与使用OkHttp3来实现的客户端类似,Feign接口本来也就是一个Http调用,依然可以使用Http头传值的方式,将 Trace 往下传。本文更多的是关于 SpringCloud 的一些知识,你需要了解一些基本的 Spring 相关的知识。更多系列,请关注公众号小姐姐味道,本文相关代码的github地址,见:https://github.com/sayhiai/example-jaeger-opentracing-tutorial-004复制代码安装ConsulSpringCloud的注册中心,我们选用Consul。consul也是用golang开发的。从consul官网下载二进制包以后,解压。./consul agent -bind127.0.0.1-dat...阅读全文

博文 2019-05-14 18:34:52 符文杰9527

Golang 通过 Consul 实现分布式锁

Consul 是什么 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对. 命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品. 一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制. Consul 的使用场景 docker 实例的注册与配置共享 coreos 实例的注册与配置共享 vitess 集群 SaaS 应用的配置共享 与 confd ...阅读全文

博文 2017-02-10 04:28:44 谢权

go-micro+gin+consul微服务实战之服务注册与发现

在构建微服务时,使用服务发现可以减少配置的复杂性,本文以go-micro为微服务框架,使用consul作为服务发现服务,使用gin开发golang服务。 使用gin 的原因是gin能够很好的和go-micro进行集成。 本文主要介绍服务注册和发现的实现 关于如何搭建consul服务可以移步:https://www.jianshu.com/p/271d490929a5 本文默认以搭建好了consul服务,服务的地址是:192.168.109.131:8500 如果你搭建好了自己的consul服务,可以在浏览器内输入192.168.109.131:8500(地址根据自己的consul服务做调整),会看到如下界面: 图片.png 这里我的consul服务启用了 3个节点。 填坑 在开始写代码前,先...阅读全文

博文 2020-04-26 21:32:50 技术修仙

Consul服务注册发现与Fabio反向代理

Consul Consul是一个注册与发现的服务, 并且支持健康检查 二进制安装 https://releases.hashicorp.com/consul/1.2.2/consul_1.2.2_linux_amd64.zip 下载并解压, 然后拷贝二进制文件到 /usr/local/bin 启动consul 开发模式启动consul consul agent -dev -config-dir=/etc/consul -bind=0.0.0.0 -client=0.0.0.0 参数说明 agent -- 使用agent模式跑起来 -dev -- 使用开发模式启动agent -config-dir -- 配置文件目录, 这里存放json文件以文件的形式注册服务 -bind=0.0.0.0 --...阅读全文

博文 2018-08-23 20:34:57 渺小Y

用consul做grpc的服务发现

用consul做grpc的服务发现与健康检查 consul 服务发现与负载均衡 当server端是集群部署时,client调用server就需要用到服务发现与负载均衡。通常有两总方式: 一种方式是在client与server之间加代理,由代理来做负载均衡 一种方式是将服务注册到一个数据中心,client通过数据中心查询到所有服务的节点信息,然后自己选择负载均衡的策略。 第一种方式常见的就是用nginx给http服务做负载均衡,client端不直接与server交互,而是把请求并给nginx,nginx再转给后端的服务。这种方式的优点是: client和server无需做改造,client看不到server的集群,就像单点一样调用就可以 这种方式有几个缺点: 所有的请求都必须经过代理,代理侧容...阅读全文

博文 2019-03-07 17:34:48 直抒胸臆

k8s与dns--coredns的一些实战经验

coredns简介 安装新版本k8s,coredns已经成为默认dns了。之前是kube-dns。coredns是一个灵活,可扩展的DNS服务器,可以作为Kubernetes集群DNS。与Kubernetes一样,CoreDNS项目由CNCF主持。但是在实际使用中,需要一些注意的地方。 增加应用的反亲和性,防止coredns调度到一台主机上 coredns 所需要的资源非常小,所以很容易调度到一台主机上。coredns是一个系统组件,我们应该尽量让coredns分散部署,增强其可用性。故在deployment的yaml中增加如下设置: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - la...阅读全文

博文 2019-09-17 10:32:57 iyacontrol

Jaeger源码分析——服务发现与注册

文:Jaeger源码分析——服务发现与注册 声明  Jaeger官方并没有明确说明其服务注册和服务发现的具体使用和介绍,这部分功能是在分析源码的时候,发现其原理与服务注册和服务发现类似,所以结合自己对服务注册和服务发现的认识,做一次总结,有错还请指点。 TChannel服务注册和服务发现  Jaeger不借助第三方工具也能实现服务注册和服务发现,这部分功能由其依赖的RPC框架提供。 第三方注册——手动注册 go run cmd/agent/main.go --collector.host-port=192.168.0.10:14267,192.168.0.11:14267  在启动agent的时候,可配置多个collector静态地址,这部分地址会形成一张注册表。 注册表 注册表结构 git...阅读全文

博文 2017-12-08 18:04:39 小卜邪

golang grpc 负载均衡

微服务架构里面,每个服务都会有很多节点,如果流量分配不均匀,会造成资源的浪费,甚至将一些机器压垮,这个时候就需要负载均衡,最简单的一种策略就是轮询,顺序依次选择不同的节点访问。 grpc 在客户端提供了负载均衡的实现,并提供了服务地址解析和更新的接口(默认提供了 DNS 域名解析的支持),方便不同服务的集成 使用示例 conn, err := grpc.Dial( "", grpc.WithInsecure(), // 负载均衡,使用 consul 作服务发现 grpc.WithBalancer(grpc.RoundRobin(grpclb.NewConsulResolver( "127.0.0.1:8500", "grpc.health.v1.add", ))), ) 创建连接的时候可以使...阅读全文

博文 2018-07-11 03:35:42 xjtuhit

基于consul构建golang系统分布式服务发现机制

在分布式架构中,服务治理是一个重要的问题。在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进行服务关系管理,遇到服务关系变化或者增加服务的时候,人肉配置极其麻烦且容易出错。 之前在一个C/C++项目中,采用ZooKeeper进行服务治理,可以很好的维护服务之间的关系,但是使用起来较为麻烦。现在越来越多新的项目采用consul进行服务治理,各方面的评价都优于ZooKeeper,经过几天的研究,这里做一个总结。 zookeeper和consul比较 开发语言方面,zookeeper采用java开发,安装的时候需要部署java环境;consul采用golang开发,所有依赖都编译到了可执行程序中,即插即用。 部署方面,zookeeper一般部署奇数个节点方便做简单多数的选举机制。c...阅读全文

博文 2017-03-17 05:52:23 失去梦想的咸鱼

微服务架构实践(服务框架)

目标 高性能 性能高是必须的,对于创业公司来说,不停的堆机器也是一个比较大的成本,能省则省。 资源拆分隔离 对资源进行拆分,需要每个服务提供相应的接口,服务之间不能直接访问其他服务的数据库或者缓存。 高可用 暂定目标是99.9的可用性。 开发语言 由于我们的新项目没有历史包袱,所有的模块都是重新开发,所以我们可以自由地选择开发语言和开发框架。以前我们的项目后端开发语言比较杂,有golang的项目,php的项目,还有一小部分是nodejs的项目。新项目我决定统一后台开发语言,选择golang作为我们的主力后端开发语言。golang在我们这里主要有以下优势: golang在性能和开发效率上有很好的平衡,语法上很简单,并发编程简单高效,基础库健全。 自带一些pprof包可以profile当前程序的...阅读全文

博文 2018-07-12 13:35:42 周小叨_REE

golang consul-grpc 服务注册与发现

在微服务架构里面,每个小服务都是由很多节点组成,节点的添加删除故障希望能对下游透明,因此有必要引入一种服务的自动注册和发现机制,而 consul 提供了完整的解决方案,并且内置了对 GRPC 以及 HTTP 服务的支持 总体架构 服务调用: client 直连 server 调用服务 服务注册: 服务端将服务的信息注册到 consul 里 服务发现: 客户端从 consul 里发现服务信息,主要是服务的地址 健康检查: consul 检查服务器的健康状态 服务注册 服务端将服务信息注册到 consul 里,这个注册可以在服务启动可以提供服务的时候完成 完整代码参考: https://github.com/hatlonely/... config := api.DefaultConfig() ...阅读全文

博文 2018-06-23 23:34:38 hatlonely

基于consul构建golang系统分布式服务发现机制

在分布式架构中,服务治理是一个重要的问题。在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进行服务关系管理,遇到服务关系变化或者增加服务的时候,人肉配置极其麻烦且容易出错。 之前在一个C/C++项目中,采用ZooKeeper进行服务治理,可以很好的维护服务之间的关系,但是使用起来较为麻烦。现在越来越多新的项目采用consul进行服务治理,各方面的评价都优于ZooKeeper,经过几天的研究,这里做一个总结。 zookeeper和consul比较 开发语言方面,zookeeper采用java开发,安装的时候需要部署java环境;consul采用golang开发,所有依赖都编译到了可执行程序中,即插即用。 部署方面,zookeeper一般部署奇数个节点方便做简单多数的选举机制。c...阅读全文

博文 2017-02-24 08:00:44 石匠

Golang 微服务 - 03 以 consul 方式注册服务

开发十年,就只剩下这套Java开发体系了 >>> 安装 Install Consul 下载地址 https://www.consul.io/downloads.html,解压后,将 consul_1.2.3_windows_amd64\consul.exe 拷贝到 GOBIN 目录下(比如:C:\Users\your-host-name\go\bin) Run the Agent 使用 Git Bash Here,输入如下命令,会看到相应日志 $ consul agent -dev ==> Starting Consul agent... ==> Consul agent running! Version: 'v1.2.3' Node ID: '542fc5d7-cb10-22e7-54bc...阅读全文

博文 2018-09-23 01:33:15 nnealguo

微服务解决方案 Golang商城微服务项目

GitHub地址 (https://github.com/zhuxiujia/GoMybatisMall) 首先让我们来看看 Java端写接口(要支持swagger注解) ```Java @Controller @Api( description = "验证码生成控制器" ) public class CaptchaImageController { private static Logger logger = LoggerFactory.getLogger(CaptchaImageController.class); private static final String NO_CACHE = "No-cache"; @Resource private SmsVerificationSer...阅读全文

博文 2020-04-06 02:00:55 zhuxiujia

golang consul-grpc服务注册与发现

在微服务架构里面,每个小服务都是由很多节点组成,节点的添加删除故障希望能对下游透明,因此有必要引入一种服务的自动注册和发现机制,而 consul 提供了完整的解决方案,并且内置了对 GRPC 以及 HTTP 服务的支持 总体架构 ①服务调用: client 直连 server 调用服务 ②服务注册: 服务端将服务的信息注册到 consul 里 ③服务发现: 客户端从 consul 里发现服务信息,主要是服务的地址 ④健康检查: consul 检查服务器的健康状态 服务注册 服务端将服务信息注册到 consul 里,这个注册可以在服务启动可以提供服务的时候完成 完整代码参考: https://github.com/hatlonely/hellogolang/blob/master/sample...阅读全文

博文 2018-10-21 22:34:39 Chole121

golang实现基于redis和consul的可水平扩展的排行榜服务范例

本文的完整代码见https://github.com/changjixiong/goNotes/tree/master/redisnote ,https://github.com/changjixiong/goNotes/tree/master/utils 及https://github.com/changjixiong/goNotes/tree/master/reflectinvoke如果文中没有显示链接说明链接在被转发的时候被干掉了,请搜索找到原文阅读。## 概述 排行榜在各种互联网应用中广泛存在。本文将用一个范例说明如何利用redis和consul实现可水平扩展的等级排行榜服务。## redis的使用 实现排行榜有2个地方需要用到redis: 1.存储玩家的排行信息,这里使用的是Sor...阅读全文

博文 2017-06-14 14:21:18 changjixiong

基于gRPC+consul实现服务发现及RPC

# 目录 - [gRPC + consul](#gRPC+consul) - [服务发现及RPC过程](#服务发现及RPC过程) * [服务发现及RPC示意图](#服务发现及RPC示意图) * [RPC接口](#RPC接口) * [client](#client) * [server](#server) * [相关函数原型](#相关函数原型) * [gRPC部分代码解析](#gRPC部分代码解析) * [本文部分代码解析](#本文部分代码解析) * [本文github链接](#本文github链接) - [使用本文code简介](#使用本文code简介) * [需要下载安装的如下](#需要下载安装的如下) * [运行步骤](#运行步骤) * [修改RPC接口](#修改RPC接口) * [运行...阅读全文

博文 2019-07-28 14:13:10 GrassInWind2019

grpc(4):使用 golang 调用consul api 接口,注册user-tomcat服务

1,关于consul dubbo的注册中心是zookeeper,redis。 motan的注册中心是zookeeper,consul。 kubernetes的注册中心是 etcd。 使用consul的好处是服务发现啥的都支持了。 可以使用域名进行负载均衡。 也是一个不错的 Server-Side Discovery Pattern 。 2,启动consul服务,调用接口 首先要在服务器安装一个consul服务: http://blog.csdn.net/freewebsys/article/details/56296013 然后下载go的客户端。 go get github.com/hashicorp/consul 然后就可以使用 consul api服务了。 package src imp...阅读全文

博文 2017-07-12 02:30:09 freewebsys

Docker 1.12的哪些特性使它更像 kubernetes?

Docker 1.12版本最近刚刚发布,这篇文章对它的新特性进行了概述和对比描述。本文涵盖了 Docker 1.12 中的六大新特性:内置 swarm命令、服务发现、自愈功能、安全、负载均衡、滚动升级,相关的使用文档和demo视频链接也都包含在里面。 ## 内置 swarm 命令 Docker engine 中增加了 docker swarm 命令,它用于取代之前通过容器创建swarm节点的方式。现在,创建一个swarm节点,只需要在每个节点上运行一条命令。在第一个节点上运行以下命令: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/08/new1.png) “”是该节点的内网IP,同...阅读全文

golang grpc 负载均衡

微服务架构里面,每个服务都会有很多节点,如果流量分配不均匀,会造成资源的浪费,甚至将一些机器压垮,这个时候就需要负载均衡,最简单的一种策略就是轮询,顺序依次选择不同的节点访问 grpc 在客户端提供了负载均衡的实现,并提供了服务地址解析和更新的接口(默认提供了 DNS 域名解析的支持),方便不同服务的集成 使用示例 conn, err := grpc.Dial( "", grpc.WithInsecure(), // 负载均衡,使用 consul 作服务发现 grpc.WithBalancer(grpc.RoundRobin(grpclb.NewConsulResolver( "127.0.0.1:8500", "grpc.health.v1.add", ))), ) 创建连接的时候可以使用...阅读全文

博文 2018-06-24 05:34:43 hatlonely