SpringCloud微服务安全(三)网关安全 3-2 常见的微服务安全整体架构

1. 整体架构

SpringCloud微服务安全(三)网关安全 3-2 常见的微服务安全整体架构_第1张图片

这个图适用于中小公司的微服务架构

微服务:SpringBoot 写的Rest服务

服务注册与发现:微服务所必备的。每个微服务都会到上边去注册。不管是微服务之间的调用,还是服务网关到微服务的转发,都是通过服务注册和发现拿到服务的信息,来进行服务的调用或转发。

配置中心:统一管理配置的地方。

服务网关:所有外部请求的入口。微服务不会直接向外暴露,都是通过服务网关来进行转发。

安全中心:整个微服务的认证授权。

熔断限流:统一的管理微服务的限流、熔断、降级等。。

数据总线:左边大块里发生的所有事情,都会通过数据总线(消息队列,根据业务场景,可能是多种)

调用链监控 Tracing:一个请求进来经过了哪些微服务,每个微服务上耗了多长时间,服务的性能瓶颈在哪里。

指标监控 metrics:流量、业务指标

日志监控 log:把所有微服务的日志统一采集起来

健康检查和报警:比如某一个服务的响应时间大于多少就报警 ,某一天的流水有异常了就报警,日志出现某些元素就报警。等等

2. 案例演示 -- 订单微服务&价格微服务

SpringCloud微服务安全(三)网关安全 3-2 常见的微服务安全整体架构_第2张图片

微服务之间使用 RestTemplate 进行远程调用。

2.1 订单微服务

(1)pom.xml



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.3.4.RELEASE
		 
	
	com.imooc.security
	this-order-api
	0.0.1-SNAPSHOT
	this-order-api
	Demo project for Spring Boot

	
		11
	

	
		
			org.springframework.boot
			spring-boot-starter-jdbc
		

		
			mysql
			mysql-connector-java
			runtime
		
		
			org.projectlombok
			lombok
			true
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
			
				
					org.junit.vintage
					junit-vintage-engine
				
			
		
                
                    org.springframework.boot
                    spring-boot-starter-web
                
		
			org.junit.platform
			junit-platform-commons
			RELEASE
		

		
			org.apache.commons
			commons-lang3
			3.10
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	


(2)指定端口为: 9090

spring:
  application:
    name: order-api
server:
  port: 9090

(3)订单实体

@Data
public class OrderInfo {
    private Long productId;
}

(4)订单接口

@RestController
@RequestMapping("/orders")
@Slf4j
public class OrderController {

    private RestTemplate restTemplate = new RestTemplate();

    @PostMapping
    public PriceInfo create(@RequestBody OrderInfo info){
        PriceInfo priceInfo = restTemplate.getForObject("http://localhost:9080/prices/" + info.getProductId(),PriceInfo.class);
        log.info("price is:{}",priceInfo.getPrice());
        return priceInfo;
    }
}

2.2 价格微服务

(1)pom.xml

参考订单微服务的 pom.xml

(2)指定端口为 9080

(3)价格实体

@Data
public class PriceInfo {

    private Long id;

    private BigDecimal price;

}

(4)价格微服务接口

@RestController
@RequestMapping("/prices")
@Slf4j
public class PriceController {

    @GetMapping("/{id}")
    public PriceInfo create(@PathVariable Long id){
        log.info("productId is {}" ,id);
        PriceInfo info = new PriceInfo();
        info.setId(id);
        info.setPrice(new BigDecimal(100));
        return info;
    }
}

2.3 启动两个服务,并用 API Tester 请求订单服务间接请求价格微服务获取价格信息

SpringCloud微服务安全(三)网关安全 3-2 常见的微服务安全整体架构_第3张图片

你可能感兴趣的:(#,SpringCloud,Finchley微服务实战,restful,spring,boot,java,网关)