ETCD 服务注册和发现
ETCD 服务发现
在微服务中各个服务都是无状态的,不会在配置中写死上下游的访问地址,所以需要有一个地方去维护各个节点的信息。
服务起来的时候会去注册中心拉取其他服务的节点信息,并且把自己的信息推送到注册中心。
当有运行的服务下线或者出现问题的时候,把自己从配置中心摘除,或者配置中心来检测服务状态(心跳、健康检查的协议)来摘除服务。
1 | package main |
服务注册
在etcd中服务的注册使用租约(lease)来实现,设置租约的时候按需求设置租约的时间(ttl),类似redis中的EXPIRE key,再把服务自身的节点等信息写到对应的key中。然后定时去调用KeepAliveOnce来保持租约,如果在期间KeepAliveOnce的消息丢失或者延迟大于这个租约的ttl则etcd中将会把这个节点的信息删除,恢复正常时重新发起租约流程。
1 |
|
节点管理
1 | package main |
测试效果
1 | package main |
运行结果
1 | 2020-10-18 22:36:39.102233 I | [Register] keepalive... leaseId:7587849142468224212 |
golang项目部署(Dockerfile)
Go Dockerfile 构建
FROM golang:1.15
docker有一个基本镜像叫做scratch,它是一个空的镜像,在临时基础镜像上运行的应用程序只能访问内核
由于需要依赖cgo,所以我们使用scratch无法满足需求,我们需要另外一个运行时基础镜像alpine,看下dockerhub官方的介绍,它也仅仅只有5MB大小。
生成镜像,使用当前文件构建一个镜像
1 | docker build -t changcrazy/service.doumi.com:v1 . |
启动一个容器
1 | docker run -d centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;" |
Go 并发
常见的并发模型:
进程与线程(apache) C10K 问题
- nginx,nodejs 异步非阻塞 复杂度高
- golang ,lua,erlang 协程方式
golang 中使用goroutine 实现并发的,channels 在多个goroutine 间的数据同步和通信,select在多个channels中选择数据的读取和写入。
并发与并行
并发: 指同一时刻,系统通过调度,来回切换交替的运行多个任务,“看起来”是同时进行
并行: 指同一个时刻,两个任务”真正的“同时进行
讲解地址 搬运废书问题
将复杂的任务拆分,通过goroutine去并发执行。
Coroutine
- 指针,& 取地址。
修改结构体的变量内容的时候,方法传入的结构体变量参数需要使用指针,也就是结构体的地址
Google 搜索技巧
Google 搜索技巧
- 使用“本尊”
最好使用 http://www.google.com/ncr NCR: No Country Redirection,而不是http://www.google.com.hk;有时,直接输入http://www.google.com也会被自动转到“本地Google”,比如,我用日本的 VPN,浏览器就会把我转到http://www.google.co.jp……
- 优先使用英文关键字搜索
这是个好习惯。别说不会英文,不会就学,没那么难。
- 基本技巧
Google 搜索引擎也许是世界上最简单的应用界面,只有一个输入框和一个按钮。然而,用好它还是需要花点时间去学习的。Google 有帮助文档,还专门设计了个学习网站 A Google A Day
a)加号
在 Google 的输入框里,所有的空格都被 Google 理解为加号+。如果你输入的是 purpose of education那么 Google 返回的文章里既有“purpose”存在,也有“education”存在,但不一定有“purpose of education”存在。另外,过分常用的、单独存在没有意义的词汇往往被忽略掉,比如冠词“a”、“the”;介词“of”、“in”、“on”、“at”、“to”;连词“and”、“or”、“but”;从属连词“that”、“which”、“when”;代词“my”、“his”、“them”等等。
Go Install
快速安装:
yum install go
源码安装最新版
git clone https://github.com/golang/go.gitcd go/git checkout 1.13版本cd srcall.bash
成功后就将go/bin/go 添加到环境变量即可。
环境变量
goexport GOPATH=$HOME/www/go:$HOME/www/baxian/baxian_sea/doc/data/tokumxexport GOBIN=$HOME/www/bin
Elastic Search
ES 命令
delete index
curl -X DELETE ‘http://localhost:9200/samples'
list all indexes
curl -X GET ‘http://localhost:9200/_cat/indices?v'
list all docs in index
curl -X GET ‘http://localhost:9200/sample/_search'