服务治理那些事-容错之断路器

微服务架构将某个单一的复杂系统拆分成多个可独立自治的服务,服务之间通过松耦合的方式进行交互,这为我们带来了许多好处,包括低耦合、可重用性、业务敏捷性和分布式部署能力、强扩展性。但于此同时,也给我们引进了新的挑战。​ 在微服务场景下,每个模块之间的互通都通过远程调用的方式来代替传统单体架构中的内存调用,在获得扩展性、重用性的同时,也使得整个体系结构因为网络的不稳定性、资源的过量使用变得更加脆弱。当一项或多项依赖服务持续不可用或出现高延迟时,将会导致整个服务级联失败。而且,服务客户端中的重试逻辑会使...阅读全文

简书 2020-04-13 09:32:47 你比天气还晴朗

Golang 中该使用指针类型还是值类型

使用 Golang 的开发者都知道,Go 语言里有指针的概念,它比 C++ 的指针要简单的多,同时你需要记住一个概念:Go 语言是 值传递。我们今天探讨的是在编码的时候到底该使用指针呢还是值类型?在作为参数和返回值的时候该如何去使用?两种传递方式有什么区别? 基础概念 值类型和引用类型 这幅图中展示了常用的值类型和引用类型(引用类型和传引用是两个概念)。在左边是我们常用的一些值类型,函数调用时需要使用指针修改底层数据;而右边是 “引用类型”,我们可以理解为它们的底层都是指针类型,所以右边的类型在...阅读全文

简书 2020-04-13 09:32:45 chjxidian

使用sort包排序

在程序开发中,不可避免的需要给数据集进行排序,如果在语言级别不提供支持的话,我们则需要自己写算法进行数据的处理,麻烦还不一定高效。 幸好Golang在标准包中,官方有提供sort包中Sort()函数提供排序功能。并且天然支持[]int,[]float64,[]string切片的排序查找功能,并且也能够实现对自定义类型集合的排序。 下面我们先来看下golang中Sort函数的结构是什么样的。 func Sort(data Interface) { n := data.Len() quickSort...阅读全文

简书 2020-04-13 09:32:43 YXWKY

作为一个搞运维的,你真的了解 SRE 么?

来自:知乎,作者:悟冥 链接:https://zhuanlan.zhihu.com/p/97600369 0、为什么诞生 SRE? 原因一:企业成本的增长同用户的增长不成线性变化。但是随着系统的复杂度提升,组建越来越多,用户的流量压力也越来越大,相关的变更也会越来越多,各模块之间的变更顺序也会越来越复杂。在这样的情况下,单纯的靠运维人力的数量提升无法满足业务的发展需求,而且会提升企业的成本; 原因二:传统的研发团队和运维团队天然具有冲突。公司的IT人员的配置:研发(Dev)和运维(Ops),研发...阅读全文

简书 2020-04-13 09:32:43 码农小光

VSCode搭建Go开发环境(2020-04-13更新)

现在Go1.14都已经发布好些日子了,之前发的Go环境搭建教程早已过时,只是因为时间问题一直没来得及更新 这次怀着愧疚的心情,在凌晨四点时,将这教程进行一个更新 注意:本教程最大的好处是不需要梯子。直接在墙内可进行一切操作,文章写给纯小白的,部分Linux常识解释的过多,熟悉的人请略过 Go的安装 安装基本还是之前的老样子,不过现在的安装早已省事不少,不再需要配置环境变量。直接去官网,下载了安装包后直接安装即可 在Go中文网进行Go最新版安装包的下载(或者复制网址浏览器打开https://stu...阅读全文

简书 2020-04-13 09:32:42 闹闹吃鱼

【区块链】Tendermint——本机单节点部署

Tendermint 由于工作原因2年前开始接触Hyperledger Fabric,其社区还是很活跃的,已经从当年的v0.7发展到如今v2.0了。但不得不说Fabric的体量还是挺大的,对于二次开发来说有一定难度。所以最近开始转向Tendermint,因为Tendermint更简单、易于理解、性能更高(当然这是Tendermint自己标榜的),不过事实上相对于Fabric确实更易于理解,更方便开发区块链的应用系统。 摘要 Tendermint由两个主要部分组成,一个负责共识,一个负责应用程序接...阅读全文

简书 2020-04-13 09:32:41 夏洛的克

【运维经】第8章——go get 加速

运维经--目录 go get加速 近几期一直在讲加速,今天该轮到golang了,因为 Go 1.13 将 GOPROXY 默认成了中国大陆无法访问的 https://proxy.golang.org ,所以我们国内的开发者以后必须先修改 GOPROXY 才能正常使用 go 来开发应用了。好在七牛提供了国内代理。 设置环境变量,修改GOPROXY: export GOPROXY=https://goproxy.cn 阿里源 go env -w GO111MODULE=on go env -w GO...阅读全文

Segmentfault 2020-04-16 10:32:35 夏洛克

Pod创建流程代码版本[kubelet篇]

在k8s的面试中Pod的创建流程是一个常问的问题,而kubelet则无疑重中之重,之前也写过一篇Pod的运行,不过没有涉及到具体的代码,本文尝试用代码的方式,来复数整个核心的流程,同时为了方便记忆,又将整个过程分为:准备、配置、清理、构建运行四个阶段,让我们一起来看下吧, 文末有大图总结​ 2. 准备阶段 当获取到Pod添加的事件的时候,首先会进行一些基础的工作,我吧这个过程称为准备阶段,准备阶段主要做的事情有如下:1)加入PodManager 2)准入控制检查 3)分发事件 4)根据Pod添加...阅读全文

Segmentfault 2020-04-16 10:32:35 仔仔

gRPC入门

目录结构 └── study └── rpc ├── c.go(客户端) ├── lib │ ├── test.pb.go(这个文件是protoc生成的) │ └── test.proto └── s.go(服务端) test.proto syntax = "proto3"; package lib; service Test { rpc Say (Request) returns (Response) {} } message Request { string name = 1; } mess...阅读全文

Segmentfault 2020-04-16 09:32:33 xxfaxy

使用Golang的singleflight防止缓存击穿

在使用缓存时,容易发生缓存击穿。缓存击穿:一个存在的key,在缓存过期的瞬间,同时有大量的请求过来,造成所有请求都去读dB,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。 singleflight 介绍 import "golang.org/x/sync/singleflight" singleflight类的使用方法就新建一个singleflight.Group,使用其方法Do或者DoChan来包装方法,被包装的方法在对于同一个key,只会有一个协程执行,其他协程等待那个协程执行结束...阅读全文

Segmentfault 2020-04-16 07:32:31 Chaaaaaaaaaunce 等

淘宝千万级并发架构的演进之路

说到千万级并发架构,经常会提到淘宝和12306,今天先谈谈淘宝的千万级并发架构演进之路,架构优化的方向以及架构设计的一般原则。1. 淘宝千万级并发架构的演进之路 初始状态:单机架构问题:随着用户数的增长,Tomcat和数据库之间竞争资源,单机性能不足以支撑业务第一次演进:tomcat与数据库分开部署问题:随着用户数的增长,并发读写数据库成为瓶颈第二次演进:引入本地缓存和分布式部署问题:缓存抗住了大部分的访问请求,随着用户数的增长,并发压力主要落在单机的Tomcat上,响应逐渐变慢第三次演进:引入...阅读全文

简书 2020-04-12 19:32:48 陌若尘_c167

go为什么这么快?(再探GMP模型)

进程、线程、协程 进程:进程是系统进行资源分配的基本单位,有独立的内存空间,单切换代价极高,进程间通信也比较麻烦 线程:线程是CPU调度和分派的基本单位,线程依附于进程,与其他线程共享进程的资源,仅有自己的(程序计数器,一组寄存器的值,和栈),线程切换代价小(但是线程之间的切换可能会设计用户态和内核态的切换),由于共享进程资源,所以线程之间通信比较方便。 协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制,协程切换只需要保存和恢复任务的上下文,没有内核的开销。协程间通信也比较简单(协程...阅读全文

简书 2020-04-12 19:32:48 GGBond_8488

Golang 数据结构到底是怎么回事?gdb调一调?

“ 不仅限于语法,使用gdb,dlv工具更深层的剖析golang的数据结构” Golang数据结构 变量:有意义的一个数据块。 变量名:一个有意义的数据块的名字。 为什么特意会有这个章节? golang本质是全局按照值传递的,也就是copy值,那么你必须知道你的内存对象是包含哪些内容,才能清楚掌握你在copy值的时候复制了哪些东西,这个很重要,第一部分的正文内容从这里开始。具体如下类型: num bool string array slice map channel interface 这些结构...阅读全文

简书 2020-04-12 19:32:44 奇伢云存储

Golang 语法到底是怎么回事?gdb调一调?

“ 上一篇用gdb分析了golang的数据结构,这一期分析golang的语法。” Golang语法到底是怎么回事? golang关键字编译之后是什么样子,会展开成什么样。 range range其实展开本质上和普通的for循环展开是一样的。只不过边界条件的判断稍微有点不一样。 for 初始化; 判断条件; 递进 { } 只不过编译器帮你来做了判断条件和递进(旁白:还是那句话,Golang那么高级,是因为编译器帮你干了好多事)。下面分别看几个类型遇到 range 是怎么回事,最主要的抓住边界条件是...阅读全文

简书 2020-04-12 19:32:43 奇伢云存储

Go 语言学习笔记-文件操作

打开、创建文件 创建文件 Create file, err := os.Create("F:/futureWeb/goLang/testFile.go") 参数:name。打开文件的路径:绝对路径、相对路径 目录分隔符:/ 文件不存在,则创建。文件存在,则将文件内容清空。 打开文件 Open 参数:name。打开文件的路径:绝对路径、相对路径 以只读方式打开文件。文件不存在,则打开失败。 f, err := os.Open("F:/futureWeb/goLang/testFile.go") 打...阅读全文

简书 2020-04-12 19:32:42 梁坤同学

【Go】VScode Go tools install issue

vscode在安装go-tools相关工具包时,总是failed,原因是国内对proxy.golang.org的墙网络问题 首先打开terminal,go env,找到GOPROXY 然后输入 go env -w GOPROXY=https://goproxy.cn 此时再进VScode按go插件的提示安装全部工具,即可有代码提示等功能了 相关issue链接 https://github.com/golang/go/issues/31755 https://goproxy.cn/阅读全文

简书 2020-04-12 19:32:41 风愿1996

eventrouter 采集kubernetes事件

eventrouter可以采集集群中的event 到es中。 对于集群的问题排查,事件取证还是很有帮助的。开源的eventrouter 支持多种sink,可以方便的和es结合,这里采用代码库中的代码打包到本地仓库后部署。 clone 源代码 git clone https://github.com.cnpmjs.org/heptiolabs/eventrouter.git 修改Makefile中相关参数,以适应中国网络 修改REGISTRY变量为自己私服的地址 修改BUILD_IMAGE为gol...阅读全文

简书 2020-04-12 19:32:39 谁用了我的昵称叫艾特

订阅通知 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 虽然本文的题目叫做“订阅通知”,但是呢,本文却主要介绍「观察者模式」如何在真实业务场景中使用。是不是有些不理解?解释下: 原因一,「观察者模式」其实看起来像“订阅通知” 原因二,“订阅通知”更容易被理解 什么是「观察者模式」? 观察者...阅读全文

掘金 2020年04月12日 TIGERB