利用Kubernetes中的leaderelection实现组件高可用

在Kubernetes中,通常kube-schduler和kube-controller-manager都是多副本进行部署的来保证高可用,而真正在工作的实例其实只有一个。这里就利用到 leaderelection 的选主机制,保证leader是处于工作状态,并且在leader挂掉之后,从其他节点选取新的leader保证组件正常工作。 不单单只是k8s中的这两个组件用到,在其他服务中也可以看到这个包的使用,比如cluster-autoscaler等都能看得到这个包的,今天就来看看这个包的使用以及它...阅读全文

掘金 2020年02月16日 silenceper

清晰架构(Clean Architecture)的Go微服务

我用Go和gRPC创建了一个微服务项目,并试图找出最好的程序结构,它可以作为我其他项目的模板。我还将程序设计和编程的最佳实践应用于Go Microservice程序,例如清晰架构(Clean Architecture),依赖注入(Dependency Injection),日志记录,错误处理等。我有Java背景,并发现自己在Java和Go之间挣扎,它们之间的编程理念完全不同。我写了一系列关于在项目工作中做出的设计决策和取舍的文章。 阅读这些文章不需要熟悉Go,但如果你有Go基础绝对会有帮助。如果...阅读全文

Segmentfault 2020-02-20 16:32:32 倚天码农

为什么越来越多的人偏爱go语言

如果你是一个开发者或者程序员,你大概应该听过Go语言或者Golang语言。当然,如果没有听过也没关系,看到这篇文章的同学,就说明你对Golang是关注的,只需要这一点就够了。今天来聊聊关于Golang的几个问题。越来越多人偏爱Go语言的真相可能你身边有程序员朋友,或者技术论坛里有人在谈论Go或者Golang,引起了你的注意,让你觉得越来越多的人喜欢Go语言。作为一名负责人的技术普及人员,“越来越多”到底是多少,我去亲自做了数据收集,如下图:中国的Golang语言搜索指数 <img src="ht...阅读全文

知乎专栏 2020-02-17 09:12:15 茹姐

Go的标准IDE:Acme文本编辑器

摘要Acme是一个文本编辑器。一说到文本编辑器,大家最容易想到的是Vim和Emacs之争。可是和Acme比起来,Vim和Emacs是同宗,都充分利用和依赖键盘操作;而Acme充分利用鼠标:像Emacs的组合键一样组合鼠标按键,又称“chord”。Vim和Emacs减少手在键盘和鼠标之间的移动,Acme方便迅速直接地定位,不需要按着箭头按键不放来移动光标。听说过Acme的人比较少。但是说起它的作者Rob Pike大家就知道了。Rob Pike是Unix的主要设计者,也是Unix的后继Plan 9的...阅读全文

知乎专栏 2020-02-17 09:12:02 王益

【代码篇】从零开始一步步搭建自己的golang框架(七)

这个框架的目标是作为一个通用的框架,我希望它大而全,在日后可以直接作为我其他项目的基础模板,所以我还想继续给他添加一些功能,就当写一些demo进去吧。这篇文章,我将会添加一个队列的功能。 nsq 队列有很多种,我选择nsq。使用nsq需要知道以下几个概念: nsqd:负责维护队列的组件,接受消息排队和投递; nsqlookupd:管理nsq集群的组件; nsqadmin:nsq的web管理组件; topic:消息的集合。产生消息,需要指定该消息属于哪个topic的; channel:队列消息的副...阅读全文

51CTO博客 2020-02-16 11:12:47 wx5e1abbbb0a5e5

利用Kubernetes中的leaderelection实现组件高可用

在Kubernetes中,通常kube-schduler和kube-controller-manager都是多副本进行部署的来保证高可用,而真正在工作的实例其实只有一个。这里就利用到 leaderelection 的选主机制,保证leader是处于工作状态,并且在leader挂掉之后,从其他节点选取新的leader保证组件正常工作。 不单单只是k8s中的这两个组件用到,在其他服务中也可以看到这个包的使用,比如cluster-autoscaler等都能看得到这个包的,今天就来看看这个包的使用以及它...阅读全文

Segmentfault 2020-02-20 14:32:33 silenceper

golang reflect包,反射学习与实践

Go 语言反射的三大法则,其中包括: 从 interface{} 变量可以反射出反射对象; 从反射对象可以获取 interface{} 变量; 要修改反射对象,其值必须可设置; 从反射对象到接口值的过程就是从接口值到反射对象的镜面过程,两个过程都需要经历两次转换: 从接口值到反射对象: 从基本类型到接口类型的类型转换; 从接口类型到反射对象的转换; 从反射对象到接口值: 反射对象转换成接口类型; 通过显式类型转换变成原始类型; Type,Value 反射包中的所有方法基本都是围绕着Type和Va...阅读全文

Segmentfault 2020-02-20 11:32:32 byte

Go 每日一库之 email

简介 程序中时常有发送邮件的需求。有异常情况了需要通知管理员和负责人,用户下单后可能需要通知订单信息,电商平台、中国移动和联通都有每月账单,这些都可以通过邮件来推送。还有我们平时收到的垃圾邮件大都也是通过这种方式发送的????。那么如何在 Go 语言发送邮件?本文我们介绍一下email库的使用。 快速使用 这个库的使用快不了,为什么呢? 先安装库,这个自不必说: $ go get github.com/jordan-wright/email 复制代码我们需要额外一些工作。我们知道邮箱使用SMTP...阅读全文

掘金 2020年02月16日 darjun

Go 每日一库之 email

简介 程序中时常有发送邮件的需求。有异常情况了需要通知管理员和负责人,用户下单后可能需要通知订单信息,电商平台、中国移动和联通都有每月账单,这些都可以通过邮件来推送。还有我们平时收到的垃圾邮件大都也是通过这种方式发送的????。那么如何在 Go 语言发送邮件?本文我们介绍一下email库的使用。 快速使用 这个库的使用快不了,为什么呢? 先安装库,这个自不必说: $ go get github.com/jordan-wright/email 我们需要额外一些工作。我们知道邮箱使用SMTP/POP...阅读全文

Segmentfault 2020-02-19 22:32:33 darjun

Go Web 编程--应用ORM

上篇文章中我们在使用的开发环境中增加了MySQL容器,然后介绍了使用database/sql标准库结合数据库驱动包进行数据库操作的方法。不过它们是相对偏底层的软件包。实际开发经常会使用一些在它的基础上封装的 ORM库。ORM的查询使用起来更简单些,语法更富表达力。这篇文章我们主要探究下面这些内容。 gorm的基本用法 如何管理ORM的使用 如何合理规划项目目录结构 安装gorm包 gorm是一个出色的,对开发人员友好的 Golang ORM 库,其支持的特性包括: 全特性 ORM (几乎包含所有...阅读全文

掘金 2020年02月16日 kevinyan

「goz」开源库,在Go中快速发起HTTP请求

goz 是一个用于在Go代码中快速发起HTTP请求的开源库, 部分实现参考了PHP流行请求库: guzzle 安装 go get -u github.com/idoubi/goz 复制代码文档 API 文档地址: godoc.org/github.com/… 基本使用 package main import ( "github.com/idoubi/goz" ) func main() { cli := goz.NewClient() resp, err := cli.Get("http://1...阅读全文

掘金 2020年02月15日 艾逗笔

使用Kubernetes扩展Symfony消费者

在Debricked,我们已经将Symfony用于我们的Web后端已有一段时间了。它为我们提供了很好的服务,当他们在Symfony 4.1中宣布Messenger组件时,我们很想尝试一下。从那时起,我们就使用该组件进行异步排队电子邮件。 最近,出于性能原因,需要将我们从GitHub集成中收到的GitHub事件的处理从Web后端分离到单独的微服务,以分开处理。我们决定利用Messenger组件提供的生产者/消费者模式,因为它使我们可以将各种事件异步地分派到队列中,然后立即将该事件确认给GitHub...阅读全文

Segmentfault 2020-02-19 20:32:33 iyacontrol

Go 每日一库之 carbon

简介 一线开发人员每天都要使用日期和时间相关的功能,各种定时器,活动时间处理等。标准库time使用起来不太灵活,特别是日期时间的创建和运算。carbon库是一个时间扩展库,基于 PHP 的carbon库编写。提供易于使用的接口。本文就来介绍一下这个库。 快速使用 第三方库需要先安装: $ go get github.com/uniplaces/carbon 复制代码后使用: package main import ( "fmt" "time" "github.com/uniplaces/carb...阅读全文

golang学习笔记(二):流程控制

欢迎访问我的博客和github! 今天咱们把烦人的事情丢一丢,继续来学习go的基础知识。 这篇文章记录go语言的流程控制和更多类型。 流程控制 for Go 只有一种循环结构:for 循环。 基本的 for 循环由三部分组成,它们用分号隔开: 初始化语句:在第一次迭代前执行 条件表达式:在每次迭代前求值 后置语句:在每次迭代的结尾执行 初始化语句通常为一句短变量声明,该变量声明仅在 for 语句的作用域中可见。 一旦条件表达式的布尔值为 false,循环迭代就会终止。 注意:和 C、Java、J...阅读全文

掘金 2020年02月15日 veeupup

图解go反射实现原理

Go反射的实现和interface和unsafe.Pointer密切相关。如果对golang的interface底层实现还没有理解,可以去看我之前的文章:Go语言interface底层实现,unsafe.Pointer会在后续的文章中做介绍。 (本文目前使用的Go环境是Go 1.12.9) interface回顾 首先我们简单的回顾一下interface的结构,总体上是: 细分下来分为有函数的iface和无函数的eface(就是interface{}); 无函数的eface 有函数的iface ...阅读全文

掘金 2020年02月15日 RyuGou

从Go汇编角度解释for循环的两个疑点

Go常用的遍历方式有两种:for和for-range。实际上,for-range也只是for的语法糖,本文试图从汇编代码入手解释for循环是如何工作的。 问题 首先来看看几个令人迷惑的地方。 问题1:遍历过程中取值 func main() { arr := [5]int{1, 2, 3, 4, 5} for _, v := range arr { println(&v) } } 上面这段代码里,会打印出什么? 问题2:遍历过程中修改 arr := []int{1, 2, 3, 4, 5} for...阅读全文

Segmentfault 2020-02-19 16:32:34 shaoyuan1943

golang高并发模型

github上看到的一篇关于golang高并发性的文章,觉得写的非常好 github 地址 https://github.com/rubyhan1314/Golang-100-Days 一、并发性Concurrency1.1 多任务怎么来理解多任务呢?其实就是指我们的操作系统可以同时执行多个任务。举个例子,你一边听音乐,一边刷微博,一边聊QQ,一边用Markdown写作业,这就是多任务,至少同时有4个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是界面上没有显示而已。 1.2 什么是并发G...阅读全文

序语程言 2020-02-14 00:00 序语程言

Go Web 编程--应用 ORM

上篇文章中我们在使用的开发环境中增加了MySQL容器,然后介绍了使用database/sql标准库结合数据库驱动包进行数据库操作的方法。不过它们是相对偏底层的软件包。实际开发经常会使用一些在它的基础上封装的 ORM库。ORM的查询使用起来更简单些,语法更富表达力。这篇文章我们主要探究下面这些内容。 gorm的基本用法 如何管理ORM的使用 如何合理规划项目目录结构 安装gorm包 gorm是一个出色的,对开发人员友好的 Golang ORM 库,其支持的特性包括: 全特性 ORM (几乎包含所有...阅读全文

Segmentfault 2020-02-19 16:32:35 Kevin

记一次golang的内存泄露

程序功能 此程序的主要功能是将文件中数据导入到clickhouse数据库中。 【问题描述】 服务器内存每隔一段时间会耗尽 【问题分析】 由于使用的是go语言开发的,所以采用了业界流行的工具pprof。 参考URL:https://cizixs.com/2017/09/11/profiling-golang-program/ 工具的使用与思路: 1)先修改源代码 2)安装工具观察 3)根据工具抓取的现象进行分析 4)修复内存缺陷代码, 再根据分析结果修复内存泄漏的地方 5)发布代码进行再跟踪分析 ...阅读全文

博客园 2020-02-10 10:06 CtripDBA