k8s容器云架构之dubbo微服务—K8S(09)交付实战-通过流水线构建dubbo服务

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 博客地址:https://www.cnblogs.com/sseban哔哩哔哩:https://space.bilibili.com/394449264k8s交付实战-流水线构建dubbo服务

k8s交付实战-流水线构建dubbo服务

目录

  • k8s交付实战-流水线构建dubbo服务
  • 1 jenkins流水线准备工作
  • 1.1 参数构建要点
  • 1.2 创建流水线
  • 1.2.1 创建流水线
  • 1.2.2 添加10个构建参数
  • 1.2.3 添加完成效果如下:
  • 1.2.4 添加pipiline代码
  • 1.3 用流水线完成dubbo-service的构建
  • 1.3.1 选择参数化构建
  • 1.3.2 填写完成效果如下
  • 1.3.3 执行构建并检查
  • 2 交付dubbo-service到k8s
  • 2.1 准备资源清单
  • 2.1.1 创建depeloy清单
  • 2.2 创建k8s资源
  • 2.2.1 创建app名称空间
  • 2.2.2 创建secret资源
  • 2.2.3 应用资源清单
  • 3 交付dubbo-monitor监控服务到k8s
  • 3.1 制作dobbo-monitor镜像
  • 3.1.1 下载源码
  • 3.1.2 修改配置文件:
  • 3.1.3 优化Dockerfile启动脚本
  • 3.1.4 构建并上传
  • 3.2 创建资源配置清单
  • 3.2.1 准备目录
  • 3.2.2 创建deploy资源文件
  • 3.2.3 创建service资源文件
  • 3.2.4 创建ingress资源文件
  • 3.3 创建dobbo-miniotr服务
  • 3.3.1 应用资源配置清单
  • 3.3.2 添加dns解析
  • 3.3.3 访问monitor的web页面
  • 4 构建dubbo-consumer服务
  • 4.1 构建docker镜像
  • 4.1.1 获取私有仓库代码
  • 4.1.2 配置流水线
  • 4.1.3 查看构建结果
  • 4.2 准备资源配置清单:
  • 4.2.1 创建deploy资源清单
  • 4.2.2 创建service资源清单
  • 4.2.3 创建ingress资源清单
  • 4.3 创建K8S资源
  • 4.3.1 应用资源配置清单:
  • 4.3.2 验证启动结果
  • 4.3.3 添加dns解析
  • 4.4 模拟版本升级
  • 4.4.1 修改dp.yaml资源配置清单
  • 4.4.2 应用修改后的资源配置清单
  • 4.4.3 使用浏览器验证

1 jenkins流水线准备工作

1.1 参数构建要点

jenkins流水线配置的java项目的十个常用参数:

image.png

除了base_image和maven是choice parameter,其他都是string parameter

1.2 创建流水线

1.2.1 创建流水线

创建名为dubbo-demo的流水线(pipeline),并设置Discard old builds 为如下

image.png

1.2.2 添加10个构建参数

This project is parameterized点击Add Parameter,分别添加如下10个参数

#第1个参数
参数类型 : String Parameter
Name : app_name
Description : 项目名 eg:dubbo-demo-service
#第2个参数
参数类型 : String Parameter
Name : image_name
Description : docker镜像名 eg: app/dubbo-demo-service
#第3个参数
参数类型 : String Parameter
Name : git_repo
Description : 仓库地址 eg: https://gitee.com/xxx/xxx.git
#第4个参数
参数类型 : String Parameter
Name : git_ver
Description : 项目的git分支或版本号
#第5个参数
参数类型 : String Parameter
Name : add_tag
Description : 
给docker镜像添加标签组合的一部分,如
$git_ver_$add_tag=master_191203_1830
#第6个参数
参数类型 : String Parameter
Name : mvn_dir
Default Value : ./
Description : 执行mvn编译的目录,默认是项目根目录, eg: ./
#第7个参数
参数类型 : String Parameter
Name : target_dir
Default Value : ./target
Description : 编译产生的war/jar包目录 eg: ./dubbo-server/target
#第8个参数
参数类型 : String Parameter
Name : mvn_cmd
Default Value : mvn clean package -Dmaven.test.skip=true
Description : 编译命令,常加上-e -q参数只输出错误
#第9个参数
参数类型 : Choice Parameter
Name : base_image
Choices :
base/jre7:7u80
base/jre8:8u112
Description : 项目的docker底包
#第10个参数
参数类型 : Choice Parameter
Name : maven
Choices :
3.6.1
3.2.5
2.2.1
Description : 执行编译使用maven软件版本

1.2.3 添加完成效果如下:

1.2.4 添加pipiline代码

流水线构建所用的pipiline代码语法比较有专门的生成工具

以下语句的作用大致是分为四步:拉代码->构建包->移动包-打docker镜像并推送

pipeline {
  agent any 
    stages {
      stage('pull') { //get project code from repo 
        steps {
          sh "git clone ${params.git_repo} ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.app_name}/${env.BUILD_NUMBER} && git checkout ${params.git_ver}"
        }
      }
      stage('build') { //exec mvn cmd
        steps {
          sh "cd ${params.app_name}/${env.BUILD_NUMBER}  && /var/jenkins_home/maven-${params.maven}/bin/${params.mvn_cmd}"
        }
      }
      stage('package') { //move jar file into project_dir
        steps {
          sh "cd ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.target_dir} && mkdir project_dir && mv *.jar ./project_dir"
        }
      }
      stage('image') { //build image and push to registry
        steps {
          writeFile file: "${params.app_name}/${env.BUILD_NUMBER}/Dockerfile", text: """FROM harbor.zq.com/${params.base_image}
ADD ${params.target_dir}/project_dir /opt/project_dir"""
          sh "cd  ${params.app_name}/${env.BUILD_NUMBER} && docker build -t harbor.zq.com/${params.image_name}:${params.git_ver}_${params.add_tag} . && docker push harbor.zq.com/${params.image_name}:${params.git_ver}_${params.add_tag}"
        }
      }
    }
}

image.png

1.3 用流水线完成dubbo-service的构建

记得先在harbor中创建私有仓库app

1.3.1 选择参数化构建

进入dubbo-demo后,选择的参数化构建build with parameters ,填写10个构建的参数

image.png

1.3.2 填写完成效果如下

1.3.3 执行构建并检查

填写完以后执行bulid

第一次构建需要下载很多依赖包,时间很长,抽根烟,喝杯茶

经过漫长的等待后,已经构建完成了

点击打开 Blue Ocean查看构建历史及过程:

检查harbor是否已经有这版镜像:

2 交付dubbo-service到k8s

2.1 准备资源清单

创建清单操作都在7.200上操作

mkdir /data/k8s-yaml/dubbo-server/
cd /data/k8s-yaml/dubbo-server

2.1.1 创建depeloy清单

cat >dp.yaml <<EOF
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: dubbo-demo-service
  namespace: app
  labels: 
    name: dubbo-demo-service
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: dubbo-demo-service
  template:
    metadata:
      labels: 
        app: dubbo-demo-service
        name: dubbo-demo-service
    spec:
      containers:
      - name: dubbo-demo-service
        image: harbor.zq.com/app/dubbo-demo-service:master_200509_0800
        ports:
        - containerPort: 20880
          protocol: TCP
        env:
        - name: JAR_BALL
          value: dubbo-server.jar
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext: 
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600
EOF

需要根据自己构建镜像的tag来修改image

dubbo的server服务,只向zk注册并通过zk与dobbo的web交互,不需要对外提供服务

因此不需要service资源和ingress资源

2.2 创建k8s资源

创建K8S资源的操作,在任意node节点上操作即可

2.2.1 创建app名称空间

业务资源和运维资源等应该通过名称空间来隔离,因此创建专有名称空间app

kubectl create namespace app

2.2.2 创建secret资源

我们的业务镜像是harbor中的私有项目,所以需要创建docker-registry的secret资源:

kubectl -n app \
    create secret docker-registry harbor \
    --docker-server=harbor.zq.com \
    --docker-username=admin \
    --docker-password=Harbor12345

2.2.3 应用资源清单

kubectl apply -f http://k8s-yaml.zq.com/dubbo-server/dp.yaml

3分钟后检查启动情况

# 检查pod是否创建:
~]# kubectl -n app get pod
NAME                                  READY   STATUS    RESTARTS   AGE
dubbo-demo-service-79574b6879-cxkls   1/1     Running   0          24s
# 检查是否启动成功:
~]# kubectl -n app logs dubbo-demo-service-79574b6879-cxkls --tail=2
Dubbo server started
Dubbo 服务端已经启动

到zk服务器检查是否有服务注册

sh /opt/zookeeper/bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[dubbo, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /dubbo
[com.od.dubbotest.api.HelloService]

3 交付dubbo-monitor监控服务到k8s

dobbo-monitor源码地址: https://github.com/Jeromefromcn/dubbo-monitor.git

dubbo-monitor是监控zookeeper状态的一个服务,另外还有dubbo-admin,效果一样

3.1 制作dobbo-monitor镜像

制作镜像在管理机7.200上操作

3.1.1 下载源码

cd /opt/src
wget https://github.com/Jeromefromcn/dubbo-monitor/archive/master.zip
yum -y install unzip
unzip master.zip
mv dubbo-monitor-mster /data/dockerfile/dubbo-monitor
cd  /data/dockerfile/dubbo-monitor

3.1.2 修改配置文件:

直接覆盖它原始的配置

其实它原本就没什么内容,只是修改了addr,端口,目录等

cat >dubbo-monitor-simple/conf/dubbo_origin.properties <<'EOF'
dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=
dubbo.registry.address=zookeeper://zk1.zq.com:2181?backup=zk2.zq.com:2181,zk3.zq.com:2181
dubbo.protocol.port=20880
dubbo.jetty.port=8080
dubbo.jetty.directory=/dubbo-monitor-simple/monitor
dubbo.statistics.directory=/dubbo-monitor-simple/statistics
dubbo.charts.directory=/dubbo-monitor-simple/charts
dubbo.log4j.file=logs/dubbo-monitor.log
dubbo.log4j.level=WARN
EOF

3.1.3 优化Dockerfile启动脚本

# 修改jvm资源限制(非必须)
sed -i '/Xmx2g/ s#128m#16m#g' ./dubbo-monitor-simple/bin/start.sh
sed -i '/Xmx2g/ s#256m#32m#g' ./dubbo-monitor-simple/bin/start.sh
sed -i '/Xmx2g/ s#2g#128m#g'  ./dubbo-monitor-simple/bin/start.sh
# 修改nohup为exec不能改去掉改行最后的&符号
sed -ri 's#^nohup(.*) &#exec\1#g' ./dubbo-monitor-simple/bin/start.sh
# 删除exec命令行后面所有行
sed -i '66,$d'  ./dubbo-monitor-simple/bin/start.sh

3.1.4 构建并上传

docker build . -t harbor.zq.com/infra/dubbo-monitor:latest
docker push       harbor.zq.com/infra/dubbo-monitor:latest

3.2 创建资源配置清单

3.2.1 准备目录

mkdir /data/k8s-yaml/dubbo-monitor
cd /data/k8s-yaml/dubbo-monitor

3.2.2 创建deploy资源文件

cat >dp.yaml <<EOF
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: dubbo-monitor
  namespace: infra
  labels: 
    name: dubbo-monitor
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: dubbo-monitor
  template:
    metadata:
      labels: 
        app: dubbo-monitor
        name: dubbo-monitor
    spec:
      containers:
      - name: dubbo-monitor
        image: harbor.zq.com/infra/dubbo-monitor:latest
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 20880
          protocol: TCP
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext: 
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600
EOF

3.2.3 创建service资源文件

cat >svc.yaml <<EOF
kind: Service
apiVersion: v1
metadata: 
  name: dubbo-monitor
  namespace: infra
spec:
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
  selector: 
    app: dubbo-monitor
EOF


3.2.4 创建ingress资源文件

cat >ingress.yaml <<EOF
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: dubbo-monitor
  namespace: infra
spec:
  rules:
  - host: dubbo-monitor.zq.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: dubbo-monitor
          servicePort: 8080
EOF

3.3 创建dobbo-miniotr服务

3.3.1 应用资源配置清单

在任意node节点

kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp.yaml
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/svc.yaml
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/ingress.yaml

验证:

~]# kubectl -n infra get pod
NAME                            READY   STATUS    RESTARTS   AGE
dubbo-monitor-d9675688c-sctsx   1/1     Running   0          29s
jenkins-7cd8b95d79-6vrbn        1/1     Running   0          3d2h

3.3.2 添加dns解析

这个服务是有web页面的,创建了ingress和service资源的,所以需要添加dns解析

vi /var/named/zq.com.zone
dobbo-monitor   A    10.4.7.10

重启并验证

systemctl restart named
dig -t A dubbo-monitor.zq.com @10.4.7.11 +short

3.3.3 访问monitor的web页面

访问dubbo-monitor.zq.com

这里已经可以看到我们之前部署的dubbo-demo-service服务了,启动了两个进程来提供服务。

至此,dubbo-monitor监控服务已经部署完成。

4 构建dubbo-consumer服务

4.1 构建docker镜像

4.1.1 获取私有仓库代码

之前创建的dubbo-service是微服务的提供者,现在创建一个微服务的消费者

使用git@gitee.com:noah-luo/dubbo-demo-web.git这个私有仓库中的代码构建消费者

先从https://gitee.com/sunx66/dubbo-demo-service这里fork到自己仓库,在设为私有

并修改zk的配置

4.1.2 配置流水线

之前已经在jenkins配置好了流水线,只需要填写参数就行了。

image.png

4.1.3 查看构建结果

如果构建不报错,则应该已经推送到harbor仓库中了,这时我们直接再给镜像一个新tag,以便后续模拟更新

docker tag \
    harbor.zq.com/app/dubbo-demo-consumer:master_200506_1430 \
    harbor.zq.com/app/dubbo-demo-consumer:master_200510_1430 
docker push harbor.zq.com/app/dubbo-demo-consumer:master_200510_1430

查看harbor仓库

4.2 准备资源配置清单:

先准备目录

mkdir /data/k8s-yaml/dubbo-consumer
cd /data/k8s-yaml/dubbo-consumer

4.2.1 创建deploy资源清单

cat >dp.yaml <<EOF
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: dubbo-demo-consumer
  namespace: app
  labels: 
    name: dubbo-demo-consumer
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: dubbo-demo-consumer
  template:
    metadata:
      labels: 
        app: dubbo-demo-consumer
        name: dubbo-demo-consumer
    spec:
      containers:
      - name: dubbo-demo-consumer
        image: harbor.zq.com/app/dubbo-demo-consumer:master_200506_1430
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 20880
          protocol: TCP
        env:
        - name: JAR_BALL
          value: dubbo-client.jar
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext: 
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600
EOF

注意修改镜像的tag

4.2.2 创建service资源清单

cat >svc.yaml <<EOF
kind: Service
apiVersion: v1
metadata: 
  name: dubbo-demo-consumer
  namespace: app
spec:
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
  selector: 
    app: dubbo-demo-consumer
EOF

4.2.3 创建ingress资源清单

cat >ingress.yaml <<EOF
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: dubbo-demo-consumer
  namespace: app
spec:
  rules:
  - host: dubbo-demo.zq.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: dubbo-demo-consumer
          servicePort: 8080
EOF

4.3 创建K8S资源

4.3.1 应用资源配置清单:

kubectl apply -f http://k8s-yaml.zq.com/dubbo-consumer/dp.yaml
kubectl apply -f http://k8s-yaml.zq.com/dubbo-consumer/svc.yaml
kubectl apply -f http://k8s-yaml.zq.com/dubbo-consumer/ingress.yaml
# 查看容器启动成功没
~]# kubectl get pod -n app
NAME                                  READY   STATUS    RESTARTS   AGE
dubbo-demo-consumer-b8d86bd5b-wbqhs   1/1     Running   0          6s
dubbo-demo-service-79574b6879-cxkls   1/1     Running   0          4h39m

4.3.2 验证启动结果

查看log,是否启动成功:

~]# kubectl -n app  logs --tail=2 dubbo-demo-consumer-b8d86bd5b-wbqhs 
Dubbo client started
Dubbo 消费者端启动

检查dubbo-monitor是否已经注册成功:

4.3.3 添加dns解析

vi /var/named/zq.com.zone
dubbo-demo    A    10.4.7.10
# 重启服务
systemctl restart named
# 验证
~]# dig -t A dubbo-demo.zq.com @10.4.7.11 +short
10.4.7.10

浏览器访问http://dubbo-demo.zq.com/hello?name=lg

4.4 模拟版本升级

接下来我们模拟升级发版,之前已经用同一个镜像打了不同的tag并推送到从库

当然正常发版的顺序是:

  1. 提交修改过的代码的代码块
  2. 使用jenkins构建新镜像
  3. 上传到私有harbor仓库中
  4. 更新de文件并apply

4.4.1 修改dp.yaml资源配置清单

修改harbor镜像仓库中对应的tag版本:

sed -i 's#master_200506_1430#master_200510_1430#g' dp.yaml

4.4.2 应用修改后的资源配置清单

当然也可以在dashboard中进行在线修改:

kubectl apply -f http://k8s-yaml.zq.com/dubbo-consumer/dp.yaml
~]# kubectl -n app  get pod
NAME                                   READY   STATUS    RESTARTS   AGE
dubbo-demo-consumer-84f75b679c-kdwd7   1/1     Running   0          54s
dubbo-demo-service-79574b6879-cxkls    1/1     Running   0          4h58m

image.png

4.4.3 使用浏览器验证

使用浏览器验证:http://dubbo-demo.zq.com/hello?name=lg

在短暂的超时后,即可正常访问

至此,我们一套完成的dubbo服务就已经交付到k8s集群当中了,并且也演示了如何发版。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
4天前
|
XML Java 数据格式
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
|
4天前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
4天前
|
XML Java 数据格式
Spring5入门到实战------5、IOC容器-Bean管理(三)
这篇文章深入探讨了Spring5框架中IOC容器的高级Bean管理,包括FactoryBean的使用、Bean作用域的设置、Bean生命周期的详细解释以及Bean后置处理器的实现和应用。
Spring5入门到实战------5、IOC容器-Bean管理(三)
|
4天前
|
XML Java 数据格式
Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
这篇文章详细介绍了Spring框架中IOC容器的Bean管理,特别是基于XML配置方式的实现。文章涵盖了Bean的定义、属性注入、使用set方法和构造函数注入,以及如何注入不同类型的属性,包括null值、特殊字符和外部bean。此外,还探讨了内部bean的概念及其与外部bean的比较,并提供了相应的示例代码和测试结果。
Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
|
4天前
|
XML Java 数据格式
Spring5入门到实战------2、IOC容器底层原理
这篇文章深入探讨了Spring5框架中的IOC容器,包括IOC的概念、底层原理、以及BeanFactory接口和ApplicationContext接口的介绍。文章通过图解和实例代码,解释了IOC如何通过工厂模式和反射机制实现对象的创建和管理,以及如何降低代码耦合度,提高开发效率。
Spring5入门到实战------2、IOC容器底层原理
|
3天前
|
监控 负载均衡 API
从单体到微服务:架构转型之道
【8月更文挑战第17天】从单体架构到微服务架构的转型是一项复杂而系统的工程,需要综合考虑技术、团队、文化等多个方面的因素。通过合理的规划和实施策略,可以克服转型过程中的挑战,实现系统架构的升级和优化。微服务架构以其高度的模块化、可扩展性和灵活性,为业务的持续发展和创新提供了坚实的技术保障。
|
4天前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
4天前
|
XML Java 数据格式
Spring5入门到实战------2、IOC容器底层原理
这篇文章深入探讨了Spring5框架中的IOC容器,包括IOC的概念、底层原理、以及BeanFactory接口和ApplicationContext接口的介绍。文章通过图解和实例代码,解释了IOC如何通过工厂模式和反射机制实现对象的创建和管理,以及如何降低代码耦合度,提高开发效率。
Spring5入门到实战------2、IOC容器底层原理
|
9天前
|
监控 负载均衡 开发者
掌握容器化技术:从零基础到实战应用
容器化技术正在快速改变软件开发和部署的方式。在这篇文章中,我们将从基础知识出发,逐步探讨容器化的核心概念、常用工具以及实际应用场景。无论你是刚接触容器化技术的新手,还是希望将现有知识应用到实际项目中的开发者,本文都将为你提供一个全面的入门指南和实战技巧。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多