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

devtools/2025/1/17 23:51:39/

一、广告系统概论

 

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


http://www.ppmy.cn/devtools/151398.html

相关文章

Linux电源管理——Suspend-to-Idle(s2idle) 流程

目录 一、常见的 Suspend 方式 1、Suspend-to-idle 2、Standby 3、Suspend-to-RAM 4、Hibernation 二、代码分析 1、state_store 2、suspend_enter 3、s2idle_loop 4、idle loop 5、psci_enter_idle_state 6、cpu_suspend 7、开始 resume 流程 8、开启 IRQ 中断…

cmake + vscode + mingw 开发环境配置

1.软件准备 准备如下软件&#xff1a; mingw64&#xff08;安装完成之后检测是否有环境变量&#xff0c;如果没有需要配置&#xff09; cmake&#xff08;安装完成之后检测是否有环境变量&#xff0c;如果没有需要配置&#xff09; vscode&#xff08;安装CMake插件&#xff0…

Python时间序列分析:使用TSFresh进行自动化特征提取

**TSFresh&#xff08;基于可扩展假设检验的时间序列特征提取&#xff09;**是一个专门用于时间序列数据特征自动提取的框架。该框架提取的特征可直接应用于分类、回归和异常检测等机器学习任务。TSFresh通过自动化特征工程流程&#xff0c;显著提升了时间序列分析的效率。 自…

每天五分钟深度学习框架pytorch:基于vgg块搭建VGG卷积神经网络

本文重点 前面我们使用pytorch搭建了vgg块,本文我们使用vgg块搭建卷积神经网络VGG16,我们先来看一下vgg16的模型结构是什么样的: 搭建vgg16 import torch from torch import nn def vgg_block(num_convs,in_channels,out_channels): net=[nn.Conv2d(in_channels,out_channe…

iOS开发基础109-网络安全

在iOS开发中&#xff0c;保障应用的网络安全是一个非常重要的环节。以下是一些常见的网络安全措施及对应的示例代码&#xff1a; Swift版 1. 使用HTTPS 确保所有的网络请求使用HTTPS协议&#xff0c;以加密数据传输&#xff0c;防止中间人攻击。 示例代码&#xff1a; 在I…

【MySQL数据库】JDBC总结

目录 前言 一、JDBC概述 二、使用示例 三、核心API 1. 注册驱动 2. Connection 3. Statement 4. PreparedStatement 5. ResultSet 四、JDBC扩展 1. ORM封装 2. 主键回显 3. 批量操作 五、连接池 1. 常见连接池 2. Druid连接池使用 3. HikariCP连接池使用 六…

云产品评测|阿里云服务诊断

文章目录 关于云服务诊断快速使用诊断功能诊断的定义诊断的意义诊断操作 建议与优化 大家好我是令狐&#xff0c;一名软件研发工程师。今天给大家介绍阿里云服务的诊断工具使用与体会&#xff0c;如果你也在使用阿里云服务&#xff0c;这会大大节省你定位问题的效率&#xff0c…

ESP8266 AP模式 网页配网 arduino ide

ESP8266的AP配网,可以自行配置网络,一个简单的demo,文档最后有所有的代码,已经测试通过. 查看SPIFFS文件管理系统中的文件 账号密码是否存在,如不存在进入AP配网,如存在进入wifi连接模式 // 检查Wi-Fi凭据if (isWiFiConfigured()) {Serial.println("找到Wi-Fi凭据&#…