您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

微软关于微服务体系结构的理解

时间:2019-09-02 10:36:38  来源:  作者:

本篇文章转自微软官网技术文档。设计原则,优缺点等都总结的很好,非常值得阅读收藏,欢迎关注我。

微服务体系结构由一系列小型的自治服务组成。 每个服务都是自包含服务,并且应实现单个业务功能。

微软关于微服务体系结构的理解

 

在某些方面,微服务是面向服务的体系结构 (SOA) 的自然演变,但微服务与 SOA 之间也存在一些差异。 下面是微服务的一些典型特征:

  • 在微服务体系结构中,服务具有规模小、独立和松散耦合的特点。
  • 每个服务都是一个单独的基本代码,可由小型开发团队管理。
  • 服务可独立部署。 团队可以更新现有服务,而无需重新生成和重新部署整个应用程序。
  • 服务负责暂留自己的数据或外部状态。 这一点与传统模型不同,后者由单独的数据层处理数据暂留。
  • 服务通过定义完善的 API 相互通信。 每个服务的内部实现细节均对其他服务隐藏。
  • 服务无需共享相同的技术堆栈、库或框架

除了服务本身,典型微服务体系结构中还会出现其他组件:

管理。 管理组件负责将服务放置在节点上、标识故障、跨节点重新平衡服务等等。

服务发现。 维护一个包含服务及其所在节点的列表。 支持使用服务查找功能查找服务的终结点。

API 网关。 API 网关是客户端的入口点。 客户端不直接调用服务, 而是调用 API 网关,网关再将调用转发到后端上的相应服务。 API 网关可以聚合来自多个服务的响应,并返回聚合的响应。

使用 API 网关的优点如下:

  • 它分离了客户端与服务。 无需更新所有客户端,便可对服务进行版本控制或重构。
  • 服务可以使用对 Web 不友好的消息传递协议,比如 AMQP。
  • API 网关可执行身份验证、日志记录、SSL 终止和负载均衡等其他跨领域功能。

何时使用此架构

请对以下情况考虑使用此体系结构样式:

  • 需要较高发布速度的大型应用程序。
  • 需要高度可缩放的复杂应用程序。
  • 具有大量域或多个子域的应用程序。
  • 由小型开发团队组成的组织。

优点

  • 独立部署。 无需重新部署整个应用程序便可更新服务,出现问题时可回滚或前滚更新。 Bug 修复和功能发布更易管理,风险更低。
  • 独立开发。 单个开发团队便可生成、测试和部署服务, 从而推动持续创新,加快发布节奏。
  • 小型专属团队。 团队可专注于一个服务。 缩小每个服务的范围后,基本代码变得更好理解,新的团队成员也能更快上手。
  • 错误隔离。 某个服务中断不会影响整个应用程序。 但是,这并不意味着用户可以无偿复原。 用户仍需遵循复原最佳做法和设计模式。 请参阅设计可靠的 Azure 应用程序。
  • 混合技术堆栈。 团队可选取最适合其服务的技术。
  • 精细缩放。 服务可独立缩放。 与此同时,每个 VM 的较高服务密度也意味着 VM 资源得到充分利用。 使用放置约束,可将服务与 VM 配置文件(高 CPU、高内存等等)匹配。

挑战

  • 复杂性。 与同等的单一式应用程序相比,微服务应用程序具有更多移动部件。 每个服务更简单,但整个系统作为整体来说更复杂。
  • 开发和测试。 针对服务依赖关系的开发需要采用不同的方法。 现有工具不一定能处理这些服务依赖关系。 跨服务边界进行重构可能很困难。 测试服务依赖关系也有一定难度,尤其是在应用程序快速发展之时。
  • 缺乏监管。 用于生成微服务的分散式方法具有一定优势,但也可能导致许多问题。 用户在生成过程中可能采用了许多不同的语言和框架,从而使应用程序变得难以维护。 这种情况下可以实施一些项目范围内的标准,不过分限制团队的灵活性。 这尤其适用于日志记录等跨领域功能。
  • 网络拥塞和延迟。 使用大量小型的精细服务可能会增加服务间的通信量。 此外,如果服务依赖关系链变得太长(服务 A 调用 B,B 调用 C...),额外延迟可能会成为一个问题。 用户需要精心设计 API。 应避免过于繁琐的 API,考虑使用序列化格式,并找到可以使用异步通信模式的地方。
  • 数据完整性。 每个微服务负责其自己的数据持久性。 因此,数据一致性可能是个挑战。 如果可能,请采用最终一致性。
  • 管理。 成功使用微服务需要有成熟的 DevOps 区域性。 跨服务的关联日志记录可能很难。 通常情况下,日志记录必须为单个用户操作关联多个服务调用。
  • 版本控制。 对某个服务的更新不应中断依赖于它的其他服务。 多个服务可在任意给定时间更新,因此,若不精心设计,可能会遇到向后或向前兼容性问题。
  • 技能组合。 微服务是一种高度分布式系统。 请仔细评估团队是否具有成功使用微服务所需的技能和经验。

最佳做法

  • 围绕业务域对服务建模。
  • 分散所有资源。 单个团队负责设计和生成服务。 避免共享代码或数据架构。
  • 拥有数据的服务应当有专用的数据存储。 为每个服务和数据类型使用最合适的存储。
  • 服务通过设计完善的 API 进行通信。 避免泄露实现细节。 API 应对域建模,而不是对服务的内部实现建模。
  • 避免服务之间耦合。 耦合的原因包括共享的数据库架构和严格的通信协议。
  • 将身份验证和 SSL 终止等跨领域操作分流到网关。
  • 让网关不必了解域。 网关应处理和路由客户端请求,而无需了解业务规则或域逻辑。 否则,网关会变成一个从属物,从而导致服务之间耦合。
  • 服务应具有松散耦合和高功能内聚的特点。 应当将可能会一起更改的函数打包并部署在一起。 如果它们驻留在不同的服务中,这些服务最终会紧密耦合,因为一个服务中的更改将需要更新其他服务。 两个服务之间的通信过于频繁可能是紧密耦合和低内聚的征兆。
  • 隔离故障。

转自:https://docs.microsoft.com/zh-cn/azure/architecture/guide/architecture-styles/microservices



Tags:微服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  Tags: 微服务  点击:(9)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  Tags: 微服务  点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  Tags: 微服务  点击:(35)  评论:(0)  加入收藏
实施微服务架构,我们一直在遵循一个实践原则:每个微服务要有自己独立的数据库,避免数据库层面的耦合。这种理所当然感觉好像不需要多加思考,就是应该这样做; 图片来源:James Lewi...【详细内容】
2021-10-11  Tags: 微服务  点击:(42)  评论:(0)  加入收藏
在今年的NGINX Sprint 2.0虚拟大会上,NGINX(来自流行的开源web服务器/负载均衡器和反向代理背后的公司F5),发布了NGINX现代应用参考架构(MARA)。该公司在一篇博客文章中说,这将帮...【详细内容】
2021-09-26  Tags: 微服务  点击:(61)  评论:(0)  加入收藏
今天,字节跳动正式宣布开源 CloudWeGo。这是一套以 Go 语言为核心、专注于微服务通信与治理的中间件集合,具有高性能、可扩展、高可靠的特点。项目地址:https://github.com/clo...【详细内容】
2021-09-08  Tags: 微服务  点击:(93)  评论:(0)  加入收藏
1. Spring Boot 与 Spring Cloud Spring Boot 是用于编写微服务的 Java 基础框架。在Spring Cloud 提供了各种构建全栈微服务的功能。构建小型和大型系统都适合。由于控制反...【详细内容】
2021-08-31  Tags: 微服务  点击:(163)  评论:(0)  加入收藏
现有问题在 EFK 日志收集 篇中,我们讲解了如何利用 EFK 收集 Kubernetes 集群日志。但是,还存在如下问题。 Elasticsearch 以单节点的形式部署,不能满足生产环境的要求 Fluentd...【详细内容】
2021-08-13  Tags: 微服务  点击:(104)  评论:(0)  加入收藏
在 Java 和 Kotlin 中, 除了使用Spring Boot创建微服务外,还有很多其他的替代方案。 名称 版本 发布时间 开发商 GitHub ...【详细内容】
2021-08-06  Tags: 微服务  点击:(175)  评论:(0)  加入收藏
一、微服务的现状及未来1.服务架构的演变1.1 单体架构  单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问...【详细内容】
2021-07-22  Tags: 微服务  点击:(125)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条