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

服务发现:Zookeeper vs etcd vs Consul

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

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

HTTP API 网关 API-Gateway

Gateway是一个使用go实现的基于HTTP的API 网关。 **特性:** * API 聚合 * 流控 * 熔断 * 负载均衡 * 健康检查 * 监控 * 消息路由 * 后端管理WebUI **能做什么:** * 规划更友好的URL给调用者。 * 聚合多个API的结果返回给API调用者,利于移动端,后端可以实现原子接口。 * 保护后端API服务不会被突发异常流量压垮。 * 提供熔断机制,使得后端API Server具备自我恢复能力。 * 借助消息路由能力,实现灰度发布,AB测试...阅读全文

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

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

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

一个支持负载均衡,健康检查的 TcpProxy

## goTcpProxy GitHub:https://github.com/zheng-ji/goTcpProxy [![Go Report Card](https://goreportcard.com/badge/github.com/zheng-ji/goTcpProxy)](https://goreportcard.com/report/github.com/zheng-ji/goTcpProxy) 一个支持负载均衡,健康检查的 TcpProxy ![smailltcp](https://cloud.githubusercontent.com/assets/1414745/19109474/2eea5e56-8b28-11e6-80ba-be5ed911...阅读全文

k8s与健康检查--grpc服务健康检查最佳实践

前言 GRPC正在成为云原生微服务之间通信的通用语言。如果您今天要将gRPC应用程序部署到Kubernetes,您可能想知道配置运行状况检查的最佳方法。在本文中,我们将讨论grpc-health-probe,一种Kubernetes本地健康检查gRPC应用程序的方法。 果您不熟悉,Kubernetes健康检查(liveness and readiness probes)就是让您的应用程序在您睡觉时保持可用的原因。他们检测到没有响应的pod,将它们标记为不健康,并导致这些pod重新启动或重新调度。 kubernetes本身不支持gRPC健康检查。这使得gRPC开发人员在部署到Kubernetes时有以下三种方法: httpGet probe: 不能与gRPC原生使用。您需要重构您的应用程序以同...阅读全文

博文 2019-03-02 11:34:41 iyacontrol

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 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

分布式无锁站点健康检查工具 Checkup

Checkup是源码分析 Startup 新推出的站点健康检查工具,自带美观的状态页面 。 ![image](http://static.oschina.net/uploads/img/201608/07080938_c9AC.png) Checkup  是用Go写的分布式的,无锁的,自托管的 健康检查工具和 状态页面 。它拥有一个优雅,简约的CLI和一个地道的Go 库,他们是完全可互操作的,他们的配置是精美对称的。 ** 简介: ** Checkup  可以定制随时检查您的任意网站,从任何基础设施使用自己选择的任何存储供应商。状态页可以定制您自己的喜好,你可以无论你是否想做的检查。 开箱即用, Checkup  目前支持: * 检查HTTP端点 ...阅读全文

开源项目 2016-08-29 04:00:01 sourcegraph

golang 单向 channel

只写通道:chan<- T只读通道:<-chan T 即只可写入或只可读的channel,事实上 channel 只读或只写都没有意义,所谓的单向 channel 其实知识声明时用,比如func foo(ch chan<- int) <-chan int {...} chan<- int表示一个只可写入的 channel,<-chan int表示一个只可读取的 channel。上面这个函数约定了 foo 内只能从向 ch 中写入数据,返回只一个只能读取的 channel,虽然使用普通的 channel 也没有问题,但这样在方法声明时约定可以防止 channel 被滥用,这种预防机制发生再编译期间。如果后续代码里,向本来用于读channel里写入了数据,编译器会提示错误,这时就要仔细检查自己的...阅读全文

博文 2018-08-31 15:37:29 夜空一起砍猩猩

Go Gin 框架 curl -I 返回 404 的问题

在使用 Go 的 Gin Web 框架的时候,发现一个有趣的问题,curl 一个 router 是正常的,但是加上 -I 参数就 404 了,就像下面这样package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080}正常的curl http://127.0.0.1:8080/ping{"message":"pong"}404的curl -I http:...阅读全文

博文 2018-11-01 19:35:09 萤火的萤

gossdb终于可以全速前进了

用了一周的时间才最终找到了一个会在大并发(并发1000,mbp普通本)下可能会发生的空指针问题,现在经过多次测试,终于可以关闭这个bug了。哈哈,高兴啊。 现在的gossdb已经相对成熟了,而且用的人也越来越多了,希望在这里介绍给大家,如果有人用ssdb,不妨尝试一下,会有惊喜的。 下面简单的介绍一下gossdb https://github.com/seefan/gossdb 功能列表 1. 继承官方连接方式。已支持超过40个官方命令。 2. 支持连接池。 3. 已支持 set 相关方法 4. 已支持 hashmap 相关方法 5. 已支持 queue 相关方法 6. 已支持返回值类型转换,可以方便的把从ssdb中取到的内容转化为指定类型。 连接池已支...阅读全文

Go的三色标记GC

三色标记 三色标记的原理如下:整个进程空间里申请每个对象占据的内存可以视为一个图, 初始状态下每个内存对象都是白色标记,先stop the world,将扫描任务作为多个并发的goroutine立即入队给调度器,进而被CPU处理,第一轮先扫描所有可达的内存对象,标记为灰色放入队列;第二轮可以恢复start the world,将第一步队列中的对象引用的对象置为灰色加入队列,一个对象引用的所有对象都置灰并加入队列后,这个对象才能置为黑色并从队列之中取出。循环往复,最后队列为空时,整个图剩下的白色内存空间即不可到达的对象,即没有被引用的对象; 第三轮再次stop the world,将第二轮过程中新增对象申请的内存进行标记(灰色),这里使用了writebarrier(写屏障)去记录这些内存的身份...阅读全文

goroutine 调度器

载:http://www.tomsun.info/?p=80 对golang的goroutine的内部实现感觉非常神秘,通过这段时间的学习基本了解了golang调度器实现原理。 golang调度器 虽然golang的最小调度单元为协程(goroutine),但是操作系统最小的调度单元依然还是线程,所以golang scheduler(golang调度器)其要做的工作是如何将众多的goroutine放在有限的线程上进行高效而公平的调度。 操作系统的调度不失为高效和公平,比如CFS调度算法,那么go为何要引入goroutine?原因很多,有人会说goroutine 相比于linux的pthread机制使用很方便。但是核心原因为goroutine的轻量级,无论是从进程到线程,还是从线程到协程,其核...阅读全文

博文 2015-06-17 20:05:25 chanshimudingxi

Consul核心概念及安装配置

简介: Consul是一个基于golang开发的服务网格解决方案。提供具有服务发现,配置及服务分段功能的控制层(Control Plane)。每个功能都可以根据需要分开使用。Consul需要一个数据层(Data Plane),支持代理和本地集成两种模式。Consul内置一个简单的代理可以直接使用另外还支持Envoy等第三方代理集成。 Consul在计算机网络中所处的地位: NetworkLayer.png 功能特性 1.服务发现 Consul客户端可以注册服务,其他客户端可以使用HTTP协议或DNS协议从Consul发现服务提供者。 2.健康检查 Consul客户端可以提供任意数量的健康检查,包括web服务返回200状态码或本地主机内存使用率低于90%检测。这些信息可以用来监控集群状态,服务...阅读全文

博文 2020-04-30 03:32:43 写个代码容易么

分布式集群管理软件gluster

gluster 是一款轻量级高性能的分布式集群管理软件,实现了分布式软件架构中的常用核心组件,包括: 服务配置管理中心 服务注册与发现 服务健康检查 服务负载均衡 gluster 的灵感来源于 ZooKeeper 及 Consul ,它们都实现了类似的分布式组件,但是 gluster 更加的轻量级、低成本、易维护、架构清晰、简单实用、性能高效,这也是 gluster 设计的初衷。 开源、免费、跨平台; 使用 RAFT 算法实现分布式一致性; 使用通用的 REST 协议提供 API 操作; 使用分布式 KV 键值存储实现服务的配置管理; 超高读写性能,适合各种高并发的应用场景; 支持集群分组,不同的集群之间数据相互隔离; 配置管理简单,且仅提供实用的API接口以及终端管...阅读全文

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

Kubernetes学习系列

这段时间项目组内想要引入Kubernetes,作为第二代容器调度引擎,故最近在系统的学习Kubernetes。整理了一些学习笔记,心得,放到博客中,一来记录自己的学习经过,二来看能否帮到有需要的同学。详情见下: 1、Kubernetes核心概念总结——介绍基础架构、Pod、RC、Job、Service、Deployment等。 2、Centos7部署Kubernetes集群——基于Centos7,yum安装K8s,并配置集群,最后部署了容器覆盖网络——Flannel。 3、基于kubernetes集群部署DashBoard——基于上一篇部署的集群,搭建了DashBoard,其中介绍了一些众所周知的坑,比如google镜像国内无法下载。 4、为Kubernetes集群部署本地镜像仓库——针对上...阅读全文

博文 2018-03-14 10:28:05 xiaomin0322

如何在 Golang 中为 RESTful 微服务创建健康检查

想象一下,您最近发布并部署了一段很酷的 RESTful 微服务,您已经使用了一段时间。您松了一口气却听到 Ops 团队说您的服务不稳定。您真的很确定服务应该没问题,可能是它依赖的服务有问题。那该怎么办? 健康检查将来拯救你。它是您的服务返回状态的端点,包括您的服务直接依赖的所有外部服务的连接状态。在这篇文章中,我将展示如何为在多个节点上运行的微服务创建健康检查,该服务将其状态存储在 MongoDB 中并调用 Elasticsearch > 对你的服务应该监控外部服务,会感觉到非常诧异 ... 你是对的,必须独立监控外部服务。但实际上,某些检查可能会暂时停止。没有什么比临时的更永久。因此,将您的直接依赖项包含在服务状态中是一种很好的做法,因此您(和 Ops)始终知道什么出现问题。 ## 设计 ...阅读全文

博文 2019-06-10 12:34:53 lovechuck

高速通道-冗余物理专线接入-健康检查配置

摘要: 组建混合云,用户的IDC需要通过物理专线与阿里云VPC互通,多线冗余是基本配置需求。阿里云提供的冗余冗余切换方案是在VPC中,用户掌握切换原理,即可自主在控制台完成冗余负载配置。 一 VPC健康检查IP机制1 健康检查IP实现链路冗余的原理是什么?配置健康检测IP后,在的VPC内会保留两个ip地址,作为健康检查的源ip地址。 **点此查看原文:http://click.aliyun.com/m/41951/** 组建混合云,用户的IDC需要通过物理专线与阿里云VPC互通,多线冗余是基本配置需求。阿里云提供的冗余切换方案是在VPC中,用户掌握切换原理,即可自主在控制台完成冗余负载配置。 **一 VPC健康检查IP机制** ![图片描述](http://img.b...阅读全文

Go微服务 - 第六部分 - 健康检查

第六部分: Go微服务 - 健康检查 随着我们的微服务越来越多,越来越复杂, 需要一种可以让Docker Swarm知道服务是否健康的机制就变得十分重要了。因此,本文重点看看如何为微服务加入健康检查。 假如accountservice微服务不具备下面的能力,就毫无用处了: 提供HTTP服务。 连接到它自己的数据库。 健康终端监测模式 在应用程序中实现功能检查,外部工具可以通过暴露的端点进行定期访问来实现。这有助于验证应用程序和服务是否正确执行。 在微服务中处理这些情况的惯用方式是提供健康检查路由(Azure Docs的好文章), 在我们这个情况中,既然我们是基于HTTP的,应该映射一个/health,并响应200,如果将康的话, 可能需要带一些机器可能性的消息来解释什么是OK的。 如果有问题...阅读全文

博文 2018-05-22 00:34:37 WalkerQiao

golang中http请求图片遇见的问题汇总(一)

最近做了个根据url分析图片信息的demo,其中遇到的几个有意思的问题,发出来分享一下 一.“**http请求返回错误**” 1."stream error: stream ID x; INTERNAL_ERROR" 这种情况需要关闭http2.0,没有找到更好的解决办法 2.“**request canceled**” timeout这点之前笔者没有在意过,设置超时时间都是简单粗暴的: ```` client := &http.Client{ Timeout:5 * time.Second, } ```` 这样虽然简便,这个相当于一个deadline,不管连接上没连接上,不管成功没成功,5秒后都会被判为超时。 这样就有一个问题,如果我请求一张非常大的图片,即使已经请求成功连接上了,也会因为...阅读全文

博文 2018-12-07 18:33:07 yinshidaoshi

github 中如何定期使用项目仓库内容更新自己 fork 的仓库内容

在你 fork 了某个项目后,很可能原项目有了更新,为了保持和原项目同步,可以通过执行以下命令达到同步的目的(比如 fork 的项目是 https://github.com/studygolang/studygolang ,实际中替换为你要同步的项目) ``` $ git remote add upstream https://github.com/studygolang/studygolang $ git fetch upstream $ git checkout master $ git rebase upstream/master $ git push -f origin master ``...阅读全文

DockOne微信分享(一一八):容器技术在企业级服务里的实践

【编者的话】邻盛在做面向中小微企业做服务的时候, 实际遇到很多情况, 比如对方IT基础过于薄弱, 比如基础设施过于简陋, 比如产品要解决行业需求, 企业个性需求等等,经过几年积累目前摸索出了一套完整的产品方案。目前产品是以容器为核心的一套完整的PaaS平台+全新的微服务架构+底层能力构成的完整解决方案, 目前也进入到了几家传统大型制造企业协助他们完成新一代的信息升级。 【深圳站|3天烧脑式Kubernetes训练营】培训内容包括:Kubernetes概述、架构、日志和监控,部署、自动驾驶、服务发现、网络方案等核心机制分析,进阶篇——Kubernetes调度工作原理、资源管理及源码分析等。 邻盛在企业级服务市场面向对象以及产品说明 邻盛是一家企业级服务创业企业,主要面向企业提供业务管理方案(产...阅读全文

博文 2017-06-25 16:25:38 linksame

gometalinter-golang代码质量检查分析工具

前言 最近在研究代码质量检测和分析这一个环节,当然代码质量分析是devops中持续集成部分非常重要的一个环节。涉及到团队协作的时候,很多公司会有自己的一套规则,最熟悉的是阿里巴巴的java代码参考手册,专家总结,大家按照规则去写代码。但是对于devops,有了规则远远不够,还需要提高代码检查的自动化程度,以及与其他的环节合作衔接上。那么如果没有代码质量把控这个环节,那么可能带来以下问题: 抽象不够,大量重复的代码。 变量命名各种风格。驼峰派,下划线派等。 if else 嵌套太深。 不写注释,或是注释写的不合格。 函数里代码太长 潜在的bug,这就是各种语言的一些语法上的检查了。 最终导致维护困难。这就是程序员经常所说的前任留下的坑,往往结果就是新的接任者选择重构。其实对单位也是一直财力和人...阅读全文

博文 2018-03-06 16:34:49 iyacontrol

HTTP接口 Micro_SideCar

# Micro SideCar SideCar 提供了一个 集成应用程序到微型 生态系统 的HTTP接口 。 它类似于 Netflix 称为Prana 的SideCar。 ** 特性 ** * 登记 发现系统 * 主机 的 其他 服务发现 * 健康检查服务 * HTTP API 和负载平衡 要求 * 通过 PubSub的 的WebSockets ** 入门 ** **安装**

go get github.com/micro/micro
**运行** ...阅读全文

ssdb的go驱动 gossdb

gossdb 是 [ssdb](http://www.oschina.net/p/ssdb) 的 go 驱动 * 继承官方连接方式。已支持超过99%的官方命令。 * 支持连接池。 * 已支持 set 相关方法 * 已支持 hashmap 相关方法 * 已支持 queue 相关方法 * 已支持返回值类型转换,可以方便的把从ssdb中取到的内容转化为指定类型。 连接池已支持如下参数 * GetClientTimeout int 获取连接超时时间,单位为秒,默认为 5 * MaxPoolSize int 最大连接池个数,默认为 20 * MinPoolSize int 最小连接池数,默认为 5 * Acqui...阅读全文

golang struct 的奇技淫巧

在使用golang变成的过程中,struct的使用频率非常高,基础的使用我们都会,但有的时候可能会接到一些特殊的需求,或者发现别人的代码读起来不那么顺畅。那是因为struct的一些“冷门”方式,我们不那么熟练。 接下来,就跟大家分享下,我最近用到的“生僻方法”: 结构体中的json是干什么用的? 定义一个结构体 type Tina struct{ appID string`json:"string"` } 这里的这个json可不是备注的意思,而是在使用http接口进行传输时,根据json标识的内容对结构体做解析。 在做项目的时候就发生一个case: { actionIDint`json:"actionType"` actionTypestring`json:"actionID"` } 报错:...阅读全文

博文 2019-10-18 00:32:52 aside section ._1OhGeD

用Go语言买卖比特币

方案一: 通过ExinCore API进行币币交易 Exincore 提供了基于Mixin Network的币币交易API. 你可以支付USDT给ExinCore, ExinCore会以最低的价格,最优惠的交易费将你购买的比特币转给你, 每一币交易都是匿名的,并且可以在区块链上进行验证,交易的细节只有你与ExinCore知道! ExinCore 也不知道你是谁,它只知道你的UUID. 预备知识: 你先需要创建一个机器人, 方法在 教程一. 安装依赖包 正如教程一里我们介绍过的, 我们需要依赖 mixin-sdk-go, 你应该先安装过它了, 这儿我们再安装 uuid, msgpack 两个软件包. go get -u github.com/vmihailenco/msgpack go get...阅读全文

博文 2019-03-24 09:34:39 Mixin_Network

hadoop无法访问50070端口的解决办法

Hadoop 50070是hdfs的web管理页面,在搭建Hadoop集群环境时,有些大数据开发技术人员会遇到Hadoop 50070端口打不开的情况,引起该问题的原因很多,想要解决这个问题需要从以下方面进行排查! **1. 排查Namenode是否部署成功** 排查Namenode是否部署成功可以采用命令/etc/init.d/hadoop-0.20-namenode status或jps两种方式之一查看,如Namenode未部署成功,需重新部署Namenode;若已部署成功,请进行第二步排查! **2. 排查datanode是否部署成功** 排查datanode是否部署成功可以采用jps命令进行查看,如果部署未成功,找到问题节点进行解决;若部署成功请进行第三步。 ...阅读全文

Go 安装

如何判断机器是32还是64位系统 我们接下来的Go安装需要判断操作系统的位数,所以这小节我们先确定我们自己的系统类型。 针对window系统,右击我的电脑,点击属性,显示的信息里面我们可以判断出来,XP系统如果是64位的,那么会显示X64,如果没有X64,那么默认都是32位。window7系统也是查看我的电脑的属性,在系统类型里面会显示使用的系统类型,64位操作系统或者32位操作系统。 Mac系统的用户建议直接使用64位的,因为Go支持的Mac OS X已经不支持在纯32位处理器上跑了。 Linux系统通过命令uname -a可以查看系统的信息: 64位机器显示 前面有一段描述 x86_64 x86_64 x86_64 GNU/Linux 32位机器显示 前面有一段描述 i686 i686 ...阅读全文

Golang分布式并发---群体性热点淘汰算法

Golang分布式并发---群体性热点淘汰算法 在传统的算法中,要计算热点的时候,常规采用,收集所有的任务列表,然后进行排序,得出前n的热点数据。此种算法的不好地方有: 1、 需要收集所有的任务列表。任务数过多时,收集是个问题 2、 将任务列表进行排序。在此过程中,如果列表过多,则会排序时间过长。 另外如果需要进行同步的话,则在此算法中,会有个停顿。 那么我们构建一个场景,一个网吧有n个位置,每个人都可以去网吧,但规定,每次只能预约1小时,如果时间到了,则可以续费继续一个小时,如果不需要则放弃位置。 现在有m个人来网吧上网。 1、m < n时,则m个人都可以获取到上网位置 2、当m>n时,则有n个人可以获取到上网位置,剩余的人,则在等待 有两种调度算法 1、 每个人,都会定期检查自己的时间,...阅读全文

博文 2015-01-22 10:30:27 screscent

【go共识算法】-PBFT

实用拜占庭容错系统介绍 由来 原始的拜占庭容错系统由于需要展示理论上的可行性而缺乏实用性。另外,算法的复杂度也是随节点的增加而呈指数级增加。实用拜占庭容错系统(Practical Byzantine Fault Tolerance, PBFT)降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别,使拜占庭协议在分布式系统中应用成为可能。 什么是实用拜占庭容错系统 实用拜占庭容错系统是一类“状态机”拜占庭系统(这里的状态机可以理解为“系统状态”,以区块链记账为例,系统每新增一个区块,账本就更新到一个新的状态。前面讲过,拜占庭容错系统是一个强一致性协议,每次记账后系统都会达成新的状态。),要求系统所有节点共同维护一个状态,所有节点采取的行动一致。 实用拜占庭容错系统需要运行三类基本协议: 一...阅读全文

博文 2018-10-10 17:34:44 jincheng828

github.com/robfig/cron【Golang 常用包推荐】

企业项目完整之后,经常会有一些定时任务,例如备份、检查数据等,需要经常定时跑,如果我们能把这些定时任务,做成一个业务系统,通过与liunx下cron一样的规则,来表示定时执行的规则,岂不美哉。 Golang的cron包帮忙解决这个问题。 官方说明文档: https://godoc.org/github.com/robfig/cron package main import ( l4g "github.com/alecthomas/log4go" "github.com/robfig/cron" ) func text() { l4g.Info("text") } func main() { c := cron.New() c.AddFunc("* * * * * *", func() { t...阅读全文

博文 2018-12-06 12:34:44 微信小程序开发

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

DockOne微信分享(七十一):基于Docker的负载均衡和服务发现

【编者的话】Docker已经成为时下热门的容器技术,各大公司,中小创业者,都选择采用Docker技术架构其下一代的系统和应用。 随着系统规模扩大,单一Docker容器不能应对压力,需要横向扩展到多个容器,我们需要考虑负载均衡的问题;单一职责的Docker容器之间需要相互通信,而容器在每一次重启之后,它的IP都可能发生变化,那么服务和服务之间如何发现对方? 这一次我们一起来交流基于Docker的负载均衡和服务发现。内容的主题涉及到容器集群入口流量的负载均衡方案,4层和7层协议负载的区别处理,容器集群内服务之间的互相发现等。 应用的容器化和微服务化带来的问题在缺省网络模型中,容器每次重启后,IP会发生变动,在一个大的分布式系统保证IP地址不变是比较复杂的事情。IP频繁发生变动,动态应用部署无法预...阅读全文

博文 2017-06-25 16:25:09 toolchainX

Golang实现发送DNS请求

关于DNS协议的具体内容可以查看RFC1035,如果英语不太好我推荐下面这个人的译文: http://blog.csdn.net/tigerjibo/article/details/6827736 翻译的足够详尽了。 那么来看下Go的实现: package main import ( "bytes" "encoding/binary" "fmt" "net" "strings" ) type DNSHeader struct { ID uint16 Flag uint16 QuestionCount uint16 AnswerRRs uint16 //RRs is Resource Records AuthorityRRs uint16 AdditionalRRs uint16 } func...阅读全文

博文 2015-06-17 20:17:42 u011774512

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 谢权

DockOne微信分享( 九十一):打造百亿级数据处理量的弹性调度容器平台

【编者的话】本次分享介绍七牛数据处理团队的容器技术实践经验,分享七牛如何通过自主研发的容器调度框架打造易扩展、易部署、高自由度、高可用、高性能的数据处理平台。 主要内容包括四个方面: 海量数据处理的业务场景海量数据处理平台的挑战自研容器调度框架介绍海量数据处理平台实践 一、数据处理业务场景首先介绍一下七牛数据处理业务的背景。七牛云目前平台上有超过50万家企业客户,图片超过2000亿张,累积超过10亿小时的视频。 用户把这些图片和视频存储在七牛上后会有一些数据处理方面的需求,如缩放、裁剪、水印等。这些文件持续在线且数据种类多样,如果用户把这些文件在自己的基板上处理好后再上传到七牛,是非常不合算的事情。而七牛最先提供基于存储的数据处理功能方便用户去做数据处理,这些数据处理通常放在企业的客户端或服...阅读全文

博文 2017-06-25 16:25:22 陈爱珍

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 小卜邪

代码质量管控的四个阶段

-- 背景 -- 本文讨论的代码质量指的是代码本身的质量,包括复杂度、重复率、代码风格等要素。代码是团队的共同财产,代码质量是团队技术水平和管理水平的直接体现。 代码质量下降通常会自成因果,导致恶性循环: * 破窗效应:在烂代码上继续生产烂代码的心理负担小很多 * 传染性:烂代码传递着一种不在意质量,只看业务成果的负面信息,会伤害团队的技术热情和工作氛围,导致更多烂代码出现 本文会分析代码质量下降的内在机制,并分享在代码质量管控方面的一些实践经验。 --------- 熵增定律与代码质量 --------- 熵增定律告诉我们,一个封闭系统总是趋向于熵增,也就是系统的无序程度只会不断增加。 阅读全文

博文 2017-09-10 07:35:23 张鑫

使用 Go 语言打造区块链(二)

使用 Go 语言打造区块链(二) 介绍 在上一篇文章中,我们构建了一个非常简单的数据结构,这是块链数据库的本质。 而且我们可以用它们之间的链式关系向它添加区块:每个区块与前一个链接。 唉,然而在现实中添加一个区块添加到链是艰巨的工作。 工作证明 块链的一个关键思想是,必须通过工作证明才能将数据放入其中。这是一个艰巨的工作,使块链安全和一致。此外,这笔辛苦的工作也得到了奖励(这是人们获得采矿硬币的方式)。 这种机制与现实生活中的机制非常相似:人们必须工作获酬劳励并维持生命。在网络中,网络的一些参与者(矿工)努力维持网络,为其添加新的块,并为他们的工作获得奖励。作为其工作的结果,块以安全的方式并入到块链中,这保持了整个块链数据库的稳定性。值得注意的是,完成工作的人必须证明这一点。 这个整体“努力...阅读全文

博文 2017-10-14 13:04:46 胖虎晓顿_黄希平

kube-dns的前世今生

上一期我们以1.2版本为背景,介绍了K8S的服务发现和kube-dns插件的相关内容。有了上一期内容作为基础,这期了解最新版本的kube-dns就会容易很多。 本文主要对比1.2和1.4版本中kube-dns 的主要变化,以及最新版本中kube-dns的内部实现。满满的干货来了,你准备好了吗? ## 大纲 ● kube-dns的主要变化 ● kube-dns的实现原理 ● kubedns容器详解 ● dnsmasq容器简介 ● exechealthz容器简介 ## 主要变化 **● 服务发现机制未变化** 也就是说kube-dns对外的接口是基本没变的。变化主要在于kub...阅读全文

Choerodon 的微服务之路(三):服务注册与发现

▌文章的主要内容包括: 服务注册/发现 服务注册表 健康检查 在上一篇文章的开始,我们提到解决微服务架构中的通信问题,基本只要解决下面三个问题: 服务网络通信能力 服务间的数据交互格式 服务间如何相互发现与调用 网络的互通保证了服务之间是可以通信的,通过对JSON 的序列化和反序列化来实现网络请求中的数据交互。Choerodon 的 API 网关则统一了所有来自客户端的请求,并将请求路由到具体的后端服务上。然而这里就会有一个疑问,API 网关是如何与后端服务保持通信的,后端服务之间又是如何来进行通信的?当然我们能想到最简单的方式就是通过 URL + 端口的形式直接访问(例如:http://127.0.0.1:8080/v1/hello)。 在实际的生产中,我们认为这种方式应该是被避免的。因为...阅读全文

博文 2020-04-01 09:33:01 Choerodon猪齿鱼