微服务部署的正确策略
微服务部署挑战
单体应用程序的部署意味着您运行单个(通常是大型应用程序)的多个相同副本。这主要是通过配置 N 个服务器(无论是物理服务器还是虚拟服务器)并在每台服务器上运行应用程序的 M 个实例来完成。虽然这看起来非常简单,但通常情况并非如此。然而,它比部署微服务应用程序要容易得多。
如果您计划部署微服务应用程序,那么您必须熟悉这些服务所使用的各种框架和语言。这也是最大的挑战之一,因为每一项服务都有其特定的部署、资源要求、扩展和监控要求。除此之外,部署服务必须快速、可靠且经济高效!
好消息是,可以轻松扩展多种微服务部署模式,以处理来自各种集成组件的大量请求。阅读此博客,了解哪一个最适合您的组织并进行部署\
微服务部署策略
1. 每台主机多个服务实例(物理或虚拟机)
也许部署应用程序的最传统方法是“每主机多个服务实例”模式。在此模式中,软件开发人员配置单个或多个物理或虚拟主机,并在每个主机上运行多个服务实例。此模式有几个变体,包括将每个服务实例作为一个进程或在同一进程中运行多个服务实例的变体。
好处
由于多个服务实例使用相同的服务器及其操作系统,因此资源使用相对高效。
服务实例的部署也相对较快,因为您只需将服务复制到主机并运行它。
例如,如果服务是用 Java 编写的,那么您只需复制 JAR 或 WAR 文件,或者复制源代码(如果它是用 Node.js 或 Ruby 编写的)。
由于没有任何开销,因此以这种模式启动服务也很快。如果服务有其进程,您可以启动它,否则您也可以动态部署到容器中,或者如果该服务是在同一容器进程或进程组中运行的许多实例之一,则重新启动它。
挑战
- 除非每个实例都是一个单独的进程,否则对服务实例几乎或完全缺乏控制。您无法限制每个实例使用的资源。这会显着消耗主机的内存。
- 如果多个服务实例在同一进程中运行,则缺乏隔离性。这通常会导致一项行为不当的服务中断同一进程中的其他服务。
- 部署时出现错误的风险更高,因为部署它的运营团队需要了解服务的最微小的细节。因此,开发团队和运营人员之间的信息交换是消除所有复杂性的必要条件。
2. 每台主机的服务实例(物理或虚拟机)
每主机服务实例模式是部署微服务的另一种方法。这允许您在其主机上单独运行每个实例。它有两个专门化:每个虚拟机的服务实例和每个容器的服务实例。
每个虚拟机服务实例模式允许您将每个服务打包为虚拟机 (VM) 映像,例如 Amazon EC2 AMI。每个实例都是使用该 VM 映像运行的 VM。使用这种模式的流行应用程序之一是 Netflix 的视频流服务。要构建自己的虚拟机,您可以配置持续集成服务器(例如 Jenkins)或使用 packer.io。
好处
使用每个虚拟机一个服务实例模式的最大好处之一是它使用有限的内存并且无法从不同服务中窃取资源,因为它是独立运行的。
它允许您利用 AWS 等成熟的云基础设施来利用负载平衡和自动扩展。
它密封了服务的实现技术,因为一旦服务被打包为虚拟机,它就变成了黑匣子。它使部署变得更加简单和可靠。
挑战
- 由于典型公共 IaaS 中的虚拟机通常具有固定大小,因此它可能没有得到完全利用。资源利用效率较低最终还会导致部署成本较高,因为 IaaS 提供商通常对虚拟机收费,无论虚拟机是闲置还是繁忙。
- 最新版本的部署通常很慢。这是因为 VM 映像因其大小而创建和实例化速度很慢。这个缺点通常可以通过使用轻量级虚拟机来克服。
- 除非您不使用工具来构建和管理虚拟机,否则每个虚拟机一个服务实例模式对于您和您的团队来说通常非常耗时。这通常是一个乏味的过程,但好消息是可以通过使用诸如 Box fusion 等各种解决方案来解决该问题。
3. 每个容器的服务实例
在这种模式下,每个服务实例都在各自的容器中运行,这是操作系统级别的虚拟化机制。Docker 和 Solaris Zones 是一些流行的容器技术。
要使用此模式,您需要将服务打包为文件系统映像,其中包含执行服务所需的应用程序和库,通常称为容器映像。一旦服务被打包为容器镜像,您就需要启动一个或多个容器,并且可以在物理或虚拟主机上运行多个容器。为了管理多个容器,许多开发人员喜欢使用集群管理器,例如Kubernetes或 Marathon。
好处
与每个虚拟机的服务实例一样,此模式也可以单独工作。它允许您跟踪每个容器正在使用多少资源。相对于虚拟机的最大优势之一是容器是轻量级的并且构建速度非常快。由于没有操作系统启动机制,容器可以快速启动。
挑战
尽管基础设施正在迅速成熟,但每个容器的服务实例模式仍然落后于虚拟机基础设施,并且不如虚拟机安全,因为它们共享主机操作系统的内核。
与虚拟机一样,您负责管理容器映像的所有繁重工作。如果您没有 Amazon EC2 容器服务 (ECS) 等托管容器解决方案,您还必须管理容器基础设施,可能还需要管理虚拟机基础设施。
此外,由于大多数容器部署在按虚拟机定价的基础设施上,因此会导致额外的部署成本和虚拟机的过度配置,以满足意外的负载峰值。
4. 无服务器部署
无服务器部署技术是微服务部署的另一种策略,它支持 Java、Node.js 和 Python 服务。AWS Lambda 是世界各地开发人员使用的一项流行技术。在此模式中,您需要将服务打包为 ZIP 文件并将其上传到 Lambda 函数,这是一个无状态服务。
相关文章:
微服务部署的正确策略
微服务部署挑战 单体应用程序的部署意味着您运行单个(通常是大型应用程序)的多个相同副本。这主要是通过配置 N 个服务器(无论是物理服务器还是虚拟服务器)并在每台服务器上运行应用程序的 M 个实例来完成。虽然这看起来非常简单…...
C#中的数组探究与学习
目录 C#中的数组一般分为:一.数组定义:为什么要使用数组?什么是数组?C#一维数组for和foreach的区别C#多维数组C#锯齿数组初始化的意义:适用场景:C#中的数组一般分为: ①.一维数组。 ②.多维数组,也叫矩形数组。 ③.锯齿数组,也叫交错数组。 一.数组定义: 数组…...
计算机网络八股
1、请你说说TCP和UDP的区别 TCP提供面向连接的可靠传输,UDP提供面向无连接的不可靠传输。UDP在很多实时性要求高的场景有很好的表现,而TCP在要求数据准确、对速度没有硬件要求的场景有很好的表现。TCP和UDP都是传输层协议,都是为应用层程序服…...
Waves 14混音特效插件合集mac/win
Waves14是一款音频处理软件,主要用于音频编辑、混音和母带处理。该软件提供了各种插件,包括EQ、压缩、混响、延迟、失真等,以及一些专业的音频处理工具,如L2限幅器、Linear Phase EQ和多频道扬声器管理。 Mac软件下载:…...
Python python-docx 使用教程
openpyxl是Python下的Word库,它能够很容易的对Word文档进行读取 安装方法:pip install python-docx国内镜像安装:pip install -i https://mirrors.aliyun.com/pypi/simple/ python-docx(推荐,安装更快)中文…...
Mac上protobuf环境构建-java
参考文献 getting-started 官网pb java介绍 maven protobuf插件 简单入门1 简单入门2 1. protoc编译器下载安装 https://github.com/protocolbuffers/protobuf/releases?page10 放入.zshrc中配置环境变量 ~/IdeaProjects/test2/ protoc --version libprotoc 3.12.1 …...
CocosCreator3.8研究笔记(二十二)CocosCreator 动画系统-动画剪辑和动画组件介绍
国庆假期,闲着没事,在家研究技术~ 大家都知道在Cocos Creator3.x 的版本的动画编辑器中,可以实现不用写一行代码就能实现各种动态效果。 Cocos Creator动画编辑器中主要实现关键帧动画,不仅支持位移、旋转、缩放、帧动画ÿ…...
信看课堂-厘米GNSS定位
我们常常说GPS 定位,不过定位远不止GPS定位,通过本节课程,我们将会了解到,原来GPS只是定位的一种: GNSS概述 不同的GNSS系统使用不同的频段来传输导航信号。以下是一些主要的GNSS系统及其相应的频段,用表…...
2023CCPC网络赛(A E)
2023CCPC网络赛(A E) The 2nd Universal Cup. Stage 3: Binjiang - Dashboard - Contest - Universal Cup Judging System A. Almost Prefix Concatenation 思路:首先考虑如何求出每个位置允许失配一次的LCP长度 , 可以二分哈希求LCP , 即…...
使用 python 检测泛洪攻击的案例
使用 python 检测泛洪攻击的案例 本案例只使用python标准库通过执行命令来监控异常请求, 并封锁IP, 不涉及其他第三方库工具. import os import time from collections import Counter# 1、update 命令, 采集CPU的平均负载 def get_cpu_load():"""uptime 命令…...
SCROLLINFO scrollInfo; 2023/10/5 下午3:38:53
2023/10/5 下午3:38:53 SCROLLINFO scrollInfo;scrollInfo.cbSize = sizeof(SCROLLINFO);scrollInfo.fMask = SIF_ALL;//scrollInfo.nMin = 0; // 最小位置//scrollInfo.nMax = nRowCountToShow; // 最大位置//scrollInfo.nPage = nRowCountToShow; // 页面大小//scrollInf…...
Python--控制台获取输入与正则表达式
前言一、控制台获取输入1.1 字符串输入1.2 整数输入1.3 浮点数输入1.4 布尔值输入1.5 列表输入1.6 汇总 二、正则表达式2.1 匹配数字2.2 模式检查2.3 替换字符2.4 切分字符串2.5 搜索并提取匹配的部分2.6 使用捕获组提取匹配的部分2.7 非贪婪匹配2.8 忽略大小写匹配2.9 使用预定…...
网络基础知识面试题1
VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)...
JavaScript系列从入门到精通系列第十五篇:JavaScript中函数的实参介绍返回值介绍以及函数的立即执行
文章目录 一:函数的参数 1:形参如何定义 2:形参的使用规则 二:函数的返回值 1:函数返回值如何定义 2:函数返回值种类 三:实参的任意性 1:方法可以作为实参 2:将匿…...
js中的原型链
编写思路: 简单介绍构造函数介绍原型对象原型对象、实例的关系,从而引出原型链的基本概念 原型链基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。 1. 什么是构造函数 构造函数本身跟普通函数一样,也不存在定义构造函数…...
一文搞懂APT攻击
APT攻击 1. 基本概念2. APT的攻击阶段3. APT的典型案例参考 1. 基本概念 高级持续性威胁(APT,Advanced Persistent Threat),又叫高级长期威胁,是一种复杂的、持续的网络攻击,包含高级、长期、威胁三个要素…...
在pandas中通过一列数据映射出另一列的几种思路和方法
如果一句话中出现某个品牌的关键词,那么就将该品牌进行提取,开始我的做法是写了很多elif,如下: def brand_describe(x):if TRUM in x.upper():return "通快"elif BYSTRONIC in x.upper():return "百超"elif …...
数据分析视角中的商业分析学习笔记
数据分析一大堆,结果却是大家早就知道的结论?是工具和方法出问题了吗?真正原因可能是你的思维有误区。 为什么分析的这么辛苦,得出的结论大家早知道,谁谁都不满意?核心原因有3个: 分析之前&am…...
剑指offer——JZ26 树的子结构 解题思路与具体代码【C++】
一、题目描述与要求 树的子结构_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构) 假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2}&…...
NEFU数字图像处理(1)绪论
一、简介 1.1什么是数字图像 图像是三维场景在二维平面上的影像。根据其存储方式和表现形式,可以将图像分为模拟图像和数字图像两大类 图像处理方法:光学方法、电子学方法 模拟图像:连续的图像数字图像:通过对时间上和数值上连续…...
TSLint格式化器完全指南:打造个性化的代码检查报告
TSLint格式化器完全指南:打造个性化的代码检查报告 【免费下载链接】tslint :vertical_traffic_light: An extensible linter for the TypeScript language 项目地址: https://gitcode.com/gh_mirrors/ts/tslint TSLint作为TypeScript生态系统中最重要的代码…...
先瑞达2025年年报:营收同比增长20.7% 双引擎格局成型迎高质量增长
3月26日晚间,先瑞达医疗(6669.HK)正式发布截至2025年12月31日的年度业绩报告。报告期内,公司紧扣血管介入治疗领域核心赛道,以技术创新为内核、以全球化布局为抓手、以降本增效为支撑,实现经营业绩的稳健增…...
CasRel开源大模型部署教程:一键拉取镜像+5分钟完成SPO推理
CasRel开源大模型部署教程:一键拉取镜像5分钟完成SPO推理 1. 什么是CasRel关系抽取模型 如果你需要从大段文字中自动找出"谁做了什么"、"谁是什么"这样的信息,CasRel模型就是你的得力助手。这个模型专门用来从文本中提取主体-谓语…...
vLLM-v0.17.1入门必看:从零部署支持多LoRA的开源推理框架
vLLM-v0.17.1入门必看:从零部署支持多LoRA的开源推理框架 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,最新发布的v0.17.1版本带来了多项重要改进,特别是增强了对多LoRA适配器的支持。这个开源项目最初由加州…...
Android音频输出流实战:从AudioFlinger到HAL层的完整调用链解析
Android音频输出流深度解析:从框架设计到硬件交互 1. Android音频系统架构概览 Android音频子系统采用分层设计,每一层都有明确的职责划分。理解这个架构是分析音频输出流的基础。 核心层级结构: 应用层:通过AudioTrack、MediaPla…...
跨境服务数字化转型 JAVA 国际版打手俱乐部陪玩系统完整开发教程
以下是基于JAVA开发国际版打手俱乐部陪玩系统的完整开发教程,涵盖技术选型、核心功能实现、安全合规及部署方案:一、技术选型与架构设计后端框架:Spring Boot 3.2 Spring Cloud Alibaba:提供微服务拆分能力,支持Nacos…...
脉冲神经网络也能玩转频域?FSTA-SNN时空注意力模块的5个实战应用场景
脉冲神经网络频域建模实战:FSTA-SNN模块的五大创新应用 脉冲神经网络(SNN)作为第三代神经网络,近年来在计算机视觉领域展现出独特优势。传统SNN模型在时空特征提取上存在明显短板,而FSTA-SNN模块的提出为这一困境提供了…...
ChezScheme测试性能优化:从53分钟到8分钟的效率跃迁
ChezScheme测试性能优化:从53分钟到8分钟的效率跃迁 【免费下载链接】ChezScheme Chez Scheme 项目地址: https://gitcode.com/gh_mirrors/ch/ChezScheme 一、痛点分析:串行测试的性能瓶颈 识别测试效率问题 在软件开发迭代过程中,…...
智能客服系统搭建实战:基于NLP与微服务架构的AI客服实现指南
最近在帮公司搭建一套智能客服系统,从零开始踩了不少坑,也积累了一些实战经验。今天就来聊聊,如何基于当前比较成熟的 NLP 和微服务架构,一步步构建一个能扛住真实业务压力的 AI 客服系统。整个过程涉及技术选型、核心模块实现、性…...
APT41 (Barium) 的演进:从游戏行业到供应链攻击的AI应用
前言 1. 技术背景 —— 这个技术在攻防体系中的位置 高级持续性威胁 (Advanced Persistent Threat, APT) 是网络攻防体系金字塔的顶端。它并非指某种单一技术,而是一个复杂的、有组织的、长期的网络攻击活动集合。在整个攻防图谱中,APT代表着最高级别的对…...
