一、广告系统概论
广告系统中计费方式: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:
javascript">spring:application:name: ad-eurekaserver:port: 8000eureka:instance:hostname: localhostclient:# eureka.client.fetch-registry: 表示是否从 Eureka Server 获取注册信息,默认为true。如果这是一个单点的 Eureka Server,不需要同步其他节点的数据,设为falsefetch-registry: false# eureka.client.register-with-eureka: 表示是否将自己注册到 Eureka Server, 默认为true。由于当前应用就是 Eureka Server, 因此设为 falseregister-with-eureka: false# 设置 Eureka Server 所在的地址,查询服务和注册服务都需要依赖这个地址service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
多实例本机版application.yml:
javascript">配置不同的 Profile, 需要注意, 如果要执行下面的 Profile, 需要将上面的配置注释掉---
spring:application:name: ad-eurekaprofiles: 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=server3hostname: server1# 默认false,用于指定是否优先使用 IP 地址而不是主机名。#true:优先使用 IP 地址。#false:优先使用主机名(默认值)prefer-ip-address: falseclient:service-url:# 配置三个节点,该参数需要指向另外两个节点注册defaultZone: http://server2:8001/eureka/,http://server3:8002/eureka/---
spring:application:name: ad-eurekaprofiles: server2
server:port: 8002
eureka:instance:hostname: server2prefer-ip-address: falseclient:service-url:defaultZone: http://server1:8000/eureka/,http://server3:8002/eureka/---
spring:application:name: ad-eurekaprofiles: server3
server:port: 8003
eureka:instance:hostname: server3prefer-ip-address: falseclient:service-url:defaultZone: http://server1:8000/eureka/,http://server2:8001/eureka/
pom.xml
javascript"> <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>
主类:
java">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 过滤器,你可以捕获这些异常并返回友好的错误响应,从而提高系统的健壮性和用户体验。