目录:
(1)微服务概述
(2)SpringCloud简介
(3)EurekaServer搭建
学习目录:
(1)微服务概述
集中式架构、分布式架构、微服务架构介绍
系统进化理论概述
在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统;
1、我们知道微服务架构是将系统中的不同功能模块拆分成多个不同的服务,这些服务进行独立地开发和部署,每个服务都运行在自己的进程内,这样每个服务的更新都不会影响其他服务的运行;
2、由于每个服务是独立部署的,所以我们可以更准确地监控每个服务的资源消耗情况,进行性能容量的评估,通过压力测试,也很容易发现各个服务间的性能瓶颈所在;
3、由于每个服务都是独立开发,项目的开发也比较方便,减少代码的冲突、代码的重复,逻辑处理流程也更加清晰,让后续的维护与扩展更加容易;
4、微服务可以使用不同的编程语言进行开发;
但是在系统架构领域关于微服务架构也有一些争论,有人倾向于在系统设计与开发中采用微服务架构实现软件系统的低耦合,被认为是系统架构的未来方向,Martin Fowler(马丁.福勒)也给微服务架构很高的评价;
同时,对微服务架构也有人持反对观点,他们表示:
1、微服务架构增加了系统维护、部署的难度,导致一些功能模块或代码无法复用;
2、随着系统规模的日渐增长,微服务在一定程度上也会导致系统变得越来越复杂,增加了集成测试的复杂度;
3、随着微服务的增多,数据的一致性问题,服务之间的通信成本等都凸显了出来;
所以在系统架构时也要提醒自己:不要为了微服务而微服务。
服务基础开发 |
Spring MVC、Spring、SpringBoot |
服务注册与发现 |
Netflix的Eureka、Apache的ZooKeeper、Nacos、Consul等 |
服务调用 |
RPC调用有阿里巴巴的Dubbo,Rest方式调用有当当网Dubbo基础上扩展的Dubbox、还有其他方式实现的Rest,比如Ribbon、Feign、Gateway、Zuul |
分布式配置管理 |
百度的Disconf、360的QConf、淘宝的Diamond、Netflix的Archaius、Config、Bus、Nacos等 |
负载均衡 |
Ribbon、RestTemplate、Zuul、Gateway |
服务熔断 |
Hystrix、Hystrix Dashboard、Sentinel |
API网关 |
Zuul、Gateway |
批量任务 |
当当网的Elastic-Job、Linkedln的Azkaban |
服务跟踪 |
京东的Hydra、Twitter的Zipkin等 |
(2)SpringCloud简介
1、Spring Cloud是一个一站式的开发分布式系统的框架,为开发者提供了一系列的构建分布式系统的工具集;
2、Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(比如:配置管理,服务发现,断路器,智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等);
3、开发分布式系统都需要解决一系列共同关心的问题,而使用Spring Cloud可以快速地实现这些分布式开发共同关心的问题,并能方便地在任何分布式环境中部署与运行。
4、Spring Cloud这个一站式地分布式开发框架,被近年来流行的“微服务”架构所大力推崇,成为目前进行微服务架构的优先选择工具;
5、Spring Cloud基于Spring Boot框架构建微服务架构,学习Spring Cloud需要先学习Spring Boot;
6、SpringCloud官网:Spring | Home
Spring Cloud最早是从2014年推出的,在推出的前期更新迭代速度非常快,频繁发布新版本,目前更趋于稳定,变化稍慢一些;
Spring Cloud的版本并不是传统的使用数字的方式标识,而是使用诸如:Angel、Brixton、Camden......等伦敦的地名来命名版本,版本的先后顺序使用字母表A-Z的先后来标识,,现在已经进入H版本;Hoxton.SR4版本,对应SpringBoot 2.3.0
Spring Cloud与Spring Boot版本匹配关系
Finchley |
兼容Spring Boot 2.0.x, 不兼容Spring Boot 1.5.x |
Edgware |
兼容Spring Boot 1.5.x, 不兼容Spring Boot 2.0.x |
Dalston |
兼容Spring Boot 1.5.x, 不兼容Spring Boot 2.0.x |
Camden |
兼容Spring Boot 1.4.x, 也兼容Spring Boot 1.5.x |
Brixton |
兼容Spring Boot 1.3.x, 也兼容Spring Boot 1.4.x |
Angel |
兼容Spring Boot 1.2.x |
Spring Cloud并不是从0开始开发一整套微服务解决方案,而是集成各个开源软件,构成一整套的微服务解决方案,这其中有非常著名的Netflix公司的开源产品;
Netflix公司成立于1997年,是目前美国最大的版权视频交易网站;
Netflix公司在不断发展的过程中,也成为了一家云计算公司,并积极参与开源项目,Netflix OSS(Open Source)就是由Netflix公司主持开发的一套代码框架和库,github地址:Netflix, Inc. · GitHub;
Spring Cloud 所包含的众多组件中,Spring Cloud Netflix就是其中一组不可忽视的组件,由netflix公司开发后又并入Spring Cloud 大家庭;
目前Netflix公司贡献的活跃项目包括:
spring-cloud-netflix-eureka
spring-cloud-netflix-hystrix
spring-cloud-netflix-stream
spring-cloud-netflix-archaius
spring-cloud-netflix-ribbon
spring-cloud-netflix-zuul
SpringBoot 2.2.x
Spring Cloud Hoxton xxx
Maven 3.5.3
JDK 1.8.152
IntelliJ IDEA
(3)EurekaServer搭建
首先选择文件夹创建一个空项目,在创建一个Module:
编写配置文件application.yml:
#注册中心的端口
server:
port: 6001
eureka:
client:
service-url:
# 注册中心的地址
defaultZone: http://localhost:6001/eureka
# 注册中心无需拉取服务地址列表 默认值true
fetch-registry: false
#注册中心无需注册自己到节点中 默认值true
register-with-eureka: false
修改启动类的名字:加上Eurake注解@EnableEurekaServer
EurekaServer6001Application:
package com.bjpowernode.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer //开启注册中心的服务器端
@SpringBootApplication
public class EurekaServer6001Application {
public static void main(String[] args) {
SpringApplication.run(EurekaServer6001Application.class, args);
}
}
点击启动:
在浏览器输入地址:这就是服务界面