当前位置: 首页 > news >正文

微服务概念

微服务

微服务是什么

In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.-- James Lewis and Martin Fowler

引用来自https://www.martinfowler.com/articles/microservices.html

简言之,微服务架构风格是一种将单个应用程序开发为一套小型服务的方法,每个服务都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)通信。这些服务是围绕业务能力构建的,并通过完全自动化的部署机制进行独立部署。这些服务的集中管理是最低限度的,可以用不同的编程语言编写,并使用不同的数据存储技术。

总结:

  1. 一些列的独立的服务共同组成系统
  2. 单独部署,跑在自己的进程里
  3. 每个服务为独立的业务开发
  4. 分布式的管理

在这里插入图片描述

微服务的目的是有效的拆分应用,实现敏捷开发和部署

分布式和微服务的区别

分布式是一种系统设计范式,强调多个独立节点通过网络通信协同工作。

微服务是一种软件架构风格,将应用拆分为小型、独立的服务,强调服务的独立性和快速部署。

分布式系统关注整体系统的设计,而微服务更专注于服务的独立性和灵活性。

微服务是一种实现分布式系统的方式,强调服务之间的松耦合和独立开发、部署的优势。

微服务的优缺点

优点

  1. 松耦合:每个微服务都是相对独立的单元,修改一个服务不会影响其他服务。
  2. 独立部署:每个微服务可以独立开发、测试、部署和扩展,提高了开发和部署的速度。
  3. 灵活性:使用不同的技术栈和编程语言来实现不同的服务,选择最适合特定任务的工具。
  4. 可伸缩性:每个服务都可以独立扩展,允许对系统的不同部分进行水平扩展。
  5. 容错性:如果一个服务发生故障,不会影响整个应用的稳定性。
  6. 技术多样性:团队可以选择最适合他们技能和需求的技术,不受整体架构的限制。

缺点

  1. 复杂性:微服务架构引入了分布式系统的复杂性,需要解决分布式通信、一致性、监控等问题。
  2. 部署和运维:管理大量微服务的部署和运维是挑战,需要适当的自动化和工具支持。
  3. 数据一致性:微服务中的数据可能分布在不同的数据库中,确保数据一致性是一个复杂的问题。
  4. 调试和测试:在微服务架构中,跨服务的调试和测试可能更加复杂,需要适当的工具和流程。
  5. 通信开销:微服务之间的通信可能引入额外的开销,特别是在跨网络较远的情况下。
  6. 服务间集成:确保微服务之间的良好集成和通信是一个关键问题,可能需要使用API网关等工具。

如何拆分微服务

  • 业务能力:将不同业务功能模块拆分成单独的微服务,例如电商系统可以拆分为商品服务,订单服务,用户服务等等微服务。
  • 团队架构:根据康威定律,组织架构决定系统架构,所以微服务在拆分的时候也应该关注团队的组织架构然后进行拆分,尽量减少沟通成本,提升开发效率。
  • 应用类型:例如有些业务处理离线数据业务,这部分可以与在线业务进行拆分,减轻在线业务的压力。
  • 技术栈:若团队使用了不同语言技术栈等,也可以考虑通过技术栈来拆分微服务。

CI/CD

CI/CD 是软件开发领域中的一种持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的实践方式。

  1. 持续集成(Continuous Integration,CI):是指开发者将代码集成到共享仓库中,并通过自动化的构建和测试流程,尽早发现和解决集成问题。
    • 目标:确保开发团队的代码持续地被集成,减少集成问题的发现时间,提高代码的质量。
  2. 持续交付(Continuous Delivery,CD):是在通过持续集成得到的构建通过一系列的自动化测试后,将软件部署到预生产环境,使其随时可供交付。
    • 目标:自动化构建、测试和部署过程,确保软件在任何时候都能够交付。
  3. 持续部署(Continuous Deployment,CD):即自动将通过测试的软件部署到生产环境,实现全自动化的部署流程。
    • 目标:在通过自动化测试的情况下,将软件的变更直接推送到生产环境,减少人工干预,提高交付速度。

蓝绿部署和金丝雀部署

蓝绿部署

在蓝绿部署中,有两个环境:蓝色环境(Blue)和绿色环境(Green)。当前正在运行的版本在一个环境中,而新版本在另一个环境中。

过程:首先,新版本在绿色环境中进行部署和测试。一旦测试通过,流量被切换到绿色环境,原先的蓝色环境变成备份。这样,可以随时切回原先的环境,降低了发布新版本的风险。

在这里插入图片描述

金丝雀部署(灰度发布)

金丝雀部署是逐步将新版本引入生产环境,只将新版本的一小部分流量引导到新的版本上,以测试其在真实环境中的性能和稳定性。

过程:开始时,只有少量用户(金丝雀用户)看到新版本。通过监控性能和错误率等指标,逐渐扩大新版本的流量份额,直至全部流量都切换到新版本。

在这里插入图片描述

相关文章:

微服务概念

微服务 微服务是什么 In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource A…...

响应式摄影科技传媒网站模板源码带后台

模板信息: 模板编号:540 模板编码:UTF8 模板颜色:黑白 模板分类:摄像、婚庆、家政、保洁 适合行业: 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手…...

探索C#事件(Event)的强大应用

摘要 在现代软件开发中,对象之间的通信和交互是一个常见而重要的问题。为了解决这个问题,C#作为一种面向对象的编程语言提供了一种强大的特性:事件(Event)。事件可以帮助开发人员实现对象间的松耦合,提高代…...

学习c#的第四天

目录 C# 变量 C# 中的变量定义与初始化 接受来自用户的值 C# 中的 Lvalues 和 Rvalues 不同类型变量进行运算 静态变量 局部变量 C# 常量 整数常量 浮点常量 字符常量 字符串常量 定义常量 扩展知识 Convert.ToDouble 与 Double.Parse 的区别 静态常量和动态常…...

解析JSON字符串:属性值为null的时候不被序列化

如果希望属性值为null及不序列化,只序列化不为null的值。 1、测试代码 配置代码: mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 或者通过注解JsonInclude(JsonInclude.Include.NON_NULL) //常见问题2:属性为null&a…...

短视频短剧小程序系统:用技术丰富你的碎片时间

在当今快节奏的生活中,人们的休闲时间变得越来越碎片化。短视频短剧小程序系统正是利用这一现象,通过技术手段为人们提供了丰富多样的娱乐内容,让碎片时间变得更加充实。 一、短视频短剧小程序系统的技术特点 高效加载与流畅播放&#xff1…...

服务器数据恢复—磁盘出现坏道掉线导致raid5阵列崩溃的数据恢复案例

服务器数据恢复环境: 某品牌服务器中有一组16块SAS接口硬盘组建的raid5磁盘阵列。 服务器故障&检测: 服务器raid5阵列中有2块硬盘掉线,上层服务器应用崩溃,导致服务器数据丢失。丢失的数据主要是4个1.5TB大小的卷中的数据&am…...

Android R.fraction

来源 我是在看Android10原生代码&#xff0c;绘制状态栏蓝牙电量相关类中第一次看到R.fraction的&#xff0c;如类BatteryMeterDrawable <fraction name"battery_button_height_fraction">10%</fraction> mButtonHeightFraction context.getResources(…...

C语言精华题目锦集1

第一题 test.c文件中包括如下语句&#xff0c;文件中定义的四个变量中&#xff0c;是指针类型的是&#xff08;&#xff09;【多选】 #define INT_PTR int* typedef int* intptr; INT_PRT a,b; int_ptr c,d;A:a  B:b  C:c  D:d #define是宏定义&#xff0c;此时在程序中IN…...

头歌答案Python——JSON基础

目录 ​编辑 Python——JSON基础 第1关&#xff1a;JSON篇&#xff1a;JSON基础知识 任务描述 第2关&#xff1a;JSON篇&#xff1a;使用json库 任务描述 Python——XPath基础 第1关&#xff1a;XPath 路径表达式 任务描述 第2关&#xff1a;XPath 轴定位 任务描述…...

TDengine 与煤科院五大系统实现兼容性互认,助力煤矿智能化安全体系搭建

近日&#xff0c;涛思数据与煤炭科学技术研究院&#xff08;以下简称煤科院&#xff09;已完成数个产品兼容互认证工作&#xff0c;经双方共同严格测试&#xff0c;涛思数据旗下物联网、工业大数据平台 TDengine V3.X 与煤炭科学技术研究院旗下煤矿复合灾害监测监控预警系统、煤…...

231030期就业班开班咯!我在前方护航,让你稳稳入职

就业哪家强&#xff1f;还得看优橙! 11月9日&#xff0c;231030期就业班的小伙伴结束了为期8天的基础班学习&#xff0c;正式进入了就业班。优橙教育也为新一批就业班的同学举办了开班典礼。 典礼环节中不仅有多彩的抽奖活动&#xff0c;也有丰富的超值礼品&#xff0c;旨在鼓…...

小白学安全-漏洞编号的理解 CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD

1、以CVE开头&#xff0c;如CVE-1999-1046这样的 CVE的英文全称是“Common Vulnerabilities&Exposures”公共漏洞和暴露。CVE就好像是一个字典表&#xff0c;为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字&#xff0c;能够帮助用…...

助力燃气安全运行:智慧燃气管网背景延展

关键词&#xff1a;城市燃气管网、智慧燃气管网、智慧管网、智慧燃气管网解决方案、智慧燃气 01背景 当前&#xff0c;随着我国城市化进程不断加快&#xff0c;城市燃气管网也不断延伸&#xff0c;运行规模庞大&#xff0c;地下管线复杂&#xff0c;不少城市建设“重地上轻地…...

低代码、零代码开源与不开源:区别解析

在如今日益发展的数字时代&#xff0c;程序开发变得越来越重要。为了实现日益提高的业务需求&#xff0c;开发人员必须能够以更高效、更灵活的方式构建和交货软件解决方案。低代码和零代码开源是近几年流行的两种开发方法。本文将探讨它们与传统非开源程序开发的差别&#xff0…...

LabVIEW中如何在网络上使用远程VI服务器

LabVIEW中如何在网络上使用远程VI服务器 如何在网络上使用远程VI服务器&#xff1f; 解答: 首先&#xff0c;需要在远程的计算机上打开一个在VI服务器上的LabVIEW应用程序的引用。这可以通过“Open ApplicationReference“函数实现。然后用“Open VI Reference”函数打开一个…...

Centos 7rc.local脚本命令开机不执行及指定用户启动的方法

1.开机不启动 在实际生产场景中&#xff0c;我们喜欢在安装了一些软件服务后&#xff0c;将软件设置为开机自启动 配置在/etc/rc.local文件中。直接将软件服务的启动命令写在rc.local文件 注意&#xff1a;编辑完rc.local文件后&#xff0c;一定要给rc.local文件执行权限&#…...

mysql 的存储过程

一组为了完成特定功能的sql 语句的集合&#xff0c;写好了存储过程之后&#xff0c;我们可以向函数一样随时调用sql 的集合 CREATE TABLE info ( id int(3) PRIMARY KEY, name VARCHAR(15), score DECIMAL(5,2), pass varchar(12) ); 创建存储过程 创建过程 delimiter $$ #将语…...

http客户端简单demo

socket.h头文件 #pragma once #include <iostream> #include <cstring> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <string> using std::string;namespace MySocket …...

解决UniAD在高版本CUDA、pytorch下运行遇到的问题

UniADhttps://github.com/OpenDriveLab/UniAD是面向行车规划集感知(目标检测与跟踪)、建图(不是像SLAM那样对环境重建的建图&#xff0c;而是实时全景分割图像里的道路、隔离带等行车需关注的相关物体)、和轨迹规划和占用预测等多任务模块于一体的统一大模型。官网上的安装说明…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...