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

服务发现:Zookeeper vs etcd vs Consul

【编者的话】本文对比了Zookeeper、etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考。 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务监听同一个端口。管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多。因此我们应该部署无需指定端口的服务,并且让Docker为我们分配一个随机的端口。唯一的问题是我们需要发现端口号,并且让别人知道。 当我们开始在一个分布式系统上部署服务到其中一台服务器上时,事情会变得更加复杂,我们可以选择预先定义哪台服务器运行哪个服务的方式,但这会导致很多问题。我们应该尽我们所能尽量利用服务器资源,但是如果预先定义每个服务的部署位置,那么...阅读全文

博文 2015-09-20 10:39:43 国会山上的猫TuxHu

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

gRPC服务发现&负载均衡

gRPC服务发现&负载均衡 构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案: 1、集中式LB(Proxy Model) 在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现。LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向LB发起请求,由LB以某种策略,比如轮询(Round-Robin)做负载均衡后将请求转发到目标服务。LB一般具备健康检查能力,能自动摘除不健康的服务实例。 该方案主要问题: 单点问题,所有服务调用流量都经过LB,当服务数量和调用量大的时候,LB容易成为瓶颈,且一旦LB发生故障...阅读全文

博文 2017-03-13 07:01:10 SOFTFN

etcd v3 服务注册与发现 Go代码

本文整理一下思路,编写示例(golang),以便加深etcd的理解 大致如下,监听程序为master,服务为service 1 service 启动时向etcd注册自己的信息,即注册到services/ 这个目录 2 service 可能异常推出,需要维护一个TTL(V3 使用 lease实现),类似于心跳,挂掉了,master可以监听到 3 master监听 services/ 目录下的所有服务,根据不同action(V3有put/delete),进行处理 service注册 提供 key(service name), value(serviceInfo)进行registered start 启动后,执行keeplive(), 维护心跳,挂掉时revoke() 同时监听 stop chan...阅读全文

博文 2018-01-13 00:30:00 sevenPP

NSQ的重塑之路

在 Gopherchina 2017 中,杭州有赞科技的李文带来了题为《NSQ 重塑之路》的分享,以下是对他演讲内容的整理。今天我会分享有赞 NSQ 重塑的一个过程,主要分为以下几个部分:第一,回顾旧的架构;第二,在使用的过程中遇到的一些问题,以及为什么要做重构;第三,重构具体的细节和架构;第四,测试的整个流程。第五,与其他产品进行对比;第六,有赞的使用场景。Original Architecture Overview首先,什么是 MQ?MQ 大多数在微服务或者一些业务之间的消息投递过程。一般情况下,如果直接调用它的接口会导致两个业务之间有很多耦合,业务之间依赖比较重。所以在微服务改造过程中,MQ 是非常重要的组件。NSQ 是其中主要的一个产品,类似 kafka。我们当时用 NSQ 是为这个...阅读全文

博文 2017-08-23 02:36:41 李文

Etcd client golang example code

1. 监视某一个节点 watcher := kAPI.Watcher("workers/", &client.WatcherOptions{ Recursive: true, }) for { res, err := watcher.Next(context.Background()) if err != nil { log.Println("Error watch workers:", err) break } if res.Action == "expire" { member, ok := m.members[res.Node.Key] if ok { member.InGroup = false } } else if res.Action == "set" || res.Actio...阅读全文

博文 2016-06-12 16:00:00 htyu_0203_39

使用Golang利用ectd实现一个分布式锁

http://blog.codeg.cn/post/blog/2016-02-24-distrubute-lock-over-etcd/ By zieckey · 2016年02月24日 · 1205 Words · ~3min reading time | 编辑这个页面 | Tags: Golang etcd 分布式 本文 http://blog.codeg.cn/post/blog/2016-02-24-distrubute-lock-over-etcd/ 是作者zieckey在研究和学习相关内容时所做的笔记,欢迎广大朋友指正和交流! 版权所有,欢迎转载和分享,但请保留此段声明。 etcd是随着CoreOS项目一起成长起来的,随着Golang和CoreOS等项目在开源社区日益火热, et...阅读全文

博文 2016-06-22 02:00:01 diegodu

游戏分布式服务器pitaya

Pitaya是一款易于使用,快速且轻量级的分布式游戏服务器框架 Pitaya is an simple, fast and lightweight game server framework with clustering support and client libraries for iOS, Android, Unity and others through the C SDK. It provides a basic development framework for distributed multiplayer games and server-side applications. Getting Started Prerequisites Go >= 1.10 e...阅读全文

开源项目 2019-01-31 10:14:52 topfreegames

深入浅出Docker(六):像谷歌一样部署你的应用

【编者按】Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源。Docker提供了一种在安全、可重复的环境中自动部署软件的方式,它的出现拉开了基于云计算平台发布产品方式的变革序幕。为了更好的促进Docker在国内的发展以及传播,我们决定开设《深入浅出Docker》专栏,邀请Docker相关的布道师、开发人员、技术专家来讲述Docker的各方面内容,让读者对Docker有更深入的了解,并且能够积极投入到新技术的讨论和实践中。另外,欢迎加入InfoQ Docker技术交流群交流Docker的最佳实践,QQ群号:124378115。 1.概述 谷歌发起的开源项目从来都是广受技术圈的关注...阅读全文

博文 2015-03-29 19:53:02 肖德时

Kubernetes 大咖秀徐超《使用 client-go 控制原生及拓展的 Kubernetes API》

大家好,我是徐超,从事 Kubernetes 开发已经两年多了。 今天,我从一个开发者的角度来讲一讲 client-go repository,以及怎么用 client-go 搭建 Controller。同时,也给大家讲一讲开发过程中遇到的坑,希望大家在开发的时候可以绕坑而行。 另外,我还会讲一下 Kubernetes 的 API,让 controller 功能变的更加强大。 那我们现在先来讲,有哪些方法可以跟 APIserver 进行通讯。最常用的,可能就是 kubectl,以及官方支持的 UI,Kube Dashboard,这是 google 最近投入很多的一个项目。 开发过程中 debug 的时候可以直接去调用 k8s 的 Restful API,通过写脚本去实现 Controller...阅读全文

博文 2017-01-22 12:00:06 Caicloud

Golang 读取写入Etcd数据库

文出处:个人博客地址:http://www.damonyi.cc/?p=194 项目中用到Etcd数据库来存储容器的信息和应用的域名信息,将操作Etcd的golang代码整理了一下 1、将Container信息写入到指定目录 c, err := common.GetEtcdClient() if err != nil { beego.Error("get etcd client failed") return } kapi := client.NewKeysAPI(c) key := getSkyDnsDomain(domainEtcd.Domain) value, _ := json.Marshal(domainEtcd) var etcderr error common.HaproxyT...阅读全文

博文 2016-07-01 17:00:01 wangdk789

go基于grpc构建微服务框架-服务注册与发现

概述 grpc 是谷歌开源的rpc框架,基于http2实现,并支持跨语言,目前基本涵盖了主流语言.跨语言的实现主要得益于protobuf,通过编写proto文件,通过protobuf工具生成对应语言的类库进行使用. 对于go这样一门新生语言来说,生态链还处于发展阶段,微服务框架也是如此,下面将基于grpc-go版本搭建一个微服务通讯框架. 1.服务注册与发布的机制 1.1 解决的问题 服务注册与发布主要解决的服务依赖问题,通常意义上,如果A服务调用B服务时,最直接的做法是配置IP地址和端口.但随着服务依赖变多时,配置将会是否庞杂,且当服务发生迁移时,那么所有相关服务的配置均需要修改,这将十分难以维护以及容易出现问题.因此为了解决这种服务依赖关系,服务注册与发布应运而生. 1.2 机制 服务注...阅读全文

博文 2018-04-20 15:34:58 沐风

理解Kubernetes网络之Flannel网络

第一次采用kube-up.sh脚本方式安装的Kubernetes cluster目前运行良好,master node上的组件状态也始终是“没毛病”: # kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health": "true"} 不过在第二次尝试用kubeadm安装和初始化Kubernetes cluster时遇到的各种网络问题还是让我“心有余悸”。于是趁上个周末,对Kubernetes的网络原理进行了一些针对性的学习。这里把对Kubernetes网络的理解记录一下和大家一起分享。 Kubernetes支持Flanne...阅读全文

博文 2017-02-06 03:21:36 bigwhite

闲谈Kubernetes 的主要特性和经验分享

主要介绍 Kubernetes 的主要特性和一些经验。先从整体上看一下Kubernetes的一些理念和基本架构, 然后从网络、 资源管理、存储、服务发现、负载均衡、高可用、rolling upgrade、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性。 我们先从整体上看一下Kubernetes的一些理念和基本架构, 然后从网络、 资源管理、存储、服务发现、负载均衡、高可用、rolling upgrade、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性。 当然也会包括一些需要注意的问题。主要目的是帮助大家快速理解 Kubernetes的主要功能,今后在研究和使用这个具的时候有所参考和帮助。 ##1.Kubernetes的一些理念: 1...阅读全文

多进程管理工具:goreman

Linux下多进程管理工具对开发和运维都很有用,常见的功能全面的主流工具主要有monit、supervisor。不过开发中使用则推荐轻量级小工具goreman。 goreman是对Ruby下广泛使用的foreman的重写,毕竟基于golang的工具简单易用多了。顺便提一句:goreman的作者是mattn,在golang社区挺活跃的日本的一名程序员。foreman原作者也实现了一个golang版:forego,不过没有goreman好用,举个例子:coreos的etcd就是使用的goreman来一键启停单机版的etcd集群。 安装 go工具安装都非常简单: go get github.com/mattn/goreman goreman help 当然,记得先把GOPATH、GOROOT环境变...阅读全文

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 徐学良

Etcd 架构与实现解析

前一段时间的项目里用到了 Etcd, 所以研究了一下它的源码以及实现。网上关于 Etcd 的使用介绍的文章不少,但分析具体架构实现的文章不多,同时 Etcd v3的文档也非常稀缺。本文通过分析 Etcd 的架构与实现,了解其优缺点以及瓶颈点,一方面可以学习分布式系统的架构,另外一方面也可以保证在业务中正确使用 Etcd,知其然同时知其所以然,避免误用。最后介绍 Etcd 周边的工具和一些使用注意事项。 阅读对象:分布式系统爱好者,正在或者打算在项目中使用Etcd的开发人员。 Etcd 按照官方介绍 Etcd is a distributed, consistent key-value store for shared configuration and service discovery 是...阅读全文

博文 2017-02-09 19:54:39 jolestar

etcd golang watch

package main import ( "log" "github.com/coreos/go-etcd/etcd" ) func main() { client := etcd.NewClient( []string{ "http://127.0.0.1:2379", }, ) for { resp, err := client.Get("config", false, false) if err != nil { log.Fatal(err) } log.Printf("Current creds: %s: %s\n", resp.Node.Key, resp.Node.Value) receiver := make(chan *etcd.Response) go client.Wa...阅读全文

博文 2016-11-01 05:00:08 WHACKW

k8s镜像:安装kubernetes,访问不了gcr.io怎么办?

April 7, 2017 in Tech github开启对docker hub的读授权 Dockerfile上github Docker Hub上创建Automated build 取到本地并push到private Registry 之前在安装k8s的时候,我们提到了依赖的gcr.io/google_containers里的镜像因为GFW的原因取不到,但是暂时没有gcr.io的国内镜像,怎么办呢? 方法1:如果有aws上的EC2虚拟机,远程到虚拟机上docker pull gcr.io/google_containers/xxx,然后tag为docker hub(也就是删掉gcr.io/google_containers/前缀),最后再docker push 到docker hub上自...阅读全文

博文 2017-07-30 05:42:58 伊布

Kubernetes v1.0特性解析

kubernetes1.0刚刚发布,开源社区400多位贡献者一年的努力,多达14000多次的代码提交,最终达到了之前预计的milestone, 并意味着这个开源容器编排系统可以正式在生产环境使用,必将推动容器生态及周边产业的进步发展。本次分享主要介绍kubernetes1.0较新的功能特性,包括服务发现方式及较新版本对应的设置变化,如何用dns方式构建内网服务发现,存储支持,如何解决集群存储及如何使用rbd的方式将ceph存储块附加到Pod,监控,如何在集群模式下搭建监控系统等话题。以及介绍Kuberentes官方发布时官方提到的功能理念及未来部分的功能扩展,包括k8s产品经理Craig McLuckie所提及的kubernetes的整体愿景等。 下文是本次的分享整理: 首先介绍...阅读全文

traefik简介

traefik(https://traefik.io/)是一款开源的反向代理与负载均衡工具。它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。目前支持Docker, Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper, BoltDB, Rest API等等后端模型。 traefik的具体模型如下: 为什么选择traefik? 事实上在之前我对LB的选择一直更倾向于使用HAProxy。但是选择traefik主要是有以下特点让我们决定使用: Golang编写,单文件部署,与系统无关,同时也提供小尺寸Docker镜像。 支持Docker/Etcd后端,天然连接我们的微服务集群。 内置Web UI,管...阅读全文

博文 2017-02-10 15:44:47 kevin

以Kubeadm方式安装的Kubernetes集群的探索

当前手上有两个Kubernetes cluster,一个是采用kube-up.sh安装的k8s 1.3.7版本,另外一个则是采用kubeadm安装的k8s 1.5.1版本。由于1.3.7版本安装在前,并且目前它也是承载了我们PaaS平台的环境,因此对于这个版本的Kubernetes安装环境、配置操作、日志查看、集群操作等相对较为熟悉。而Kubeadm安装的1.5.1版本K8s集群在组件部署、配置、日志等诸多方面与1.3.7版本有了较大差异。刚上手的时候,你会发现你原来所熟知的1.3.7的东西都不在原先的位置上了。估计很多和我一样,采用kubeadm将集群升级到1.5.1版本的朋友们都会遇到这类问题,于是这里打算对Kubeadm方式安装的Kubernetes集群进行一些小小的探索,把一些变动较...阅读全文

博文 2017-02-06 03:23:18 bigwhite

基于docker的分布式爬虫服务 Zerg

#  zerg     基于docker的分布式爬虫服务 [![image](https://camo.githubusercontent.com/e4deb67aa41f71d46774f192b05b75be5c3da112/68747470733a2f2f7261772e6769746875622e636f6d2f6875696368656e2f7a6572672f6d61737465722f646f632f7a6572672e706e67)](https://camo.githubusercontent.com/e4deb67aa41f71d46774f192b05b75be5c3da112/68747470733a2f2f7261772e6769746875622e636f6...阅读全文

开源项目 2016-04-17 16:00:00 huichen

centos下安装UPX+压缩golang可执行程序

centos安装upx wget -c http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/ucl-1.03-2.el7.rf.x86_64.rpm rpm -Uvh ucl-1.03-2.el7.rf.x86_64.rpm yum install ucl wget -c http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/upx-3.91-1.el7.rf.x86_64.rpm rpm -Uvh upx-3.91-1.el7.rf.x86_64.rpm yum install upx #upx压缩...阅读全文

博文 2017-08-25 09:03:27 雨花

ECUG Con 邀您共议服务端开发最深度实践

![](http://ww4.sinaimg.cn/mw1024/7bb2bde1gw1f061fokhgpj20o00dd40x.jpg ) ECUG 全称为 Effective Cloud User Group (实效云计算用户组),由七牛云 CEO 许式伟于 2007 年发起,集结了一批具有高端视角并仍醉心于技术本身的同仁,共同关注云计算前沿技术的最新成果和分布式开发、运维的最佳实践。在过去的八年中, ECUG 社区每年都会组织一场全国性的 ECUG Con 大会,期间众多技术大神纷纷参与,他们或许在大众技术会议已经鲜少露面,但会在 ECUG Con 畅谈心得,共同奉献一场半公开的高规格技术分享盛会。 ECUG Con 发展历程 ![](http://cdn.huo...阅读全文

Kubernetes 分布式存储方案 Torus

Torus是一种针对容器集群量身打造的存储系统,可以为通过[Kubernetes](http://www.oschina.net/p/kubernetes)编排和管理的容器集群提供可靠可扩展的存储。这是继[etcd](http://www.oschina.net/p/etcd)、[rkt](http://www.oschina.net/p/CoreOS-rocket)、[flannel](http://www.oschina.net/p/rudder),以及CoreOS Linux之后CoreOS发布的另一个开源产品。 **Torus的架构** 现代化集群的存储必须在网络端维持统一的可用性,随着数据在不同容器中处理还需要管理访问并保障一致性,就算只是在一个应用程序内部使用,随着应用版本的...阅读全文

开源项目 2016-06-16 17:00:13 coreos

Go开发的分布式爬虫框架yispider

yispider 是一款分布式爬虫平台,帮助你更好的管理和开发爬虫。 内置一套爬虫定义规则(模版),可使用模版快速定义爬虫,也可当作框架手动开发爬虫 码云地址:https://gitee.com/bilibala/YiSpider github地址:https://github.com/2young2simple/yispider ## 架构 目前框架分为2个部分: #### 1.爬虫部分(spider节点): 内部结构参考python scrapy框架,主要由 schedule,page process,pipline 4个部分组成,单个爬虫单独调度器,单独上下文管理,目前内置2中pipline的方式,控制台和文件,节点信息注册在etcd上用于...阅读全文

游戏服务器gonet-游戏服务器

gonet 游戏服务器架构,mmo架构,分布式snowflake64为整形uuid,ai行为树,配置data,游戏大部分都在内存运算,分布式缓存redis,增加db模块读取blob数据。 设计之初,建立在actor模式下的;rpc,以及消息驱动,rpc无需注册,支持通用数据(int,[]int,[3]int),map数据,以及struct数据,rpc性能测试如下;sql封装简单的orm(orm支持pb结构体做mysql blob,orm支持结构体做mysql json类型)具体看demo websocket模式下,要在net,websocket注视掉如下代码,在netgateserver里面注释回//websocket这段 代码除了mysql,protobuf,redis,...阅读全文

开源项目 2019-07-15 13:06:18 ylb

基于 go 的微服务架构应用 microservice-app

## microservice-app 微服务架构实战demo, 使用 go 语言技术栈,包含如下组件: 1. 服务注册中心 [etcd](https://github.com/coreos/etcd) 2. Api 网关 3. Feed 服务 4. Profile 服务 5. Topic 服务 6. 监控组件: prometheus + grafana 7. 跟踪组件: zipkin + elasticsearch 其中Feed, Profile, Topic 启动时会向etcd注册服务, Apigateway 通过调用这三个服务的客户端 Watch 到相应服务的注册Key, 同时得到服务的地址. 当服务实例个数...阅读全文

开源项目 2016-12-14 07:00:08 buptmiao

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...阅读全文

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反向代理、负载均衡软件 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

kubernets部署备忘

February 20, 2017 in Tech 记录下GFW内k8s的部署流程,备忘。 1、各节点上配置hostname,配置resole.conf echo "titan1" > /etc/hostname sysctl kernel.hostname="titan1" echo "nameserver x.x.x.x" >> /etc/resolv.conf 2、各节点上加k8s的repo tee /etc/yum.repos.d/mritd.repo << EOF [mritdrepo] name=Mritd Repository baseurl=https://rpm.mritd.me/centos/7/x86_64 enabled=1 gpgcheck=0 EOF 3、各节点上...阅读全文

博文 2017-07-30 05:40:52 伊布

使用 Etcd 和 Haproxy 做 Docker 服务发现

使用 Etcd 和 Haproxy 做 Docker 服务发现 标签(空格分隔): Etcd Haproxy Docker 服务发现 architecture discovery docker-gen golang service 本文作者是 jwilder,本文的原文是 Docker Service Discovery Using Etcd and Haproxy 在前一篇文章中,我们展示了一种为 Docker 容器在同一台主机上创建一个自动化 Nginx 反向代理的方式。那个设置对于前端 web app 来说工作的很好,但是对于后端服务来说它不是一个好的点子,因为通常它们跨越多个主机。 这篇文章描述了一个为后端服务的 Docker 容器提供服务发现的解决方案。 我们将构建的架构体系是模仿...阅读全文

博文 2017-02-09 13:42:32 yexiaobai

Go开发的分布式爬虫框架 - yispider

yispider是一款分布式爬虫平台,帮助你更好的管理和开发爬虫。 内置一套爬虫定义规则(模版),可使用模版快速定义爬虫,也可当作框架手动开发爬虫 项目地址: https://github.com/2young2simple/yispider ## 架构 目前框架分为2个部分: #### 1.爬虫部分(spider节点): 内部结构参考python scrapy框架,主要由 schedule,page process,pipline 4个部分组成,单个爬虫单独调度器,单独上下文管理,目前内置2中pipline的方式,控制台和文件,节点信息注册在etcd上用于manage节点发现。 * `core`:负责爬虫生命周期、上下文的管理,负责爬虫的运行。 ...阅读全文

Go语言开发分布式任务调度 轻松搞定高性能Crontab

第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作模式,并图示分析shell执行任务的底层原理与涉及的系统调用。最后,我们使会用Go语言的Command标准库,实现任务的执行,输出捕获,杀死任务等重要功能。 ...第3章 如何解析cron表达式cron表达式是配置定时任务执行周期的核心工具。在本章中,将首先分析cron表达式的构成以及解析逻辑,并利用开源项目cronexpr解析cron表达式并计算任务的下次调度时间。之后,我们将利用其实现任务并发调度...阅读全文

博文 2019-03-14 01:34:41 18304356293

后Kubernetes时代,带你系统梳理K8S 12大关键特性

导读: Kubernetes如今风靡一时,所有主要的云服务提供商都将其作为部署云原生应用的解决方案。Kubernetes有哪些显著的特性和工具优势,让企业开始接受它?本文作者给出了系统的梳理。 “Action without orchestration is burn out; orchestration w/o action is management.” 没有编排的行动是完蛋的,没有行动的编排是管理,行动加上编排是领导。 ― Orrin Woodward” Kubernetes是一种优化资源利用率的抽象概念,它允许跨节点集群高效地进行应用程序分发。 Kubernetes,舵手 ! Kubernetes是一个希腊语单词,意思是“舵手”。 它是一个由谷歌开始的开源项目,从Borg衍生而来,在...阅读全文

博文 2018-03-14 10:34:56 数人云

Etcd client golang example code

1. 监视某一个节点 watcher := kAPI.Watcher("workers/", &client.WatcherOptions{ Recursive: true, }) for { res, err := watcher.Next(context.Background()) if err != nil { log.Println("Error watch workers:", err) break } if res.Action == "expire" { member, ok := m.members[res.Node.Key] if ok { member.InGroup = false } } else if res.Action == "set" || res.Actio...阅读全文

博文 2016-08-23 22:00:03 htyu_0203_39

kubernetes集群中利用etcd和grpc实现golang服务间通信

kubernetes集群中利用etcd和grpc实现golang服务间通信 注:文中涉及工作环境相关的网址和IP已经被替换 1. 项目背景 服务运行于docker容器中 使用kubernetes管理容器 服务有多个节点作为一个集群 使用rest接口设置服务缓存中的信息 需要将信息同步到集群中其他节点 2. 项目方案 使用grpc做服务间通信 从etcd中读取服务所有状态为running的节点信息,包括:podIp、status、hostIp、startedAt(启动时间) 服务启动时选取运行时间最长的节点,调用grpc接口请求缓存的信息同步到本容器的服务中 使用rest接口设置缓存的时候,遍历所有节点(不包括自身),调用grpc接口将信息同步到其他节点 方案特点: - 不需要借助额外的配置管...阅读全文

博文 2017-09-18 02:56:56 letian0805

go语言gRPC负载均衡库grpc-lb的使用

grpc-lb采用客户端进程内负载均衡方式,支持随机、轮询、一致性哈希三种负载均衡策略,并支持服务端权重。可采用etcd或consul作为注册中心。 项目地址:https://github.com/liyue201/g... 基本架构如图,服务提供者起来后向注册中心注册自己的信息,ip、端口、权重等,并保持心跳。客户端监听注册中心,获取服务器列表,一旦服务器发生变化,客户端马上更新本地的服务器列表。客户端每个请求都通过负载均衡策略选择一个合适的服务器去访问。 随机负载均衡客户端例子: package main import ( etcd "github.com/coreos/etcd/client" grpclb "github.com/liyue201/grpc-lb" "github.c...阅读全文

博文 2017-08-03 06:34:59 stirling

微信中继服务器https://github.com/1046102779/wx_relay_server

# 微信中继服务器 目的:其他服务采用拉服务模式,通过rpcx进行rpc通信,获取相关微信token. 用户微信公众号第三方平台刷公众号平台和托管的公众号appid的相关token, 该服务不能停超过10分钟. 主要刷公众号第三方平台的component_access_token和preauthcode, 公众号的authorizer_access_token和authorizer_refresh_token 存储方式:etcd存储rpc服务地址和微信公众号平台和公众号token, 使用etcd的ttl特性,并watch并刷新 ## 新增服务的可靠性措施 1. 服务启动后,立即读取etcd中的所有微信公众平台和公众号数据,加载到内存中。 并监听所有token ...阅读全文

k8s1.9.2基于kubeadm高可用安装教程,包含离线安装包,支持简单快速安装

使用kubeadm安装安全高可用kubernetes集群 安装包地址 如非高可用安装请忽略此教程,直接看产品页的三步安装。 单个master流程: 解压后在master 上 cd shell && sh init.sh ,然后sh master.sh(注意因为脚本用的相对路径所以不再当前目录会找不到文件) 在node上 cd shell && sh init.sh 。然后在node上执行master输出的join命令即可 提前准备 假设构建一个3master+2node的k8s集群,需要5台节点共同的条件如下: (yum install -y docker是1.12.6版本需要改cg)17.06安装教程: #0.删除老旧的 $ yum remove -y docker* #如果默认之前yum...阅读全文

博文 2018-02-11 16:34:40 fanux

压缩go build打包的可执行文件

前言 最近在写一个cli程序,习惯性的go build之后发现简简单单的几行代码打包出来就3.0+MB了,为此被做Python的同学嘲笑了很久,于是就研究了一下go build产生的可执行文件的压缩 代码示例 代码如下: package main import ( "os" "gopkg.in/urfave/cli.v2" ) const ( APP_NAME = "etcd-cli" APP_VERSION = "0.1" APP_USAGE = "etcd-cli是一个简单实用的etcd命令行客户端,帮助你彻底解脱一次又一次的输入etcdctl" ) func main() { app := new(cli.App) app.Name = APP_NAME app.Version = A...阅读全文

博文 2017-08-17 17:05:04 gwpp

Minikube:轻松创建单机版Kubernetes集群

**编者按:这是根据Kubernetes 1.3新功能写的一系列深入的文章,本文是第一篇。** 在管理容器化应用方面,Kubernetes是目前最好的工具之一,第一个能够应对生产环境的版本发布时间已经超过一年。然而,在搭建本地开发环境这块,一直处于缺失的状态。 为了改进这个现状,过去几个月,Kubernetes社区的几个开发者一直致力于GitHub上Minikube库的开发。我们的目标是在Mac、Linux和Windows上面使用一条命令就可以构建一个易于使用、高保真的kubernetes集群。 开发过程中,我们得到了很多社区成员的帮助,在这里向他们表示感谢,同时,我们很自豪地宣布:Minikube正式发布。这个版本原生支持kubernetes 1.3,增加了一些命令以便于...阅读全文