什么是代理服务器?
所谓代理服务器就是位于发起请求的客户端与原始服务器端之间的一台跳板服务器,正向代理可以隐藏客户端,反向代理可以隐藏原始服务器。
阿里云开源镜像站: http://mirrors.aliyun.com/
搜狐开源镜像站:http://mirrors.sohu.com/
网易开源镜像站:http://mirrors.163.com/
zookeeper 集群通常是用来对用户的分布式应用程序提供协调服务的,为了保证数据的一致性,对 zookeeper 集群进行了这样三种角色划分:leader、follower、observer分别对应着主、从、观察者。
1 | leader : 负责进行投票的发起和决议,更新系统状态。 |
集群可以保证在每台机器数据保持一致的情况下,客户端每次发起的查询操作,集群节点都能返回同样的结果。但是对于客户端发起的增、删、改等能改变数据的操作,如果集群中的多台机器各自修改数据,那么就无法保证数据的一致性。
那么,对于增、删、改操作, zookeeper 集群规定只有 leader 节点才有权利去执行修改数据的操作,而 follower 节点即使接收到客户端发起的数据修改操作,也要将其转交给 leader 来处理, leader节点接收到修改数据的请求后,会向所有 follower 节点广播一条消息,让其执行操作, follower 节点执行完后,需要向 leader 节点回复执行结果。当 leader 节点收到半数以上的 follower 节点的确认消息后,便会判定该操作执行完毕,然后向所有 follower 节点广播该操作已经生效。
所以在 zookeeper 集群中, leader 节点是不可缺少的, leader 节点也是由所有 follower 节点选举产生,而且只有一个。
//todo leader节点选取逻辑
zookeeper 集群中 leader 的选取逻辑,要求 可用节点数量 > 总节点数量 / 2,注意,这里是 > ,并非 >= 。
为什么集群节点数量要奇数个,主要从以下两个方面考虑。
在一个 zookeeper 集群中,可以有多个 follower 和 observe 节点,但是有且只能有一个 leader 节点。如果 leader 节点不可用或者宕机,剩下的所有节点机器会投票产生新的 leader 节点。
集群脑裂: 一个集群由于网络不通或者其他原因分裂成多个小集群的现象。
https://www.cnblogs.com/lishiqi-blog/p/12314111.html
https://www.cnblogs.com/ysocean/p/9860529.html
https://blog.csdn.net/jiangxiulilinux/article/details/96433560
MySQL 主从复制是指数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。由互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小组进行开发。该组织于2014年12月将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表。
同城双中心是指在同城或邻近城市建立两个可独立承担业务的数据中心,双中心具备基本相同的业务处理能力并通过高速链路实时同步数据,日常情况下可同时分担业务及管理系统的运行,并可切换运行;灾难情况下备应急切换,保证业务的持续性。异地灾备中心是指在异地的城市建立一个备份的灾备中心,用于双中心的数据备份,当双中心出现自然灾害等原因而发生故障时,异地灾备中心可以用备份数据进行业务的恢复。
同城双中心的部署方式分为两种,分别为主备和双活。
在使用gRpc流模式的过程中会发现,官方API只提供了客户端关闭stream的方法。
1 | // CloseSend closes the send direction of the stream. It closes the stream |
那么在开发过程中我们是不是需要从服务端主动断开stream,如果需要,该怎么断开?
基于 golang 官方基础镜像打包,Dockerfile如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 基于 golang 官方基础镜像打包
FROM golang:1.12
NV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct
WORKDIR /app
COPY . .
RUN go build .
EXPOSE 10010
ENTRYPOINT ["./app"]
但是最终 docker build 出来的镜像高达300多M, 这是由于 golang 这个基础镜像中的工具链及其依赖项(git,mercurial 等)重达几百MB,而这一部分我们在运行的时候是不需要的。
因此,我们需要对基础镜像进行精简。