为什么 Go 适合微服务

去年早些时候,我们决定改用 Go(Golang) 作为我们(SafetyCulture)开发微服务的选择。在这之前,我们的微服务使用 Node.js(CoffeeScript, Javascript 和 TypeScript 的混合 ) 编写。下来我将分享我们更改的原因。 1. 静态类型 Go 是一种静态类型语言,这意味着编译器可以为您做更多的工作。人们倾向于强调这一点的重要性。 生产事故的故事 去年,在……

阅读全文

Go Struct Tag 是怎么玩的

利用 go 反射机制,通过 不同的 tag name 进行不同的处理 package main import ( "fmt" "reflect" // 这里引入reflect模块 ) // 自定义 tag const tagName = "validate" type employee struct { ID int `json:"id"` Name string `json:"名字" validate:"presence,min=2,max=40"` Age int `json:"年龄"` Desc string `json:"描述" back:"好看否"`……

阅读全文

Docker machine 介绍

已经淘汰了! 现在不怎么用了 是什么 Machine 是一款 Docker 工具,可以非常轻松地在您的计算机,云提供商和您自己的数据中心内创建 Docker 主机。它创建服务器,在它们上安装 Docker,然后配置 Docker 客户端与它们通信。 Docker Engine 和 Docker Machine 有什么区别? ![docker machine](\static\image\docker\docker machine.png) 当人们说“Docker”时,他们通常指的是 Docker Engine,由 Docker 守护程……

阅读全文

Docker 网络 总结

4 种模式 bridge:默认网络, Docker 启动后创建一个 docker0 网桥,默认创建的容器也是添加到这个网桥中; IP 地址段是 172.17.0.1/16 host:容器不会获得一个独立的 network namespace,而是与宿主机共用一个。 none:获取独立的 network namespace,但不为容器进行任何网络配置。 创建 docker run –network none 无 ip mac 等配置 仅 exec 方……

阅读全文

Dockerfile 总结

FROM 构建的新镜像是基于哪个镜像,也可以直接构建基本镜像 scratch 制作 base image centos 基于 centos:latest 镜像 LABEL 说明,类似注释 ,最好都得有 RUN & CMD & ENTRYPOINT WORKDIR ADD & COPY 大部分情况:copy 优先 add add 有解压功能 远程目录使用 curl or wget ADD hello / # 将 hello 添加到/下 ADD test.tar.gz / # ADD 有解压功能 WORKDIR /root # workdir 和 add 联合使用 ADD hello test/ # /root/test/hello WORKDIR /root # workdir 和 add 联合使用 COPY hello test/ # /root/test/hello ENV……

阅读全文

容器和镜像

什么是镜像? 简单说, Docker 镜像是一个不包含 Linux 内核而又精简的 Linux 操作系统。 镜像工作原理? 当我们启动一个新的容器时, Docker 会加载只读镜像,并在其之上添加一个读写层,并将镜像中的目录复制一份到 /var/lib/docker/aufs/mnt/ 容器 ID 为目录下,我们可以使用 chroot 进入此目录。如果运行中的容器修改一个已经存在的文件,那么会将该文件从下面……

阅读全文

公有云、私有云、混合云的比较

公有云 公众云是大多数人在想到采用“云”时所指的。公共云之所以称之为“公共”,是因为由像亚马逊、谷歌、IBM 或微软这样的云计算服务提供商托管的,它使客户能够访问和共享基本的计算机基础设施,其中包括硬件、存储和带宽等资源。 公共云有几个好处。除了通过网络提供服务外,客户只需为他们使用的……

阅读全文

Docker 简介

docker 是什么 应用容器引擎 基于内核虚拟化技术: Linux Container 开源的 Go 语言编写 理念————容器: 标准化包:将应用和依赖打包成一个可移植的容器(镜像), 任意系统:可发布、运行到任意 docker 引擎上, 进程级隔离:进行沙箱运行机制,程序之间相互隔离 基本架构:C/S Server: Dcoker daemon 作为服务端接受来自客户端请求, 并处理这些请……

阅读全文

Rpc 标准库的几种实现方式

server server.go package main import ( "errors" "fmt" "net" "net/http" "net/rpc" ) type Args struct { A, B int } type Quotient struct { Quo, Rem int } type Arith int func (t *Arith) Multiply(args *Args, reply *int) error { *reply = args.A * args.B return nil } func (t *Arith) Divide(args *Args, quo *Quotient) error { if args.B == 0 { return errors.New("divide by zero") } quo.Quo = args.A / args.B quo.Rem = args.A % args.B return nil } func main() { arith := new(Arith) rpc.Register(arith) rpc.HandleHTTP() // http 实现 err := http.ListenAndServe(":1234", nil) // http rpc 监听 if err != nil { fmt.Println(err.Error()) } } // TCP 实现 //func main() { // arith := new(Arith) // rpc.Register(arith) // tcpAddr, err := net.ResolveTCPAddr("tcp", ":1234") // checkError(err) // listener, err := net.ListenTCP("tcp", tcpAddr) // checkError(err) // for……

阅读全文

BSD 是什么

关键词:操作系统,风格 BSD (Berkeley Software Distribution,伯克利软件套件)是 Unix 的衍生系统,在 1977 至 1995 年间由加州大学伯克利分校开发和发布的。 历史上, BSD 曾经被认为是 UNIX 的一支——“BSD UNIX”, 因为它和 AT&T UNIX 操作系统共享基础代码和设计。 在 20 世纪 80 年代,衍生出了许多变形的 UNIX 授权软件。比较著……

阅读全文