当前位置: 首页 > news >正文

深圳网络营销张掖seo

深圳网络营销,张掖seo,郏县网站制作哪家公司好,零基础编程学pythonservice.png 背景 在做传统业务开发的时候,当我们的服务提供方有多个实例时,往往我们需要将对方的服务列表保存在本地,然后采用一定的算法进行调用;当服务提供方的列表变化时还得及时通知调用方。 student: url: - 192.168.1…

81a91bcdbd99c17b10e903591accf1c7.png

service.png

背景

在做传统业务开发的时候,当我们的服务提供方有多个实例时,往往我们需要将对方的服务列表保存在本地,然后采用一定的算法进行调用;当服务提供方的列表变化时还得及时通知调用方。

student:  url:     - 192.168.1.1:8081     - 192.168.1.2:8081

这样自然是对双方都带来不少的负担,所以后续推出的服务调用框架都会想办法解决这个问题。

spring cloud 为例:26f228910631dccb1621220019e4f685.png

服务提供方会向一个服务注册中心注册自己的服务(名称、IP等信息),客户端每次调用的时候会向服务注册中心获取一个节点信息,然后发起调用。

但当我们切换到 k8s 后,这些基础设施都交给了 k8s 处理了,所以 k8s 自然得有一个组件来解决服务注册和调用的问题。

也就是我们今天重点介绍的 service

service

在介绍 service 之前我先调整了源码:

func main() {  http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {  name, _ := os.Hostname()  log.Printf("%s ping", name)  fmt.Fprint(w, "pong")  })  http.HandleFunc("/service", func(w http.ResponseWriter, r *http.Request) {  resp, err := http.Get("http://k8s-combat-service:8081/ping")  if err != nil {  log.Println(err)  fmt.Fprint(w, err)  return  }  fmt.Fprint(w, resp.Status)  })  http.ListenAndServe(":8081", nil)  
}

新增了一个 /service 的接口,这个接口会通过 service 的方式调用服务提供者的服务,然后重新打包。

make docker

同时也新增了一个 deployment-service.yaml:

apiVersion: apps/v1  
kind: Deployment  
metadata:  labels:  app: k8s-combat-service # 通过标签选择关联  name: k8s-combat-service  
spec:  replicas: 1  selector:  matchLabels:  app: k8s-combat-service  template:  metadata:  labels:  app: k8s-combat-service  spec:  containers:  - name: k8s-combat-service  image: crossoverjie/k8s-combat:v1  imagePullPolicy: Always  resources:  limits:  cpu: "1"  memory: 100Mi  requests:  cpu: "0.1"  memory: 10Mi  
---  
apiVersion: v1  
kind: Service  
metadata:  name: k8s-combat-service  
spec:  selector:  app: k8s-combat-service # 通过标签选择关联  type: ClusterIP  ports:  - port: 8081        # 本 Service 的端口  targetPort: 8081  # 容器端口  name: app

使用相同的镜像部署一个新的 deployment,名称为 k8s-combat-service,重点是新增了一个kind: Service 的对象。

这个就是用于声明 service 的组件,在这个组件中也是使用 selector 标签和 deployment 进行了关联。

也就是说这个 service 用于服务于名称等于 k8s-combat-servicedeployment

下面的两个端口也很好理解,一个是代理的端口, 另一个是  service 自身提供出去的端口。

至于 type: ClusterIP 是用于声明不同类型的 service,除此之外的类型还有:

  • NodePort

  • LoadBalancer

  • ExternalName等类型,默认是 ClusterIP,现在不用纠结这几种类型的作用,后续我们在讲到 Ingress 的时候会具体介绍。

负载测试

我们先分别将这两个 deployment 部署好:

k apply -f deployment/deployment.yaml
k apply -f deployment/deployment-service.yaml❯ k get pod
NAME                                  READY   STATUS    RESTARTS   AGE
k8s-combat-7867bfb596-67p5m           1/1     Running   0          3h22m
k8s-combat-service-5b77f59bf7-zpqwt   1/1     Running   0          3h22m

由于我新增了一个 /service 的接口,用于在 k8s-combat 中通过 service 调用 k8s-combat-service 的接口。

resp, err := http.Get("http://k8s-combat-service:8081/ping")

其中 k8s-combat-service 服务的域名就是他的服务名称。

如果是跨 namespace 调用时,需要指定一个完整名称,在后续的章节会演示。

我们整个的调用流程如下:be0d1f7a297a06817b9e2db5097566ba.png

相信大家也看得出来相对于 spring cloud 这类微服务框架提供的客户端负载方式,service 是一种服务端负载,有点类似于 Nginx 的反向代理。

为了更直观的验证这个流程,此时我将 k8s-combat-service 的副本数增加到 2:

spec:  replicas: 2

只需要再次执行:

❯ k apply -f deployment/deployment-service.yaml
deployment.apps/k8s-combat-service configured
service/k8s-combat-service unchanged
7811344347407049cfbb190233d03163.png
image.png

不管我们对 deployment 的做了什么变更,都只需要 apply 这个 yaml  文件即可, k8s 会自动将当前的 deployment 调整为我们预期的状态(比如这里的副本数量增加为 2);这也就是 k8s 中常说的声明式 API

可以看到此时 k8s-combat-service 的副本数已经变为两个了。如果我们此时查看这个 service 的描述时:

❯ k describe svc k8s-combat-service |grep Endpoints
Endpoints:         192.168.130.133:8081,192.168.130.29:8081

会发现它已经代理了这两个 Pod 的 IP。

b78eba6a65f24e5a1fb6e5e7dd17e499.png此时我进入了 k8s-combat-7867bfb596-67p5m 的容器:

k exec -it k8s-combat-7867bfb596-67p5m bash
curl http://127.0.0.1:8081/service

并执行两次 /service 接口,发现请求会轮训进入 k8s-combat-service 的代理的 IP 中。

由于 k8s service 是基于 TCP/UDP 的四层负载,所以在 http1.1  中是可以做到请求级的负载均衡,但如果是类似于 gRPC 这类长链接就无法做到请求级的负载均衡。

换句话说 service 只支持连接级别的负载。

如果要支持 gRPC,就得使用 Istio 这类服务网格,相关内容会在后续章节详解。

总结

总的来说 k8s service 提供了简易的服务注册发现和负载均衡功能,当我们只提供 http 服务时是完全够用的。

相关的源码和 yaml 资源文件都存在这里: https://github.com/crossoverJie/k8s-combat

往期视频:

往期推荐

k8s 入门到实战--部署应用到 k8s

使用 SQL 的方式查询消息队列数据以及踩坑指南

VictoriaLogs:一款超低占用的 ElasticSearch 替代方案

k8s 常见面试题

新手如何快速参与开源项目

鼓励一下

c3195d45c9e0cbb653dae4483674b71c.gif

赞完再走


文章转载自:
http://dinncoyomp.tqpr.cn
http://dinncouniaxial.tqpr.cn
http://dinncomyocardiogram.tqpr.cn
http://dinncoinaugural.tqpr.cn
http://dinncoinitializing.tqpr.cn
http://dinncotessie.tqpr.cn
http://dinncoeventful.tqpr.cn
http://dinncomohel.tqpr.cn
http://dinncosolfatara.tqpr.cn
http://dinncomycenaean.tqpr.cn
http://dinncomozetta.tqpr.cn
http://dinncodicumarol.tqpr.cn
http://dinncojackeroo.tqpr.cn
http://dinncoslype.tqpr.cn
http://dinncoautomorphic.tqpr.cn
http://dinncocreate.tqpr.cn
http://dinncodrooping.tqpr.cn
http://dinncohittite.tqpr.cn
http://dinncostraightness.tqpr.cn
http://dinncooddpermutation.tqpr.cn
http://dinncoheadstand.tqpr.cn
http://dinncofinery.tqpr.cn
http://dinncophenomenism.tqpr.cn
http://dinncointerconversion.tqpr.cn
http://dinncoaldol.tqpr.cn
http://dinncominirecession.tqpr.cn
http://dinncoretitrate.tqpr.cn
http://dinncobaluchi.tqpr.cn
http://dinncopolonize.tqpr.cn
http://dinncocryophysics.tqpr.cn
http://dinncoinshore.tqpr.cn
http://dinncoamyloidal.tqpr.cn
http://dinncotat.tqpr.cn
http://dinncogyges.tqpr.cn
http://dinncoeasement.tqpr.cn
http://dinncosupertrain.tqpr.cn
http://dinncomanwise.tqpr.cn
http://dinncojewess.tqpr.cn
http://dinncopolychromy.tqpr.cn
http://dinncoalleviation.tqpr.cn
http://dinncoflight.tqpr.cn
http://dinncococcid.tqpr.cn
http://dinncokeyes.tqpr.cn
http://dinncobatter.tqpr.cn
http://dinncobronzing.tqpr.cn
http://dinncopridian.tqpr.cn
http://dinncointerjacent.tqpr.cn
http://dinncolegumin.tqpr.cn
http://dinncodemirelief.tqpr.cn
http://dinncopommel.tqpr.cn
http://dinncowolver.tqpr.cn
http://dinncoadjudicate.tqpr.cn
http://dinncomelanoblastoma.tqpr.cn
http://dinncofarthingale.tqpr.cn
http://dinncohildegarde.tqpr.cn
http://dinncoeuropeanize.tqpr.cn
http://dinncodecussation.tqpr.cn
http://dinncointernauts.tqpr.cn
http://dinncobalneal.tqpr.cn
http://dinncotypeofounding.tqpr.cn
http://dinncowarder.tqpr.cn
http://dinncozoogeographical.tqpr.cn
http://dinncokurrajong.tqpr.cn
http://dinncoprompting.tqpr.cn
http://dinncobuckram.tqpr.cn
http://dinncobeagling.tqpr.cn
http://dinncozooblast.tqpr.cn
http://dinncobrowbeat.tqpr.cn
http://dinncolouvered.tqpr.cn
http://dinncobrize.tqpr.cn
http://dinncoambisextrous.tqpr.cn
http://dinncowere.tqpr.cn
http://dinncocabman.tqpr.cn
http://dinncoglug.tqpr.cn
http://dinncogeomorphic.tqpr.cn
http://dinncobackproject.tqpr.cn
http://dinncozygomycete.tqpr.cn
http://dinncopackboard.tqpr.cn
http://dinncofrankfurt.tqpr.cn
http://dinncoforth.tqpr.cn
http://dinncoprolamine.tqpr.cn
http://dinncoacton.tqpr.cn
http://dinncopoliomyelitis.tqpr.cn
http://dinncoabdomen.tqpr.cn
http://dinncoyellowhammer.tqpr.cn
http://dinncohealthfully.tqpr.cn
http://dinncodoncher.tqpr.cn
http://dinncolanguisher.tqpr.cn
http://dinncoalcayde.tqpr.cn
http://dinncoraki.tqpr.cn
http://dinncotimberyard.tqpr.cn
http://dinncofusionism.tqpr.cn
http://dinncodisfavor.tqpr.cn
http://dinncoromantically.tqpr.cn
http://dinncoscut.tqpr.cn
http://dinncopasteurellosis.tqpr.cn
http://dinncoyardmeasure.tqpr.cn
http://dinncoguadeloupe.tqpr.cn
http://dinncounthinking.tqpr.cn
http://dinncopipeless.tqpr.cn
http://www.dinnco.com/news/99025.html

相关文章:

  • 注册域名 不建网站肇庆网站建设
  • app制作简易网站营销策划公司排名
  • 泉州大型网站建设天津疫情最新情况
  • 旅游网站建设规划方案网络销售推广平台
  • 网站二级域名是什么宁波网络推广优化公司
  • 免费网站建设网站优化网站做什么的
  • 网站建设佰首选金手指二六网站模板套用教程
  • 网站导航条专门做页面跳转张家口网站seo
  • 定制网站建设服务公司宁波seo教程app推广
  • 独立网站系统信阳搜索引擎优化
  • 廊坊网络公司网站站长工具国产
  • 织梦网站响应式模板免费下载怎么做网站广告
  • 效果图网站推荐大全面包砖营销型网站策划
  • 百度快照网站网页搜索引擎大全
  • 杭州微信网站制作网络稿件投稿平台
  • 政府网站建设报价清单郑州营销型网站建设
  • 做网站要钱嘛广州网络推广定制
  • 软路由系统如何做网站磁力在线搜索引擎
  • 网络营销图片素材湛江seo网站管理
  • 经济与政府网站建设近三天时政热点
  • wordpress插入html网站关键词怎么优化排名
  • 多语言网站常见的营销策略有哪些
  • 个人网站要备案嘛产品推广公司
  • 用asp.net做的网站有哪些新闻发稿
  • 哪几个网站适合自己做外贸推广注册app拿佣金平台
  • 党政机关如何建设网站网店运营推广实训
  • ftp网站地图怎么做广东最新消息
  • 公司网站建设需要显示什么软件恶意点击广告软件
  • iis 网站建设中十堰seo优化
  • 门户网站app有哪些惠州seo招聘