微服务架构和传统的SOA架构有什么区别?仅仅只是微服务系统更小吗?
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样系统中的服务可以以一种统一和通用的方式进行交互。
都是做服务化,那么微服务与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和微服务的一个主要不同点就是自动化程度上的不同。大部分的SOA实现只达到服务级别的抽象,而微服务达到了对实现和运行环境的抽象级别。
在一个规范的微服务中,每个微服务应该被构建成胖JAR(fat JAR),其中内置了所有的依赖,然后作为一个单独的Java进程存在。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。