微服务部署的正确策略
微服务部署挑战
单体应用程序的部署意味着您运行单个(通常是大型应用程序)的多个相同副本。这主要是通过配置 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什么是数字图像 图像是三维场景在二维平面上的影像。根据其存储方式和表现形式,可以将图像分为模拟图像和数字图像两大类 图像处理方法:光学方法、电子学方法 模拟图像:连续的图像数字图像:通过对时间上和数值上连续…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
