SpringCloud的优点:
微服务单元按照业务来划分:将一个大的业务拆分为比较小的业务。按照业务划分的微服务单元独立部署。
微服务通过HTTP来互相通信:使用HTTP模式请求处理业务逻辑非常高效。服务和服务之间也可以通过轻量级的消息中线来通信,比如RabitMQ,Kafaka等。
微服务的数据库独立:不同的服务之间数据库相互独立,可以选择不同类型的数据库。
微服务自动化部署:可以使用Docker容器技术以及自动化部署工具Jenkins等来实现自动部署。
服务集中管理:服务数量比较多,所以需要集中管理,Spring Cloud使用Eureka来注册服务和发现服务,Zookeepr,Consul等都是非常优秀的集中化管理管理框架。
分布式架构:分布式系统比单体系统更加复杂,主要体现在服务的独立性和相互调用的可靠性,以及分布式事务的全局锁,全局Id等。
熔断机制:为了防止某个服务不可用之后造成整个系统的阻塞,SpringCloud会使用熔断器去做熔断。
总结,SpringCloud微服务具备以下特点。
服务的注册与发现(Eureka)
服务提供者将自己的服务信息告知服务注册中心,服务综测中心会提供服务的健康检查方案。
服务的负载均衡(Hystrix)
同一种类型的服务有多个实例时,注册中心会提供负载均衡策略。
服务的容错(Ribbon)
当某个服务不可用时会使用熔断机制,保证不会因为这个服务导致整个应用崩溃。
服务网关(Zuul)
API接口资源通常是由服务网关统一暴漏,内部服务不直接对外提供API资源的暴漏。还要负责安全验证。网关还可以实现监控功能,日志输出,以及流量监控,在高流量的情况下,对服务进行降级。常用的网关服务有Zuul,Nginx等。
服务配置的统一管理
spring cloud的config组件用来做统一的配置管理。
链路追踪
Google的Dapper,阿里的Eagleeye(鹰眼)等都是非常优秀的链路追踪开源组件。
实时日志
Dubbo
Dubbo是阿里的分布式开源框架。
RPC远程调用:封装了长连接NIO框架,如Netty等。
集群容错:提供了基于接口方法的远程调用功能,并且实现了负载均衡。
服务发现:集成了Zookeeper组件,用于服务的注册和发现。
Maven
Maven是一个项目管理工具,是基于工程对象模型(Pom)概念设计的,可以管理项目的整个生命周期,包括清理(clean),编译(Compile),打包(Package),测试(Test)等环节。
Maven的工作过程:
1 )首先读取pom文件,pom文件时Maven的核心,所有项目的依赖,插件都在pom文件进行统一管理。
2)下载jar到本地仓库。
3)执行构建的生命周期。
4)执行构建的插件。
pom文件解析:
<?xml version="1.0" encoding="UTF-8"?> //制定了xml文件的版本和编码方式。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> //model version制定了pom的版本。
<groupId>com.forezp</groupId>
<artifactId>sc-f-chapter1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
//groupId,artifactId,version三个标签可以唯一确定一个jar包,groupId代表了工资组织名称,artifactId为全局唯一Id,version代表版本。
<name>sc-f-chapter1</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
<modules>
<module>eureka-server</module>
<module>service-hi</module>
</modules>
//parent 用于指定父pom。
//properties 用于生命一些常量。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
//build为构建标签,他可以包含plugins插件标签,plugins里面可以包含若干个plugin。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
mvn clean:删除工程target目录下的所有文件
mvn package:将工程打包
mvn compile:编译工程
mvn package:将工程打包并安装到本地仓库。