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

zetcd:让应用解除对ZooKeeper的依赖

【编者的话】etcd团队最近发布了zetcd的beta版本,一款能够让etcd兼容Zookeeper协议的代理工具,用户可以通过它解除现有应用对Zookeeper服务的依赖。 分布式系统通常都依赖一个仲裁系统协同工作,一般这样的系统通过仲裁来保证信息的准确传达,以避免出现脑裂。这类系统通过牺牲通用性换来了充分的设计余地,这种做法显然已经被不断扩散的各种具体实现所例证。这样的系统有很多,例如:chubby,ZooKeeper,etcd和consul等。尽管这些系统的理念和协议不同,但是提供的都是类似的基于key-value的分布式仲裁。作为将etcd打造成分布式系统最受瞩目的基础组件计划的一部分,etcd团队开发了一款全新的代理,zetcd,无需变动就可以让etcd集群消费ZooKeeper的...阅读全文

博文 2017-06-21 02:07:33 hokingyang

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

Go语言开发分布式任务调度 轻松搞定高性能CrontabGolang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将掌握Golang的工程实践能力,而且会收获诸如CAP、Raft的分布式经典理论与架构经验,”工程能力”与”知识体系”齐头并进,实现华丽质变第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学 试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作...阅读全文

博文 2019-05-22 17:34:41 方便你我他

王院生:Apache APISIX 微服务网关极致性能架构解析

2019 年 10 月 27 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 杭州站活动,Apache APISIX PPMC 成员王院生做了题为《 Apache APISIX 微服务网关极致性能架构解析》的分享。本次活动,邀请了来自阿里巴巴、蚂蚁金服、Apache APISIX、PolarisTech、又拍云等企业的技术专家,分享网关和高性能服务的实战经验。 王院生,深圳支流科技创始人,Apache APISIX PPMC 成员,OpenResty 社区发起人,《 OpenResty 最佳实践》作者。 以下是分享全文: 前言 大家好,我是来自深圳支流科技的王院生。今年 3 月份,我和志同道合的伙伴一起创业,发起了 APISIX 项...阅读全文

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-09-04 14:00:03 wangdk789

go任务调度5(go操作etcd)

连接etcd: package main import ( "fmt" "go.etcd.io/etcd/clientv3" "time" ) var ( config clientv3.Config client *clientv3.Client err error ) func main() { //客户端配置 config = clientv3.Config{ Endpoints: []string{"0.0.0.0:2379"}, //集群列表 DialTimeout: 5 * time.Second, } //建立连接 if client, err = clientv3.New(config); err != nil { fmt.Println(err) return } clie...阅读全文

博文 2019-04-20 17:35:12 梁十八

Kubernetes 之所以酷

Kubernetes 之所以酷 前言 当我最开始了解到 Kubernetes 的时候(大概一年半以前?),我真的找不出需要关注它的理由。 满打满算,我已经使用 Kubernetes 快三个月以上了。关于为什么我觉得它非常有用,有了一些想法,虽然我仍然还算是一个刚入门的,不过,幸运的是,本文依然能够向您阐述一下,Kubernetes 究竟是怎么一回事。 我在向您解释 Kubernetes 多么有趣的过程中,会尽量避免使用一些太专业的名词,比如 Native Cloud、Orchestration、Container、Kubernetes 的一些专用语???? 。我主要是从一个 Kubernetes 运维工程师的角度向你解释,因为我当前的工作就是搭建并配置 Kubernetes 运行环境,并让他...阅读全文

博文 2018-02-09 16:34:40 Aiello_Chan

Kubernetes1.5源码分析(二) apiServer之资源注册

源码版本 Kubernetes v1.5.0 简介 k8s里面有各种资源,如Pod、Service、RC、namespaces等资源,用户操作的其实也就是这一大堆资源。但这些资源并不是杂乱无章的,使用了GroupVersion的方式组织在一起。每一种资源都属于一个Group,而资源还有版本之分,如v1、v1beta1等。k8s目前正在使用的API groups: "core" group:它的REST path是api/v1 "extensions" group:它的REST path是/apis/extensions/v1beta1 "autoscaling", "abac" ... 服务器的URL的格式:/prefix/group/version/... (例如:/apis/extens...阅读全文

博文 2017-03-15 04:01:04 Robinly

DockOne微信分享( 九十):猎豹移动基于CoreOS在AWS上的项目实践

【编者的话】本次分享介绍基于AWS的EC2服务如何设计和搭建适合自己业务的架构方案实现全球多region部署,介绍模型案例:CoreOS的使用技巧与运维经验,把一个集群当成一台机器管理心得,包括: 为什么选择AWS和Docker为什么选择CoreOS部署我们的应用CoreOS在AWS平台上如何快速构建集群并且进行管理应用过程中遇到的问题与解决方案 1、为什么选择AWS和Docker 首先我先介绍一下猎豹移动的一些业务,如图, 我们在海外有着庞大的用户群体,接近16E下载量,月活用户4.94E,71%来自海外,战略合作伙伴主要以阿里、百度、腾讯、小米…… 这么大的海外用户量我们是这么做业务部署和服务的呢? 首先在选择服务商的方面我们选择了实力最强的亚马逊AWS作为我们的云服务商,我们海外几乎所...阅读全文

博文 2017-06-25 16:25:21 DarkForces.

实战生产环境:kubeadmin安装1.13.3最新版k8s集群教程

2019年3月6日:出版安装kubeadmin部署k8s集群教程 本次安装采用kubeadmin ! 安装的k8s版本为1.13.3版,是当前最新版本! 本篇文章,所使用的任何镜像和yaml都会在我的github上找到! github:https://github.com/heyangguang 有任何问题可以直接联系我的Email:heyangev@cn.ibm.com 主机列表: 系统采用的是Centos7.5 主机名 IP地址 角色 k8smaster 9.186.137.114 master k8snode-1 9.186.137.115 node k8snode-2 9.186.137.116 Node 基础环境准备: 关闭防火墙、关闭selinux,关闭swap,关闭网卡管理器。...阅读全文

博文 2019-03-06 10:34:41 何阳光

DockOne微信分享(一二三):如何扩展Kubernetes管理的资源对象

【编者的话】Kubernetes是一套容器化解决方案,也是一套资源管理的架构和标准;本次分享是基于我在饿了么现阶段容器化经验和理念的总结,探讨深化Kubernetes在企业内部的应用的方法, 介绍如何利用开源的API Server框架在企业内部打造和扩展Kubernetes管理的资源对象。 【3 天烧脑式 Docker 训练营 | 上海站】随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛。本次培训我们理论结合实践,从Docker应该场景、持续部署与交付、如何提升测试效率、存储、网络、监控、安全等角度进行。 Kubernetes逐渐成熟,也成为许多公司容器化平台的首选,然而在落地当中,每个企业面对的问题场景多少也有些不一样的,总是希望对Kubernetes做改造,来更好的满足...阅读全文

博文 2017-06-25 16:25:41 lijian

go任务调度4(etcd安装和基本使用)

下载,解压,进入目录,运行: [root@bogon etcd-v3.3.12-linux-amd64]# ./etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'(本地etcd的端口) etcd控制工具: [root@bogon etcd-v3.3.12-linux-amd64]# ETCDCTL_API=3 ./etcdctl (前面需要一个环境变量ETCDCTL_API=3)put、get、del、--prefix: [root@bogon etcd-v3.3.12-linux-amd64]# ETCDCTL_API=3 ./etcdctl put "n...阅读全文

博文 2019-04-20 03:35:10 梁十八

了解Flannel

概述 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。 简介 Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。在Kubernetes的网络模型中,假设了每个物理节点应该具备一段“属于同一个内网IP段内”的“专用的子网IP”。例如: 节点A:10.0.1.0/24 节点B:10.0.2.0/24 节点C:10.0.3...阅读全文

博文 2017-04-21 10:52:32 面码酱

熟读这5个开源项目就是合格的GO语言工程师!

因此,程序员刚入门除了读书外,阅读好的代码很重要。阅读优秀的代码可以了解大牛开发的思路,软件架构和语言技巧等。因此,本文针对Go语言,推荐大家5个非常优秀的开源项目,这些开源项目不仅应用广泛,而且其中所用的技术有很多基础技术,是做其它任何项目都不可或缺的。 Codis Codis是一个分布式Redis解决方案,与官方的纯P2P模式不同,Codis采用的是Proxy-based的方案。可以将Codis理解成为Web服务领域的Nginx,它实现了对Redis的反向代理和负载均衡。Redis本身就是就是一个高性能的缓存系统,可见Codis的性能更是没法说。 推荐阅读该开源项目源代码的原因在于应用广泛、高性能和网络协议。通过学习其代码相信对Go语言的如下方面能有很大的提升:网络编程: Codis本身...阅读全文

博文 2019-04-17 12:35:12 扬那个杨

ETCD探索

ETCD探索 梗概 这篇文章旨在从源码角度分析ETCD MVCC、Lease、Watch的实现,帮助我们更好的使用ETCD。 ETCD是什么? 这是ETCD官网给出的解释,ETCD是一个KV存储。现在有太多的KV存储中间件,我们为什么要选择ETCD呢?原因就是这句话:"distributed", "reliable",ETCD是一个分布式的、可靠的KV存储。相比于Redis,ETDC不够快,但足够安全,可靠。每一个中间件都有自己的特点,我选择ETCD有两个原因: ETCD是GO写的,所以GO用起来很方便。(不用ZK的原因) 扩容方便。 在讨论之前,我们先看下ETCD的目录结构 auth 访问权限 client/clientv3 GO客户端SDK contrib 里面放着raftexample...阅读全文

博文 2020-02-19 17:32:49 HammerMax

制作自己的docker镜像并发布到k8s

本篇主要讲述如何将自己的程序生成docker镜像,并且发布到k8s环境的简单步骤。在这之前你需要了解基本的docker使用,基本的k8s概念和命令。 Step1 编写代码为了方便使用之前一篇的代码,将KV值put到ETC集群。具体代码如下: package main import ( "fmt" "io/ioutil" "log" "time" "crypto/tls" "crypto/x509" "go.etcd.io/etcd/clientv3" "golang.org/x/net/context" ) var ( dialTimeout = 5 * time.Second requestTimeout = 4 * time.Second endpoints = []string{"ht...阅读全文

博文 2019-10-10 18:02:40 麦穗儿

ETCD探索-Lease

ETCD探索-Lease 梗概 租约,是ETCD的重要特性,用于实现key定时删除功能。与Redis的定时删除功能基本一致。 猜想 我们通常是这么使用Lease的,首先申请一个租约:lease,然后将这个租约赋给一对KeyValue。ETCD-Lease的实现不难,在讨论怎么实现之前,可以先猜测下。我的直观想法: func putWithLease(key string, value string, ttl int) { go func() { time.Sleep(ttl * time.Second) delete(key) }() put(key, value) } 简单说明,当put一对kv时,开启一个协程用于计时。当过了ttl后,将该key删除。 这么做可以实现key的定时删除功能,...阅读全文

博文 2020-02-19 17:32:47 HammerMax

DockOne技术分享(十六):闲谈Kubernetes 的主要特性和经验分享

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

博文 2017-06-25 15:01:09 小飞侠

TiKV 源码解析系列 ——Placement Driver

本系列文章主要面向 TiKV 社区开发者,重点介绍 TiKV 的系统架构,源码结构,流程解析。目的是使得开发者阅读之后,能对 TiKV 项目有一个初步了解,更好的参与进入 TiKV 的开发中。 TiKV 是一个分布式的 KV 系统,它采用 Raft 协议保证数据的强一致性,同时使用 MVCC + 2PC 的方式实现了分布式事务的支持。 本文为本系列文章第三节。 介绍 Placement Driver (后续以 PD 简称) 是 TiDB 里面全局中心总控节点,它负责整个集群的调度,负责全局 ID 的生成,以及全局时间戳 TSO 的生成等。PD 还保存着整个集群 TiKV 的元信息,负责给 client 提供路由功能。 作为中心总控节点,PD 通过集成 etcd ,自动的支持 auto fai...阅读全文

博文 2017-02-10 02:39:36 PingCAP

go任务调度3(etcd协调服务、raft协议)

etcd是将数据存储在集群中的高可用k-v存储。允许应用实时监听存储中的k-v变化。能容忍单点故障,能够应对网络分区。 (raft是一个分布式协议,管理的是日志;etcd管理的是k-v,把k-v放到日志里,kv就编程分布式集群了)(调用者写入请求发给leader请求写入k-v,leader会将日志实时向follower们复制,leader不会立即返回给调用者,会马上往集群follower做日志拷贝。当日志被复制给N+1个节点后(即大多数),本地提交(也就是告诉客户端提交成功),返回给调用者(客户端),为什么复制给N+1,而不是2N+1后就告诉客户端成功了呢?这就是大多数协议,也就是抽屉理论的重要表现)(一旦完成提交,leader会周期性把自己的提交信息告诉所有follower,这样,其他fo...阅读全文

博文 2019-04-19 20:35:11 梁十八

调试etcd时遇到的一些梗

前言 看完raft后, 一直有计划通过看etcd进一步学习, 毕竟在生产环境中引入了etcd, 有必要对其更透彻的了解. 在调试etcd时遇到了一些梗. 这里做个记录. 问题 cannot load 系列 如 cannot load golang_org/x/net/dns/dnsmessage 原因是golang的包管理工具bug, 在参考golang uninstall完全清理干净后: sudo rm -r /usr/local/go 再按官网golang install说明安装. 即可解决. wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.13.5.lin...阅读全文

博文 2020-01-02 21:32:38 enjolras1205

GO语言包问题

这个项目:https://github.com/smallnest/rpcx 下面文档中说: install the basic features: ``` go get -u -v github.com/smallnest/rpcx/... ``` If you want to use reuseport、quic、kcp, zookeeper, etcd, consul registry, use those tags to go get 、 go build or go run. For example, if you want to use all features, you can: ``` go get -u -v -tags "reuseport quic...阅读全文

Codis3.1安装文档

一、基本信息 1、Codis集群架构 image 2、环境信息 操作系统:macos 10.12.3 codis版本:3.1 go语言版本:1.8.1 etcd版本:3.2.0-rc.0 二、部署Codis 1、安装go 下载地址:https://golang.org/dl Mac:选择go1.8.1.darwin-amd64.pkg下载并安装 Windows:选择go1.8.1.windows-amd64.msi下载并安装 Linux:选择go1.8.1.linux-386.tar.gz或者go1.8.1.linux-amd64.tar.gz下载(根据操作系统位数选择下载对应的版本)解压到/usr/local路径,并设置环境变量 //解压到/usr/local路径 tar -C /usr/...阅读全文

博文 2017-05-20 14:24:21 有没有搞错_531a

go任务调度8(op取代get,put,delete方法)

package main import ( "go.etcd.io/etcd/clientv3" "time" "fmt" "context" ) func main() { var ( config clientv3.Config client *clientv3.Client err error kv clientv3.KV putOp clientv3.Op getOp clientv3.Op opResp clientv3.OpResponse ) // 客户端配置 config = clientv3.Config{ Endpoints: []string{"0.0.0.0:2379"}, DialTimeout: 5 * time.Second, } // 建立连接 if clie...阅读全文

博文 2019-04-21 03:35:09 梁十八

支持后悔药的etcdui

同时支持etcd v3 v2 版本,支持后悔药的etcd ui github https://github.com/wudaoluo/e... version 0.1 支持 etcd v2 支持 etcd v3 使用 go 代替了node 支持添加多个etcd地址 支持 配置文件动态更新 支持 etcdv3 tls 加密 支持 json toml 配置文件 version 0.2 (后悔药功能) etcd v3记录每次操作key,value 和版本号 添加leveldb (10万数据测试查询速度很快) etcd v3 后悔药开发完成 etcd v3 备份功能开发完成 etcd v2 [后悔药功能-待开发] etcd v2 [备份功能-待开发] version 0.3 开发中 使用vue重写界...阅读全文

博文 2019-02-26 16:34:49 qzuser

Announcing the release of Fedora 27

The Fedora Project proudly announces the release and general availability of the Fedora 27 Workstation and Fedora 27 Atomic editions. Fedora 27 incorporates thousands of improvements from both the Fedora Community and various upstream software projects. You can download Fedora 27 Workstation and the Fedora 27 Atomic Host right now from getfedora.or...阅读全文

博文 2017-11-29 02:45:27 Fedora Magazine

etcd raft library设计原理和使用

早在2013年11月份,在raft论文还只能在网上下载到草稿版时,我曾经写过一篇 blog ( http://link.zhihu.com/?target=http%3A//www.cnblogs.com/foxmailed/p/3418143.html ) 对其进行简要分析。4年过去了,各种raft协议的讲解铺天盖地,raft也确实得到了广泛的应用。其中最知名的应用莫过于etcd。etcd将raft协议本身实现为一个library,位于 https:// github.com/coreos/etcd/ tree/master/raft ( http://link.zhihu.com/?target=https%3A//github.com/coreos/etcd/tree/master/r...阅读全文

博文 2017-07-08 15:31:36 吴镝

书籍《自底向上分析 boltdb 源码》

# 一、为什么会有《自底向上分析boltdb源码》本书? 当初自己尝试学习boltdb时,摸索了很久,一方面网上讲解内部实现的资料少之又少,另一方面很多文章的分析也只是在理论上,自己回头看源码一脸懵逼。 所以在自己入坑折腾了一段时间后,把自己的理解和总结整理了下,方便对这块感兴趣的小伙伴,少走弯路,降低门槛。 # 二、 boltdb是什么? 在用自己的话介绍boltdb之前,我们先看下boltdb官方是如何自我介绍的呢? > Bolt is a pure Go key/value store inspired by [Howard Chu's][hyc_symas] [LMDB project][lmdb]. The goal of the ...阅读全文

PaaS 7层动态路由的若干实现

摘要:随着Docker的出现,PaaS、CaaS(Container As A Service)、甚至DCOS(DataCenter OS)呈现了爆发式的发展。而在PaaS中,因为实例一般默认为动态IP,对于7层调用(比如http请求),需要7层动态路由获取应用域名(或虚IP)和后端实例的映射关系,以提供7层服务;而对于4层调用(比如rpc调用),可以通过动态LVS或名字服务(或基于zookeeper/etcd等实现的服务注册和发现工具)进行调用。随着Docker的出现,PaaS、CaaS(Container As A Service)、甚至DCOS(DataCenter OS)呈现了爆发式的发展。而在PaaS中,因为实例一般默认为动态IP,对于7层调用(比如http请求),需要7层动态路由...阅读全文

博文 2017-07-17 10:06:27 暖夏未眠丶

k8s :kube-apiserver Legacy API 初始化

前言 看 k8s 源代码有一段时间,总感觉在迷宫里乱窜,有时候觉得终于找到出口了,一下子又撞墙了,总结下来还是自己的内功不够深厚,本文是对 kube-apiserver Legacy(遗留,即将废弃)API 初始化流程(以及数据结构)的一个梳理,算是做个"路标",便于以后在"迷宫"中还能找到回来的路 kube-apiserver 主要功能是提供 api 接口给客户端访问 后端 etcd 存储,当然这中间不光是简单的 key/value 存储,为了方便扩展,kube-apiserver 设计了一套代码框架将 "资源对象" 映射到 RESTful API 本文梳理了一下 legacy api 即 /api 打头的那些 api 初始化流程及相关的数据结构 k8s 代码更新比较快,本文基于 k8s ...阅读全文

博文 2018-03-24 09:35:03 xingpingz

2019-08-05

分布式任务调度平台 前言 在企业系统开发过程中难免少不了一些定时任务来进行定时触发执行任务,对于非分布式环境系统中,我们只需要在对应系统中内部集成一些调度库进行配置定时触发即可。 比如:使用Spring框架集成quartz,只需要进行一些简单的配置就能定时执行任务了。但是随着企业的系统越来越多、逐步从单一应用慢慢演变为微服务集群。 在分布式集群系统中主要面临出如:任务的重复执行、没有统一定时任务配置、任务节点故障转移、任务监控&报警等一些列的功能都是要在分布式系统中进行解决。 此分布式的定时任务调度平台,它非常轻量小巧,使用简单,后端以中心服务器为调度核心,负责集群中各种任务的动态分配和调度执行。 在平台前端支持Web界面可视化管理,我们可以创建、暂停/启动任务、删除未执行的任务快照、或者查...阅读全文

博文 2019-08-05 22:32:44 busgo

gRPC负载均衡(自定义负载均衡策略)

### 前言 上篇文章介绍了如何实现gRPC负载均衡,但目前官方只提供了`pick_first`和`round_robin`两种负载均衡策略,轮询法`round_robin`不能满足因服务器配置不同而承担不同负载量,这篇文章将介绍如何实现自定义负载均衡策略--`加权随机法`。 `加权随机法`可以根据服务器的处理能力而分配不同的权重,从而实现处理能力高的服务器可承担更多的请求,处理能力低的服务器少承担请求。 ### 自定义负载均衡策略 gRPC提供了`V2PickerBuilder`和`V2Picker`接口让我们实现自己的负载均衡策略。 ```go type V2PickerBuilder interface { Build(info PickerBuildInfo) balancer.V2...阅读全文

博文 2020-05-20 17:12:40 939496716

容器云架构中使用gorouter+haproxy作为流量入口

​ 小贴士 Gorouter 项目地址:https://github.com/cloudfoundry/gorouter/Gorouter来源于CloudFoundry。是一个高性能、轻量级的路由器及负载,它是整个平台的流量入口,负责分发所有的http请求到对应的instance。它在内存中维护了一张路由表,记录了域名与实例的对应关系,所谓的实例自动迁移,靠得就是这张路由表,某实例宕掉了,就从路由表中剔除,新实例创建了,就加入路由表。 Gnatsd Gnatsd来源cloudfoundry,是一个开源轻量高性能的消息系统,gorouter依赖它来作为消息系统,进行PUB/SUB操作。 官方地址:http://nats.io/ 项目地址:https://github.com/apcera/gn...阅读全文

博文 2019-04-18 09:34:41 程序员同行者

编写数据库:第2部分-预写日志

与往常一样,请访问github.com/danchia/ddb…代码 所以,您的数据不是很耐用... 在第1部分中,我使用gRPC和Go编写了一个非常简单的服务器,该服务器用于服务Get和Put请求内存中的映射。如果服务器退出,它将丢失所有数据,对于数据库,我必须承认这是非常糟糕的。 我实现了预写日志记录,允许在服务器重新启动时恢复内存中状态。尽管这个想法真的很简单,但实现起来却是很困难的!最后,我看了 LevelDB , Cassandra 和 etcd 如何解决此问题。 预写日志 预写日志(WAL)是数据库系统中一种常用的技术,用于保证写操作的原子性和持久性。WAL背后的关键思想是,在我们对数据库状态进行任何实际修改之前,我们必须首先记录我们希望是原子性的和持久存储(例如磁盘)的完整操作...阅读全文

博文 2020-01-31 23:34:15 Samuel_zx

用etcd实现服务注册和发现

系统中实现服务注册与发现所需的基本功能有 服务注册:同一service的所有节点注册到相同目录下,节点启动后将自己的信息注册到所属服务的目录中。 健康检查:服务节点定时发送心跳,注册到服务目录中的信息设置一个较短的TTL,运行正常的服务节点每隔一段时间会去更新信息的TTL。 服务发现:通过名称能查询到服务提供外部访问的 IP 和端口号。比如网关代理服务时能够及时的发现服务中新增节点、丢弃不可用的服务节点,同时各个服务间也能感知对方的存在。 在分布式系统中,如何管理节点间的状态一直是一个难题,etcd 是由开发并维护的,它使用 Go 语言编写,并通过Raft 一致性算法处理日志复制以保证强一致性。etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据 TTL 失效、数据改变监视、多值、...阅读全文

博文 2019-11-08 14:02:41 KevinYan

CentOS install etcd 测试

1,关于etcd etcd是一个类似于zookeeper的,服务发现工具。 参考简介: http://dockone.io/article/667 https://coreos.com/blog/performance-of-etcd.html etcd性能对比: 2,搭建环境 在linux 下面:安装最新的3.1.1 https://github.com/coreos/etcd/releases/download/v3.1.1/etcd-v3.1.1-linux-amd64.tar.gz 解压缩。直接启动。 ./etcd version ./etcd 我使用的是virtualbox安装的,因为是虚拟机。所以使用了NAT的网络。远程访问做了一个端口转发。 同时启动一个etcd需要绑定到ip ...阅读全文

博文 2017-07-12 10:26:56 freewebsys

flanneld启动报错:vxlan_network.go:158] failed to add等错

报错信息 Apr 21 15:56:37 node02 systemd[1]: Started Flanneld overlay address etcd agent. Apr 21 15:56:37 node02 flanneld[123894]: I0421 15:56:37.621933 123894 iptables.go:125] Adding iptables rule: ! -s 172.17.0.0/16 -d 172.17.0 Apr 22 10:14:08 node02 flanneld[123894]: E0422 10:14:08.245343 123894 vxlan_network.go:158] failed to add vxlanRoute (172.17....阅读全文

博文 2020-04-23 13:33:19 wx5b2999d962e6d

Centos7.2搭建kubernates集群

一、准备环境1.1 准备机器准备三台CentOS7.2机器,一台作为master节点,其他作为node节点修改主机名称hostnamectl set-hostname k8s-mst Role IP Hostname Master 192.168.0.87 k8s-cns1-mst Node 192.168.0.88 k8s-cns1-nod1 Node 192.168.0.89 k8s-cns1-nod2 修改master节点/etc/hosts,添加以下内容(不设置的话,在master上kubectl相关命令无法操作对应主机上对象) 192.168.0.87 k8s-cns1-mst 192.168.0.88 k8s-cns1-nod1 192.168.0.89 k8s-cns1-nod...阅读全文

博文 2017-07-15 17:06:16 我心随我

ETCD探索-MVCC

ETCD探索-MVCC MVCC MVCC模块ETCD的存储模块,是ETCD核心模块。 作为一个开源项目,其代码的封装是值得我们学习的。MVCC作为底层模块,对上层提供统一的方法,而这些方法都定义在kv.go这个文件中,很像一个头文件(.h)。我们可以只看kv.go以及配合kv_test.go就可以知道mvcc包是怎么用的。 kv.go type KV interface { ReadView WriteView // Read creates a read transaction. Read(trace *traceutil.Trace) TxnRead // Write creates a write transaction. Write(trace *traceutil.Trace) ...阅读全文

博文 2020-02-19 17:32:41 HammerMax

1. 通过RKE快速部署kubernetes集群

前期准备 RKE:Ranchar Kubernetes Engine https://github.com/rancher/rke由于RKE是由golang编写,所以直接下载对应系统的二进制文件即可下载地址: https://github.com/rancher/rk... 1.建议使用Ubuntu 16.04.3 LTS版本;如果使用CentOS 7,建议7.3以上版本2.各主机的hostname主机名必须不同!3.hosts文件设置:/etc/hosts要配置正确,一定要有127.0.0.1 localhost 这一项;hosts文件中包含所有主机节点的IP和名称列表。 Docker 通过Rancher提供的脚本进行安装(以下是最新支持的docker版本) Docker版本 安装脚本 1...阅读全文

Docker - 用Flannel跨主机

试了下比较流行的几种SDN,感觉flannel还是比较好用,这里简单记录一下。用的是virtualbox,3个机器,分别为:genesis: inet 192.168.99.103/24 brd 192.168.99.255 scope global dynamic enp0s3exodus: inet 192.168.99.105/24 brd 192.168.99.255 scope global dynamic enp0s3leviticus: inet 192.168.99.106/24 brd 192.168.99.255 scope global dynamic enp0s3虚机信息如下[root@localhostyum.repos.d]# uname -marsLinuxlo...阅读全文

博文 2017-09-06 04:07:34 jony456123

写Go代码时遇到的那些问题[第1期]

程序员步入“大龄”,写代码的节奏也会受到影响。以前是长时间持续地写,现在写代码的节奏变成了“波浪形”:即写一段时间,歇一段时间。当然这里的“歇”并不是真的歇,而是做其他事情了,比如:回顾、整理与总结。 平时写Go代码,时不时就遇到一些问题,或是写出一些让自己还算满意的代码,这里全部列为“问题”行列。这些“问题”(以及其解决方法)往往比较“小”、比较“碎片”,不适合以自己“擅长”的“长篇”风格写出来分享,也不知道以什么样的“题目”去分享更好,但这样的“问题”在日常又总是会遇到。考量来考量去,赶脚还是用一系列的文章去分享比较合适,即每隔一段时间,积累了一些问题后,就写一篇文章分享一下。 这是第一篇,后续不确定时间地(注意:这不是weekly的哦)发布新篇,直到没啥可写了或不写Go代码了^0^。 ...阅读全文

博文 2018-01-15 10:37:54 bigwhite