微服务之配置中心
负载均衡什么是负载均衡负载均衡是将网络流量分发到多个后台服务的一种机制。通过负载均衡的流量分发,降低了单台服务器的负载,减少了应用的响应时间
负载均衡类型集中式Load balance集中式LB方案,如下图。首先,服务的消费方和提供方不直接耦合,而是在服务消费者和服务提供者之间有一个独立的LB(LB通常是专门的硬件设备如F5,或者基于软件如LVS,HAproxy等实现)。
进程内load balance
可看到引入了第三方:服务注册中心。它做两件事:
维护服务提供方的节点列表,并检测这些节点的健康度。检测的方式是:每个节点部署成功,都通知服务注册中心;然后一直和注册中心保持心跳。
允许服务调用方注册感兴趣的事件,把服务提供方的变化情况推送到服务调用方。
这种方案下,整个load balance的过程是这样的:
服务注册中心维护所有节点的情况。
任何一个节点想要订阅其他服务提供方的节点列表,向服务注册中心注册。
服务注册中心将服务提供方的列表(以长连接的方式)推送到消费方。
消费方接收到消息后,在本地维护一份这个列表,并自己做load balance。
可见,服务 ...
微服务之注册中心
微服务之注册中心什么是注册中心注册中心的作用一句话概括就是存放和调度服务,实现服务和注册中心,服务和服务之间的相互通信
常见的几种注册中心
名称
优点
缺点
接口
一致性算法
zookeeper
1. 功能强大,不仅仅是服务发现2、提供watch机制,实时获取服务状态3、支持dubbo等框架
1、不支健康检查2、需要在服务中集成sdk,复杂度高3、不支持多数据中心
sdk
Paxos
consul
1、简单易用,不需要集成sdk2、自带健康检查3、支持多数据中心4、提供web管理界面
1、不能实时获取服务msg变化
http/dns
Raft
etcd
1、简单易用、不需要集成sdk2、可配置性强
1、没有健康检查2、需要配合第三方工具一起完成服务发现3、不支持多数据中心
http
Raft
consul的安装和配置Docker安装# 8500 http端口 8600 dns端口docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp consul ...
K8s如何支持公网访问
K8s如何支持公网访问因为k8s默认启动支持内网ip,下面是三种 让k8s支持公网访问的模式
keadm init添加参数# 未实践kubeadm init --apiserver-advertise-address= 内网ip --apiserver-cert-extra-sans 公网ip --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
重新生成apiserver证书
删除原来的apiserver证书
cd /etc/kubernetes/pkirm apiserver.*
生成新的apiserver证书
kubeadm init phase certs apiserver --apiserver-advertise-address 内网ip --apiserver-cert-extra-sans 公网ip --apiserve ...
Gin中session和cookies
Gin中session和cookiessession什么是session
Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制
它是在服务端保存的用来跟踪用户的状态的数据结构,可以保存在文件、数据库或者集群中
在浏览器关闭后这次的Session就消失了,下次打开就不再拥有这个Session。其实并不是Session消失了,而是Session ID变了
cookie什么是cookie?
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息
每次HTTP请求时,客户端都会发送相应的Cookie信息到服务端。它的过期时间可以任意设置,如果你不主动清除它,保留
二者对比
Cookie 在客户端(浏览器),Session 在服务器端
Cookie的安全性一般,他人可通过分析存放在本地的Cookie并进行Cookie欺骗。在安全性第一的前提下,选择Session更优。重要交互信息比如权限等就要放在Session中,一般的信息记录放Cookie就好了
单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie
Sess ...
Gin中间件
Gin中间件内置中间件
func BasicAuth(accounts Accounts) HandlerFunc
func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc realm:认证分组
func Bind(val interface{}) HandlerFunc //拦截请求参数并进行绑定
func ErrorLogger() HandlerFunc //错误日志处理
func ErrorLoggerT(typ ErrorType) HandlerFunc //自定义类型的错误日志处理
func Logger() HandlerFunc //日志记录
func LoggerWithConfig(conf LoggerConfig) HandlerFunc
func LoggerWithFormatter(f LogFormatter) HandlerFunc
func LoggerWithWriter(out io.Wr ...
玩转 Router
Kubeedge - 5: 玩转 Router什么是 Router
router 是 KubeEdge 中的一种通过实现 CRDs 来实现与边缘端进行MQTT通信的模式
在 KubeEdge 中通过 Rule 和 RuleEndPoint 实现了几种通信模式
配置开启 router云端(cloud)
开启router模式# 如果你是通过pod安装的cloudcore 查看是否开启#可以通过kubectl edit pod <cloudcore_name> -n kubeedge 修改kubectl describe cm cloudcore -n kubeedge
....... router: enable: true.......
边缘端(edge)
开启eventbus和servicebusvi /etc/kubeedge/config/edgecore.yaml
metaManager: contextSendGroup: hub contextSendModule: websocket enable: true metaServer: ...
玩转 Device twin
Kubeedge - 4: 玩转 Device twin什么是 Device twinDevice twin
设备的动态属性,在 KubeEdge 中的设备孪生 包含了desired value(期望值)和reported value(真实值)
在 KubeEdge 利用 Device Model 和 Device Instance 的机制,通过一套 Device Model 生成大量 Device Instance 的机制实现关联管理
Device Commpents in KubeEdge
Membership Module
该模块主要负责绑定新加入的设备与指定的边缘节点(其实就是NodeSelector的体现)。比如温度传感器关联在边缘节点node-A上,蓝牙音箱关联在了节点node-B上,如果云端要控制蓝牙音箱,那就要把数据准确的推到node-B上
Twin Module
该模块主要负责所有设备孪生相关的操作。比如,设备孪生更新(device twin update)、设备孪生获取(device twin get)和设备孪生同步至云端(device twin sync-t ...
部署安装KubeEdge
Kubeedge - 2: 部署安装KubeEdgeKubeEdge 部署环境
在云端方面,我们需要:Kubernetes 集群
Kubernetes:在CPU:2G,运行内存2G以上
在边缘,我们需要:容器运行时,现在我们支持:
Docker
Containerd
Cri-o
Virtlet
MQTT服务器(可选)
建议公网开放端口:9443、10252、10251、5353、20006、2701、9376、12345、2379、2380、6443、10000-10004
出现无法访问,第一时间考虑是否未开放相应端口号
1. 安装DockerDocker
一键shell脚本安装:安装实例中Docker版本19.03.5 yum install -y yum-utils \device-mapper-persistent-data \lvm2yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce-19.03.5 do ...
部署安装EdgeMesh
Kubeedge - 3: 部署安装EdgeMesh什么是EdgeMesh
EdgeMesh 作为 KubeEdge 集群的数据面组件,为应用程序提供了简单的服务发现与流量代理功能,从而屏蔽了边缘场景下复杂的网络结构
KubeEdge 基于 Kubernetes 构建,将云原生容器化应用程序编排能力延伸到了边缘。但是,在边缘计算场景下,网络拓扑较为复杂,不同区域中的边缘节点往往网络不互通,并且应用之间流量的互通是业务的首要需求,而 EdgeMesh 正是对此提供了一套解决方案
为什么要使用EdgeMeshEdgeMesh 满足边缘场景下的新需求(如边缘资源有限、边云网络不稳定、网络结构复杂等),即实现了高可用性、高可靠性和极致轻量化:
高可用性
利用 LibP2P 提供的能力,来打通边缘节点间的网络
将边缘节点间的通信分为局域网内和跨局域网
局域网内的通信:直接通信
跨局域网的通信:打洞成功时 Agent 之间建立直连隧道,否则通过中继转发流量
高可靠性 (离线场景)
元数据通过 KubeEdge 边云通道下发,无需访问云端 apiserver
EdgeMesh 内部集成轻 ...
Linux部署Go
Linux部署Gobash一键部署bash地址
下载# 安装wget命令yum install -y wget# 在 ~ 下创建 go 文件夹,并进入 go 文件夹mkdir ~/go && cd ~/go# 下载的 go 压缩包wget https://studygolang.com/dl/golang/go1.17.linux-amd64.tar.gz
解压tar -C /usr/local -zxvf go1.17.0.linux-amd64.tar.gz
添加到环境变量vi /etc/profile# 在/etc/profile最后一行添加export GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/bin# 保存退出后source一下source /etc/profile
验证GOgo version
linux上运行Gin# 更换代理源export GOPROXY=https://mirrors.aliyun.com/goproxy/# 开启go modexport GO111MODULE=on
进入到Gin ...