当前位置: 首页 > article >正文

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


http://www.kler.cn/a/507039.html

相关文章:

  • 主链和Layer2之间资产转移
  • Multi-Agent如何设计
  • Go语言中http.Transport的Keep-Alive配置与性能优化方法
  • SpringData-Redis缓存之RedisTemplate
  • 【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS
  • 【大数据】机器学习-----线性模型
  • vscode 切换文件时,修改内容时很卡,怎么解决?
  • No.33 笔记 | Docker入门:基础概念与实用指南
  • wordpress的火车头商品发布接口
  • iOS面试模版
  • 赤店商城系统点餐小程序多门店分销APP共享股东h5源码saas账号独立版全插件全开源
  • 学习threejs,使用OrbitControls相机控制器
  • STM32的集成开发环境STM32CubeIDE安装
  • spark,读取和写入同一张表问题
  • 掌握 TypeScript 的 `Omit` 工具类型:灵活操作对象属性的艺术
  • [Qt]常用控件介绍-布局管理器-QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout、QSpace控件
  • AI实验室copilot自动化科研,AMD联手约翰霍普金斯大学:成本节约84%!
  • 【JVM-6】JVM 监控工具 jstat 的使用和具体应用案例
  • 【区间DP】【hard】力扣730. 统计不同回文子序列
  • css3网格布局
  • JavaEE:多线程初阶
  • shell安全类脚本(1.屏蔽每分钟访问过多的IP;2.拒绝ssh暴力破解)
  • MySQL基本知识梳理
  • linux上使用update-alternatives来选择软件版本
  • Jenkins+Docker一键打包部署项目!步骤齐全,少走坑路!
  • Vue3中使用组合式API通过路由传值详解