微服务中的部署方法。

简介: #微服务#部署#去#开发运营

部署单体应用程序通常意味着运行通常较大的单个应用程序块的一台或多台服务器。单体应用的部署可能并不总是一个简单的过程,但它比部署微服务要简单得多。

微服务应用程序可以由数十或数百个用各种不同编程语言和框架编写的互连服务组成。每个微服务都是一个小型应用程序,拥有自己的资源、扩展和部署,您需要运行单个微服务的多个实例才能扩展。

例如,假设您有一个电子商务应用程序,由一些微服务组成,这些微服务可能是目录、购物车、搜索、支付等。现在您需要单独部署这些服务中的每一个,并且每个服务可能需要在多个服务上运行实例来实现该特定服务的可扩展性。

部署用 Golang 编写的微服务需要仔细规划和考虑各种部署策略。这些策略有助于确保您的微服务可靠、可扩展,并且可以在生产环境中进行有效管理。以下是一些使用 Golang 进行微服务的部署策略和实践:

集装箱化

容器化是一种以隔离方式构建、测试和部署应用程序而不会干扰其他服务的技术。Docker、LXD 和 Podman 等工具用于容器化和部署微服务。每个微服务及其依赖项都打包为轻量级容器,使其在不同环境中保持一致和可移植。

Docker是最受欢迎且使用最广泛的容器引擎之一,几乎所有组织都喜欢使用。它具有高度可配置性且对开发人员友好,这使其成为构建容器的自动选择。我们将在下一个模块中详细学习 Docker 或容器化。

以下是 Golang 的 Dockerfile 示例:

# syntax=docker/dockerfile:1
FROM golang:1.21
# Set destination for COPY
WORKDIR /app
# Download Go modules
COPY go.mod go.sum ./
RUN go mod download
# Copy the source code. Note the slash at the end, as explained in
# https://docs.docker.com/engine/reference/builder/#copy
COPY *.go ./
# Build
RUN CGO_ENABLED=0 GOOS=linux go build -o /web-server
# Optional:
# To bind to a TCP port, runtime parameters must be supplied to the docker command.
# But we can document in the Dockerfile what ports
# the application is going to listen on by default.
# https://docs.docker.com/engine/reference/builder/#expose
EXPOSE 8080
# Run
CMD ["/web-server"]

编排

当使用 docker 或任何其他工具进行容器化时,我们知道有许多微服务需要容器化和部署。不过,问题是随着规模的扩大,部署在何处以及如何管理数十或数百个容器。编排是一种以自动化方式处理尽可能多的容器的技术。Kubernetes 和 Docker Swarm 等平台广泛用于管理容器化微服务。

Kubernetes 或简称 K8s 是 Google 创建的最受欢迎的容器编排工具,大多数组织都喜欢。Docker Swarm 也用于管理 Docker 公司自己推出的容器,缺乏 Kubernetes 所具有的一些功能,但这两个工具都提供了足够的功能,如扩展、负载均衡、服务发现和滚动更新等。

蓝绿部署

一般来说,蓝绿部署技术是一种适用于单体架构和微服务架构的模式,从战略上讲,它涉及为基础架构运行两个相同的环境。此部署的主要目标是最大限度地减少从“蓝色”(当前)和“绿色”(新)基础设施切换时的停机时间。当新版本的微服务准备就绪时,流量将从蓝色切换为绿色,以便在出现问题时轻松回滚。这两个环境需要保持独立,但看起来仍然尽可能相似。这些环境可以由不同的硬件或位于相同或不同硬件上的虚拟机组成。

蓝绿部署通过在开发和部署期间保持微服务可用来提高高可用性。不会出现停机,因为已经有一个类似版本的微服务与服务传入流量的稳定版本同时运行,因此,如果稳定版本以某种方式崩溃或变得不稳定,另一个相同的环境将处理流量。另一个好处是,如果新版本无法正常工作,您可以快速回滚到之前的版本(蓝色微服务)。持续监控微服务以跟踪如果出现任何问题,则应将其恢复到蓝色状态。这种技术也称为红黑部署,这是 Netflix、Istio 和其他支持容器编排的框架/平台使用的新术语。这种策略或技术与蓝绿部署有微妙但又显着的不同。

它们之间的唯一区别是蓝绿部署,两个版本都可以同时获取传入请求,但在红黑部署中,只有一个版本在任何时间点获取流量。

金丝雀部署

金丝雀部署是部署应用程序基础设施的最流行的策略之一。与蓝/绿部署一样,该技术也可以与单体架构和微服务架构一起使用。最好慢慢地从蓝色过渡到绿色,而不是突然过渡。

在金丝雀部署中,工程师分阶段逐步部署新功能或更改,目标是向特定用户组展示新功能或更改。这包括首先向一小部分负载发布新版本的服务,然后查看其是否按预期工作。金丝雀部署一次仅发布一个微服务,并且关键性和风险较高的微服务可以先于其他微服务发布。

为了确保微服务在发布前经过真实用户的全面测试,工程师可以使用金丝雀部署。这种方法可以比较不同的服务版本,减少停机时间,同时提高可用性。及早发现问题可以防止关键微服务受到损害并确保整个系统的安全。

滚动部署

滚动部署一次更新一个微服务,同时保持其他微服务运行。在此策略中,应用程序的新版本会定期替换应用程序的旧版本,并且部署会持续一段时间。在应用程序部署过程中实施滚动部署可以显着提高高可用性并降低服务中断的风险。通过这种方法,多个环境几乎始终处于运行状态,确保您的用户可以不间断地访问您的应用程序。当应用程序的新版本完全占用时,旧版本就会发布,从而实现无缝过渡。这可确保您的用户体验最短的停机时间,并可以继续使用您的应用程序而不会造成任何中断。

滚动部署允许增量部署,这有助于通过降低广泛故障的风险来减少应用程序的停机时间和可靠性。SRE 和 DevOps 工程师逐步更新服务器并持续监控它,因此如果出现任何问题,可以在整个系统受到影响之前及早发现并解决。

滚动部署是简化解决部署期间可能出现的问题的过程的有效方法。这种策略是增量更新系统,因此如果出现任何问题,只需要回滚更新的服务器,而不是整个系统。这为开发人员和管理员提供了更多的控制权和灵活性来管理系统的完整性。

无服务器部署

无服务器与其名称不同,意味着应用程序资源部署并托管在一些服务器上,工程师不需要关心与基础设施相关的任何事情。云公司提供的平台(例如 AWS Lambda、Google Cloud Functions 和 Azure Functions)都是无服务器平台,它们提供使用即用即付模型运行微服务所需的所有资源。无服务器微服务包含在应用程序中执行高度特定角色的云功能。这些云功能根据需求自动扩展,只需支付运行这些功能所需的费用。

无服务器微服务包含无服务器函数,这些函数是为响应对该微服务的传入请求而运行的小代码块。我们讨论过,微服务也是小型独立服务,可以相互独立地扩展和管理,那么无服务器如何适应这种情况呢?

就像我们可以在 docker 这样的容器平台中彼此独立地运行微服务一样,我们可以为在某个云供应商上运行的每个微服务编写一个函数,而无需管理任何开销。单个微服务可以同时部署多个功能。云提供商通过处理基础设施为开发人员提供了有价值的解决方案,使他们能够将精力集中在编码上。这可以实现更高效的工作流程和简化的开发流程。

自动化和安全考虑因素

自动化流程已成为软件交付的一个重要方面,尤其是在构建云原生应用程序时。部署自动化是自动化从开发到测试以及每个微服务的部署的工作流程的过程。该流程在整个 SDLC(软件开发生命周期)中都是可靠且有效的。使部署过程自动化的目标是消除手动部署的挑战并提高发布微服务的质量和速度。

DevOps 工程师通常管理基础设施中的各种部署,并负责解决部署中出现的任何问题。有大量工具可以帮助 DevOps 工程师使用 CI/CD(持续集成/持续部署)管道来设置自动化流程,以实现部署流程的自动化。Jenkins、Travis CI 或 GitLab CI/CD 等 CI/CD 工具可以帮助自动化测试、构建和部署微服务。部署自动化还可以帮助工程师获得快速反馈,因为它不易出错并且可以以更高的频率发布,因此您可以立即获得反馈。

在设计和使用微服务时,安全性是基础设施层面需要考虑的另一件事。我们在上一个模块中讨论了安全测试,在部署的每个阶段实施安全最佳实践非常重要,包括安全通信、访问控制和漏洞扫描。在考虑安全通信时,请始终尝试使用 HTTPS 在服务之间进行安全通信。

作为负责部署的工程师,您应该了解网络钓鱼和撞库。但警惕来自网络内部的攻击也很重要。为了确保您的网络安全,最好在微服务架构中使用 HTTPS。使用依赖项时,创建自动化工作流程来检测扫描代码库的依赖项中的问题。

Snyk是最流行的安全工具之一,它不仅可以帮助您查找代码库中的漏洞,还可以帮助您查找基础设施中的漏洞。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
缓存 负载均衡 监控
微服务架构下的电商API接口设计:策略、方法与实战案例
本文探讨了微服务架构下的电商API接口设计,旨在打造高效、灵活与可扩展的电商系统。通过服务拆分(如商品、订单、支付等模块)和标准化设计(RESTful或GraphQL风格),确保接口一致性与易用性。同时,采用缓存策略、负载均衡及限流技术优化性能,并借助Prometheus等工具实现监控与日志管理。微服务架构的优势在于支持敏捷开发、高并发处理和独立部署,满足电商业务快速迭代需求。未来,电商API设计将向智能化与安全化方向发展。
650 102
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
1228 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
813 60
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
存储 监控 Docker
探索微服务架构下的容器化部署
本文旨在深入探讨微服务架构下容器化部署的关键技术与实践,通过分析Docker容器技术如何促进微服务的灵活部署和高效管理,揭示其在现代软件开发中的重要性。文章将重点讨论容器化技术的优势、面临的挑战以及最佳实践策略,为读者提供一套完整的理论与实践相结合的指导方案。
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
监控 安全 持续交付
构建高效的微服务架构:从设计到部署
构建高效的微服务架构:从设计到部署
306 1
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
564 1
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
549 1

热门文章

最新文章