什么是SOA?
面向服务的架构,service oriented architecture。面向服务的架构(SOA)是一种软件开发方法,它使用称为服务的软件组件来创建业务应用程序。每项服务提供一种业务能力,并且服务也可以跨平台和语言相互通信。开发人员使用 SOA 来重用不同系统中的服务,或者组合几个独立的服务来执行复杂的任务。例如,一个组织中的多个业务流程需要用户身份验证功能。您可以创建一项身份验证服务并在所有应用程序中重用,而不是为所有业务流程重写身份验证代码。
SOA的通信协议:SOAP(简单对象访问协议)、Restful HTTP、Apache Thrift、Apache ActiveMQ、JMS(java message service)
SOA的ESB:
Traditionally, SOA involves anenterprise service bus(ESB) as a means of coordinating and controlling these services.
思考:SOA使用ESB来串联协调服务,所以会出现单点问题。
SOA、微服务、DDD
思路:先看是不是一个领域;再看是不是一个层面;最后看区别。
1、观念一:SOA和微服务之间就是去中心化和更细粒度的区别s
Service-oriented architecture was largely created as a response to traditional, monolithic approaches to building applications. SOA breaks up the components required for applications into separate service modules that communicate with one another to meet specific business objectives. Each module is considerably smaller than a monolithic application, and can be deployed to serve different purposes in an enterprise. Additionally, SOA is delivered via the cloud and can include services for infrastructure, platforms, and applications.
Microservice architecture is generally considered an evolution of SOA as its services aremore fine-grained, and function independently of each other.
思考:微服务是SOA的一种迭代,粒度精细、互相独立,有领域的概念。通讯方式从ESB总线变成了微服务之间互相访问API。
相同点:
拆解了单体服务,基于云的生产/运行环境。适应了大数据量和速度的要求。
不同点:
1、架构上:微服务运行更加独立。SOA在服务之间共享资源和数据。微服务是尽量少地共享数据,SOA则是尽量多地共享。
2、共享组件:微服务没有共享组件这一说;SOA以共享组件为主。(这个组件的定义:ESB之类的)
3、粒度区别
4、数据存储:微服务各存各的;SOA共享数据。
5、服务关系:微服务互相合作;SOA存在common goverance protocols
6、通信:API vs ESB
7、一致性:微服务基于边界上下文;SOA基于共享的数据
8、通信协议:REST、JMS;SOAP、AMQP
9、发布:微服务更灵活
2、观念二:SOA是一种理念,微服务是其中一个实现方式
SOA理念主要特性:分布式计算、封装服务、服务注册&发现、服务松耦合、服务交互
实现方式有两种:1、中心化的:ESB——ESB的根本诉求是为了解决异构系统之间的连通性,通过协议转换、消息解析、消息路由把服务提供者的数据传送到服务消费者。所以,ESB是中心化的,很重,有一定的逻辑,但它的确可以解决一些公用逻辑的问题。2、去中心化的:微服务。分布式服务框架,主要有dubbo、spring cloud,实现后端服务治理的功能。
Spring Cloud Netflix包括如下组件
1、eureka:服务注册和发现
2、zuul:网关;路由url、转发。还有什么别的网关? Nginx + lua;mashape kong;TAO taobao open platform;
3、ribbon:负载均衡,决定转发到具体哪一台实例
4、feign:服务客户端。服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。
5、Hystrix:监控和熔断
6、Hystrix Dashboard,监控面板
7、Turbine,监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。
介绍地址:aws.amazon.com/cn/what-is/service-oriented-architecture/
结论
最终SOA和微服务主要的区别就在于是否中心化,与SOA的一个关键组件——ESB相关,当然现在没有见过一个ESB究竟是什么样的。从描述上看总线确实会重一些,也是单点类问题方案努力避免的情况。
了解这两个概念后,微服务可以简单地入门了。后续关于容器、DevOps等概念就可以逐渐了解啦!