Spring Cloud的一整套云原生
业务server
就是用Spring Boot搭建的一个个实际业务的Server。本文假设一个简单的业务场景:总计有2个服务:
- 用户服务(后文简称A): 连接数据库,存储用户信息。
- BFF服务(后文简称B): 访问用户服务,创建和查询用户报务。
Eureka -> 服务发现
在微服务系统里,各服务互相调用,如何让各个服务能找到其它服务?不能用ip地址hardcode, 需要一个注册中心,所有的服务都注册在那里,其它服务就可以通过服务名去互相调用。这样问题就简化成各个服务和服务中心沟通的问题了。
创建一个新服务:Eureka, 添加spring-cloud-starter-eureka-server依赖, 并@EnableEurekaServer. 然后给A和B分别添加@EnableDiscoveryClient.
Ribbon -> 负载均衡
A可能有多个实例,B在调用A时,就可以根据A的实例负载情况动态调整。
Code
Hystrix -> 断路器
当Api不可用时,会用fallback function做返回值,如果失败的Api Call非常多,会打开Circuit。
Code
Feign -> 服务间调用(替换RestTemplate)
Feign可以拦截所有服务间调用,理论上也可以做断路器和负载均衡。
Code
Zuul -> api网关
Api网关可以统一整个微服务系统的入口,外部如手机客户端只需访问网关,由网关整合和调用所有的请求。同时网关可以做统一认证,动态路由和负载均衡。
Code
Config-server -> 统一配置各服务
每个服务都有不同环境的配置,如Dev环境的配置和Prod环境的配置,为了让配置更加灵活,我们可以把这些配置放到一个Repo中,然后通过Config-Server去获取这些配置。这样便可以实现更改配置而不需要重启服务。
Code
Sidecar -> 接入非JVM服务
不是所有的服务都是Java服务,那如何让非Java服务接入Spring Cloud的微服务系统中?
我们添加一个Nodejs 服务。创建一个Sidecar的Spring项目, @EnableSidecar,并配置Sidecar的port到Nodejs的 server即可。
Code
Sleuth/Zipkin -> 追踪
Zipkin可以追踪各个Server的调用情况。
[图片上传失败...(image-614738-1578906640802)]
网友评论