基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)

课程目录

第1章 课程简介


第2章 广告系统概览与准备工作

本章会介绍广告系统的思想、广告系统的技术实现架构、学习本课程之前的准备工作和广告系统的代码目录结构。

 2-1 广告系统概览
 2-2 广告系统架构
 2-3 准备工作与系统目录结构
 2-4 关于广告系统与准备工作的介绍及作业


第3章 广告系统骨架开发

广告系统使用SpringCloud微服务框架开发,并使用Maven做多模块管理。这一章完成项目骨架的开发,包括搭建注册中心和服务网关,同时也会对Maven的重要特性做介绍。

 3-1 Maven 基础知识
 3-2 Maven 相关特性
 3-3 广告系统主工程
 3-4 单节点 Eureka Server 的开发
 3-5 Eureka Server 的部署
 3-6 微服务架构及网关组件介绍
 3-7 网关启动程序的开发
 3-8 自定义网关过滤器的开发试看
 3-9 关于 ad-eureka 的介绍及作业
 3-10 关于 ad-gateway 的介绍及作业


第4章 微服务通用模块开发

本章实现广告系统微服务通用的功能,例如:统一响应格式、全局异常处理、通用代码定义、通用配置定义等。

 4-1 关于通用模块功能的介绍
 4-2 统一响应处理的开发
 4-3 统一异常处理的开发
 4-4 统一配置的开发
 4-5 关于通用模块的说明及作业


第5章 广告投放系统的开发

本章的核心目标是实现投放系统,投放系统即实现对广告数据的存储。课程中会对表结构设计进行介绍,使用 JPA 实现对各个数据表的增删改查。同时,由于会涉及Spring相关的知识点(Spring IOC、Spring MVC、SpringBoot),也会对这些做基础介绍。...

 5-1 Spring IOC和MVC基础知识
 5-2 SpringBoot 常用功能特性介绍
 5-3 广告投放系统数据表设计
 5-4 创建广告投放系统子模块
 5-5 数据表实体类定义(1、2、3、4)
 5-9 数据表Dao接口的定义(1、2)
 5-11 用户账户服务功能实现
 5-12 推广计划服务功能实现(1、2)
 5-14 推广单元服务功能实现
 5-15 推广单元限制服务功能实现(1、2)
 5-17 创意服务功能实现
 5-18 创意与推广单元关联服务功能实现
 5-19 服务Controller的编写(1、2)
 5-21 投放系统在网关中的配置
 5-22 数据库与数据表的创建
 5-23 关于广告投放系统的介绍及作业
 5-24 关于 MySQL 慢查询的介绍及作业
 5-25 关于 MySQL 索引的介绍及作业
 5-26 关于 MySQL 事务隔离级别的介绍及作业


第6章 广告检索系统 - 微服务调用

本章会介绍使用 Ribbon 与 Feign 组件实现微服务之间的调用。

 6-1 创建广告检索系统子模块
 6-2 基于 Ribbon 实现微服务调用
 6-3 基于 Feign 实现微服务调用
 6-4 关于微服务调用的介绍及作业


第7章 广告检索系统 - 广告数据索引的设计与实现

广告检索系统的核心是实现广告检索服务,为加快广告检索的速度,良好的索引设计是不可缺少的。本章首先对索引的设计与维护进行介绍,之后,实现广告数据的索引服务。

 7-1 广告数据索引设计介绍
 7-2 广告数据索引维护介绍
 7-3 推广计划索引对象定义与服务实现
 7-4 推广单元索引对象定义与服务实现
 7-5 关键词索引对象定义与服务实现
 7-6 兴趣索引对象定义与服务实现
 7-7 地域索引对象定义与服务实现
 7-8 创意索引对象定义与服务实现
 7-9 创意与推广单元关联索引对象定义与服务实现
 7-10 索引服务类缓存的实现
 7-11 关于广告数据索引的设计与实现的介绍及作业


第8章 广告检索系统 - 加载全量索引

本章介绍广告数据导出的实现,之后介绍各层级索引操作的实现,最后完成全量索引的加载操作。

 8-1 导出表数据字段定义(1、2)
 8-3 表数据导出到文件功能实现(1、2、3)
 8-6 索引操作Handler的定义与说明
 8-7 第二层级索引操作的实现
 8-8 第三层级索引操作的实现
 8-9 第四层级索引操作的实现
 8-10 全量索引加载的实现(1、2)
 8-12 关于加载全量索引的介绍与说明


第9章 广告检索系统-监听Binlog构造增量数据

本章首先会介绍什么是MySQL Binlog,它有哪些作用和特性;再去介绍怎样实现监听Binlog构造增量数据。

 9-1 MySQL Binlog 的介绍
 9-2 使用开源工具监听 Binlog 的演示
 9-3 构造解析 Binlog 使用到的模板文件
 9-4 实现对模板对象的解析
 9-5 载入模板文件并实现列索引到列名的映射
 9-6 关于 Binlog 监听与解析的说明
 9-7 Binlog 监听与解析的实现(1、2)
 9-9 根据 Binlog 对象构造增量数据的准备工作
 9-10 根据 Binlog 对象构造增量数据的实现
 9-11 启动对 Binlog 的监听
 9-12 关于 MySQL Binlog 的介绍
 9-13 关于开源工具mysql-binlog-connector-java的介绍及作业
 9-14 关于监听 Binlog 构造增量数据的介绍及作业


第10章 广告检索系统 - Binlog增量数据的投递

Binlog 增量数据可以有多种用途,也就对应着多种数据投递方案。本章会实现增量数据投递构建增量索引,以及投递到 Kafka 用于扩展工作。

 10-1 增量数据投递前的准备工作
 10-2 第二层级增量数据的投递
 10-3 第三层级增量数据的投递
 10-4 第四层级增量数据的投递
 10-5 将增量数据投递到Kafka
 10-6 关于 Binlog 增量数据投递的介绍及作业


第11章 广告检索系统-广告检索服务

广告系统最重要的功能当然是实现广告的检索,本章首先定义媒体方请求数据的格式和检索服务返回广告数据的格式,再去根据多种筛选策略实现对索引数据的筛选,最终完成广告检索服务。

 11-1 广告检索服务功能的介绍
 11-2 媒体方请求对象的定义
 11-3 检索服务响应对象的定义
 11-4 根据流量类型实现对推广单元的预筛选
 11-5 根据匹配信息实现对推广单元的再筛选
 11-6 通过推广单元获取关联的创意实现
 11-7 填充检索服务响应对象
 11-8 完善广告检索服务
 11-9 关于广告检索服务的介绍及作业


第12章 Kafka的安装与使用

Kafka作为消息队列可以实现消息的传递,目前已经被各大互联网公司应用到实际的企业级开发。这一章将会介绍怎样安装Kafka、简单的使用Kafka。同时,为了更好的理解它的工作过程,会以编码实践的方式展示其原生API的使用方法。...

 12-1 Kafka 基础知识的介绍
 12-2 Kafka 的安装与使用
 12-3 使用原生API发送消息(1、2)
 12-5 自定义分区分配器
 12-6 消费者与消费者组的概念
 12-7 使用原生API消费消息(1、2、3)
 12-10 关于 Kafka 的介绍及作业


第13章 熔断监控Hystrix Dashboard

微服务之间可以通过Feign实现调用,但是可能由于存在微服务不稳定的情况,导致调用失败。可以定义Hystrix实现断路器功能,并利用Hystrix Dashboard监控熔断情况。

 13-1 Hystrix Dashboard 的介绍
 13-2 Dashboard 模块的实现
 13-3 关于 Hystrix Dashboard 的介绍及作业


第14章 广告系统的可用性测试

通过测试用例和PostMan检验投放系统与检索系统的可用性。

 14-1 广告系统测试前的准备工作
 14-2 编写广告投放系统的测试用例
 14-3 编写广告检索系统的测试用例(上、下)
 14-5 投放系统的 HTTP 接口测试
 14-6 mock 数据的内容
 14-7 关于广告系统可用性测试的介绍及说明
 14-8 关于广告系统可用性测试的介绍及说明 - HTTP 接口测试


第15章 课程总结

对课程所介绍的内容做总结,列出所涉及到的知识点,回顾广告系统,并提出问题以及扩展方案。

 15-1 课程总结

 

一、什么是广告系统

  • 图示
    基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第1张图片
  • 包括以下模块
    基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第2张图片
  • 用到的知识点
    基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第3张图片

二、广告系统实现了什么功能

基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第4张图片

  • 包含的子系统
    基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第5张图片
  • 广告投放系统 -> 广告数据是由广告主或代理商投放
    广告检索系统 -> 媒体方对广告系统发起请求,广告系统能够检索符合要求的广告数据,这就是广告检索系统的核心功能
    曝光监测系统 -> 监测广告数据的曝光记录
    报表系统 -> 构建广告数据报表,比如广告 A 在地域 B 中一共曝光了多少次,主要是 OLAP 的过程
    扣费系统 -> 广告的每一次曝光都是需要扣费的,CPM按次数收费,CPC按点击量收费,CPT按时间收费

三、广告系统架构

基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第6张图片
目录结果

  • 广告数据索引由两部分组成:全量索引、增量索引。基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第7张图片

开发所用的技术

1.项目构建和项目管理工具:Maven
maven 3.4+,spring boot 2.0.2+,spring cloud Finchley.RELEASE+,

 

 

四、广告系统骨架开发和通用模块开发

4.1 Eureka服务注册与服务发现 - 构建 ad-eureka

4.2 Zuul网关 - 构建ad-gateway

4.3 Common通用配置模块 - ad-common

https://blog.csdn.net/weixin_38004638/article/details/90719726

 

五、springboot分析

基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第8张图片

基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第9张图片

基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第10张图片

 

 

六、广告投放系统设计实现

6.1概念

6.2配置文件

6.3 数据库设计

6.4 Dao层

6.5 Service层

https://blog.csdn.net/weixin_38004638/article/details/90719774

 

七、广告检索系统 - 微服务调用

在Eureka学习中,学习了服务的注册,现在使用Ribbon实现服务的远程调用

基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第11张图片

//广告检索系统启动类
//引入 Feign, 可以以声明的方式调用微服务
@EnableFeignClients
@EnableEurekaClient
//引入断路器
@EnableHystrix
@EnableCircuitBreaker
//微服务发现
@EnableDiscoveryClient
//Hystrix监控
@EnableHystrixDashboard
@SpringBootApplication
public class SearchApplication {
    //启动类
    public static void main(String[] args) {    SpringApplication.run(SearchApplication.class, args);    }
    //通过Ribbon调用广告投放系统,需要定义一个rest客户端
    @Bean
    @LoadBalanced//负载均衡实现轮询
    RestTemplate restTemplate() {   return new RestTemplate();    }
}

创建一个client,作为客户端远程调用其他微服务,实现微服务之间的调用

基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第12张图片

实 现 服 务 之 间 的 调 用有两种方法
Ribbon 方式调用
Rib b o n 是 一 个 客 户 端 负 载 均 衡 器 , 可 以 很 好 的 控 制 H T T P 和 T C P 客 户 端 的行 为
SearchController.java 中通过 RestTemplate 调用服务接口,与常见的RestTemplate 不同的是,调用使用的不再是 ip+ port,而是服务名。这是通过注册中心(EurekaServer)实现的。

Feign 方式调用
F eig n 可 以 实 现 声 明 式 的 W e b 服 务 客 户 端
通过 @FeignClient 指定调用的服务名称
在接口上声明 @RequestMapping 指明调用服务的地址与请求类型
通过在 @FeignClient 中配置 fallback 指定熔断
实现接口:SponsorClient.java,熔断:SponsorClientHystrix.java

/**
 * 调用检索系统的时候,通过调用投放系统访问广告计划
 */
@Slf4j
@RestController
public class SearchController {
    private final RestTemplate restTemplate;
    private final SponsorClient sponsorClient;
    @Autowired
    public SearchController(RestTemplate restTemplate,SponsorClient sponsorClient){
        this.restTemplate = restTemplate;  this.sponsorClient = sponsorClient;
    }
    /**
     * 使用Feign调用微服务获取AdPlan
     */
    @IgnoreResponseAdvice//不使用统一响应的返回结果
    @PostMapping("/getAdPlans")
    public CommonResponse> getAdPlans(@RequestBody AdPlanGetRequest request){
        log.info("ad-search: getAdPlansByFeign -> {}", JSON.toJSONString(request));
        return sponsorClient.getAdPlans(request);
    }
    /**
     * 使用Ribbon调用微服务获取AdPlan
     */
    @SuppressWarnings("all")//忽略警告
    @IgnoreResponseAdvice//不使用统一响应的返回结果
    @PostMapping("/getAdPlansByRibbon")
    public CommonResponse> getAdPlansByRibbon(@RequestBody AdPlanGetRequest request){
        log.info("ad-search: getAdPlansByRibbon -> {}", JSON.toJSONString(request));
        return restTemplate.postForEntity(
                "http://eureka-client-ad-sponsor/ad-sponsor/get/adPlan",request,CommonResponse.class
        ).getBody();
    }
}
/**
 * 使用Feign, 以声明的方式调用微服务,一旦发生错误,服务降级fallback返回SponsorClientHystrix
 */
@FeignClient(value = "eureka-client-ad-sponsor", fallback = SponsorClientHystrix.class)
public interface SponsorClient {
    @RequestMapping(value = "/ad-sponsor/get/adPlan", method = RequestMethod.POST)
    CommonResponse> getAdPlans(@RequestBody AdPlanGetRequest request);
}
/**
 * 断路器Hystrix,防止因为要调用的服务下线,重复调用报错,而导致雪崩
 */
@Component
public class SponsorClientHystrix implements SponsorClient {
    public CommonResponse> getAdPlans(AdPlanGetRequest request) {
        //返回空的CommonResponse,以及错误消息
        return new CommonResponse<>(-1, "eureka-client-ad-sponsor error");
    }
}

 

 

 

八、广告检索系统的设计与实现

8.1 广告数据索引设计与维护

8.2  加载全量索引

https://blog.csdn.net/weixin_38004638/article/details/90719812

 

8.3 监听Binlog构造增量数据

8.3.1 Mysql-Binlog

8.3.2 加载模板文件并进行解析

8.3.3 Binlog监听与解析

8.3.4 Binlog增量数据的投递

https://blog.csdn.net/weixin_38004638/article/details/90719859

 

8.4 广告检索服务

8.4.1 媒体方请求对象的定义

8.4.2 检索服务响应对象的定义

8.4.3 构造检索服务的响应对象

8.4.5 完善广告检索服务入口

https://blog.csdn.net/weixin_38004638/article/details/91974842

 

九、Kafka的安装与使用

9.1 Kafka 基础知识

9.1.1 消息系统

9.1.2 kafka术语

9.1.3 kafka安装和使用

9.1.4 kafka运行

https://blog.csdn.net/weixin_38004638/article/details/91975123

 

十、熔断监控Hystrix Dashboard

新建ad-dashboard服务,配置ad-dashboard.pom

<dependencies>
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-hystrixartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-hystrix-dashboardartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-actuatorartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
dependencies>

配置application.yml

#服务端口号
server:
  port: 7002
#服务名称
spring:
  application:
    name: ad-dashboard
#注册服务地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka/
#配置监控信息
management:
  endpoints:
    web:
      exposure:
        include: "*"

HystrixDashboard应用程序

@EnableEurekaClient
@SpringBootApplication
@EnableHystrixDashboard
public class DashboardApplication {
    public static void main(String[] args) {
        SpringApplication.run(DashboardApplication.class, args);
    }
}

 

 

十一、测试

在imooc-spring-cloud的README.md文件里:
基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第13张图片
开始它的测试用例:
基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第14张图片
使用postman来测试HTTP请求:
未通过网关:
基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第15张图片

通过网关:
基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第16张图片
基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第17张图片

 

十二、广告系统总结

基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第18张图片基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版)_第19张图片

 

十三、项目总结

  • spring boot
  • spring cloud zuul 网关配置,feign,ribbon 软负载均衡,hystrix-dashboard 监控,
  • kafka 简单日子处理
  • spring data jpa 实现增删改查
  • postman 实现HTTP请求测试

 

来源:https://blog.csdn.net/m0_37941483/article/details/89420433;https://coding.imooc.com/class/310.html
链接:https://pan.baidu.com/s/1NJDO55sENHqvKJm_dozgIQ
提取码:ntvo 

转载于:https://my.oschina.net/u/3635618/blog/3082254

你可能感兴趣的:(基于 Spring Cloud 微服务架构下 广告系统设计与实现(分节版))