传统单体架构 ==> 分布式架构 ==> 面向服务(SOA)架构 ==> 微服务架构
- 传统单体架构:如分层架构模式。
- 应用场景:并发量比较少的,如政府项目、管理系统、ERP、OA、人事管事系统等。
- 详细可移步《【架构】了解常见的软件架构》。
- 分布式架构:基于传统单体架构演变过来的,会根据不同的业务实现拆分n多个不同子系统。
- 如京东官网。每个子系统中都有自己的团队来实现开发,具有独立数据库、独立缓存、独立mq,最终实际根据多个不同域名实现跳转整合成一个大项目。
- 详细可移步《【架构】分布式系统及相关技术栈初了解》。
- 面向服务(SOA)架构:将整个项目中共同的业务逻辑抽取成一个公共的服务,提供给其他的服务实现调用,调用的过程会涉及到RPC远程调用技术。
- SOA架构模式实现方案为Web Service或者是ESB企业服务总线。
- 底层通讯协议SOAP协议(Http+XML)实现传输。
- 传统政府、银行项目还是保留地在使用Web Service。
- 微服务架构:比SOA架构对服务拆分的粒度更加精细,让业务界限更加清晰,每个服务独立部署、互不影响。
- 服务与服务之间的通讯协议采用restful形式。
- 数据交换格式采用http+json格式实现传输。
面向对象编程(Object-Oreinted Programming) :是一种编程范式,指在设计程序时大量运用类实例对象的方式。
- OOP主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。
- 类是具有相同特性(数据元素)和行为(功能)的对象的抽象。
面向服务架构(Service-Oreinted Architecture) :是将软件设计成一组可互操作的服务的一套原则或方法论。
- 通常在考虑系统架构时才会触及SOA。
基于组件开发(Component-Based Development) :是一种软件工程实践,设计时通常要求组件之间高内聚,松耦合。
- 其接口可能是OO的,调用方式可能是以Service的方式。
- 基于组件开发关注系统层次、子系统边界和子系统间通讯的的设计。
三者身处于软件开发的不同层面,不论是哪个领域的软件开发,都可能要同时面对OOP、SOA和CBD。
面向服务架构(Service-Oriented Architecture,SOA)又称为面向服务的体系架构。
- 传统的Web(HTML/HTTP)技术有效的解决了人与信息系统的交互和沟通问题,极大的促进了B2C模式的发展。
- WEB服务(XML/SOAP/WSDL)技术则是要有效的解决信息系统之间的交互和沟通问题,促进B2B/EAI/CB2C的发展。
- SOA(面向服务的体系)则是采用面向服务的商业建模技术和WEB服务技术,实现系统之间的松耦合,实现系统之间的整合与协同。
- WEB服务和SOA的本质思路在于使得信息系统个体在能够沟通的基础上形成协同工作。
SOA凭借其松耦合的特性,使得企业可以按照模块化的方式来添加新服务或更新现有服务,以解决新的业务需要。
SOA的灵活性和业务相关性,使得它成为解决企业业务发展需求与企业IT支持能力之间矛盾的最佳方案。
灵活性:SOA是第一个考虑了企业业务发展长期性的IT架构。从本质上说,SOA是一组松耦合的服务,每一个服务的建立和替换都是相对简单的。
业务相关性:SOA与其他IT架构的最大区别在于它与业务的关联性。
SOA要解决的主要问题是:快速构建与应用集成。
实施SOA的关键目标是:实现企业IT资产的最大化作用。
SOA 只是一种概念和思想,需要借助于具体的技术和方法来实现它。
在 Web Service(Web 服务)的解决方案中,一共有三种工作角色,其中服务提供者和服务请求者是必需的,服务注册中心是一个可选的角色。
它们之间的交互和操作构成了 SOA 的一种实现架构:
Web Service 模型中的操作包括发布、查找和绑定,这些操作可以单次或反复出现。
- 发布:为了使用户能够访问服务,服务提供者需要发布服务描述,以便服务请求者可以查找它。
- 查找:在查找操作中,服务请求者直接检索服务描述或在服务注册中心查询所要求的服务类型。
- 对服务请求者而言,可能会在生命周期的两个不同阶段中涉及查找操作:
- 首先是在设计阶段,为了程序开发而查找服务的接口描述;
- 其次是在运行阶段,为了调用而查找服务的位置描述。
- 绑定:在绑定操作中,服务请求者使用服务描述中的绑定细节来定位、联系并调用服务,从而在运行时与服务进行交互。
- 绑定可以分为动态绑定和静态绑定。
- 在动态绑定中,服务请求者通过服务注册中心查找服务描述,并动态地与服务交互;
- 在静态绑定中,服务请求者已经与服务提供者达成默契,通过本地文件或其他方式直接与服务进行绑定。
服务注册表(service registry)虽然也具有运行时的功能,但主要在 SOA设计时使用。
ESB 是由中间件技术实现并支持 SOA的一组基础架构,是传统中间件技术与 XML、 Web Service 等技术结合的产物,是在整个企业集成架构下的面向服务的企业应用集成机制。
与 SOA 紧密相关的技术主要有 UDDI、WSDL、SOAP 和 REST 等,而这些技术都是以 XML 为基础而发展起来的。
UDDI(Universal DescriptionDiscovery and Integration,统一描述、发现和集成)提供了一种服务发布、查找和定位的方法。
WSDL(Web ServiceDescription Language,Web 服务描述语言)是对服务进行描述的语言,它有一套基于 XML 的语法定义。
SOAP(Simple ObjectAccess Protocol,简单对象访问协议)定义了服务请求者和服务提供者之间的消息传输规范。
REST(RepresentationalState Transfer,表述性状态转移)是一种只使用 HTTP 和 XML 进行基于 Web 通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。
微服务架构是从soa架构模式演变过来的,比SOA架构对服务拆分的粒度更加精细,让业务界限更加清晰。
*基于服务总线的设计:
- 总线则作为中枢系统,提供统一的服务入口,并实现了服务统一管理、服务路由、协议转换、数据格式转换等功能。
- 是SOA的一种很常见的设计实践,能够将不同系统有效地连接起来,并大大降低了连接数(每个子系统只需要和总线建立连接)和系统间连接拓扑的复杂度。
- 基于服务总线的设计,往往需要ESB(Enterprise Service Bus,企业服务总线)产品来充当基础设施。
- 在其内部设计和实现中,通常会应用到一些经典的架构模式,例如:Broker模式、消息总线模式、管道过滤器模式、发布订阅模式等。具体介绍可参考:https://blog.csdn.net/dinglang_2009/article/details/44516657
Dubbo 提供的基础能力包括:服务发现、流式通信、负载均衡、流量治理等等。
提供的通信模型:同步的 Request-Response (默认)、消费端异步请求、提供端异步执行、消费端请求流、提供端响应流、双向流式通信。
Dubbo 提供的是 Client-Based 的服务发现机制,使用者可以有多种方式启用服务发现:
部署架构:为了在分布式环境下实现各个微服务组件间的协作, Dubbo 定义了一些中心化组件。
文档:https://dubbo.apache.org/zh/
仅支持 C++ 语言,目前在腾讯内部应用也非常广泛。2017 年对外开源,仅支持 C++ 语言。
源码:https://github.com/TarsCloud/Tars/
*微服务框架与RPC
什么是RPC?
RPC (Remote Procedure Call)远程过程调用是一个计算机通信协议。我们一般的程序调用是本地程序内部的调用,RPC允许你像调用本地函数一样去调用另一个程序的函数,这中间会涉及网络通信和进程间通信,但你无需知道实现细节,RPC框架为你屏蔽了底层实现。
- RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。
两者关系:
微服务框架一般都包含了RPC的实现和一系列「服务治理」能力,是一套软件开发框架。
- 我们可以基于这个框架之上实现自己的微服务,方便的利用微服务框架提供的「服务治理」能力和RPC能力,所以微服务框架也被有些人称作RPC框架。
微服务可以说是 SOA 的一种,但两者之间存在一些差异:
- 微服务架构是团队面对互联网产品爆发式增长的最优选择,要解决的是快速迭代、高可靠和高可用等问题。
- 把复杂度很高的产品拆分成一些较小的模块,并遵循康威定律,每一个模块用5-9个小团队来维护,这样可以减少沟通成本,提高协作效率,更好地实现快速迭代和弹性扩展。
- 复杂业务拆分可能无法一步到位,因为复杂,每个业务并不一定只能拆成一个组件,庞大的业务拆分出相对独立和庞大的业务。但如果业务较小而又比较多,且类型相似,也可以不用着急拆分,都是根据实际情况决定的。
- 中间的状态,可能不是严格意义上的微服务架构,但属于分布式服务架构(不过这不是那么重要,重要的是符合业务发展阶段的需求)。
- 需要注意的是:既没有规模又不需要太多变化的业务,如果采用微服务架构改造,引入各种复杂性,比如部署工作量的增加、复杂链路的监控难题,这就是为微服务而微服务,只会得不偿失。
【部分内容参考自】