微服务概念
微服务
微服务是什么
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)通信。这些服务是围绕业务能力构建的,并通过完全自动化的部署机制进行独立部署。这些服务的集中管理是最低限度的,可以用不同的编程语言编写,并使用不同的数据存储技术。
总结:
- 一些列的独立的服务共同组成系统
- 单独部署,跑在自己的进程里
- 每个服务为独立的业务开发
- 分布式的管理

微服务的目的是有效的拆分应用,实现敏捷开发和部署 。
分布式和微服务的区别
分布式是一种系统设计范式,强调多个独立节点通过网络通信协同工作。
微服务是一种软件架构风格,将应用拆分为小型、独立的服务,强调服务的独立性和快速部署。
分布式系统关注整体系统的设计,而微服务更专注于服务的独立性和灵活性。
微服务是一种实现分布式系统的方式,强调服务之间的松耦合和独立开发、部署的优势。
微服务的优缺点
优点:
- 松耦合:每个微服务都是相对独立的单元,修改一个服务不会影响其他服务。
- 独立部署:每个微服务可以独立开发、测试、部署和扩展,提高了开发和部署的速度。
- 灵活性:使用不同的技术栈和编程语言来实现不同的服务,选择最适合特定任务的工具。
- 可伸缩性:每个服务都可以独立扩展,允许对系统的不同部分进行水平扩展。
- 容错性:如果一个服务发生故障,不会影响整个应用的稳定性。
- 技术多样性:团队可以选择最适合他们技能和需求的技术,不受整体架构的限制。
缺点:
- 复杂性:微服务架构引入了分布式系统的复杂性,需要解决分布式通信、一致性、监控等问题。
- 部署和运维:管理大量微服务的部署和运维是挑战,需要适当的自动化和工具支持。
- 数据一致性:微服务中的数据可能分布在不同的数据库中,确保数据一致性是一个复杂的问题。
- 调试和测试:在微服务架构中,跨服务的调试和测试可能更加复杂,需要适当的工具和流程。
- 通信开销:微服务之间的通信可能引入额外的开销,特别是在跨网络较远的情况下。
- 服务间集成:确保微服务之间的良好集成和通信是一个关键问题,可能需要使用API网关等工具。
如何拆分微服务
- 业务能力:将不同业务功能模块拆分成单独的微服务,例如电商系统可以拆分为商品服务,订单服务,用户服务等等微服务。
- 团队架构:根据康威定律,组织架构决定系统架构,所以微服务在拆分的时候也应该关注团队的组织架构然后进行拆分,尽量减少沟通成本,提升开发效率。
- 应用类型:例如有些业务处理离线数据业务,这部分可以与在线业务进行拆分,减轻在线业务的压力。
- 技术栈:若团队使用了不同语言技术栈等,也可以考虑通过技术栈来拆分微服务。
CI/CD
CI/CD 是软件开发领域中的一种持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的实践方式。
- 持续集成(Continuous Integration,CI):是指开发者将代码集成到共享仓库中,并通过自动化的构建和测试流程,尽早发现和解决集成问题。
- 目标:确保开发团队的代码持续地被集成,减少集成问题的发现时间,提高代码的质量。
- 持续交付(Continuous Delivery,CD):是在通过持续集成得到的构建通过一系列的自动化测试后,将软件部署到预生产环境,使其随时可供交付。
- 目标:自动化构建、测试和部署过程,确保软件在任何时候都能够交付。
- 持续部署(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…...
短视频短剧小程序系统:用技术丰富你的碎片时间
在当今快节奏的生活中,人们的休闲时间变得越来越碎片化。短视频短剧小程序系统正是利用这一现象,通过技术手段为人们提供了丰富多样的娱乐内容,让碎片时间变得更加充实。 一、短视频短剧小程序系统的技术特点 高效加载与流畅播放࿱…...
服务器数据恢复—磁盘出现坏道掉线导致raid5阵列崩溃的数据恢复案例
服务器数据恢复环境: 某品牌服务器中有一组16块SAS接口硬盘组建的raid5磁盘阵列。 服务器故障&检测: 服务器raid5阵列中有2块硬盘掉线,上层服务器应用崩溃,导致服务器数据丢失。丢失的数据主要是4个1.5TB大小的卷中的数据&am…...
Android R.fraction
来源 我是在看Android10原生代码,绘制状态栏蓝牙电量相关类中第一次看到R.fraction的,如类BatteryMeterDrawable <fraction name"battery_button_height_fraction">10%</fraction> mButtonHeightFraction context.getResources(…...
C语言精华题目锦集1
第一题 test.c文件中包括如下语句,文件中定义的四个变量中,是指针类型的是()【多选】 #define INT_PTR int* typedef int* intptr; INT_PRT a,b; int_ptr c,d;A:a B:b C:c D:d #define是宏定义,此时在程序中IN…...
头歌答案Python——JSON基础
目录 编辑 Python——JSON基础 第1关:JSON篇:JSON基础知识 任务描述 第2关:JSON篇:使用json库 任务描述 Python——XPath基础 第1关:XPath 路径表达式 任务描述 第2关:XPath 轴定位 任务描述…...
TDengine 与煤科院五大系统实现兼容性互认,助力煤矿智能化安全体系搭建
近日,涛思数据与煤炭科学技术研究院(以下简称煤科院)已完成数个产品兼容互认证工作,经双方共同严格测试,涛思数据旗下物联网、工业大数据平台 TDengine V3.X 与煤炭科学技术研究院旗下煤矿复合灾害监测监控预警系统、煤…...
231030期就业班开班咯!我在前方护航,让你稳稳入职
就业哪家强?还得看优橙! 11月9日,231030期就业班的小伙伴结束了为期8天的基础班学习,正式进入了就业班。优橙教育也为新一批就业班的同学举办了开班典礼。 典礼环节中不仅有多彩的抽奖活动,也有丰富的超值礼品,旨在鼓…...
小白学安全-漏洞编号的理解 CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD
1、以CVE开头,如CVE-1999-1046这样的 CVE的英文全称是“Common Vulnerabilities&Exposures”公共漏洞和暴露。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字,能够帮助用…...
助力燃气安全运行:智慧燃气管网背景延展
关键词:城市燃气管网、智慧燃气管网、智慧管网、智慧燃气管网解决方案、智慧燃气 01背景 当前,随着我国城市化进程不断加快,城市燃气管网也不断延伸,运行规模庞大,地下管线复杂,不少城市建设“重地上轻地…...
低代码、零代码开源与不开源:区别解析
在如今日益发展的数字时代,程序开发变得越来越重要。为了实现日益提高的业务需求,开发人员必须能够以更高效、更灵活的方式构建和交货软件解决方案。低代码和零代码开源是近几年流行的两种开发方法。本文将探讨它们与传统非开源程序开发的差别࿰…...
LabVIEW中如何在网络上使用远程VI服务器
LabVIEW中如何在网络上使用远程VI服务器 如何在网络上使用远程VI服务器? 解答: 首先,需要在远程的计算机上打开一个在VI服务器上的LabVIEW应用程序的引用。这可以通过“Open ApplicationReference“函数实现。然后用“Open VI Reference”函数打开一个…...
Centos 7rc.local脚本命令开机不执行及指定用户启动的方法
1.开机不启动 在实际生产场景中,我们喜欢在安装了一些软件服务后,将软件设置为开机自启动 配置在/etc/rc.local文件中。直接将软件服务的启动命令写在rc.local文件 注意:编辑完rc.local文件后,一定要给rc.local文件执行权限&#…...
mysql 的存储过程
一组为了完成特定功能的sql 语句的集合,写好了存储过程之后,我们可以向函数一样随时调用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那样对环境重建的建图,而是实时全景分割图像里的道路、隔离带等行车需关注的相关物体)、和轨迹规划和占用预测等多任务模块于一体的统一大模型。官网上的安装说明…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
