实时数仓项目-实时数据采集

article/2025/8/21 21:27:02

文章目录

  • 第1章 实时需求概览
    • 1.1 实时需求与离线需求的比较
    • 1.2 数仓架构设计
      • 1.2.1 离线
      • image-20210120115453007
      • 1.2.2 实时
    • 1.3 本项目主要需求
      • 1.3.1 当日用户首次登录(日活)分时趋势图,昨日对比
      • 1.3.2 当日新增付费用户(首单)分析(ods+dwd)
      • 1.3.3 订单明细实付金额分摊以及交易额统计(dws)
      • 1.3.4 ADS聚合及可视化(ads)
  • 第2章 项目数据准备
    • 2.1 模拟日志生成器的使用
    • 2.2 开发SpringBoot程序gmall0421-logger,采集模拟生成的日志数据
      • 2.2.1 创建空的父工程gmall0421-parent,用于管理后续所有的模块module
      • 2.2.2 搭建一个SprintBoot项目,作为采集日志服务器
      • 2.2.3 在Spring程序中,借助Logbak将采集的日志落盘
      • 2.2.4 在Spring程序中,将采集到的日志数据发送到kafka
    • 将gmall0421-logger打包到单台Linux上运行
    • 2.3 搭建日志采集集群,并通过Nginx进行反向代理
  • 第3章 附录1:SpringBoot知识点
    • 3.1 Springboot简介
    • 3.2 有了springboot 我们就可以…
    • 3.3 springboot和ssm的关系
    • 3.4 没有xml,我们要去哪配置
  • 第4章 附录2:Nginx
    • 4.1 Nginx简介
    • 4.2 正向代理和反向代理概念
    • 4.3 Nginx安装以及相关命令
    • 4.4 Nginx核心配置文件说明
      • 4.4.1 基本配置
      • 4.4.2 events配置
      • 4.4.3 http配置
    • 4.5 Nginx主要应用
      • 4.5.1 静态网站部署
      • 4.5.2 负载均衡
      • 4.5.3 静态代理
      • 4.5.4 动静分离
      • 4.5.5 虚拟主机

第1章 实时需求概览

1.1 实时需求与离线需求的比较

  • 离线需求

就是在计算开始前已知所有输入数据,输入数据不会产生变化,一般计算量级较大,计算时间也较长。例如今天早上一点,把昨天累积的日志,计算出所需结果。最经典的就是Hadoop的MapReduce方式;

一般是根据前一日的数据生成报表,虽然统计指标、报表繁多,但是对时效性不敏感。

  • 实时需求

输入数据是可以以序列化的方式一个个输入并进行处理的,也就是说在开始的时候并不需要知道所有的输入数据。与离线计算相比,运行时间短,计算量级相对较小。强调计算过程的时间要短,即所查当下给出结果。

主要侧重于对当日数据的实时监控,通常业务逻辑相对离线需求简单一下,统计指标也少一些,但是更注重数据的时效性,以及用户的交互性。

1.2 数仓架构设计

1.2.1 离线

image-20210120115453007

1.2.2 实时

image-20210120115757509

1.3 本项目主要需求

1.3.1 当日用户首次登录(日活)分时趋势图,昨日对比

从项目的日志中获取用户的启动日志,如果是当日第一次启动,纳入统计。将统计结果保存到ES中,利用Kibana进行分析展示

image-20210120115523746

1.3.2 当日新增付费用户(首单)分析(ods+dwd)

按省份|用户性别|用户年龄段,统计当日新增付费用户首单平均消费及人数占比;无论是省份名称、用户性别、用户年龄,订单表中都没有这些字段,需要订单(事实表)和维度表(省份、用户)进行关联,形成宽表后将数据写入到ES,通过Kibana进行分析以及图形展示。

image-20210205151327339

1.3.3 订单明细实付金额分摊以及交易额统计(dws)

image-20210120121904531

1.3.4 ADS聚合及可视化(ads)

我们以热门品牌统计为案例

image-20210120121912131

第2章 项目数据准备

2.1 模拟日志生成器的使用

这里模拟日志的思路和采集一样,但是并没有直接将日志生成到文件,而是将日志发送给某一个指定的端口,需要大数据程序员了解流程

image-20210120121919702

(1) 拷贝/资料/01-模拟器(用户行为)内容到hadoop105的/opt/module/rt_applog目录

image-20210120133446399

(2) 根据实际需要修改application.properties

image-20210120133640555

(3) 使用模拟日志生成器的jar 运行

[atguigu@hadoop105 rt_applog]$ java -jar gmall2020-mock-log-2020-05-10.jar

(4) 目前我们还没有地址接收日志,所以程序运行后的结果有如下错误

image-20210120133848100注意:ZooKeeper从3.5开始,AdminServer的端口也是8080,如果在本机启动了zk,那么可能看到405错误,意思是找到请求地址了,但是接收的方式不对。

2.2 开发SpringBoot程序gmall0421-logger,采集模拟生成的日志数据

2.2.1 创建空的父工程gmall0421-parent,用于管理后续所有的模块module

我们这里就是为了将各个模块放在一起,但是模块彼此间还是独立的,所以创建一个Empty Project即可;如果要是由父module管理子module,需要将父module的pom.xml文件的设置为pom

image-20210120135325012

2.2.2 搭建一个SprintBoot项目,作为采集日志服务器

(1) 父project下创建创建SprintBoot项目

image-20210120122005762

注意:如果连接不到Springboot服务器,可以手动创建

(2) 配置项目名称gmall0421-logger

image-20210120135630876

(3) 选择版本以及通过勾选自动添加依赖

image-20210120135804896

(4) 完成之后开始下载依赖,完整的pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.atguigu.gmall</groupId><artifactId>gmall0421-logger</artifactId><version>0.0.1-SNAPSHOT</version><name>gmall0421-logger</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

(5) 在Idea中安装Lombok插件

image-20210120132357196

(6) 创建LoggerController接收来自/applog的日志

package com.atguigu.gmall.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Package: com.atguigu.gmall.controller* @ClassName: LoggerController* @Author: fengbing* @CreateTime: 2020/9/13 3:07* @Description: 该Controller用于接收模拟生成的日志*///标识为controller组件,交给Sprint容器管理,并接收处理请求 如果返回String,会当作网页进行跳转
//@Controller
// @RestController = @Controller + @ResponseBody 会将返回结果转换为json进行响应@RestController
@Slf4j
public class LoggerController {//通过requestMapping匹配请求并交给方法处理@RequestMapping("/applog")//在模拟数据生成的代码中,我们将数据封装为json,通过post传递给该Controller处理,所以我们通过@RequestBody接收public String applog(@RequestBody String jsonLog) {System.out.println(jsonLog);return jsonLog;}
}

(7) 运行Gmall0421LoggerApplication,启动内嵌Tomcat

(8) 修改hadoop105上的rt_applog目录下的application.properties,向/applog发送日志

image-20210120143032591

(9) 执行命令,查看hadoop105输出、Idea输出效果

[atguigu@hadoop105 rt_applog]$ java -jar gmall2020-mock-log-2020-05-10.jar

image-20210120143129112

2.2.3 在Spring程序中,借助Logbak将采集的日志落盘

(1) 在LoggerController上加@Slf4j注解,并通过log.info记录日志

image-20210120143336020

(2) 在gmall0421-logger的resources中添加logback.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration><property name="LOG_HOME" value="/opt/module/rt_gmall/gmall0421" /><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%msg%n</pattern></encoder></appender><appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_HOME}/app.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.log</fileNamePattern></rollingPolicy><encoder><pattern>%msg%n</pattern></encoder></appender><!-- 将某一个包下日志单独打印日志 --><logger name="com.atguigu.gmall.controller.LoggerController"level="INFO" additivity="false"><appender-ref ref="rollingFile" /><appender-ref ref="console" /></logger><root level="error" additivity="false"><appender-ref ref="console" /></root>
</configuration>

(3) logback配置文件说明

  • appender

追加器,描述如何写入到文件中(写在哪,格式,文件的切分)

ConsoleAppender–追加到控制台

RollingFileAppender–滚动追加到文件

  • logger

控制器,描述如何选择追加器

注意:要是单独为某个类指定的时候,别忘了修改类的全限定名

  • 日志级别

TRACE [DEBUG INFO WARN ERROR] FATAL

(4) 启动Gmall0421LoggerApplication 以及运行jar命令查看控制台以及文件输出

image-20210120143754291

(5) 思考:log哪里定义的?

其实在lombok注解@Slf4j底层执行了类似

Logger log = org.slf4j.LoggerFactory.getLogger(LoggerController.class);

(6) 测试:再次启动SpringBoot程序,运行模拟生成日志的jar,查看在控制台和磁盘上都可以看到日志。

2.2.4 在Spring程序中,将采集到的日志数据发送到kafka

整体思路:在gmall0421-logger的controller中接收到数据之后,对日志数据进行分流,根据日志类型(事件|启动),将日志发送到不同的kafka主题中去

(1) 导入spring-kafka依赖

在创建SpringBoot模块的时候,勾选的;如果没有勾选,在pom.xml文件中加如下配置

<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency>

(2) 在pom.xml文件中添加fastjson依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency>

(3) 在gmall0421-logger的application.properties中配置kafka相关信息

#============== kafka ===================
server.port=8989
# 指定kafka 代理地址,可以多个
spring.kafka.bootstrap-servers=hadoop105:9092,hadoop106:9092,hadoop107:9092 
# 指定消息key和消息体的编解码方式
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

(4) 将KafkaTemplate注入到Controller中

@RestController
@Slf4j
public class LoggerController {//注入Spring提供的Kafka编程模板@AutowiredKafkaTemplate kafkaTemplate;//通过requestMapping匹配请求并交给方法处理@RequestMapping("/applog")//在模拟数据生成的代码中,我们将数据封装为json,通过post传递给该Controller处理,所以我们通过@RequestBody接收public String applog(@RequestBody String jsonLog) {//System.out.println(jsonLog); # 打印到控制台log.info(jsonLog);return jsonLog;}
}

(5) 对接收到的数据进行分流

//通过requestMapping匹配请求并交给方法处理@RequestMapping("/applog")//在模拟数据生成的代码中,我们将数据封装为json,通过post传递给该Controller处理,所以我们通过@RequestBody接收public String applog(@RequestBody String jsonLog){//将日志落盘*log*.info(jsonLog);//将不同类型日志发送到kafka主题中JSONObject jsonObject = JSON.*parseObject*(jsonLog);if(jsonObject.getJsonObject("start")!=null){//启动日志kafkaTemplate.send("gmall_start_bak",jsonLog);}else{//事件日志kafkaTemplate.send("gmall_event_bak",jsonLog);}return "success";}

(6) 启动zk和Kafka,在Kafka中创建对应的主题

注意:默认情况下,Kafka创建主题默认分区是1个,我这里修改为4个

[atguigu@hadoop105 rt_applog]$  kafka-topics.sh --bootstrap-server hadoop105:9092 --create --topic gmall_start_bak --partitions 4 --replication-factor 3
 [atguigu@hadoop105 rt_applog]$  kafka-topics.sh --bootstrap-server hadoop105:9092 --create --topic gmall_event_bak --partitions 4 --replication-factor 3

(7) 测试是否能够走通

  • 1.运行kafka消费者,准备消费数据(因为日活需要启动日志,所以我们这里只测试启动日志)

  • bin/kafka-console-consumer.sh --bootstrap-server hadoop105:9092 --topic gmall_start_bak 
    

    2.运行Idea中的Gmall0421LoggerApplication程序,准备接受模拟生成的数据

  • 3.运行模拟生成数据的jar

java -jar gmall0421-mock-log-2020-05-10.jar

image-20210120150843030

将gmall0421-logger打包到单台Linux上运行

(1) 在hadoop105的/opt/module目录下创建rt_gmall目录

[atguigu@hadoop105 module]$ pwd
/opt/module
[atguigu@hadoop105 module]$ mkdir rt_gmall

(2) Idea中修改gmall0421-logger中的logback.xml配置文件,指定日志输出目录

<property name="LOG_HOME" value="/opt/module/rt_gmall/gmall0421" />

​ 注意:路径和上面创建的路径保持一致,根据自己的实际情况进行修改

(3) Idea中修改application.properties端口号

server.port=8989

因为在ZooKeeper从3.5开始,AdminServer的端口也是8080

(4) 打包

image-20210120151233263

问题解决:打包时候如果出现以下问题

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test)

在pom.xml文件中,添加跳过测试

<properties><java.version>1.8</java.version>**<skipTests>true</skipTests>**</properties>

(5) 将打好的jar包上传到hadoop105的/opt/module/rt_gmall目录下

 [atguigu@hadoop105 rt_gmall]$ ll总用量 29984-rw-rw-r--. 1 atguigu atguigu 30700347 810 11:35 gmall0421-logger-0.0.1-SNAPSHOT.jar

(6) 修改/opt/module/rt_applog/application.properties

#http模式下,发送的地址
mock.url=http://hadoop105:8989/applog

(7) 测试是否能通

  • 运行kafka消费者,准备消费数据(因为日活需要启动日志,所以我们这里只测试启动日志)

    [atguigu@hadoop105 rt_gmall]$ kafka-console-consumer.sh --bootstrap-server hadoop105:9092 --topic gmall_start_bak
    
  • 运行采集数据的jar

     [atguigu@hadoop105 rt_gmall]$ java -jar gmall0421-logger-0.0.1-SNAPSHOT.jar
    
  • 运行模拟生成数据的jar

    [atguigu@hadoop105 rt_applog]$ java -jar gmall0421-mock-log-2020-05-10.jar
    

image-20210120151812469

2.3 搭建日志采集集群,并通过Nginx进行反向代理

(1) Nginx环境搭建好

(2) 修改nginx.conf配置文件 注意:每行配置完毕后有分号

在server内部配置

    location /applog {proxy_pass http://www.logserver.com;}

在server外部配置反向代理

        upstream www.logserver.com {server hadoop105:8989 weight=1;server hadoop106:8989 weight=2;server hadoop107:8989 weight=3;}

(3) 将日志采集的模块jar包同步到hadoop106和hadoop107

[atguigu@hadoop105 module]$ xsync rt_gmall/

(4) 修改模拟日志生成的配置,发送到的服务器路径修改为nginx的

[atguigu@hadoop105 rt_applog]$ vim application.properties 

# 外部配置打开

#logging.config=./logback.xml
#业务日期
mock.date=2021-01-20# idea模式 192.168.0.188是windows本机地址
# mock.url=http://192.168.0.188:8989/applog# 打包单台linux运行
# mock.url=http://hadoop105:8989/applog#模拟数据发送模式
mock.type=http
# http模式下,发送的地址
mock.url=http://hadoop105/applog

(5) 测试

  • 运行kafka消费者,准备消费数据(因为日活需要启动日志,所以我们这里只测试启动日志)

    [atguigu@hadoop105 rt_gmall]$ kafka-console-consumer.sh --bootstrap-server hadoop105:9092 --topic gmall_start_bak
    
  • 启动nginx服务

[atguigu@hadoop105 ~]$ /opt/module/nginx/sbin/nginx 
  • 运行采集数据的jar

    [atguigu@hadoop105 **rt_gmall**]$ java -jar gmall0421-logger-0.0.1-SNAPSHOT.jar
    [atguigu@hadoop106 **rt_gmall**]$ java -jar gmall0421-logger-0.0.1-SNAPSHOT.jar
    [atguigu@hadoop107 **rt_gmall**]$ java -jar gmall0421-logger-0.0.1-SNAPSHOT.jar
    
  • 运行模拟生成数据的jar

    [atguigu@hadoop105 rt_applog]$ java -jar gmall0421-mock-log-2020-05-10.jar
    

image-20210120152914405

(6) 集群群起脚本 将采集日志服务(nginx和采集日志数据的jar启动服务)放到脚本

在/home/atguigu/bin目录下创建logger.sh,并授予执行权限

#!/bin/bash
JAVA_BIN=/opt/module/java/bin/java
APPNAME=gmall0421-logger-0.0.1-SNAPSHOT.jarcase $1 in"start"){for i in hadoop105 hadoop106 hadoop107doecho "========: $i==============="ssh $i  "$JAVA_BIN -Xms32m -Xmx64m  -jar /opt/module/rt_gmall/$APPNAME >/dev/null 2>&1  &"doneecho "========NGINX==============="/opt/module/nginx/sbin/nginx};;"stop"){echo "======== NGINX==============="/opt/module/nginx/sbin/nginx  -s stopfor i in  hadoop105 hadoop106 hadoop107doecho "========: $i==============="ssh $i "ps -ef|grep $APPNAME |grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1done};;esac

(7) 再次测试

  • 运行kafka消费者,准备消费数据(因为日活需要启动日志,所以我们这里只测试启动日志)

    [atguigu@hadoop105 rt_gmall]$ kafka-console-consumer.sh --bootstrap-server hadoop105:9092 --topic gmall_start_bak
    
  • 启动nginx服务采集服务集群

    logger.sh start
    
  • 运行模拟生成数据的jar

    [atguigu@hadoop105 rt_applog]$ java -jar gmall0421-mock-log-2020-05-10.jar
    

    image-20210120154037814

第3章 附录1:SpringBoot知识点

3.1 Springboot简介

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

3.2 有了springboot 我们就可以…

不再需要那些千篇一律,繁琐的xml文件。

  • 内嵌Tomcat,不再需要外部的Tomcat

  • 更方便的和各个第三方工具(mysql,redis,elasticsearch,dubbo,kafka等等整合),而只要维护一个配置文件即可。

3.3 springboot和ssm的关系

springboot整合了springmvc ,spring等核心功能。也就是说本质上实现功能的还是原有的spring ,springmvc的包,但是springboot单独包装了一层,这样用户就不必直接对springmvc, spring等,在xml中配置。

3.4 没有xml,我们要去哪配置

  • springboot实际上就是把以前需要用户手工配置的部分,全部作为默认项。除非用户需要额外更改不然不用配置。这就是所谓的:“约定大于配置”

    如果需要特别配置的时候,去修改application.properties (application.yml)

第4章 附录2:Nginx

4.1 Nginx简介

Nginx (“engine x”) 是一个高性能的HTTP反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 是由俄罗斯人 Igor Sysoev 采用C语言开发编写的,第一个公开版本0.1.0发布于2004年10月4日。

Igor Sysoev,Nginx的创始人

Igor Sysoev出生于1970年的阿拉木图(哈萨克斯坦共和国城市),也就是前苏联。1991年苏联解体,哈萨克斯坦宣布独立,Nginx作者1994年毕业于莫斯科国立鲍曼技术大学;毕业后继续在莫斯科工作和生活,就职于NGINX,Inc,任CTO。https://www.nginx.com/

4.2 正向代理和反向代理概念

正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。

image-20210120154855612

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;

image-20210120154900471

4.3 Nginx安装以及相关命令

  • 在hadoop105上运行yum,安装相关依赖包
sudo yum -y install openssl openssl-devel pcre pcre-devel zlib zlib-devel gcc gcc-c++
  • 将/2.资料/工具下的nginx-1.12.2.tar.gz上传到/opt /software下

  • 在/opt/module/software下解压缩nginx-1.12.2.tar.gz包

  • 进入解压缩目录,执行

./configure  --prefix=/opt/module/nginx
make && make install
--prefix=要安装到的目录
  • 安装成功后,/opt/module/nginx目录下结构

  • 启动Nginx

在/opt/module/nginx/sbin目录下执行 ./nginx

  • 如果在atguigu用户下面启动会报错

原因:nginx占用80端口,默认情况下非root用户不允许使用1024以下端口

解决:让当前用户的某个应用也可以使用1024以下的端口

sudo setcap cap_net_bind_service=+eip /opt/module/nginx/sbin/nginx

注意:要根据自己的实际路径进行配置

  • 查看启动情况
ps -ef |grep nginx 

因为nginx不是用java写的,所以不能通过jps查看

  • 在浏览器中输入http://hadoop105/访问

  • 重启Nginx

./nginx -s reload
  • 关闭Nginx
./nginx -s  stop
  • 通过配置文件启动
./nginx -c /usr/local/nginx/conf/nginx.conf/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

其中-c是指定配置文件,而且配置文件路径必须指定绝对路径

  • 配置检查

当修改Nginx配置文件后,可以使用Nginx命令进行配置文件语法检查,用于检查Nginx配置文件是否正确

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf –t
  • 部分机器启动时报错:
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
解决:ln -s /usr/local/lib/libpcre.so.1 /lib64

4.4 Nginx核心配置文件说明

学习Nginx首先需要对它的核心配置文件有一定的认识,这个文件位于Nginx的安装目录/opt/module/nginx/conf目录下,名字为nginx.conf

4.4.1 基本配置

image-20210120155145302

4.4.2 events配置

image-20210120155149557

4.4.3 http配置

(1) 基本配置

image-20210120155213282

(2) server配置,可以有多个

image-20210120155217883

4.5 Nginx主要应用

4.5.1 静态网站部署

Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端

4.5.2 负载均衡

在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。

​ 负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀

image-20210120155803826

常用的负载均衡策略:轮询、权重、备机…

4.5.3 静态代理

把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。

​ 所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。

image-20210120155813384

4.5.4 动静分离

Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。

动态资源,如jsp由tomcat或其他web服务器完成

静态资源,如图片、css、js等由nginx服务器完成

它们各司其职,专注于做自己擅长的事情

动静分离充分利用了它们各自的优势,从而达到更高效合理的架构

image-20210120155819404

4.5.5 虚拟主机

虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。

Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个域名不同的网站。

Nginx下,一个server标签就是一个虚拟主机。nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可。

比如一个公司有多个二级域名,没有必要为每个二级域名都提供一台Nginx服务器,就可以使用虚拟主机技术,在一台nginx服务器上,模拟多个虚拟服务器。


http://chatgpt.dhexx.cn/article/KB3SqWGM.shtml

相关文章

源码分析 Sentinel 实时数据采集实现原理

本篇将重点关注 Sentienl 实时数据收集&#xff0c;即 Sentienl 具体是如何收集调用信息&#xff0c;以此来判断是否需要触发限流或熔断。 本节目录 1、源码分析 StatisticSlot1.1 StatisticSlot entry 详解1.2 StatisticSlot exit 详解 2、Sentienl Node 体系2、StatisticNod…

ISYSTEM调试实践10-实时数据采集工具daqIDEA

本文介绍一种实时数据采集的工具daqIDEA&#xff0c;该软件整合在了winIDEA内&#xff0c;可以直接通过winIDEA启动。 daqIDEA类似于jlink的jscop&#xff0c;stlink也有类似功能。原理就是利用仿真探头&#xff0c;将程序运行的变量实时采集出来&#xff0c;并通过曲线的方式显…

基于组态王6.55的实时数据采集助手V1.0

采集助手V1.0使用说明采集助手V1.0是基于北京亚控科技的组态王6.55开发的&#xff0c;用于对带485通讯功能的流量计、电能表等智能仪表的实时数据进行采集的程序&#xff0c;可将采集到的数据记录为xls电子表格形式&#xff0c;用于后期分析。 一、主要功能&#xff1a; 1、采…

如何使实时数据采集处理系统保持数据的高速传输

如何使实时数据采集处理系统保持数据的高速传输 1引言 当前&#xff0c;越来越多的设计应用领域要求具有高精度的A&#xff0f;D转换和实时处理功能。在实时数据采集处理系统设计中&#xff0c;一般需要考虑数据采集以及对采集数据的处理。而对于大数据量的实时数据采集处理系…

「山东城商行联盟数据库准实时数据采集系统」入选2021中国大数据应用样板案例

12月17日&#xff0c;由中国信息协会大数据分会主办的“2021中国大数据技术应用大会”在北京圆满落幕。来自中国信息协会、中国工程院、国家信息中心、中国软件评测中心、中国金融认证中心等的权威专家、知名企业代表出席本次大会&#xff0c;对大数据的需求、应用和产业发展进…

实时数据采集无压力,网络抓取基础架构全程保障

作为一位爬虫工程师&#xff0c;网络抓取是我在日常工作中的重要任务之一。在当今信息爆炸的时代&#xff0c;实时数据的价值愈发显著。对于企业和个人来说&#xff0c;准确及时地获取最新的数据信息&#xff0c;能够帮助做出更明智的决策&#xff0c;抓住商机&#xff0c;甚至…

BET365的websocket实时数据采集分析

BET365网站websocket实时数据采集分析 ** 前语&#xff1a; ** 本文仅用于交流学习&#xff0c;请勿用于非法用途&#xff0c;后果自负&#xff01; bet365是全球顶尖的涵盖足球篮球等各项赛事的赛事信息提供网站以及博彩网站。为啥要去爬这个网站呢&#xff1f;因为它赛事…

数据采集工具 -- Flume

1、Flume的定义 Flume由Cloudera公司开发&#xff0c;是一个分布式、高可靠、高可用的海量日志采集、聚合、传输的系统。Flume支持在日志系统中定制各类数据发送方&#xff0c;用于采集数据&#xff1b;Flume提供对数据进行简单处理&#xff0c;并写到各种数据接收方的能力。简…

PLC实时数据采集如何实现?

数据采集传输对于后续企业进行分析和决策是十分重要的&#xff0c;而实时数据采集更能提升整体生产的认识度&#xff0c;从而采取到更加及时高效的措施。因此PLC实时数据采集成为企业的基础应用&#xff0c;那么如何实现PLC的实时数据采集呢&#xff1f; 1、协议解析 协议解析…

实时数仓-数据采集层_1

实时数仓-数据采集层_1 一、实时数仓介绍1、普通实时计算与实时数仓比较2、实时电商数仓项目分层 二、实时需求概述1、离线计算与实时计算的比较2、实时需求种类2.1、日常统计报表或分析图中需要包含当日部分2.2、实时数据大屏监控2.3、数据预警或提示2.4、实时推荐系统 三、统…

低成本,高效率,更成熟的实时数据采集方案来了

现在&#xff0c;科技的发展正在飞速影响着各行各业的生产模式。其中物联网作为新技术载体&#xff0c;正在帮助各行业极大地释放数字化、智能化的空间。 物联网将信息网络连接和服务的对象从人扩展到物&#xff0c;让物流、金融、城市管理、能源勘探、工业制造等等领域复杂的业…

项目一实时数仓数据采集

目录 1. 项目介绍 1.1项目背景 1.2项目需求 1.3目标 1.4 二次开发 2. 项目部署 2.1业务数据采集 2.2 导入脚本编写和测试 2.3内容数据采集 2.3.1说明&#xff1a; 2.3.3 配置管理中心 2.3.4 注册域名 2.4 日志数据采集 2.4.1 nginx服务器的搭建 2.4.2 启动nginx&am…

【Oracle】准实时大规模数据提取

文中使用的Oracle版本为10g。 这篇文章是之前本人在前公司内部做可行性分析报告中的其中一个板块的内容&#xff0c;具体讲述的是为了做大规模数据提取和数据清洗做了一个试验demo。先说结论&#xff0c;一般来说像这种操作不应优先考虑关系型数据库去解决。本文中提到的采用J…

实时数据流采集工具Flume

实时数据流采集工具Flume 实时数据流采集工具Flume1.1 Flume的介绍1.2 Flume的特点1.3 Flume的功能架构1.4 Flume的功能原理1.5 Flume的安装部署1.6 Flume两种常见基础架构1.6.1 多路复用流Multiplexing The Flow1.6.2 Consolidation 1.7 Flume中常用的三大基础组件1.7.1 sourc…

必须了解的实时数据架构

随着互联网的发展进入下半场&#xff0c;数据的时效性对企业的精细化运营越来越重要&#xff0c; 商场如战场&#xff0c;在每天产生的海量数据中&#xff0c;如何能实时有效的挖掘出有价值的信息&#xff0c; 对企业的决策运营策略调整有很大帮助。此外&#xff0c;随着 5G 技…

puppeteer-0-大背景:服务端:生成图片 合成海报 截屏

背景 最近接手一个任务&#xff0c;大致要求就是可以动态合成图片。 没听懂&#xff1f;那我再解释下&#xff1a; 大致就是如上功能。 这个时候&#xff0c;会的&#xff0c;或者稍微会的&#xff0c;或者真的会的&#xff0c;就开会七嘴八舌了&#xff1a;吧唧吧唧.... 前…

小程序多张图片合成海报分享功能

项目有个需求&#xff1a;代言人模块分享出去时。需要合成几张图片作为一张海报分享出去 需要用到canvas组件&#xff0c;组件的部分合成图需要下载下来&#xff0c;所以后端要配置好下载合法域名如下图&#xff0c;配置ok后开发者工具会看到合法域名 代码逻辑 1、点击分享弹框…

php生成推广二维码海报、合成图片demo

php生成推广二维码海报、合成图片 1、海报背景图。背景图一般存服务器,程序本地读取; 2、推广二维码。可以是二维码图片链接,也可以是字符串图像流。如果自己生成二维码,详见phpqrcode官网,地址:https://sourceforge.net/projects/phpqrcode。 3、开启PHP的GD扩展 inde…

微信小程序海报生成图片合成工具类

背景 我目前参与小程序的产品研发&#xff0c;为了方便产品的转发和推广&#xff0c;会对课提供生成海报转发或者分享的功能&#xff0c;前期海报合成这个功能是由项目组的老同事负责开发&#xff0c;后来小程序海报这块功能需要单独做一个功能用于专门根据不同的课程类型来生…

平面设计新手如何用PS制作出一张合成海报

本文由:“学设计上兔课网”原创,图片素材来自网络,仅供学习分享 平面设计新手如何用PS制作出一张合成海报?本期教程给大家制作一张关于VR战争合成海报,从合成海报来讲我们要做到以下几点: 创意部分:如何通过创意表现产品功能或其他想要表现的点, 有了创意找到合适的…