ALOVN

志当存高远

LVS-DR模式的负载均衡

LVS-DR Load Balance

LVS LVS(Linux Virtual Server)即Linux虚拟服务器,LVS在Linux内核模块中实现了基于IP的数据请求负载均衡调度方案,终端用户的请求会发送给LVS调度器,调度器根据算法决定将该请求发送给后端的哪台服务器。LVS工作模式分为NAT模式、FULLNAT模式、TUN模式、以及DR模式。 LVS中的术语 术语 描述 ...

查看Go语言编译后的汇编指令

Golang compile assembly

当使用像Golang、Java、Python、C# 这些高级语言的时候,编译器为我们生成了操作机器的指令,屏蔽了程序的许多细节。不过我们依然可以通过查看汇编代码,了解其中的奥秘。 Go语言为我们提供了可以查看汇编代码的工具: 1 go tool compile -S main.go 提示:Go1.20以及之后的版本为了减小Go发行版的大小,默认不再安装标准库的预编译包,需要执行以下命令...

基于Envoy的服务发现

Envoy Service Discovery

服务网格(Service Mesh)是微服务的基础架构,它是微服务的通信层。每个服务都有自己的Sidecar(代理服务),服务实例直接不会直接互相调用,每个往返于服务之间的请求都经过Sidecar。假如服务A要调用服务B,它不会直接调用目标服务,而是由服务A先将请求路由到本地代理,再由本地代理将请求路由到目标服务,所有的代理服务组合在一起,就形成了服务网格。 1 2 3 4 ProxyA-...

负载均衡算法

Load balancing algorithm

负载均衡 负载均衡(Load Balance)是互联网架构中的必备技术,多层级的负载均衡服务器是大公司构建分布式系统的必备组件,它可以将请求分摊到后端多个服务器实例上,从而可以达到更大的吞吐量,减少系统响应时间,避免单点过载问题。 常用的负载均衡服务器一般有基于七层的应用层负载均衡、四层的IP层负载均衡、二三层的硬件负载均衡,以及基于DNS的负载均衡。作为软件工程师一般接触多的就是基于软...

在MacOS下通过brew link切换golang版本

Switch golang version through brew in MacOS

安装Homebrew Homebrew 是 MacOS 上的一个包管理工具,类似于 linux 上的 yum 、apt、rpm等。如果还没有安装 brew,先安装: 1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew官网请看这里:h...

Go1.16新特性

go1.16 feature

Go1.15发布6个月后, Golang又发布了1.16版本。这次版本更新最主要的变化是在工具链、runtime和一些库的实现上。 支持arm64, 可以在M1芯片的新Mac上尝试使用Golang了。 go modules新特性 1.16开始默认启用modules, GO111MODULE 现在开始默认值为on。如果不习惯可以改回auto, 不过1.17版本这个环境变量将会被移除。 ...

Go语言中的协程调度GMP

golang gmp

GMP 1 2 3 4 package main func main() { println("hello world") } 一个 helloworld 程序编译后成为一个二进制文件,执行时候可执行文件加载到内存中。对于地址虚拟空间中的代码段它并不是我们熟悉的main.main。不同平台下程序执行入口不同。在通过一系列检查与初始化等准备工作后,会以runtime.main为执...

Go语言中的反射

golang reflect

Golang的runtime包中类型元数据以及空接口和非空接口结构类型都是未导出的,所以reflect包中又定义了一套,这些类型定义在两个包中保持一致。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //runtime type _type struct type uncommonType struct type interfacetype struct type sl...

Go语言中的接口

golang interface

空接口 空接口类型interface{}可以接收任意类型的数据,它只要记录这个数据在哪,是什么类型的就足够了。 1 2 3 4 5 6 // src/runtime/runtime2.go#L207 // empty interface,不包含任何方法的空接口 type eface struct { _type *_type //指向接口的动态类型元数据 data un...

Go语言中的类型系统

golang type

类型元数据 在Go语言中像byte、int8、int16、int32、int64、string、slice、func、map…等等,这些属于内置类型,而我们自己通过 type T struct 定义的类型属于自定义类型。 数据类型虽然多,但是不管是内置类型还是自定义类型,都有对应的类型描述信息,称为它的『类型元数据』,而且每种类型的元数据都是全局唯一的,这些类型元数据共同构成了Go语言的...