一、从运维角度看微服务:

1.1 微服务的特点:

  1. 服务组件化:每个微服务独立开发、部署,可以有效避免因单个微服务的变更引起整个系统重新部署的情况。
  2. 技术栈灵活:约定通信方式,使得服务本身功能实现对技术栈要求不再敏感。
  3. 独立部署:每个微服务独立部署,加速部署速度,方便扩展。
  4. 扩展性强:每个微服务可以部署多个,并且有负载均衡能力。
  5. 独立数据:每个微服务有独立的基本组件,例如:数据库、缓存等。

1.2 微服务的不足:

  1. 沟通成本:微服务相比于传统单体应用开发团队沟通成本更大。
  2. 数据一致性:每个微服务都有自己独立的数据存储,可能会造成数据的不一致。
  3. 运维成本:微服务部署会涉及更多的组件,对运维的部署、监控、更新都带来更大的挑战。
  4. 内部架构复杂性:微服务本身就会带来架构的复杂性,如:服务之间的耦合性设计、分布式事务等。

1.3 Java微服务框架:

  • Spring Boot
  • Spring Cloud / Spring Cloud Alibaba
  • Dubbo

部署过程

一般企业开发过程中会根据项目的特性选择不同的源码分支模型和部署策略。因此我们选择从开发部署过程:

拉取源码 -> 构建源码 -> **构建完成镜像 ** -> 并推送镜像 -> 部署项目

Java 后端流水线

每个阶段所执行的任务:

  1. 从仓库拉取代码:xxxx.git
  2. 使用 Maven 构建后端 Java 代码。
  3. 构建镜像,并将 tag 为 SNAPSHOT-$BUILD_NUMBER 推送至 harbor (其中 $BUILD_NUMBER 为 pipeline 活动列表的运行序号)。
  4. 将项目部署到开发环境,此阶段需要预先审核,若部署成功后则发送邮件。

编写 Dockerfile

我们需要将 springboot 应用打包成镜像,然后上传到镜像仓库中,后面部署到 k8s 中需要指定镜像地址。Dockerfile 文件示例:

将镜像打包到仓库这里就不展开了。

编写 Jenkinsfile

编写 K8S.YAML