前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 微服务上容器平台的最佳实践 - 5

Spring Boot 微服务上容器平台的最佳实践 - 5

作者头像
东风微鸣
发布2022-04-21 14:01:34
3810
发布2022-04-21 14:01:34
举报
文章被收录于专栏:东风微鸣技术博客

前言

今天开始第四篇, 主要介绍下 如何将配置外部化。

这次没有用到SpringConfig Server, 而是使用OpenShiftConfigMap作为参数外部化的方案.

参数外部化

Presentation 服务在其应用程序属性中将Hystrix配置为线程池大小为20。在航班搜索操作之后,通过搜索presentation pod的日志来确认这一点,并验证batch size是相同的。

代码语言:javascript
复制
$ oc logs presentation-1-k2xlz | grep batch
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 20 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 13 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 20 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 13 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 20 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 13 
tickets

△ 当前batch size最大为20

创建一个新application.yml文件. vi application.yml

输入以下内容:

代码语言:javascript
复制
hystrix:
  threadpool:
    SalesThreads:
      coreSize: 30
      maxQueueSize: 300
      queueSizeRejectionThreshold: 300    

通过oc 创建configmap:

代码语言:javascript
复制
$ oc create configmap presentation --from-file=application.yml
configmap "presentation" created

编辑presentationdeployment config并将这个ConfigMap挂载为卷, 路径为:/deployment/config,它将自动成为Spring启动应用程序classpath的一部分. $ oc edit dc presentation

添加具有任意名称的新卷,例如config-volume, 来引用前面创建的configmap。volume定义是template spec的一个子规范。接下来,在容器下面创建一个volume mount来引用这个卷,并指定应该挂载它的位置。最后的结果如下所示. (volumeMounts -> dnsPolicy之前)

代码语言:javascript
复制
...
        resources: {}
        securityContext:
          privileged: false
        terminationMessagePath: /dev/termination-log
        volumeMounts:
        - name: config-volume
          mountPath: /deployments/config
      volumes:
        - name: config-volume
          configMap:
            name: presentation
      dnsPolicy: ClusterFirst
      restartPolicy: Always
...

一旦修改并保存了deployment config,OpenShift将部署包含覆盖属性的服务的新版本。这个更改是持久的,将来使用这个新版本的部署配置创建的pod也将挂载这个yaml文件。

列出pod,并注意一个新的pod正在创建来反映部署配置(即挂载的文件)中的更改:

代码语言:javascript
复制
$ oc get pods
NAME                       READY     STATUS      RESTARTS   AGE
airports-1-72kng           1/1       Running     0          18m
flights-1-4xkfv            1/1       Running     0          15m
presentation-1-k2xlz       1/1       Running     0          10m
presentation-2-deploy      0/1       ContainerCreating   0          3s
sales-1-fqxjd              1/1       Running     0          7m
salesv2-1-s1wq0            1/1       Running     0          5m
zipkin-1-k0dv6             1/1       Running     0          1h
zipkin-mysql-1-g44s7       1/1       Running     0          1h
zuul-1-2jkj0               1/1       Running     0          1m

等待,直到pod的第二个版本已经启动, 处于running状态。第一个版本将被终止,随后被删除.

代码语言:javascript
复制
$ oc get pods
NAME                       READY     STATUS      RESTARTS   AGE
...
presentation-2-pxx85       1/1       Running     0          5m
...

一旦发生这种情况,使用浏览器进行一次或多次航班搜索。然后通过搜索新的表示pod的日志来验证更新后的线程池大小,并验证batch size:

代码语言:javascript
复制
$ oc logs presentation-2-pxx85 | grep batch
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 30 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 3 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 30 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 3 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 30 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 3 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 30 
tickets
... c.r.r.o.b.l.p.s.API_GatewayController    : Will price a batch of 3 
tickets

△ 注意,使用挂载的覆盖属性时,定价将以30个并发批次进行,而不是现在的20个。

小结

通过K8S的configmap的概念, 我们可以将配置参数外部化. 然后外部化的参数可以通过2种方式挂载到运行时中:

  1. 环境变量 ENV
  2. Volume 挂载到指定路径.

还是比较灵活的.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 参数外部化
  • 小结
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档