面向服务体系结构,将程序中不同的功能模块,通过服务定义的接口和契约关联起来。接口是采用中立的方式定义的,它独立于实现服务的硬件平台、操作系统和编程语言。
从定义上看,可以总结出SOA软件架构模式的几个特点:
1、面向服务划分系统
将庞大的业务系统拆分成高内聚的服务单元,每个单元对外提供服务服务能力,服务与服务之间通过相互协作共同实现业务价值
2、松耦合
SOA框架中可以应用多种技术,服务消费方不依赖于服务提供者的技术实现(比如Java服务提供方,Python服务消费者)。双方可以通过thrift, proto-buffer或者消息队列等框架来实现消息的互通。
3、明确定义的接口
系统的可靠性依赖外部网络特质—传统的单进程系统拆分成多进程系统之间的相互协作,进程之间通过RPC进行通信,增加了网络开销。
4、无状态的服务设计
服务应该是独立的、自包含的请求,在实现时它不需要获取从一个请求到另一个请求的信息或状态。服务不应该依赖于其他服务的上下文和状态。当产生依赖时,它们可以定义成通用业务流程、函数和 数据模型。
SOA就是帮助我们把服务之间调用的乱七八糟的关系给治理起来,然后提供一个统一的标准,把我们的服务治理成图所示,以前我们的服务是互相交互,现在是只对数据总线进行交互,这样系统就变得统一起来(系统层面的控制反转DI)。
参考文献:SOA架构是什么
微服务架构是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。
微服务的特点:
1、 独立部署,灵活扩展
传统的单体架构是以整个系统为单位进行部署,而微服务则是以每一个独立组件(如用户服务、商品服务等)为单位进行部署。
2、资源的有效隔离
微服务设计原则之一,就是每一个微服务拥有独立的数据源,假如微服务A想要读写微服务B的数据库,只能调用微服务B对外暴露的接口来完成。这样有效的避免了服务之间争用数据库和缓存资源所带来的问题。
同时,由于每一个微服务实例在Docker容器上运行,实现了服务器资源(内存、CPU资源等)的有效隔离。
3、团队组织架构的调整
微服务设计的思想也改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端、后端、DBA、测试分别有自己对应的团队,属于水平团队组织架构。而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。但实际上在企业中并不会把团队组织架构拆分得这么绝对,垂直架构只是一种理想的架构。
微服务架构了,在一个项目中微服务节点很多,如果让每一个节点都去处理上面这些 “鉴权认证功能、Session处理、安全检查、日志处理等” 会多出很多冗余的代码,也会给增加业务代码的复杂度,因此我们就需要有一个「 API网关 」把这些公共的功能独立出来成为一个服务来统一的处理这些事情。
其主要功能有:1、路由转发 2、负载均衡 3、安全认证 4、日志记录
1、微服务剔除SOA中复杂的ESB企业服务总线,所有的业务智能逻辑在服务内部处理,使用Http(Rest API)进行轻量化通讯
2、 SOA强调按水平架构划分为:前、后端、数据库、测试等,微服务强调按垂直架构划分,按业务能力划分,每个服务完成一种特定的功能,服务即产品
3、 SOA将组件以library的方式和应用部署在同一个进程中运行,微服务则是各个服务独立运行。
4、 传统应用倾向于使用统一的技术平台来解决所有问题,微服务可以针对不同业务特征选择不同技术平台,去中心统一化,发挥各种技术平台的特长。
5、SOA架构强调的是异构系统之间的通信和解耦合;(一种粗粒度、松耦合的服务架构)
6、微服务架构强调的是系统按业务边界做细粒度的拆分和部署。
参考文献:什么是微服务
分布式:把系统按照模块拆分成多个子系统;多个子系统相互协作才能完成业务流程系统之间需要进行通信。
作用:从部署的角度出发、分布式主要是解决网站高并发带来问题。
SOA:Service Oriented Architecture,面向服务架构。业务系统分解为多个组件,让每个组件都独立提供离散,自治,可复用的服务能力,通过服务的组合和编排来实现上层控制进行业务流程。
作用:简化维护,降低整体风险,伸缩灵活。
微服务:架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的跟严格执行SOA到微服务架构的演进过程。
作用:各服务可独立应用,组合服务也可系统应用。
1、微服务提高了系统复杂度;
2、开发人员要处理分布式系统的复杂性;
3、服务之间的分布式通信问题;
4、服务的注册与发现问题;
5、服务之间的分布式事务问题;
6、数据隔离再来的报表处理问题;
7、服务之间的分布式一致性问题;
8、服务管理的复杂性,服务的编排;
9、不同服务实例的管理。
10、运维成本、测试和维护, 定点故障排查问题。