26、架构-微服务的九个核心特征

1. 围绕业务能力构建

定义:微服务应该根据业务功能划分,而不是根据技术层次或模块划分。

详细讲解

  • 业务能力:每个微服务应该专注于完成一个具体的业务功能,例如用户管理、订单处理、支付处理等。这样,每个服务都有明确的职责,减少了不同服务之间的耦合。
  • 组织结构:根据康威定律,系统的架构趋同于组织的沟通结构。将开发团队按业务能力划分,有助于实现微服务架构的目标。
  • 例子:在电商系统中,可以将系统划分为用户服务、商品服务、订单服务、支付服务等,每个服务分别负责一个完整的业务功能。
2. 产品而非项目

定义:微服务应被视为长期运营的产品,而不是一次性交付的项目。

详细讲解

  • 长期运营:每个微服务都是一个独立的产品,需要持续开发、维护和运营。这样可以保证每个服务的持续改进和优化。
  • 独立生命周期:每个微服务有自己的开发、测试、部署和运维周期,可以独立进行更新和迭代。
  • 例子:在开发一个支付服务时,不仅需要完成基本的支付功能,还需要持续监控、优化性能、修复漏洞和增加新功能。
3. 强终端弱管道

定义:服务之间的通信应尽量简单,复杂的逻辑应由服务端点处理。

详细讲解

  • 强终端:每个微服务应该独立处理复杂的业务逻辑,避免将业务逻辑分散到多个服务中。
  • 弱管道:服务之间的通信应该尽量简单,通常通过轻量级协议(如HTTP/REST、gRPC)进行,不应依赖复杂的中间件或企业服务总线(ESB)。
  • 例子:订单服务直接与支付服务通信,传递订单信息和支付请求,而不通过复杂的中间件进行处理。
4. 独立部署

定义:每个微服务应能够独立部署和升级,不需要依赖其他服务的部署。

详细讲解

  • 独立部署:每个微服务可以单独部署,而不影响其他服务。这提高了系统的灵活性,减少了部署的复杂性和风险。
  • 持续交付:通过持续集成和持续交付(CI/CD)工具,实现快速、频繁的部署和更新。
  • 例子:当支付服务需要更新时,只需重新部署支付服务,而不需要重新部署整个系统。
5. 去中心化治理

定义:采用去中心化的技术治理模式,允许不同服务使用不同的技术栈。

详细讲解

  • 技术多样性:不同的微服务可以使用最适合其功能的技术栈,例如某个服务使用Java开发,另一个服务使用Node.js开发。
  • 自治团队:每个团队可以根据具体需求选择技术栈和工具,增加了技术选择的灵活性。
  • 例子:在一个电商系统中,搜索服务使用Elasticsearch,用户管理服务使用关系数据库,而推荐服务使用NoSQL数据库。
6. 去中心化数据管理

定义:每个微服务应拥有自己的数据库,避免共享数据库带来的耦合问题。

详细讲解

  • 独立数据库:每个微服务管理自己的数据存储,确保数据隔离,减少数据耦合。
  • 数据同步:服务之间通过API进行数据同步,而不是直接访问其他服务的数据库。
  • 例子:用户服务有自己的用户数据库,订单服务有自己的订单数据库,两个服务通过API接口共享必要的数据。
7. 自动化基础设施

定义:采用自动化的基础设施管理手段,如CI/CD工具,实现持续集成和交付。

详细讲解

  • 自动化部署:使用工具如Jenkins、GitLab CI/CD、CircleCI等,实现代码的自动构建、测试和部署。
  • 基础设施即代码(IaC):使用工具如Terraform、Ansible等管理和配置基础设施,实现基础设施的自动化和版本控制。
  • 例子:每次代码提交后,自动触发构建、测试和部署流程,将最新版本的服务部署到生产环境中。
8. 容错性设计

定义:接受服务会出错的现实,通过设计实现自动故障检测和恢复。

详细讲解

  • 容错机制:设计和实现自动重试、断路器、熔断等机制,确保服务在出现故障时能够自动恢复。
  • 故障隔离:通过隔离机制,确保一个服务的故障不会影响到其他服务的正常运行。
  • 例子:订单服务调用支付服务时,设置重试策略和断路器,如果支付服务不可用,可以快速返回错误并尝试使用备用服务。
9. 演进式设计

定义:服务应能够随业务需求变化而演进,而不是一次性设计完美。

详细讲解

  • 渐进改进:采用迭代式开发方法,不断改进和优化服务,随着业务需求的变化进行调整。
  • 灵活应对变化:通过微服务的独立性和灵活性,快速响应业务需求的变化,进行必要的重构和优化。
  • 例子:最初的订单服务只支持基本的订单处理功能,随着业务的发展,逐步增加订单跟踪、订单取消等功能。
总结

微服务架构的九个核心特征为系统的灵活性、独立性和可扩展性提供了强有力的支持。通过围绕业务能力构建、独立部署、去中心化治理和数据管理、自动化基础设施、容错性设计和演进式设计,微服务架构能够有效应对复杂分布式系统的挑战,提升系统的整体性能和维护效率​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

node.js环境安装以及Vue-CLI脚手架搭建项目教程

目录 ▐ vue-cli 搭建项目的优点 ▐ 安装node.js环境 ▐ 搭建vue脚手架项目 ▐ 项目结构解读 ▐ 常用命令 ▐ 创建组件 ▐ 组件路由 ▐ vue-cli 搭建项目的优点 传统的前端项目架构由多个html文件,且每个html文件都是相互独立的,导入外部组件时需…

【计算机毕业设计】基于Springboot的网页时装购物系统【源码+lw+部署文档】

包含论文源码的压缩包较大,请私信或者加我的绿色小软件获取 免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

solidworks安装教程 - 解决安装后服务不能自动启动问题

Solidworks安装教程,有些同学的电脑过于复杂,产生了正常的服务不能启动。 前面的有个重要的操作操作界面有,大家应该是执行了: 那么我们有变通的方法可以让这个服务启动: 1. cmd用管理员启动 2. 测试下如下命令是否…

Charles配置与API数据抓取

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)-CSDN博客跳槽涨薪的朋友们有福了,今天给大家推荐一个软件测试面试的刷题小程序。https://blog.c…

Vue 的 axios二次封装

(以下的接口地址链接换成自己的写!!!) 首先在项目中src的目录下创建一个api的文件夹,在api的文件下在穿件两个文件用于二次封装 别忘了先安装axios:(在根目录下安装axios&#xff0…

【消息队列】Kafka学习笔记

概述 定义 传统定义: 一个分布式的, 基于发布订阅模式的消息队列, 主要应用于大数据实时处理领域新定义: 开源的分布式事件流平台, 被用于数据管道/流分析/数据集成 消息队列的使用场景 传统消息队列的主要应用场景包括: 削峰: 解耦: 异步: 两种模式 点对点模式 发布/订…

计算机网络 DHCP以及防护

一、理论知识 1.DHCP:用于在网络中自动分配IP地址及其他网络参数(如DNS、默认网关)给客户端设备。 2.VLAN:逻辑上的局域网分段,用于隔离和管理不同的网络流量。 3.DHCP地址池:为每个VLAN配置不同的DHCP地…

高考志愿填报秘籍:工具篇

选择适合自己的大学和专业,对广大考生来说至关重要。从某种程度上来说,决定了考生未来所从事的行业和发展前景。为了帮助广大考生更加科学、合理地填报志愿,选择适合自己的大学和专业,本公众号将推出如何用AI填报高考志愿专栏文章…

国际数字影像产业园:打造生态智慧写字楼新纪元

国际数字影像产业园凭借其独特的生态办公环境、智慧化服务体系、多元化功能空间和创新活力,成功打造了生态智慧写字楼的新纪元,为成都乃至全球的数字文创产业注入了新的活力和动力。 1、生态办公环境的构建: 公园城市理念的融入:…

骨传导运动耳机的怎么买到好用的?超全的选购攻略附带好物推荐!

近年来,骨传导耳机作为一个新型并且收到大量关注的一个设备,很多人在购买时会在想骨传导耳机的哪个牌子好,主要是市面上涌现了很多型号和品牌,让很多人不怎么怎么现在,那么我这几年作为一个用了那么多骨传导耳机的数码…

车辆检测之图像识别

1. 导入资源包 import torch.nn as nn import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTk,ImageDraw,ImageFont import torch from torchvision import transforms, models from efficientnet_pytorch import EfficientNet im…

[职场] 怎么写个人简历模板 #其他#知识分享

怎么写个人简历模板 怎么写个人简历模板1 姓名:xxx 性别:x 年龄:x岁 婚姻状况:x 最高学历:xx 政治面貌:xx 现居城市:xx 籍贯:xx 联系电话:xxxxxx 电子邮箱:xx…

安装Django Web框架

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Django是基于Python的重量级开源Web框架。Django拥有高度定制的ORM和大量的API,简单灵活的视图编写,优雅的URL,适…

软件工程体系概念

软件工程 软件工程是应用计算机科学、数学及 管理科学等原理开发软件的工程。它借鉴 传统工程的原则、方法,以提高质量,降 低成本为目的。 一、软件生命周期 二、软件开发模型 1.传统模型 瀑布模型、V模型、W模型、X 模型、H 模型 (1)瀑布模型 瀑布…

Crypto++ 入门

一、简介 Crypto(也称为CryptoPP、libcrypto或cryptlib)是一个免费的开源C库,提供了多种加密方案。它由Wei Dai开发和维护,广泛应用于需要强大加密安全的各种应用程序中。该库提供了广泛的加密算法和协议的实现,包括&…

线程池概念、线程池的不同创建方式、线程池的拒绝策略

文章目录 💐线程池概念以及什么是工厂模式💐标准库中的线程池💐什么是工厂模式?💐ThreadPoolExecutor💐模拟实现线程池 💐线程池概念以及什么是工厂模式 线程的诞生是因为,频繁的创…

原Veritas(华睿泰)中国研发中心敏捷教练、项目集经理郑鹤琳受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 原Veritas(华睿泰中国)中国研发中心敏捷教练、项目集经理郑鹤琳女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“敏捷项目管理-知行合一”。大会将于6月29-30日在北京举办,敬请关注…

LabVIEW与数字孪生

LabVIEW与数字孪生技术在工业自动化、智慧城市、医疗设备和航空航天等领域应用广泛,具备实时数据监控、虚拟仿真和优化决策等特点。开发过程中需注意数据准确性、系统集成和网络安全问题,以确保数字孪生模型的可靠性和有效性。 经典应用:LabV…

数据挖掘常见算法(分类算法)

K-近邻算法(KNN) K-近邻分类法的基本思想:通过计算每个训练数据到待分类元组Zu的距离,取和待分类元组距离最近的K个训练数据,K个数据中哪个类别的训练数据占多数,则待分类元组Zu就属于哪个类别…

win10 修改远程桌面端口,在Win10上修改远程桌面端口的要怎么操作

在Windows 10上修改远程桌面端口是一个涉及系统配置的过程,这通常是为了增强安全性或满足特定网络环境的需要。 一、通过注册表编辑器修改远程桌面端口 1. 打开注册表编辑器: - 按下Win R组合键,打开“运行”对话框。 - 在“运行”对话框…