微服务部署的正确策略

微服务部署挑战

单体应用程序的部署意味着您运行单个(通常是大型应用程序)的多个相同副本。这主要是通过配置 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 函数,这是一个无状态服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/95628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

节日灯饰灯串灯出口欧洲CE认证办理

灯串(灯带),这个产品的形状就象一根带子一样,再加上产品的主要原件就是LED,因此叫做灯串或者灯带。2022年,我国灯具及相关配件产品出口总额超过460亿美元。其中北美是最大的出口市场。其次是欧洲市场&#…

display有哪些值

CSS的display属性用于控制元素的显示方式,它可以设置多种不同的值,以决定元素在文档中的呈现方式。以下是一些常见的display属性值: block: 元素以块级元素的方式显示。换行,并且占据父容器的整个可用宽度。常见的块级…

SQL创建新表

表的创建、修改与删除: 1.1 直接创建表:CREATE TABLE [IF NOT EXISTS] tb_name – 不存在才创建,存在就跳过 (column_name1 data_type1 – 列名和类型必选 [ PRIMARY KEY – 可选的约束,主键 | FOREIGN KEY – 外键,引…

Python 字节码介绍

了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的。 ​编辑 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代码文件——它们的名字以 .py 结尾。你可能还看到过…

Spring的AOP开发-注解方式开发AOP

基于注解配置的AOP 注解方式AOP的基本使用 Spring的AOP也提供了注解方式配置,使用相应的注解替代之前的xml配置,xml配置AOP时,我们主要配置了三部分:目标类被Spring容器管理(注解使用Service)、通知类被S…

全网唯一!Matlab王者荣耀配色包MHonor

前些日子在家整理文档,偶然发现自己一年前建的一个工程,其大概内容是从王者荣耀一些角色皮肤的原画中提取配色方案,从而用于PPT制作、论文插图绘制等,为枯燥的科研生活增添点儿乐趣。 但是,由于自己当时的技术力还不够…

Java Spring Boot 写 API 接口

在当今快速的软件开发世界中,构建 API 接口是非常常见的任务。因为许多应用程序需要通过 API 接口来与其他应用程序通信。API 接口不仅可以提供应用程序的数据,还可以将应用程序的功能公开为可重用的服务。Java Spring Boot 是一个用于创建独立、产品级别…

Android Studio实现简易计算器(带横竖屏,深色浅色模式,更该按钮颜色,selector,style的使用)

目录 前言 运行结果: 运行截屏(p50e) apk文件 源码文件 项目结构 总览 MainActivity.java drawable 更改图标的方法: blackbutton.xml bluebuttons.xml greybutton.xml orangebuttons.xml whitebutton.xml layout 布…

关联规则挖掘(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

复习 --- QT服务器客户端

服务器&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> #include<QTcpSocket> #include<QMessageBox> #include<QDebug> #include<QList> #include<QListWidget> #in…

[C国演义] 第十三章

第十三章 三数之和四数之和 三数之和 力扣链接 根据题目要求: 返回的数对应的下标各不相同三个数之和等于0不可包含重复的三元组 – – 即顺序是不做要求的 如: [-1 0 1] 和 [0, 1, -1] 是同一个三元组输出答案顺序不做要求 暴力解法: 排序 3个for循环 去重 — — N^3, …

IDT 一款自动化挖掘未授权访问漏洞的信息收集工具

IDT v1.0 IDT 意为 Interface detection&#xff08;接口探测) 项目地址: https://github.com/cikeroot/IDT/该工具主要的功能是对批量url或者接口进行存活探测&#xff0c;支持浏览器自动打开指定的url&#xff0c;避免手动重复打开网址。只需输入存在批量的url文件即可。 …

stm32之HAL库操作PAJ75620

一、模块简介 手势模块PAJ7620主要利用IIC或SPI协议来实现数据的传输&#xff0c;本实验用的模块是以IIC来进行信息传输。支持电压从2.8v到3.6v, 正常可以选择3.3v。检测的距离从5到15cm, 可以检测9种手势&#xff0c;包括 右&#xff1a;编码为 0x01左&#xff1a;编码为 0x0…

前端TypeScript学习day01-TS介绍与TS常用类型

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 TypeScript 介绍 TypeScript 是什么 TypeScript 为什么要为 JS 添加类型支持&#xff1f; TypeScript 相…

vertx的学习总结7之用kotlin 与vertx搞一个简单的http

这里我就简单的聊几句&#xff0c;如何用vertx web来搞一个web项目的 1、首先先引入几个依赖&#xff0c;这里我就用maven了&#xff0c;这个是kotlinvertx web <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apac…

win10、win11安装Ubuntu 22.04

目前为止&#xff08;2023年10月6日&#xff09;&#xff0c;最新的 Ubuntu 版本是 Ubuntu 22.04。你可以按照以下步骤在 Windows 上使用 WSL 安装 Ubuntu 22.04&#xff1a; 检查系统要求&#xff1a; 确保你的操作系统是 Windows 10 或更高版本&#xff0c;并已安装 Windows …

调试器通用波形显示工具

前言&#xff1a;事情起因是我们实验室买了个无线调试器是CMSIS-DAP的&#xff0c;无法使用J-SCOPE显示波形来方便调PID&#xff0c;所以我就在网上找到了个开源工具链接&#xff1a;http://t.csdnimg.cn/ZqZPY使用方法&#xff1a;工具是好工具&#xff0c;就是没有使用手册&a…

操作系统知识

操作系统基础 什么是操作系统&#xff1f; 通过以下四点可以概括操作系统到底是什么&#xff1a; 操作系统&#xff08;Operating System&#xff0c;简称 OS&#xff09;是管理计算机硬件与软件资源的程序&#xff0c;是计算机的基石。操作系统本质上是一个运行在计算机上的…

golang gin框架1——简单案例以及api版本控制

gin框架 gin是golang的一个后台WEB框架 简单案例 package mainimport ("github.com/gin-gonic/gin""net/http" )func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {//以json形式输出&#xff0c;还可以xml protobufc.JSON…

二、互联网技术——网络协议

文章目录 一、OSI与TCP/IP参考模型二、TCP/IP参考模型各层功能三、TCP/IP参考模型与对应协议四、常用协议与功能五、常用协议端口 一、OSI与TCP/IP参考模型 二、TCP/IP参考模型各层功能 三、TCP/IP参考模型与对应协议 例题&#xff1a;TCP/IP模型包含四个层次&#xff0c;由上至…