微服务架构和SOA区别
微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢?
我们先看相同点:
-
需要Registry,实现动态的服务注册发现机制;
-
需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑;
-
同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息;
-
都需要统一的Gateway来汇聚、编排接口,实现统一认证机制,对外提供APP使用的RESTful接口;
-
同样的要关注如何再分布式下定位系统问题,如何做日志跟踪,就像我们电信领域做了十几年的信令跟踪的功能;
那么差别在哪?
-
是持续集成、持续部署?对于CI、CD(持续集成、持续部署),这本身和敏捷、DevOps是交织在一起的,我认为这更倾向于软件工程的领域而不是微服务技术本身;
-
使用不同的通讯协议是不是区别?微服务的标杆通讯协议是RESTful,而传统的SOA一般是SOAP,不过目前来说采用轻量级的RPC框架Dubbo、Thrift、gRPC非常多,在Spring Cloud中也有Feign框架将标准RESTful转为代码的API这种仿RPC的行为,这些通讯协议不应该是区分微服务架构和SOA的核心差别;
-
是流行的基于容器框架还是虚拟机为主?Docker和虚拟机还是物理机都是架构实现的一种方式,不是核心区别;
微服务架构的精髓在切分
-
服务的切分上有比较大的区别,SOA原本是以一种“集成”技术出现的,很多技术方案是将原有企业内部服务封装为一个独立进程,这样新的业务开发就可重用这些服务,这些服务很可能是类似供应链、CRM这样的非常大的颗粒;而微服务这个“微”,就说明了他在切分上有讲究,不妥协。无数的案例证明,如果你的切分是错误的,那么你得不到微服务承诺的“低耦合、升级不影响、可靠性高”之类的优势,而会比使用Monolithic有更多的麻烦。
-
不拆分存储的微服务是伪服务:在实践中,我们常常见到一种架构,后端存储是全部和在一个数据库中,仅仅把前端的业务逻辑拆分到不同的服务进程中,本质上和一个Monolithic一样,只是把模块之间的进程内调用改为进程间调用,这种切分不可取,违反了分布式第一原则,模块耦合没有解决,性能却受到了影响。
分布式设计第一原则 -- “不要分布你的对象”
-
微服务的“Micro”这个词并不是越小越好,而是相对SOA那种粗粒度的服务,我们需要更小更合适的粒度,这种Micro不是无限制的小。
如果我们将两路(同步)通信与小/微服务结合使用,并根据比如“1个类=1个服务”的原则,那么我们实际上回到了使用Corba、J2EE和分布式对象的20世纪90年代。遗憾的是,新生代的开发人员没有使用分布式对象的经验,因此也就没有认识到这个主意多么糟糕,他们正试图重复历史,只是这次使用了新技术,比如用HTTP取代了RMI或IIOP。
微服务和Domain Driven Design
一个简单的图书管理系统肯定无需微服务架构。既然采用了微服务架构,那么面对的问题空间必然是比较宏大,比如整个电商、CRM。
如何拆解服务呢?
使用什么样的方法拆解服务?业界流行1个类=1个服务、1个方法=1个服务、2 Pizza团队、2周能重写完成等方法,但是这些都缺乏实施基础。我们必须从一些软件设计方法中寻找,面向对象和设计模式适用的问题空间是一个模块,而函数式编程的理念更多的是在代码层面的微观上起作用。
Eric Evans 的《领域驱动设计》这本书对微服务架构有很大借鉴意义,这本书提出了一个能将一个大问题空间拆解分为领域和实体之间的关系和行为的技术。目前来说,这是一个最合理的解决拆分问题的方案,透过限界上下文(Bounded Context,下文简称为BC)这个概念,我们能将实现细节封装起来,让BC都能够实现SRP(单一职责)原则。而每个微服务正是BC在实际世界的物理映射,符合BC思路的微服务互相独立松耦合。
微服务架构是一件好事,逼着大家关注设计软件的合理性,如果原来在Monolithic中领域分析、面向对象设计做不好,换微服务会把这个问题成倍的放大
以电商中的订单和商品两个领域举例,按照DDD拆解,他们应该是两个独立的限界上下文,但是订单中肯定是包含商品的,如果贸然拆为两个BC,查询、调用关系就耦合在一起了,甚至有了麻烦的分布式事务的问题,这个关联如何拆解?BC理论认为在不同的BC中,即使是一个术语,他的关注点也不一样,在商品BC中,关注的是属性、规格、详情等等(实际上商品BC这个领域有价格、库存、促销等等,把他作为单独一个BC也是不合理的,这里为了简化例子,大家先认为商品BC就是商品基础信息), 而在订单BC中更关注商品的库存、价格。所以在实际编码设计中,订单服务往往将关注的商品名称、价格等等属性冗余在订单中,这个设计解脱了和商品BC的强关联,两个BC可以独立提供服务,独立数据存储
小结
微服务架构首先要关注的不是RPC/ServiceDiscovery/Circuit Breaker这些概念,也不是Eureka/Docker/SpringCloud/Zipkin这些技术框架,而是服务的边界、职责划分,划分错误就会陷入大量的服务间的相互调用和分布式事务中,这种情况微服务带来的不是便利而是麻烦。
相关推荐
微服务架构的重要性:我们讨论了微服务架构的核心概念、优势以及Java在实现这一架构中的关键角色。微服务架构以其敏捷性、可扩展性和容错性等优势,成为现代软件开发的主流趋势。 技术实现与服务治理:通过具体的...
微服务架构的核心思想是将复杂的应用程序分解为一系列小的、独立的服务,每个服务运行在自己的进程中,并通过轻量级的通信机制相互协调。 首先,我们从标题和描述中得知,这份文档可能是一份关于微服务架构实践的...
虽然文档中包含了一些难以辨认的符号和字符,但根据上下文和常见微服务架构的概念,我们可以提炼出以下几个核心知识点: 1. **微服务架构的基本概念及组成部分** 2. **微服务架构的关键技术** 3. **微服务架构的...
微服务架构的核心概念包括: 1. **服务拆分**:根据业务领域或功能进行服务划分,每个服务尽可能单一职责,降低服务间的依赖性。 2. **独立部署**:每个微服务都可以独立部署,无需协调整个系统,减少了发布新版本...
微服务架构可以用于改造公司核心系统,例如 JBOSS 中间件、Redis/Memcached、F5、Oracle 等技术栈。微服务架构也可以用于移动 APP、PC 浏览器、源码依赖等领域。 微服务架构是一种灵活、可实施、可扩展的软件架构...
通过“微服务架构实战160讲 前101讲.txt”这个文件,你将有机会深入学习这些核心概念,并了解如何在实际项目中应用它们。课程可能涵盖如何设置Eureka服务发现,配置Ribbon进行客户端负载均衡,以及如何利用KairosDB...
本笔记涵盖了从微服务基础概念到SpringCloud核心组件的深入讲解,旨在帮助开发者构建高可用、高性能的分布式系统。 一、微服务基础知识 微服务架构是一种将单一应用程序划分为一组小型服务的架构模式,每个服务运行...
这本书的上册可能详细阐述了这些基础概念和技术,为读者提供了全面理解微服务架构的理论基础。通过阅读《轻量级微服务架构(上册).pdf》,读者可以逐步掌握微服务架构的关键技术和实践,从而在实际项目中有效地应用...
本文旨在深入探讨如何设计高可用性的微服务架构,并通过具体的实践案例来帮助读者更好地理解和应用这些概念。 #### 微服务架构如何拆分 微服务架构的核心在于将其分解为一系列小型、独立的服务单元。这些服务单元...
在这些视频中,首先会介绍【微服务是什么】,通过04和05两个章节,详细阐述微服务的概念,解释微服务架构的核心思想,即把单一应用程序拆分成一组小型服务,每个服务都能独立部署、开发和管理,以提高系统的可扩展性...
微服务架构的核心概念包括: 1. **服务拆分**:根据业务领域,将应用拆分为小型、自治的服务,每个服务都有明确的边界和职责。 2. **独立部署**:每个微服务都可以独立部署,不受其他服务影响,减少了部署风险。 3....
在现代软件架构中,微服务架构已成为构建可扩展、灵活且易于维护系统的关键方法。C++,作为一种高性能的编程语言,其在微服务架构中的应用也日益受到关注。本文将详细介绍C++中微服务架构的实现,包括核心概念、关键...
由于提供的【部分内容】中的信息...以上知识点总结了微服务架构的核心概念、实践落地方法、演进路径、面临的挑战与解决方案以及未来的发展趋势。通过理解和应用这些知识点,可以更有效地在企业中落地和演进微服务架构。
本文将深入探讨微服务架构的核心概念、治理策略以及在Java环境下的实践。 微服务架构是一种将单一应用程序拆分为一组小型、独立的服务,每个服务都能在其自己的进程中运行,通常通过轻量级通信机制(如...
微服务架构的核心概念包括: 1. **服务拆分**:根据业务领域模型,将大系统拆分为小而自治的服务。每个服务都有明确的边界,负责一个业务能力,并能独立部署。 2. **轻量级通信**:服务间通过API接口进行通信,...
1. 微服务的定义:微服务架构的核心思想是将传统单体应用拆分为一系列小而自治的服务,每个服务专注于完成特定业务功能,可以独立开发、测试、部署和扩展。 2. 微服务的优点: - 可扩展性:每个服务都可以根据需要...
在分析“Java微服务架构在邮政移动互联网应用研发设计中的思考与实践”这一主题时,我们首先需要了解微服务架构的概念以及其相较于传统单体式架构的优势。单体式架构,也就是传统应用架构模式,是在一个应用程序中...
1. 微服务架构基础:讲解微服务的核心理念,如服务自治、服务间通信、API Gateway等。 2. 微服务拆分原则:如何根据业务功能进行服务拆分,避免服务过小或过大导致的问题。 3. 微服务实施工具和技术:介绍Spring ...
2. 微服务架构的概念:微服务是关于业务能力的集合,是小型的、独立的、可以独立部署和运行在自己的进程中。它们通过明确定义的API进行通信,这些API是契约,定义了服务如何与外界交互。 3. 微服务架构的关键特性:...