Bootstrap

基于SpringCloud的广告系统设计与实现(一)

一、广告系统概论

 

 广告系统中计费方式:CPM 千次广告展现收费/CPT 按时间段/CPC用户点击类广告收费。

 

Mysql:进行广告数据的存储,以及检索系统监听Mysql做增量索引

Kafka:实现各微服务之间的通信

比如地域维度,时间维度

 

 二、微服务架构

 

三、Eureka

1 介绍


核心功能
Service Registry(服务注册)
Service Discovery(服务发现)
基本架构
Eureka 由三个角色组成:
Eureka Server,提供服务注册与发现
Service Provider,服务提供方,将自身服务注册到 Eureka Server上,从而让 Eureka Server 持有服务的元信息,让其他的服务消费方能够找到当前服务Service Consumer,服务消费方,从Eureka Server上获取注册服务列表,从而能够消费服务Service Provider/Consumer 相对于Server,都叫做 Eureka Client

架构图

2  Eureka Server

单机版application.yml:

spring:
  application:
    name: ad-eureka

server:
  port: 8000

eureka:
  instance:
    hostname: localhost
  client:
    # eureka.client.fetch-registry: 表示是否从 Eureka Server 获取注册信息,默认为true。如果这是一个单点的 Eureka Server,不需要同步其他节点的数据,设为false
    fetch-registry: false
    # eureka.client.register-with-eureka: 表示是否将自己注册到 Eureka Server, 默认为true。由于当前应用就是 Eureka Server, 因此设为 false
    register-with-eureka: false
    # 设置 Eureka Server 所在的地址,查询服务和注册服务都需要依赖这个地址
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

多实例本机版application.yml:

配置不同的 Profile, 需要注意, 如果要执行下面的 Profile, 需要将上面的配置注释掉

---
spring:
  application:
    name: ad-eureka
  profiles: server1
server:
  port: 8000
eureka:
  instance:
    #  一、本机服务,使用相同的ip注册会失败,提前在 C:\Windows\System32\drivers\etc\host配置不同的服务指向ip地址 ,参考:https://blog.csdn.net/shenjuntao520/article/details/112602553
    #    127.0.0.1 server1
    #    127.0.0.1 server2
    #    127.0.0.1 server3

    #    下面的配置prefer-ip-address: false
    #    设置好之后,使用 ping 命令测试是否可以 ping 通 (ping server1)。如果不能 ping 通,则没有生效,此时注销重新登录就可以。
    # 二、mvn package打包
    # 三、target中jar分别执行以下启动命令
    #    java -jar ad-eureka-1.0.0-SNAPSHOT.jar --spring.profiles.active=server1
    #    java -jar ad-eureka-1.0.0-SNAPSHOT.jar --spring.profiles.active=server2
    #    java -jar ad-eureka-1.0.0-SNAPSHOT.jar --spring.profiles.active=server3
    hostname: server1
    #    默认false,用于指定是否优先使用 IP 地址而不是主机名。
    #true:优先使用 IP 地址。
    #false:优先使用主机名(默认值)
    prefer-ip-address: false
  client:
    service-url:
      #      配置三个节点,该参数需要指向另外两个节点注册
      defaultZone: http://server2:8001/eureka/,http://server3:8002/eureka/

---
spring:
  application:
    name: ad-eureka
  profiles: server2
server:
  port: 8002
eureka:
  instance:
    hostname: server2
    prefer-ip-address: false
  client:
    service-url:
      defaultZone: http://server1:8000/eureka/,http://server3:8002/eureka/

---
spring:
  application:
    name: ad-eureka
  profiles: server3
server:
  port: 8003
eureka:
  instance:
    hostname: server3
    prefer-ip-address: false
  client:
    service-url:
      defaultZone: http://server1:8000/eureka/,http://server2:8001/eureka/

pom.xml

   <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

主类:



import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 *  Eureka两大核心功能:
 *    Service Registry(服务注册)
 *    Service Discovery(服务发现)
 *    这里是Eureka Server提供服务注册与发现
 *    Eureka还有两个角色Service Provider、Service Consumer
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {

    /**
     * 由于 Eureka Server 已经被 SpringCloud 封装的非常好了,自己需要做的工作很少。
     * 所以,如果单实例启动不了,那么,几乎可以肯定是配置文件的问题。
     * 另外,需要注意,访问 Eureka 的 url 是:http://127.0.0.1:8000/,并没有 eureka 后缀。
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

Eureka Server 维护了系统中服务的元信息,这些元信息包含什么你知道吗 ?元数据如何存储?

四、网关Zuul 

1.Zuul生命周期

通过大量的过滤器实现的

 2.核心过滤器介绍

Pre filters:在请求被路由前调用,实现身份验证,在集群中请求的微服务,调试信息等等

  • 请求验证:验证请求的合法性,如检查认证信息、请求头等。
  • 请求修改:修改请求头或请求参数,添加或删除某些信息。
  • 路由决策:根据请求的某些特征决定是否路由到后端服务。

Routing filters:将请求路由到后端服务

它们主要用于:

  • 请求转发:将请求转发到指定的后端服务。
  • 负载均衡:选择合适的后端服务实例进行请求转发。
  • 请求代理:代理请求到后端服务,并返回响应。

Post filters:在请求被路由并响应后执行。它们主要用于:

  • 响应修改:修改响应头或响应体,添加或删除某些信息。
  • 日志记录:记录请求和响应的相关信息,用于监控和调试。
  • 异常处理:处理在请求处理过程中发生的异常,返回友好的错误信息。

 Custom filters:在 Zuul 网关中,自定义过滤器允许你实现特定的业务逻辑,以满足不同场景下的需求。自定义过滤器可以是 Pre 过滤器、Routing 过滤器或 Post 过滤器。比如自定义静态文件请求不路由至后端服务,直接返回给客户端。

Error filters:在 Zuul 网关中,Error 过滤器用于处理请求处理过程中发生的异常。Error 过滤器在请求的任何阶段(Pre、Routing、Post)发生异常时都会被触发。通过自定义 Error 过滤器,你可以捕获这些异常并返回友好的错误响应,从而提高系统的健壮性和用户体验。

;