
微服务
鹿灏楷silves
不要人夸颜色好,只留清气满乾坤
展开
-
cka——第一天
etcd组件:etcd是键值对数据库,安全 & 快速安装etcd:运行etcd:操作etcd如果手动部署集群,我们可以下载二进制文件部署。如果使用kubeadm部署集群,etcd将以pod的形式部署在机器上。(部署在kube-system的命名空间中)查询通过kubernetes存储的键值对:通常部署的etcd集群都是多节点etcd,防止单点故障。所以就要配置etcd的集群。在etcd.service中的 --initial-cluster中指定etcd服务的不同的实例(键值对的形式)...原创 2022-06-30 23:57:40 · 2010 阅读 · 0 评论 -
rabbitmq——交换机fanout和direct
交换机:生产者将消息发送到交换机上,根据交换机不同的种类,将消息体按照不同的规则转发给不同的消费者。fanout此模式是将生产者生产的消息,通过交换机绑定的所有队列,发送到所有绑定到此交换机上的队列。product.go...原创 2022-03-04 20:17:35 · 3820 阅读 · 1 评论 -
rabbitmq——持久化消息
使用rabbitmq做持久化消息,我们有两种方式。使用自动确认机制,如果使用这种机制,消费者接收到消息之后自动确认,但是如果接收到消息之后,服务卡顿,就会导致这条消息不会重新发送给其他或者重启之后的消费者所在的服务器。导致间接性消息丢失。使用手动确认机制,当消息接收到之后,不要立即确认收到,而是先处理,处理之后,再确认这条消息。product.goque , err := c.QueueDeclare("hello-test" , false , false , false , false ,原创 2022-03-04 16:39:18 · 3811 阅读 · 0 评论 -
docker常用命令
docker search#搜索镜像docker search tomcat#搜索官方镜像docker search tomcat --filter "is-official=true"#搜索star大于5的镜像docker search tomcat --filter-stars=5#搜索镜像,返回5条数据docker search tomcat --limit=5docker ps#显示正在运行的容器docker ps#显示创建过的容器docker ps -a#显原创 2022-02-22 17:28:02 · 2372 阅读 · 0 评论 -
Rabbitmq入门
Rabbitmq使用demorabbitmq分为生产者和消费者,生产者是创建消息,消费者是使用消息。先写生产者。package mainimport ( "fmt" "github.com/streadway/amqp" "log" "time")func main() { //链接rabbitmq服务器 con, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { log.Print原创 2022-01-18 11:07:34 · 2946 阅读 · 0 评论 -
基于kubernetes搭建个人服务
使用kubenetes部署写的程序,先使用docker,打包个人镜像,再进行部署。大致步骤程序写dockerfile打包镜像,并上传至远程仓库部署程序这次的程序,使用二进制程序,并不使用源码封装到镜像中再运行,二进制程序好处有,启动速度快,不许要环境,如果不需要环境,则写dockerfile就会少很多内容。我部署的程序是我的私有云上的镜像,读者可以换成你的公开镜像,我部署的二进制程序,有关个人信息,所以放在私有云上,在镜像方面,读者需要换成公开镜像。准备好二进制程序其中p_main原创 2021-10-30 15:19:14 · 458 阅读 · 0 评论 -
Kubernetes——pod与集群节点的自动伸缩和高级调度
pod的横向伸缩原创 2021-10-28 17:11:12 · 538 阅读 · 0 评论 -
kubernetes——计算资源管理
在pod中申请资源apiVersion: v1kind: Pod## 标题metadata: name: kubia-ce namespace: test labels: name: kubia-cespec: containers: - name: kubia-ce image: luksa/kubia resources: requests: cpu: 100m memory: 10Mi limi原创 2021-10-27 14:14:20 · 499 阅读 · 0 评论 -
kubernetes——了解kubernetes机理
架构控制平面组件etcd分布式持久化存储API服务器调度器控制管理器工作节点上运行的组件KubletKublet服务代理(kube-proxy)容器组件间如何通信Kubernetes系统组件只能通过API服务器通信,它们之间不会直接通信。单组件运行多实例为了保证高可用性,控制平面的美国和组件可以有多个实例。etcd和API服务器的多个实例可以并行工作,但是调度器和控制管理器在给定时间内只能有一个实例起作用API服务器API服务器先提供了一种一致的方式将对象存储到etcd原创 2021-10-26 20:10:12 · 355 阅读 · 0 评论 -
kubernetes——部署有状态的多副本应用
有状态应用要求管理者配置文件中列出所有其它的集群成员和他们的ip地址。StatefulSet有状态的应用中每一个实例都是不可替代的个体,都拥有稳定的名字和状态如果使用StatefulSet,当有一个pod挂掉后,这个实例需要在别的节点上重建,但是新的实例必须与被替换的实例拥有相同的名称、网络标识和状态。因为有状态的服务会根据先前的访问做一些不同的处理,所以,我们要将所有的有状态的pod做headless service。当调用时,会返回每个pod的ip。创建StatefulSet控制器管理的pod原创 2021-10-26 18:50:43 · 955 阅读 · 0 评论 -
kubernetes——Deployment资源
当创建一个Deployment时,也会ReplicaSet也会创建,pod是由Deployment和ReplicaSet共同管理的。创建DeploymentapiVersion: apps/v1kind: Deploymentmetadata: name: test-deployspec: selector: matchLabels: app: test-deploy template: metadata: labels: app原创 2021-10-25 16:47:49 · 390 阅读 · 0 评论 -
kubernetes——从应用中访问元数据
容器中可以通过环境变量或者挂载的方式,获取pod的一些数据通过环境变量访问元数据apiVersion: v1kind: Podmetadata: name: test labels: name: testspec: containers: - name: test image: luksa/kubia resources: limits: memory: "128Mi" cpu: "500m" ports:原创 2021-10-25 13:36:46 · 427 阅读 · 0 评论 -
kubernetes——ConfigMap配置应用程序
ENTRYPOINT与CMD我们使用entrypoint指定的是可执行文件,cmd指定的是可执行文件所需要的参数通过使用yaml文件指定执行的命令和参数apiVersion: v1kind: Podmetadata: name: kubia-ce labels: name: kubia-cespec: containers: - name: kubia-ce image: luksa/kubia resources: limits:原创 2021-10-23 14:49:25 · 484 阅读 · 0 评论 -
kubernetes——发现pod并与之通信
介绍服务kubernetes中服务是一种为一组相同功能的pod提供一个单一不变的接入点的资源。可以将一组提供相同服务的pod给定一个不变的接入资源。创建服务服务的后端可以不止有一个pod,服务连接所有的后端指定的pod,服务对后端的pod是负载均衡的。服务是如何区分哪些pod属于服务,哪些pod不属于服务?服务根据标签来选择pod。也就是说,控制器根据标签控制pod,服务根据标签判断是否属于本服务。通过yaml文件创建服务apiVersion: v1kind: Servicemetada原创 2021-10-21 18:27:27 · 554 阅读 · 0 评论 -
kubernetes——部署托管的pod
存活探针有三种探测方式,测试服务是否正在正常运行HTTP GET探针针对容器的IP地址执行HTTP GET请求,如果收到响应,并且状态码不代表错误,则认为服务正常运行TCP套接字探针尝试与容器指定端口建立TCP连接,如果连接成功则探测成功Exec探针在容器内执行命令,并检查命令的退出状态码。创建带存货探针的podapiVersion: v1kind: Podmetadata: name: kubia-web labels: name: kubia-webspec:原创 2021-10-20 16:49:38 · 417 阅读 · 0 评论 -
在kubernetes中运行的容器
Pod首先了解到容器之间彼此是完全隔离的,但是我们期待是隔离的容器组,而不是单个容器,每个容器组内共享一些资源,而不是全部。kubernetes通过配置Docker让一个pod内的所有容器共享相同的linux命名空间。pod内运行的容器位于相同的Network命名空间中,因此它们共享相同的IP地址和端口空间,也就是说,在同一个pod内的两个容器的服务不能占用同一个端口。每个pod可以通过其它pod的IP地址来实现互相访问。创建Pod#版本apiVersion: v1#资源类型kind: Pod原创 2021-10-19 17:11:21 · 532 阅读 · 0 评论 -
minikube入门+踩坑日记
环境搭建minikubekubectldocker下载并配置好环境变量运行minikube从这里就开始踩坑首先这条命令是对的,但是国内的电脑一般访问不到minikube的镜像源,或者访问到也是很慢,所以我们要添加代理或者配置其它镜像源。有两种方法使用镜像源第一种(我没有试过)minikube start#替换成minikube start --registry-mirror=https://registry.docker-cn.com#注意:这里使用的是官方的代理镜像源,可以访原创 2021-10-18 18:59:05 · 3899 阅读 · 2 评论 -
GO消息队列——rabbitmq
Rabbitmq应用场景流量削峰,当大流量访问时,可以将服务进行排队,对大流量削峰异步,可以将用户的操作排入队列,先行返回原创 2021-09-01 09:59:33 · 942 阅读 · 0 评论 -
docker——单体应用容器化
我们如果一个应用部署在多台机器上,一般将代码复制到多台机器上,然后再运行,还有一种方法,将代码和镜像进行整体打包,上传到镜像库,其他机器拉取镜像直接运行,避免了机器环境不同造成的其他问题。将应用打包到容器中,先熟悉一下dockerfile中的指令FROM基于哪个镜像创建的新镜像RUN构建镜像时,执行的命令。每使用一次RUN,都会新增一层镜像,避免镜像层数过多,我们将多条命令整合到一起RUN yum install wgetRUN wget -O redis.tar.gz "http://dow原创 2021-08-04 14:11:22 · 971 阅读 · 0 评论 -
云原生——kubernetes入门
一个k8s集群,由两部分组成,master节点和node节点node节点受master节点控制pod:是集群中最小封装集合,一个pod中可以运行多个容器k8s设计架构图图片来源:https://www.kubernetes.org.cn/在这张图里,左侧的一个方块就是master节点,右侧的两个方块,对应的是两个节点(node)。每一个node都是一个独立主机,或者是虚拟机。master节点apiserver:通过ui或者cli等其他方式控制的命令传入此接口,进行调度。提供调用资源(可以原创 2021-07-30 17:55:41 · 542 阅读 · 0 评论 -
golang使用grpc+go-kit模拟oauth认证
我们使用grpc对外的接口,进行服务,模拟对外认证的接口首先我们要了解原创 2021-04-10 16:39:18 · 1180 阅读 · 0 评论 -
consul的grpc健康检查
开始使用go-kit进行开发接口,我都会写一个health接口,用于consul的健康检查。其实开始也想过,如果每一个人都对健康检查接口开发出一个不同的请求体,如果这样,consul怎样对health的接口进行调用呢,但是当时只是一闪而过的想法,并没有想太多,直到我看到注册的服务报红我才意识到,健康检查的接口不应该这么写。这次我们进行健康检查的接口开发。首先,我们需要实现consul封装的特定的接口type HealthServer interface { // If the requested原创 2021-04-07 22:42:23 · 1962 阅读 · 0 评论 -
go-kit组件使用hystrix中间件
使用go-kit中间件时,一般在endpoint中进行中间件的开发。在endpoint层插入hystrix中间件的插入。endpoint.go在这里插入代码片原创 2021-04-07 21:05:51 · 927 阅读 · 0 评论 -
go-kit+grpc+consul开发实战
基于go-kit开发grpc接口,并使用go-kit注册到consul中。如果不知道go-kit几个层级,那么这篇文章不适合你,先去看go-kit基础,再来看这篇文章我们首先编写proto文件编写好proto文件之后,进行代码生成protoc --go_out=plugins=grpc:./ ./test.proto利用go-kit实现接口,go-kit实现的接口,只用于数据透传,并调用底层endpoint,并不做逻辑执行...原创 2021-04-02 13:41:57 · 1929 阅读 · 0 评论 -
Spring Cloud Config入门实践
Spring Cloud Config介绍Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。大概就是Spring Cloud Config 通过restful接口,进行服务,每一个微服务就是一个客户端,使用微服务时,就会调用restful接口,从而进行热加载,实现时时配置项目创建(由于我对java不原创 2021-03-30 20:20:25 · 800 阅读 · 0 评论 -
Golang原生rpc(rpc服务端源码解读)
创建rpc接口,需要几个条件方法的类型是可输出的方法的本身也是可输出的方法必须有两个参数,必须是输出类型或者是内建类型方法的第二个参数是指针类型方法返回的类型为errorrpc服务原理分析...原创 2021-03-27 11:01:10 · 1713 阅读 · 0 评论 -
使用go-kit组件进行服务注册与发现和健康检查
在go的微服务架构中,使用go-kit组件进行开发微服务type Reg struct { Host string Port int Client consul.Client}func MakeReg (host string , port int) (*Reg , error) { reg := api.DefaultConfig() reg.Address = host + ":" + strconv.Itoa(port) apiclient , err = api.NewClient原创 2021-03-27 11:00:44 · 3302 阅读 · 5 评论 -
go-micro、consul、rpc、gin构建微服务入门
使用micro构建微服务框架micro new --type "web" gwebmicro new --type "srv" trpc首先,将生成的文件进行更改,目前版本micro默认注册到etcd,所以需要指定注册到consul在main.go中reg := consul.NewRegistry(registry.Addrs(":8500"))service := web.NewService(//在原有的参数基础上,添加 web.Registry(reg),)我们还要结合gin原创 2021-03-24 13:13:45 · 1523 阅读 · 0 评论 -
golang微服务熔断器的使用
熔断器的基本作用:作为检查服务是否有效,避免大量请求堵塞在一个失效请求,如果服务端失效,则会进行降级处理,可以自动进行第一个接口的请求,如果正常使用,自动进行调用第一个接口config := hystrix.CommandConfig{Timeout: 1000 , SleepWindow : 1000}//超时配置,此时为了测试,如果超时一秒钟,则会进行业务转发,降级处理 //如果第一个接口失效,则间隔1000毫秒进行再次请求,如果正常使用,则业务仍会调用第一个接口hystrix.Configur原创 2021-03-22 21:10:37 · 882 阅读 · 0 评论 -
Go框架gin结合go-micro开发restfulapi 和调用api服务
先使用micro生成一个webmicro new --type "web" gweb生成的文件,默认是调用rpc服务进行调用,我们是使用gin+go-micro+protobuf开发restful服务也就是说生成的代码,除了注册服务的代码都可以删掉。mciro默认注册的不是consul服务,所以需要指定注册的服务。consulreg := consul.NewRegistry( registry.Addrs("127.0.0.1:8500")//consul默认端口为8500)servic原创 2021-03-21 20:44:06 · 1662 阅读 · 2 评论 -
Golang使用go-kit组件进行微服务注册和发现
首先介绍以下go-kit组件的大致结构按照调用的顺序进行介绍transport:进行主要负责网络传传输,进行编码和解码endpoint:主要负责request和response的格式的转换。service:进行业务逻辑的开发调用顺序的介绍:首先,transport获得参数,将所获得的参数转化为结构体类型的值,并返回request的结构体第二,使用endpoint接受到的参数为transport的反回的request结构体,并进行调用service业务逻辑函数,只不过,endpoint接收到的原创 2021-03-17 20:36:33 · 1520 阅读 · 0 评论