理论基础
网站架构演变过程
从传统架构(单点应用) ---> 分布式架构(以项目进行拆分) ---> SOA架构(面向服务架构) ---> 微服务架构
传统架构
其实就是SSH或者SSM,属于单点应用,把整个业务模块都会放在一个项目中进行开发,分为MVC架构,会拆分成控制层、业务逻辑层、数据库访问层
特点:一般只适合于一个人或者小团队开发
缺点:耦合度太高,一旦某个模块导致服务不可用,可能会影响整个项目
分布式架构
分布式架构是根据传统架构演变过来的,将传统的项目以项目模块进行拆分成很多个子项目,每个项目中都有独立的数据库,独立的redis。这些项目之间通过RPC远程通信
项目的意思:包含业务逻辑层和视图层
服务的意思:只包含业务逻辑层,是没有视图层的
分布式架构与传统架构的区别:分布式架构项目粒度更加细、耦合度低
疑问?Maven聚合项目是不是分布式项目?
不一定是的,比如,以Maven聚合方式分为3个项目
maven_web
maven_service
maven_dao
这是将一个项目分成了多个子项目呀,不是很符合分布式的特点吗?但是这其实并不属于分布式项目,因为这三个项目之间仍然有依赖,maven_service依赖maven_dao,maven_web依赖maven_service,而且项目最终会打成一个war包,这怎么能叫分布式项目呢!
至于Maven聚合项目怎样才算得上是一个分布式项目,最终要看打的war包或者jar包个数,如果是单个,那绝对不是;但如果是多个,在项目运行的时候多个jvm相互之间进行了通讯,那就是了
SOA架构
SOA架构是基于分布式架构演变来的。代表面向服务架构①,俗称服务化;可以理解为面向业务逻辑层开发。将共同的业务代码进行抽取出来,然后提供给其他接口进行调用。服务与服务之间通信使用RPC远程调用技术。
①服务的概念:将共同的业务逻辑进行拆分,拆分成独立的一个项目进行部署,没有视图层,可以将服务理解为接口
rpc是远程调用技术,实现两个或者多个应用实现远程调用
rpc远程调用的框架:httpclient、springcloud、dubbo、grpc......
它们的核心层都是socket技术或者netty实现
SOA架构的特点:底层基于SOAP或者ESB(消息总线)实现,底层使用Http或者Https两种协议 + 重量级的XML数据格式进行通讯。在后面的微服务中已经以json替代了xml
SOA与SOAP区别:SOA是面向服务架构,SOAP是简单对象协议,是htp + xml混合物
微服务架构
首先微服务架构是基于SOA架构演变过来的,比SOA架构粒度更加精细,目的是为了提高效益。每个服务与服务之间是互不影响的,每个服务必须独立部署,微服务架构更加体现轻量级,采用restful风格提供API,也就是使用Http协议 + JSON格式传输数据,更加轻巧
SOA架构的缺点:
- 依赖于中心化服务发现机制
- 因为SOA架构采用SOAP(Http + XML),而XML传输协议比较占用宽带,整个XML报文中有非常大的冗余数据,所以在微服务架构中用json轻量级的方式替代xml报文传输
- 服务管理非常混乱,缺少服务管理和治理设施不完善
微服务架构与SOA架构的区别:
- 微服务架构基于SOA架构演变过来,继承SOA架构的优点,在为服务架构中去除SOA架构中的ESB消息总线,采用http + json(resuful)进行传输
- 微服务架构比SOA架构粒度更加精细,在微服务架构中每个服务必须独立部署
- SOA架构中可能数据库储存会发生共享,微服务强调每个服务都是单独的数据库,保证每个服务之间互不影响
- 因为粒度更加精细,在添加新功能的时候甚至不需要改动原来已有的代码,只需要新增一个服务去完成该功能的开发即可