开发者笔记

Last updated on April 19, 2025 pm

软开部署常见名词

实例(Instance)

实例通常指的是某个软件应用的具体运行实体。在云环境或服务器环境中,一个实例可以理解为一个正在运行的软件应用程序副本。例如,一个Web服务器软件(如Apache或Nginx)的一个实例,就是该软件在特定配置下运行的一个进程。在云服务提供商中,启动一个虚拟机或容器也常被称为创建一个实例,每个实例都有自己的运行环境和资源分配,可以独立运行和管理。

容器(Container)

容器是一种轻量级、可移植的软件打包技术,它将应用程序及其所有依赖(如代码、运行时环境、库、配置文件等)封装在一个独立的执行环境中。容器相当于软件业的“集装箱”。容器与宿主机共享操作系统内核,但对应用程序来说,它们就像是在独立的机器上运行一样。容器提供了高效的资源利用和一致的运行环境,使得应用可以在任何支持容器的系统上正常运行,极大地提升了软件部署的灵活性和可移植性。

容器镜像(Container Image)

容器镜像是容器的只读模板,包含创建和运行容器所需的所有文件和配置。镜像定义了容器的初始状态,包括操作系统、用户添加的文件和应用程序以及各种元数据。当你创建一个新的容器时,实际上是基于某个镜像的快照来创建的。镜像可以通过 Dockerfile 等描述文件构建,并上传到镜像仓库(如Docker Hub或私有仓库)以便分享和复用。镜像的使用简化了软件部署过程,确保了部署的一致性和可重复性。

Docker

Docker是一个开源平台,用于自动化应用程序的容器化(Containerized)部署,通过轻量级容器来封装软件及其依赖。docker容器是进程的标准封装,是软件运行的单元,可以运行在不同的操作系统平台上。Docker是容器引擎,把Linux容器底层技术进行封装抽象,为用户提供创建、管理容器的便捷界面(包括命令行和API)。

容器与虚拟机不同,容器共享主机操作系统的内核,启动更快且资源占用更低。除了运行其中的应用之外,几乎不消耗额外的系统资源,可以在保证应用性能的同时减小系统开销。而传统的虚拟机VM运行N个不同的应用要启动N台VM,每个VM都要单独分配各自的内存、磁盘等资源(独占)。Docker只需要启动N个隔离的容器,然后将应用放于其中即可。Docker以秒级速度启动,在内核中实现,性能几乎与原生一致,docker容器与进程并无本质区别,可以在一台主机上运行成百上千个容器(MB级别)。VM以分钟级启动,性能相对较差,体积是GB级,一台主机最多只能运行几十个虚拟机,但是对资源的隔离要强于Docker。

容器主要有以下功能:(1)环境一致性:解决“在我机器上能运行”的问题(开发、测试、生产环境一致)。(2)快速扩展:通过容器镜像快速复制服务实例(如Kubernetes调度容器)。(3)微服务支持:每个服务运行在独立的容器中,互不干扰,又可以交互。

集群(Cluster)

在计算机科学中,集群是指一组互联的计算机,它们作为一个单一系统协同工作,提供高可用性、负载均衡或计算能力的扩展。在软件部署场景中,容器集群特别指由多个容器主机(或称为节点)组成的集合,这些节点通过某种编排工具(如Kubernetes(又名K8s)或Docker Swarm)统一管理和调度。集群允许容器在多个节点间自动分布、扩展和故障恢复,为服务提供了高可用性和弹性伸缩的能力。通过容器编排工具,管理员可以轻松部署、管理和扩展整个应用的服务网格。

负载均衡(LB)

LB 是 "Load Balancer"(负载均衡器)的缩写,在计算机网络和系统架构中,负载均衡器是一种设备或软件服务,它的主要职责是将进入的网络流量或者服务请求合理地分配到后端的多台服务器上,以此达到优化资源使用、最大化吞吐量、提高系统响应速度和避免单点过载的目的。在滚动部署中提到的“智能LB”,强调的是负载均衡器的智能化特性,这些特性可能包括:

1.动态配置更新:自动识别后端服务实例的变化,比如在滚动部署过程中新增或移除服务器节点,LB能实时调整其路由规则,确保流量被正确地导向至可用的服务实例。

2.自动回滚支持:若检测到新部署的服务版本有问题,智能LB可以自动或配合自动化系统迅速将流量切换回之前的稳定版本,减少故障对用户/客户的影响。

3.权重分配:在部署过程中,根据需要可以动态调整不同版本服务实例之间的流量比例,比如在金丝雀部署中,智能LB可以将少量流量导向新版本进行测试,而大部分流量依旧由稳定版本处理。

除此之外,还包括高级路由策略、健康检查等特性。

吞吐量(Throughput)

吞吐量是一个衡量系统性能的重要指标,它表示系统在单位时间内处理请求、传输数据或完成任务的数量。简单来说,吞吐量展现了系统的工作效率,单位可以是每秒请求数(Requests Per Second, RPS)、每秒事务数(Transactions Per Second, TPS)、每秒字节数(Bytes Per Second, BPS)等,具体依应用场景而定。在不同的领域,吞吐量有不同的意义:

  • 网络通信:指的是网络在单位时间内能够传输的数据量,如每秒钟通过网络接口传输的字节数。

  • 数据库:指的是数据库系统每秒钟能够处理的查询或事务数量,反映了数据库的处理能力。

  • 应用程序或服务:表示应用程序能够处理的请求速度,如Web服务器每秒可以处理的网页请求数量。

  • 存储系统:涉及到数据读写的速度,如硬盘或固态硬盘每秒读写的字节数。

提高吞吐量通常是系统优化和扩容的目标之一,因为它直接影响到用户体验、系统响应时间和处理能力。

2B 2C

2B,即 ToB (To Business),指面向企业、商家(称之为:客户)的商业模式。

2C,即 ToC (To Customer),指面向消费者、个人(称之为:用户)的商业模式。

微服务

微服务是一种软件架构风格,将应用程序拆分为一组小型、独立的服务,每个服务运行在自己的进程中,并通过轻量级通信机制(如HTTP/REST或消息队列)交互。

单体架构是将所有的功能封装在一起,软件是一个单一的整体,功能越多越复杂,且功能耦合在一起,不利于管理、部署、维护、升级,只能整体开发和测试,必须用瀑布开发模型。微服务架构是一种面向服务的架构,打破了代码的耦合,将软件分为一个个独立功能单元,功能单元以“服务”形式提供服务Service,是在后台不间断运行的一个程序,如web服务通过端口向外界提供页面访问服务。

普通的服务(功能单元)运行在单独的一个服务器上,而微服务利用了容器技术,每个服务占用一个容器,多个容器组成完整的应用,是面向服务架构的轻量级实现。微服务在后续升级优化时不需要增加服务器,只需要添加一个容器即可。

微服务强调单一职责、松耦合和独立部署,每个服务围绕特定业务功能构建(如用户管理、订单处理),适用于复杂的企业级应用(如电商平台、银行系统)。

用途:(1)提升系统的可扩展性和灵活性,允许不同服务使用不同技术栈。(2)简化维护和持续交付,单个服务的更新不影响整体系统。

例如,一个电商系统可能拆分为:用户服务(处理注册、登录)、订单服务(管理订单生命周期)、支付服务(处理交易)、库存服务(跟踪商品库存),各服务通过API网关(如Kong)或直接HTTP调用通信。

部署

部署是将软件应用程序从开发环境发布到生产环境的过程,使其可供最终用户访问和使用。

部署涵盖代码构建、环境配置、资源分配和监控等环节,确保应用稳定运行。部署三步走:(1)将源码生成可运行的软件包,如jar包或war包;(2)将软件包放到目标环境上;(3)配置目标环境,使软件包可以正常运行。

一些常见的部署方式:

(1)手动部署(Manual Deployment)

通过人工操作(如FTP上传、命令行执行)将代码或应用发布到服务器。

特点:简单直接,适合小型项目或初期阶段。但容易出错,难以追溯问题。

(2)蓝绿部署(Blue-Green Deployment)

维护两套完全相同的生产环境(蓝组和绿组),通过切换流量实现无缝升级。需要双倍资源。

特点:1)零停机时间:新版本在绿组部署并测试完成后,再切换流量到绿组。2)快速回滚:发现问题时切回蓝组。

适用场景:高可用性要求的服务(如电商支付系统)。

示例:蓝组运行v1,绿组部署v2。测试通过后,负载均衡器将流量从v1切换到v2。

(3)金丝雀部署(Canary Deployment)

逐步将新版本发布给一小部分用户,验证通过后再全量上线。

特点:风险可控,问题仅影响少量用户。需要流量分发机制(如权重路由)。

适用场景:社交媒体、SaaS产品。

(4)滚动部署(Rolling Deployment)

逐步替换旧版本实例,每次更新一部分节点,直到全部升级完成。

特点:资源友好,不需要双倍资源。不过部署期间两个版本共存,可能引发兼容性问题。

适用场景:无状态服务(如REST API)。

(5)功能开关部署(Feature Toggle)

通过配置开关动态启用/禁用新功能,无需重新部署代码。

特点:控制灵活,允许A/B测试或紧急关闭问题功能。需在代码中预埋开关逻辑。

适用场景:前端功能或实验性特性。

(6)不可变部署(Immutable Deployment)

直接替换整个服务器或容器镜像,而非修改现有环境。

特点:一致性高,可以避免配置漂移(Configuration Drift)。但依赖基础设施即代码(IaC)工具(如Terraform)。

适用场景:云原生应用。

(7)无服务器部署(Serverless Deployment)

将应用部署到无服务器平台(如AWS Lambda),由平台自动管理资源。

特点:可按需扩缩,无需管理服务器,按实际调用量计费。冷启动问题可能影响延迟。

适用场景:事件驱动型任务(如文件处理、定时任务)。

代理

代理(Proxy)是介于客户端和服务器之间的中间层,代表客户端转发请求或代表服务器返回响应。

代理可以隐藏真实服务端信息、过滤流量或优化通信。代理分为两种:正向代理和反向代理。

正向代理:代表客户端访问服务(如VPN、爬虫匿名化)。正向代理可以隐藏客户端信息,主要作用有:(1)可以突破自身IP的访问限制,访问原来无法访问的资源(如google);(2)通常代理服务器都设置一个较大的硬盘缓冲区,会将部分请求的响应保存到缓冲区中,当其他用户再访问相同的信息时,可以直接从缓冲区中取出信息传给用户,以提高访问速度。

反向代理:代表服务端接收请求(如Nginx负载均衡、缓存静态资源)。反向代理可以隐藏服务器信息,主要作用有:(1)反向代理服务器可以对静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度;(2)可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的服务器上;(3)对客户端隐藏服务器的IP地址,可以作为应用层防火墙,为网站提供对基于Web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件,还可以为后端服务器统一提供加密和SSL加速(如SSL终端代理),提供HTTP访问认证等。

代码托管

Git命令


开发者笔记
https://afly36-swordsman.github.io/2024/07/28/Programming03/
Author
Zenitsu
Posted on
July 28, 2024
Updated on
April 19, 2025