玩过Dubbo的朋友应该听说过一个概念,叫做SOA。一说起微服务,很多人就会疑惑这跟SOA有什么关系?感觉是换汤不换药。宋哥今天就来和小伙伴们聊聊这个话题。让我们看一下SOA和微服务之间的异同。1、SOASOA,英文全称Service-OrientedArchitecture(SOA)governance,字面意思就是面向服务的架构治理。不过朋友们,应该很难在网上看到比较权威和通俗易懂的关于SOA的解释了。这里我还是以TienChin项目为例,跟大家分享一下SOA。假设在TienChin有一个用户注册功能,现在前端注册有三个端点:如果网页和手机App小程序采用传统的JavaWeb开发方式,那么注册功能我可能要写三遍才能提供一个接口对于三个client的每一个,但是稍加思考就会发现注册逻辑其实是差不多的,不同的可能只是接口返回的数据格式不同而已。因此,我们可以将注册函数抽取出来,写成一个单独的服务,然后通过HTTP或Socket等远程服务调用来调用注册的功能模块。这是一个简单的SOA架构设计。然而,很多朋友看了这里,却一头雾水。这不就是微服务吗?接下来说说SOA和微服务的区别。2.SOAPK微服务2.1服务间通信第一点是服务之间的通信方式不同。玩过Dubbo的朋友都知道,Dubbo中常用的通信协议是Dubbo协议,本质上就是socket通信。在SOA中,服务之间的通信往往采用SOAP等重量级协议。至于我们常用的微服务框架SpringCloud,小伙伴们都知道这里的通信基本都是REST之类的轻量级协议。有时我们甚至基于消息来驱动微服务。无论是哪一种,微服务服务之间的通信协议都更加轻量级。2.2数据库设计在SOA中,一般来说,分库设计不是很好,也就是说,整个系统仍然使用一个库,系统可能划分成不同的服务,但不同的服务操作同一个库。微服务是不同的。在昨天的文章中,松哥画了下图。基本上,每个服务都有自己的库,每个服务都运行自己的库。在合约管理中,需要调用用户管理。对于数据,库不能直接调用,必须通过用户管理提供的REST接口调用。2.3服务规模第三点是服务规模不同。SOA中的每一个服务作为一个整体还是一个比较大的单一项目,因为SOA一般不会细化。微服务是不同的。在微服务中,我们会把服务分成很细的块,每个服务基本上只负责一个很小的功能模块。我们以前玩SOA的时候,基本都是传统的SSM项目。小伙伴们都知道搭建一个SSM工程已经很麻烦了,所以我们可以尽量少建。但是后来有了SpringBoot,就不一样了。通过SpringBoot,我们可以非常方便快捷的创建一个项目,然后我们就有足够的条件对服务进行更细化的划分。所以,从整体上看,SOA往往是由几个比较大的服务组成的,而微服务往往是由几十个甚至上百个服务组成的。好了,假期快到了,今天就来说说一些简单又不烧脑的东西吧哈哈~
