SpringCloud
SpringCloud是微服务的一种实现,属于Spring旗下的项目之一,集成了很多其他优秀的流行框架,由于其团队的可靠性以及功能的强大,SpringCloud成为最火的微服务的实现方式
其中SpringCloud又有两种解决方案
Spring Cloud Netflix
该项目进入维护期,意味着没有新功能的添加,只进行bug修复
Spring Cloud Alibaba: learning.....
maven坐标
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
微服务的特点
单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责
微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但“五脏俱全”。
独立:自治是说服务间互相独立,互不干扰
- 团队独立:每个服务都是一个独立的开发团队,人数不能过多。
- 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉
- 前后端分离:采用前后端分离开发,提供统一Rest接口,后端不用再为PC、移动端开发不同接口
- 数据库分离:每个服务都使用自己的数据源
- 部署独立,服务间虽然有调用,但要做到服务重启不影响其它服务。有利于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,易维护 Docker部署服务
简单理解就是之前的每一个单体应用都可以称之为服务,举个例子,一个刚上线的小型商城项目,起初的用户量访问量很少,使用单体架构完全可以应对,但一旦用户访问量增多时,服务器或者数据库承受不了那么多的访问量,服务器会出现宕机,为了解决很多类似的情况,便有了微服务这种思想,将项目改造成微服务架构,针对访问量较多的模块可以让其占用更大的资源
优点
解决了复杂问题,可以将一个庞大的单体应用程序拆解成一套服务,虽然功能数量不变,但应用程序已经被拆解成可管理的块或者服务,每个服务提供相对单一的功能,更容易理解和维护
每个服务可以进行单独部署,并且可以根据该服务的所需来调配资源,避免资源浪费
缺点
使项目整体变得更加复杂,服务间的通信也变得麻烦
由于服务有自己独立的数据库,需要解决数据间的同步
测试会变得相对麻烦,一个服务或者模块会依赖其他的模块,进行相互调用,所以必须还要启动其依赖的服务