通过 xDS 实现 Envoy 动态配置

在云原生时代,容器取代虚拟机成为承载应用工作负载的主要形式。虚拟机生命周期相对较长,可能有数天,但是容器少则几分钟。这就要求负载均衡器必须能适应这种动态性。Envoy 通过 xDS 实现了其动态配置,来应对不断变化的基础架构。xDS 简介Envoy通过文件系统或查询管理服务器发现其各种动态资源。这些发现服务及其相应的API统称为xDS。资源类型xDS API中的每个配置资源都有与之关联的类型。资源类型遵循版本控制方案。目前V2版本已经停止开发,不过会有一年的维护期。V3版本是目前主力版本。支持以...阅读全文

Segmentfault 2021-01-20 09:32:33 .container .car 等

限流-令牌桶实现(go版本)

漏斗算法思想是将所有请求先存到一个桶里。若此刻桶容量没满,表示当前请求是可以访问资源。若满了,则拒绝服务。同时桶会以固定速率取出桶里的请求来处理具体实现方法可以将请求先暂存到一个队列中,若队列已满,则拒绝该请求。同时有一个周期性定时任务来消费队列里的数据从实现可以看出,不管请求有多少或者瞬时流量有多大,请求的处理是固定速率的,所以令牌桶油流量整形的功能相对计数器方法,令牌桶能有效避免抖动的问题,但当瞬时请求量很大时,后续的请求很有可能由于得不到及时处理而超时import ( "context" ...阅读全文

51CTO博客 2021-01-17 19:01:01 mb5ffbc8f4a5a17

浅析go中的类型比较

概述在最近的面试中被面试官问到go之间的类型比较,回答的并不是非常好,根本上来说还是基础不够牢固啊!看了网上的一堆资料,自己做了一些简单的总结,哈哈!go中的类型首先来看看go包含的最基础的集中类型基本类型:go中最基本类型包括整型(int、uint、int8、uint8、int16、uint16、int32、uint32、int64、uint64、byte、rune等)、浮点型(float32、float64)、字符串(string也是个[]rune数组)和比较不常用的复数类型(complex...阅读全文

Segmentfault 2021-01-19 23:32:32 .container .car 等

踩坑日志之elasticSearch

前言上周六马上就下班了,正兴高采烈的想着下班吃什么呢!突然QA找到我,说我们的DB与es无法同步数据了,真是令人头皮发秃,好不容易休一天,啊啊啊,难受呀,没办法,还是赶紧找bug吧。下面我就把我这次的bug原因分享给大家,避免踩坑~。bug原因之bulk隐藏错误信息第一时间,我去看了一下错误日志,竟然没有错误日志,很是神奇,既然这样,那我们就DEBUG一下吧,DEBUG之前我先贴一段代码:func (es *UserES) batchAdd(ctx context.Context, user [...阅读全文

Segmentfault 2021-01-19 18:32:32 asong

Go的Pipe应用场景,往服务器提交multipart请求

multipart 请求是多部件请求体,一般来多用于上传文件等场景,由于文件上传,请求体会比较大,就不适合在内存中构建完整的请求体(例如使用bytes.Buffer)。这种情况就可以考虑使用Pipe,它会返回一个Writer和一个Reader,管道流,顾名思义,一头读,一头写。读取磁盘文件,写入网络,并不会缓存在内存中。非常适合这种场景。func Pipe() (*PipeReader, *PipeWriter) { p := &pipe{ wrCh: make(chan []byte), rd...阅读全文

Segmentfault 2021-01-19 22:32:33 .container .car 等

如何在M1上编译带有CGO的Go项目

之前一直用的公司17年的本子,卡的是在不行。最近入m1 13 inch/16g, 在使用上一直存在一些问题,包括 Chrome 的arm版本也不例外,存在各种卡死的现象。经过Rosetta 2 转译过的代码有明显的卡顿感。最典型的例子就是在goland 中如果使用了非 go1.16-darwin/arm64 版本的go,在写代码的时候不全提示,代码搜索都略卡。但是如果使用了 go1.16 又会导致一些使用了 CGO 的项目无法编译,相信很多小伙伴也遇到了相同的问题。BTW, 由于是吃螃蟹,对于这...阅读全文

51CTO博客 2021-01-17 10:38:03 mb5ffbc8bbd6412

golang 时区问题

golang中需要将int64类型时间戳转当前时间,代码如下func Date(format string, unixTime int64) string { time := time.Unix(unixTime, 0) return time.Format(format) }测试了下,没有问题。但是发现travis-ci中测试代码一直不通过。查询发现,是由于不通时区导致的。修改代码如下func Date(format string, unixTime int64) string { //TOD...阅读全文

Segmentfault 2021-01-19 09:32:33 .container .car 等

基于云原生CloudEvent实现服务目录

基于事件驱动的系统架构在日常的平台开发中早已司空见惯,通过消息队列进行事件的发送,然后分别构建对应的生产者和消费者。不过在传统的业务开发模式不同的事件会有不同的格式,不同的生产者生成出的事件格式也各不相同,消费者能消费的格式也是千差万别,本质上事件、生产者、消费者还是耦合的。那如何解决该问题呢?那就是我们今天要聊的CloudEvent。CloudEvent简介从官网的CloudEvents描述中我们可以看出,CloudEvent本质上就是一个描述事件数据的规范。所以对于CloudEvents的学...阅读全文

Segmentfault 2021-01-19 17:32:35 .container .car 等

golang 写个选择排序

先看选择排序定义。 初始状态:无序区为R[1..n],有序区为空; 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区; n-1趟结束,数组有序化了。 可以不拘小节,不作优化的情况下写出代码。 func selectionSort(arr []int) { f...阅读全文

简书 2021-01-16 23:32:39 追风骚年

golang 写个插入排序

有点上瘾,再来写一个。 从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元素,将该元素移到下一位置; 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置; 将新元素插入到该位置后; 重复步骤2~5。 我在写插入排序的时候,一下写了 3 个版本,经测试都是可以使用,只是排序和排序之间越来越像。 func insertionSort(arr []int) { for i := 1; i < len(arr); i++...阅读全文

简书 2021-01-16 23:32:39 追风骚年

Java微服务 vs Go微服务,究竟谁更强!?

前言Java微服务能像Go微服务一样快吗?这是我最近一直在思索地一个问题。去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nelson和Peter Nagy就对此做过一系列基础的的测试用以比较。接下来就给大家介绍下。在程序员圈子里,普遍的看法是Java老、慢、无聊 ,而Go是快、新、酷为了尽可能的进行一个相对公平的测试,他们使用了一个非常简单的微服务,没有外部依赖关系(比如数据库),代码路径非常短(只是操纵字符串),使用了小型的、轻...阅读全文

51CTO博客 2021-01-16 19:06:06 mb5ffbc824a2582

golang遍历时修改被遍历对象

前言很多时候需要将遍历对象中去掉某些元素,或者往遍历对象中添加元素,这时候就需要小心操作了。对于go语言中的一些注意事项我做了总结和示例,留下点笔记。遍历切片遍历切片时去掉元素,错误示例:func main() { arr := []int{1, 2, 3, 4} for i := range arr { if arr[i] == 3 { arr = append(arr[:i], arr[i+1:]...) } } fmt.Println(arr) }最终报错panic: runtime er...阅读全文

51CTO博客 2021-01-16 16:37:51 mb5ffbc824a2582

[译]巧用go:linkname 定制 TLS 1.3 加密算法套件

[译]原文:[Abusing go:linkname to customize TLS 1.3 cipher suites](https://www.joeshaw.org/abusing-go-linkname-to-customize-tls13-cipher-suites/) -- >``` 已获授权翻译转载 感谢Joe! 如翻译有误,还请大家不吝赐教!``` 当Go1.12发布后,我非常兴奋地去测试我们的新opt-in对TLS1.3支持情况。 TLS1.3对于当前的WEB安全协...阅读全文

Go语言中文网 2021-01-16 15:44:26 edgeidea

go调用封装虹软ArcFace人脸识别

go调用封装虹软ArcFace人脸识别 一、项目简介 由于公司是虹软的重度用户,出于工作需要和个人兴趣,寻思着用golang封装一下C++的SDK,利用golang的跨平台特性达到跨平台的效果(当然前提是SDK支持的平台) 项目已经开源到github(传送门),支持的SDK版本有:v2.x v3.x v4.0.0 二、编译环境与运行环境的准备 1. 安装go版本SDK 推荐使用go module的方式进行安装(需要哪个版本修改版本号即可): go get -u -d github.com/win...阅读全文

简书 2021-01-16 14:32:48 WindOSX

寒假第一周的学习

(一) 因为本身go的基础不扎实 ,所以在来园区之前我就想好要把go的基础再过一遍,我找了一个还算比较喜欢的视频,看的大概第一天晚上吧,博伦学长来我问我在干啥,我说想再回顾一下go基础,他说这个用着用着就好了,我说还是想再看一遍,学长说可以但是不要耽搁太长时间。我就继续看了下去,因为我做笔记有点慢,再加上一些其它的事情,这个视频并没有和我想的那样两天就结束了,到今天,我从视频里能够回顾到一些细节,温故而知新,第二遍理解比第一遍理解更多了一些,但是这样的效率太低了,我继续返回看书的过程。 (二) ...阅读全文

简书 2021-01-16 14:32:48 快乐肥宅代码少女

Go之简介

Go(又称Golang)是Google开发的一种静态,强类型、编译型、并发型的编程语言。其于2009年11月正式发布,成为开源代码项目。Go的语法接近C语言,但其支持垃圾回收功能,开发效率远高于C语言。而其对海量并发的支持,以及在运行效率,低内存消耗方面的优异表现,也有人称其为互联网时代的C语言。语言特色:简洁、快速、安全易学、高并发、有趣、开源内存管理、数组安全、编译迅速、跨平台、更具生产力Go语言用途:这可能是大家最关心的一个问题了,首先Go语言和大多数服务器端编程语言一样,可以进行web相...阅读全文

简书 2021-01-16 14:32:47 goodcoding

[Go] golang中接口值(interface)的比较

当写项目的过程中 , 有时候进行逻辑判断 , 如果没注意对两个interface类型的变量进行比较 , 会造成混乱问题接口比较的时候 , 只有当这两个变量的动态类型 , 动态值都相等的时候 , 才是相等的一个nil的interface类型 , 是包含下面俩的 , 动态类型和动态值 使用fmt.Printf("%T\n", w) 可以打印interface变量的动态类型比如项目里 , 这俩变量虽然都是interface{}的 值都是1 , 但是不能进行直接比较 , 这里我进行了全都转成字符串类型阅读全文

51CTO博客 2021-01-16 10:52:27 mb5ffbc824a2582

[Go] golang中接口值(interface)与nil比较或指针类型之间比较的注意问题

注意问题 , 当对interface变量进行判断是否为nil时 , 只有当动态类型和动态值都是nil , 这个变量才是nil下面这种情况不是nilfunc f(out io.Writer) {// ...do something...if out != nil {out.Write([]byte("done!\n")) } }var buf *bytes.Buffer f(buf) 上面的情况 , 动态类型部分不是nil , 因此 out就不是nil 动态类型为指针的interface之间进行比...阅读全文

51CTO博客 2021-01-16 10:39:22 mb5ffbc80063708