一、广告系统概论
广告系统中计费方式: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 过滤器,你可以捕获这些异常并返回友好的错误响应,从而提高系统的健壮性和用户体验。