微服务架构(MSA)

news/2024/11/8 9:35:52/

什么是微服务架构

从业界的讨论来看,微服务本身并没有一个严格的定义。不过,ThoughtWorks的首席科学家(Martin Flowler)的描述更加通俗易懂:

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下
文,选择合适的语言、工具对其进行构建。

原文如下:

In short, the microservice architectural style 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


微服务架构的特征

微服务的本质特征通常包括如下几个部分:

  • 服务作为组件(Componentization via Services)
  • 围绕业务组织团队(Organized around Business Capabilities)
  • 产品不是项目(Products not Projects)
  • 强化终端及弱化通道(Smart endpoints and dumb pipes)
  • 分散治理(Decentralized Governance)
  • 分散数据管理(Decentralized Data Management)
  • 基础设施自动化(Infrastructure Automation)
  • 容错性设计(Design for failure)
  • 演进式架构(Evolutionary Design)


微服务是一种全新的互联网架构,它的基本理念是将一个肥大的系统拆分成若干小的服务组件,组件之间的通讯采用轻量的协议完成,譬如REST API。微服务本质上是SOA (Serviceoriented Architecture) 的扩展延伸。相对来说,微服务的可操作性更强,可以逐步安排合理资源,对一个大的系统进行分解,或是至少停止让它继续臃肿下去。

微服务具有如下优点:

  • 按照业务功能的独立垂直开发,易于开发、理解和维护;
  • 支持异构开发语言,不会受限于任何技术栈;
  • 部署周期短,自动化部署(Docker / Kubernetes);
  • 局部修改很容易部署,有利于持续集成和持续交付;
  • 故障隔离,一个服务出现问题不会影响整个应用;

单体应用 vs 微服务应用

通俗地讲,“单体应用(monolith application)”就是将应用程序的所有功能都打包成一个独立的单元,可以是JAR、WAR、EAR或其它归档格式。单体应用有如下优点:

  • 适合小团队创业初期进行快速开发;
  • 易于测试:因为没有额外的依赖,每项测试都可以在部署完成后立刻开始;
  • 部署简单:只需将单个归档文件复制到Tomcat webapps目录下;
  • 不存在分布式事务问题;

但是,不管如何模块化,单体应用最终都会因为团队壮大、接入应用越来越多等出现问题。主要体现在如下方面:

  • 不够灵活:对应用程序做任何细微的修改都需要将整个应用程序重新构建、重新部署。开发人员需要等到整个应用程序部署完成后才能看到变化。如果多个开发人员共同开发一个应用程序,那么还要等待其他开发人员完成了各自的开发。这降低了团队的灵活性和功能交付频率;
  • 妨碍持续交付:单体应用可能会比较大,构建和部署时间也相应地比较长,不利于频繁部署,阻碍持续交付。
  • 受技术栈限制:对于这类应用,技术是在开发之前经过慎重评估后选定的,每个团队成员都必须使用相同的开发语言
  • 某个服务出现OOM后对整体应用产生影响;

参考资料

1.Microservices by Martin Fowler
2.Microservices Resource Guide
3.Microservices: Decomposing Applications for Deployability and Scalability


http://www.ppmy.cn/news/764484.html

相关文章

SW-MSA

目录 SW-MSAShifted-Window什么是循环移位重新分割图片并计算Attention如何mask SW-MSA Shifted-Window ​ 如上图所示,每一个小块叫做一个patch,每一个深色方块框起来的叫一个local window,在每一个local window中计算self-attention。如果…

2021-10-26 MSA (测量系统分析)

1、什么是MSA?MSA是Measure System analyse的第一个字母的缩写。 2、为什么叫测量系统而不是测量工具或测量仪器?因为影响测量结果的因素除了所使用的仪器外,还包括测量的标准、操作人员的使用方法、读数误差、夹具的松紧、环境温度等综合因…

免root卸载MIUI中在通知栏中推送广告的应用——msa

msa的包名是com.miui.systemAdSolution,位于/system/app/SystemAdSolution,具有以下权限 由此可以看出这个程序具有非常大的权限,可以在后台自动更新,而且能够获得用户的隐私来精确推送广告。 如果是root用户,直接删除即可。对于非root用户,可以使用adb命令来删除。 …

Python3在Windows上设置环境变量方法

Python3在Windows上设置环境变量方法,在环境变量中添加Python目录: 在命令提示框中(cmd) : 输入 path%path%;C:\Python 按下"Enter"。 注意: C:\Python 是Python的安装目录。 也可以通过以下方式设置: 右键点击"计算机&q…

Java中一个类可以继承多个类吗?揭秘多重继承的秘密!

大家好,我是你们的小米!今天,我们来聊聊Java中一个备受争议的话题——"一个类可以继承多个类吗?"这是一个让许多Java初学者困惑的问题,也是一个常常被问及的热门话题。那么,到底Java中是否允许一…

telnet连接,报“不能打开到主机的连接,在端口23:连接失败”

检查ip是否ping通 检查系统属性–>远程桌面是否勾选 运行services.msc->打开telnet->启动类型:自动->服务状态:启动->应用->确定

正在连接 127.0.0.1:20880 无法打开到主机的连接。 在端口 23: 连接失败

当我们想访问dubbo接口时,会用到telnet方法, 运行 telnet 127.0.0.1:20880 会报错 原因是 ip与端口间不要加符号 解决办法: 去掉冒号,用空格隔开即可 telnet 127.0.0.1 20880

无法打开到主机的连接。 在端口 23: 连接失败(Windows10)

telnet 127.0.0.1 9092 (地址和端口中间是空格不是冒号) telnet 127.0.0.1 9092 (地址和端口中间是空格不是冒号) telnet 127.0.0.1 9092 (地址和端口中间是空格不是冒号) 重要…