微服务架构起源于Martin Fowler 由马丁·福勒(Martin Fowler) 与 詹姆斯·刘易斯(James Lewis)在2014年提出的一种思想。 https://martinfowler.com/microservices/
这种架构风格将大型应用程序拆分为一系列小型服务,每个服务都在自己的进程中运行,并通过轻量级通信机制(如基于HTTP协议的RESTful API)进行交互。这些服务围绕特定的业务能力构建,具有独立的部署和扩展能力,并且可以通过自动化部署机制进行快速迭代和更新。这些服务使用集中式的最小化管理,同时允许使用不同的开发语言、数据存储技术和基础设施。微服务架构旨在提高系统的可扩展性、灵活性和可靠性。通过将其拆分为多个小型服务,每个服务都可以独立地开发和部署,从而提高了系统的整体可维护性和开发效率。
⬆️左单体式架构 右微服架构
提供者(Provider)
:负责提供一套接口或功能,以供其他项目使用或集成。它是服务或资源的提供者,确保其他项目可以通过特定的方式访问和使用这些服务或资源。
消费者(Consumer)
:是调用提供者所提供的接口或服务的项目。它通过调用这些接口来获取所需的数据或服务,从而实现自身的功能或业务逻辑。
RPC(Remote Procedure Call)
是远程过程调用的缩写形式,主要基于TCP/IP协议进行通信。它允许一台计算机(客户端)通过网络调用另一台计算机(服务器)上的程序或函数,就像调用本地程序一样。
Restful
则是一种网络应用程序的设计风格和开发方式。它基于HTTP协议
,并使用标准的客户端-服务器模型。Restful API可以使用XML
或JSON
等格式定义数据,通过不同的HTTP方法(如GET、POST、PUT
等)来实现对资源的操作。
集群是指在一组服务器上部署多个服务实例
,每个服务实例可以看作是一个节点。通过部署N个节点,处理业务的能力可以大致提升N倍。这些相互协作的节点的集合就构成了集群。
分布式结构是将一个完整的系统按照业务功能拆分成多个独立的子系统或服务
。在分布式系统中,每个子系统或服务都可以独立运行在各自的Web容器中,并通过RPC
或Restful
等通信方式相互协作。这种拆分有助于实现系统的可扩展性、可靠性和性能优化。
http://dubbo.io/Dubbo是一个高性能、轻量级的开源Java RPC框架,用于构建高性能、透明化的远程服务调用和服务治理的解决方案。
http://projects.spring.io/spring-cloud/Spring Cloud是基于Spring Boot构建的微服务框架,它提供了一系列组件,涵盖了微服务开发的各个方面,包括配置管理、服务注册与发现、断路器、智能路由、微代理、控制总线等。此外,Spring Cloud还提供了全局锁、决策竞选、分布式会话和集群状态管理等高级功能。与Spring Boot框架结合使用,可以极大地简化微服务架构的开发过程。
体系组件名称 | 作用定位 |
---|---|
Eureka | 作为服务注册与发现中心,提供高效的服务注册与发现功能。 |
Open Feign | 请求客户端,简化微服务之间请求调用 |
Hystrix | 容错处理 |
Ribbon | 为微服务提供负载均衡 |
Gateway(Zuul) | 网关,提供服务转发与校验服务 |
Config | 分布式配置,提供统一配置服务 |
Sleuth | 服务追踪,提供微服链路追踪服务 |
Spring Cloud早期的版本以伦敦地铁站命名,如Angel(安吉尔)、Brixton(布里克斯顿)等,富有浓厚的英伦气息。而现在的新版本则采用开发日期作为版本号,如2020.0.x,更加直观且易于理解。从Angel到如今的2020.0.x,Spring Cloud在不断成长与进化,见证了云计算领域的飞速发展。
Eureka是Spring Cloud框架中一个重要的组件,主要负责服务注册与发现功能。它遵循CAP理论中的A(可用性)和P(分区容错性)。同时,Eureka也是Netflix公司开源的一个服务注册管理框架。与Zookeeper和Consul类似,Eureka用于管理服务的注册与发现,Spring Cloud也集成了Zookeeper和Consul。
在Eureka系统中,主要分为Eureka Server和Eureka Client两个部分。
Service Provider
),它负责将自身服务注册到Eureka Server,以便服务消费方能够发现并调用这些服务。Service Consumer
),它可以从Eureka Server获取已注册的服务列表,从而能够消费这些服务。Netflix简介及其与Spring Cloud的紧密合作
Netflix
是全球知名的在线视频流媒体服务平台,以其丰富多样的剧集、电影及原创内容吸引了全球观众的目光,特别是在美剧领域备受瞩目。随着业务的迅速扩展和用户访问量的不断增长,Netflix的技术架构也在持续演进。为了应对大规模的用户访问和数据处理需求,Netflix引领了微服务架构的浪潮。微服务架构使得Netflix能够更灵活地扩展、更新和运维服务,从而提高系统的稳定性和响应速度。虽然Netflix并不是最早尝试微服务架构的公司,但其在生产级别的实践却是大规模且具有深远影响的。
为了支撑这种大规模的业务运行,Netflix充分利用AWS云进行服务器运维。AWS云的弹性扩展、高可用性等特点为Netflix的业务提供了强大的支持,而Netflix的业务规模也促进了AWS云的持续发展和壮大。
在开源方面,Netflix将其微服务架构的核心技术栈开源,形成了Netflix OSS,为整个开源社区提供了宝贵的经验和资源。
Spring Cloud
是构建微服务的重要框架之一,它提供了微服务架构的一站式解决方案。基于Spring Boot开发,Spring Cloud简化了微服务的开发、部署和运维。Pivotal公司在吸收和融合Netflix开源核心技术的基础上,进一步封装和整合,形成了Spring Cloud。Spring Cloud不仅集成了Netflix的许多成熟方案,还支持其他多种服务发现和配置管理方案,从而进一步推动了微服务架构的普及和发展。
可以说,Netflix与Spring Cloud在微服务领域有着紧密的合作关系。Netflix的实践为整个行业提供了宝贵的经验和启示,而Spring Cloud则为开发者提供了强大的支持和方便的工具,两者共同推动了微服务架构的繁荣和发展。
创建一个名称为demo-eureka-server的Spring Boot项目 推荐使用阿里云镜像 https://start.aliyun.com
添加项目依赖
在启动类添加启动注解
@EnableEurekaServer
添加配置信息
eureka :
instance:
prefer-ip-address:false
instance-id: S{spring.cloud.client.ip-address}:S{server.port}
Lease-expiration-duration-in-seconds:30
Lease-renewal-interval-in-seconds:5
hostname:eureka1
client:
register-with-eureka:false
#表示此实例是否注册到 Eureka Server 以供其他艾网发现
fetch-registry:false
#表不客户端是含从 Eureka server 获取实例让册信息
service-url:
defaultZone: http://eureka1:7776/eureka/
server:
enable-self-preservation:true
#启用自我你扩
eviction-interval-timer-in-ms:5000
spring:
application:
name:register-center
server:
port:7776
us-east-1c
区域,Application Service
扮演着微服务的提供方角色,而Application Client
则是服务的调用方。他们通过MakeRemoteCall进行通讯,这种行为可以理解为RESTful API的交互。Eureka Server
保持紧密联系。Eureka Client
通过向Eureka Server
发送心跳信号来续约自己在服务注册表中的位置。复制单机版的项目为cluster-eureka-server的Spring Boot项目
添加配置信息
eureka:
instance:
prefer-ip-address:false
instance-id:S{spring.cloud.client.ip-address}:S{server.port
Lease-expiration-duration-in-seconds:30
lease-renewal-interval-in-seconds:
server :
enable-self-preservation:true #启用自我保护
eviction-interval-timer-in-ms:5000
spring:
application:
name:register-center
server
port:7776
eureka:
client:
register-with-eureka:true
fetch-registry: true
service-url:
defaultZone: http://eureka1:7776/eureka,http://eureka2:7777/eureka
instance:
hostname: eureka1
server
port:7777
eureka:
client:
register-with-eureka:true
fetch-registry: true
service-url:
defaultZone: http://eureka1:7776/eureka,http://eureka2:7777/eureka
instance:
hostname: eureka2
1.在POM文件中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.在application中增加pwd和name
s
3.添加放行代码
public class DemoEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(DemoEurekaServerApplication.class, args);
}
@EnableWebSecurity
static class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}
}
4.启动服务,出现登录页面
前言
关于Feign的介绍:
希望以上内容能够满足您的要求。
Spring Cloud Feign
Spring Cloud OpenFeign
4.创建接口
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@FeignClient被调用服务在Eureka Server的名称
5.添加注解
在demo-user-consumer
的启动类添加注解@EnableFeignClients
6.接口调用
demo-user-provider的checkUser()方法,添加参数
demo-user-consumer的UserFeignClient 接口,和提供服务方法保持一致
demo-user-consumer的login()方法,调用服务时传入参数