ClickHouse学习笔记(一):ClickHouse架构概述(为什么ClickHouse这么快呢?)

news2024/11/27 8:48:00

文章目录

  • 1、ClickHouse 概述
    • 1.1 、简述
    • 1.2 、名词解释
      • 1.2.1 、MPP 架构
      • 1.2.2 、向量化执行引擎
      • 1.2.3 、SIMD
      • 1.2.4 、OLAP
    • 1.3、应用场景
  • 2、ClickHouse 核心特性
    • 2.1、完备的 DBMS 功能
    • 2.2、列式存储与数据压缩
    • 2.3、向量化执行引擎
    • 2.4、关系模型与SQL查询
    • 2.5、多样化的表引擎
    • 2.6、多线程与分布式
    • 2.7、多主架构
    • 2.8、实时查询(在线查询)
    • 2.9、数据分片和分布式查询
  • 3、ClickHouse 架构设计
    • 3.1、Column 与 Field
    • 3.2、DataType
    • 3.3、Block 与 Block 流
    • 3.4、Table
    • 3.5、Parser 和 Interpreter
    • 3.6、Functions 与 Aggregate Functions
    • 3.7、Cluster 与 Replication
  • 4、ClickHouse 为什么如此之快?

1、ClickHouse 概述

1.1 、简述

    ClickHouse 是一款 MPP 架构的数据库,它没有采用 Hadoop 生态中的主从架构,而是使用了多主对等网络结果,同时它也是基于关系模型的 ROLAP 方案。官网 docs 地址:https://clickhouse.com/docs/en/intro

1.2 、名词解释

1.2.1 、MPP 架构

MMPMassively Parallel Processing(大规模并行处理),是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。采用 MPP 架构的数据库称为 MPP 数据库。
图1

MPP架构的特点

  1. MPP 支持无共享的分布式架构
  2. MPP 中,每个处理器处理任务的不同部分。
  3. 每个处理器都有自己的一套磁盘
  4. 每个节点只负责处理自己磁盘上的行
  5. 只需添加节点即可轻松扩展
  6. 数据水平分区,压缩能力强
  7. MPP 处理器使用某种形式的消息传递接口相互通信
  8. 在 MPP 中,每个处理器都使用自己的操作系统 (OS) 和内存。

    MPPDB与Hadoop都是将运算分布到节点中独立运算后进行结果合并(分布式计算),但由于依据的理论和采用的技术路线不同而有各自的优缺点和适用范围。两种技术以及传统数据库技术的对比如下:

图2
综合而言,Hadoop和MPP两种技术的特定和适用场景为:
● Hadoop在处理非结构化和半结构化数据上具备优势,尤其适合海量数据批处理等应用要求。
● MPP适合替代现有关系数据机构下的大数据处理,具有较高的效率。

1.2.2 、向量化执行引擎

    向量化执行引擎(Vectorized execution engine),对内存中的列式数据,一个batch调用一次SIMD指令(而非每一行调用一次),不仅减少了函数调用次数、降低了cache miss,而且可以充分发挥SIMD指令的并行能力,大幅缩短了计算耗时。向量执行引擎,通常能够带来数倍的性能提升。
    简单理解为就是消除程序 循环的优化,堆机器加快速度,实现向量化执行,需要利用 CPU 的 SIMD 指令。

1.2.3 、SIMD

SIMD(Single Instruction Multiple Data),用单指令流多数据流,也就是说一次运算指令可以执行多个数据流,一个简单的例子就是向量的加减,不适合用于带有较多分支判断的场景。

1.2.4 、OLAP

OLTP:On-line Transaction Processing 翻译为联机事务处理 。要求 实时性高、稳定性强、确保数据及时更新成功。从数据库角度来看 OLTP 主要是对数据的增删改。

OLAP:On-line Analytical Processing 翻译为联机分析处理。需要将业务数据集中统一分析,一般是将数据存储在数据仓库中统一提供 OLAP 分析。OLAP 主要是数据仓库的应用,是对数据的查询。
图3

ROLAP:Relational OLAP,关系型联机分析处理。顾名思义,它直接使用关系型构建,数据模型常使用星型模型或者雪花模型(星型模型和雪花模型)。以 ROLAP 为代表的有传统关系型数据库、MPP 分布式数据库以及基于 Hadoop 的 Spark/Impala,特点是能同时连接明细数据和汇总数据,实时根据用户提出的需求对数据进行计算后返回给用户。正因为采用的实时计算技术,所以 ROLAP 的缺点也比较明显——当计算的数量达到一定级别或者并发数达到一定级别的时候,一定会出现性能问题
    以传统关系型数据库为代表的如Teradata、Oracle等,由于传统架构可扩展性较差,所以对硬件的要求非常高,当计算的数据量达到千万,亿级别时,数据库的计算就会出现延时,使得用户不能及时得到响应,更别提高并发了。
    MPP分布式数据库(GreenPlum/GBase/Vertica)则解决了一部分可扩展性问题,对硬件设备的要求也稍稍下降了(还是有一定的硬件要求),在支持的数据体量(GB,TB级别)上有了很大的提升。当集群有几百、上千节点时,会出现性能瓶颈(增加再多节点,性能提升也不会很明显),扩容成本同样不菲。
    基于Hadoop的Spark/Impala,则对部署硬件的要求很低(常见服务器即可,只是其主要依靠内存计算来缩短响应时间,所以对内存要求较高),在节点扩容上成本上相对较低,但当计算量达到一定级别或并发达到一定级别后,无法秒级响应,且容易出现内存溢出等问题。

MOLAP:Multidimensional OLAP,多维联机分析处理。以 MOLAP 分析为代表的有Cognos,SSAS,Kylin 等,设计理念是预先将客户的需求计算好以结果的形式存下来(比如一张表分为 10 个维度, 5 个度量,那客户提出的需求会有 2 的 10 次方种可能,然后将这么多种可能提前计算好存储下来),当客户提出需求后,找到对应结果返回即可。特点是当命中需求后返回非常快(所以 MOLAP 非常适合常见固定的分析场景),同等资源下支持的数据体量更大,支持的并发更多,不足则是当表的维度越多,越复杂,其所需的磁盘存储空间则越大,构建 cube 也需要一定的时间
HOLAP:Hybird OLAP,混合架构的 OLAP。这种思路可以理解成 ROLAP 和 MOLAP 两者的集成。

1.3、应用场景

适用场景:

  1. 绝大多数请求都是用于读访问的
  2. 数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作
  3. 数据只是添加到数据库,没有必要修改
  4. 读取数据时,会从数据库中提取出大量的行,但只用到一小部分列
  5. 表很“宽”,即表中包含大量的列
  6. 查询频率相对较低(通常每台服务器每秒查询数百次或更少)
  7. 对于简单查询,允许大约50毫秒的延迟
  8. 列的值是比较小的数值和短字符串(例如,每个URL只有60个字节)
  9. 在处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)
  10. 不需要事务
  11. 数据一致性要求较低
  12. 每次查询中只会查询一个大表。除了一个大表,其余都是小表
  13. 查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小

不适用场景:
14. 不支持真正的删除/更新支持 不支持事务(期待后续版本支持)
15. 不支持二级索引
16. 有限的SQL支持,join实现与众不同
17. 不支持窗口功能
18. 元数据管理需要人工干预维护

2、ClickHouse 核心特性

2.1、完备的 DBMS 功能

ClickHouse 拥有完备的管理功能,而不仅是一个数据库。作为一个 DBMS,它具备了一些基本功能。
DDL:Data Definition Language,数据定义语言,可以动态地创建、修改或删除数据库、表和视图,无须重启服务。
DML:Data Manipulation Language,数据操作语言,可以动态增删改查数据。
权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
分布式管理:提供集群模式,自助管理多个数据库节点。

2.2、列式存储与数据压缩

    如果,你想让查询变得更快,最简单且有效的方法是减少数据扫描范围和数据传输时的大小,列式存储和数据压缩可以帮我们实现上述两点。

列式存储:在扫描指定列时,避免多余的数据扫描。
数据压缩:按照一定步长对数据进行匹配扫描,当发现重复部分的时候就进行编码转换,降低IO和存储的压力。

举例说明:
压缩前:abcdefghi_bcdefghi
压缩后:abcdefghi_(9,8)

    压缩的本质是按照一定步长对数据进行匹配扫描,当发现重复部分的时候就进行编码转换。例如上面示例中的(9,8),表示如果从下划线开始向前移动9个字节会匹配到 8 个字节长度的重复项,即 bcdefghi。
    当然真实的压缩算法比我们的示例中的复杂,数据默认使用 LZ4 算法压缩,数据总体的压缩比达到 8:1 (为压缩前 17PB,压缩后 2PB)。列式 存储除了降低 IO 和存储 的压力之外,还为向量化执行做好了铺垫。

2.3、向量化执行引擎

    向量化执行引擎简单理解就是消除程序循环的优化,堆机器加快速度,数据级并行。实现向量化执行需要利用 CPU 的 SIMD 指令。SIMD 的全称是 Single Instruction Multiple Data,即用单挑指令操作多条数据。现在计算机系统概念中,它是通过数据并行以提高性能的一种实现凡事(其他的还有指令级并行和线程级并行),它的原理是在 CPU 寄存器层面实现数据的并行操作。
    在计算机系统的体系结构中,存储系统是一种层次结构。典型服务器计算机的存储层次结构如下图所示:
图2.3
从上图可以看出,从左向右,距离 CPU 越远,则数据的访问速度越慢。从寄存器中访问数据的速度,是从内存访问数据速度的 300 倍,是从磁盘中访问数据速度的 3000 万倍。所以利用 CPU 向量化执行的特性,对于程序的 性能提升意义非凡。

ClinckHouse 目前利用 SSE4.2 指令级实现向量化执行

2.4、关系模型与SQL查询

  • ClickHouse 关系模型比文档和键值对等其他模型,拥有更好的描述能力,也能够更加清晰地表述实体间的关系。在 OLAP 领域,已经有大量数据建模工都是基于关系模型展开的(星型模型、雪花模型乃至宽表模型)。所以将传统关系型数据库或数据仓库之上的系统迁移到 ClickHouse 的成本很低。
  • 完全使用 SQL 作为查询语言(支持 group by、order by、join、in 等大部分标准 sql),SQL 解析方面 ClickHouse 是大小写敏感的,select a 和 select A 代表的语义是不同的。

2.5、多样化的表引擎

    ClickHouse 最初的架构是基于 MySQL 实现的,表引擎设计就与 MySQL 类似,存储引擎作为一层独立的接口。种类繁多,根据业务场景自行选择。ClickHouse 拥有合并树、内存、文件、接口和其他6大类20多种表引擎。通过特定的表引擎支撑特定的场景,十分灵活。对于简单的场景,可直接使用简单的引擎降低成本,而复杂的场景也有合适的选择。(ClickHouse 有很多表引擎,后续留一篇专门介绍表引擎)

2.6、多线程与分布式

  • 向量化执行是通过数据级并行方式提升了性能,多线程处理则是通过线程级并行的方式实现了性能的提升。相比于基于底层硬件实现的向量化执行 SIMD,线程级并行通常由更高层次的软件层面控制。多线程处理(线程级并行)与向量化执行(数据级并行)形成互补。
  • 预先将数据分布到各台服务器,将数据的计算查询直接下推到数据所在的服务器,因为计算移动比数据移动更加划算

    ClickHouse在数据存取方面,既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理),可以说是将多线程和分布式的技术应用到了极致。

2.7、多主架构

    HDFS、Spark、HBase 和 Elasticsearch 这类分布式系统,都采用了 Master-Slave 主从架构,由一个管控节点作为 Leader 统筹全局。而 ClickHouse 则采用的 Multi-Master 多主架构,集群中每个节点角色对等,客户端访问任意一个节点都能得到相同的效果。它有以下优点:

  1. 对等的角色使系统架构变得更加简单,不用再区分主控节点、数据节点和计算节点,集群中所有节点功能相同。
  2. 天然规避了单点故障的问题,非常适用于多数据中心、异地多活的场景。

2.8、实时查询(在线查询)

  • 相似处:与其他分析型数据库对比,存在许多相似之处,例如都支持海量查询场景、支持列式存储、数据分片、计算下推等特效,说明CK在设计上吸取了各路优点。
  • 价格方面:其他开源系统慢,商用系统贵。ClickHouse 又快又免费。

     有些地方翻译成了在线查询,我觉得翻译成 “实时查询” 更为妥当,对比其他的分析型数据库,例如“Vertica”、SparkSQL、Hive、Elasticsearch 等,在大数据分析场景 ClickHouse 又快又免费。

2.9、数据分片和分布式查询

  • ClickHouse 有本地表(Local Table)和分布式表(Distributed Table),一张本地表等同于一份数据的分片,而分布式表不存储数据,只是本地表的访问代理。
  • 分布式表类似分库中间件,代理访问多个数据分片,实现分布式查询。

3、ClickHouse 架构设计

目前 ClickHouse 公开的资料相对匮乏,比如在架构涉及层面就很淡找到完整的资料,甚至连一张整体的架构图都没有。
架构设计

3.1、Column 与 Field

    Column 和 Field 是 ClickHouse 数据最基础的映射单元。ClickHouse 内存中改的一列数据由一个 Column 对象表示,一列中的某一行(单列中的一行数据)用 Filed 对象表示。
Column 对象:分为接口和实现两个部分。IColumn 接口定义了对数据进行各种关系运算的方法;方法的具体实现则根据数据类型的不同由相应对象实现,例如 ColumnString、ColumnArray 和 ColumnTuple 等。
Field 对象:使用了聚合的设计模式。在 Field 对象内部聚合了 Null、UInt64、String 和 Array 等 13 种数据类型及相应的处理逻辑。

3.2、DataType

    负责数据的序列化和反序列化相关工作,但是并不直接负责数据的读取,而是转由Column或Field对象获取。在DataType的实现类中,聚合了相应数据类型的 Column 对象和 Field 对象。例如 DataTypeString 会引用字符串类型的 ColumnString,而 DataTypeArray 则会引用数组类型 ColumnArray ,以此类推。

3.3、Block 与 Block 流

    ClickHouse 的数据是面向 Block 对象进行的,并且是采用流的方式。虽然 Column 与 Field 组成了数据的基本映射单元,但对应到实际操作,他们还缺少一些必要信息,例如数据的类型以及列的名称。于是设计出了 Block 对象,Block 对象可以看做数据表的子集。

Block=数据对象(Column/Feild) + DataType + 列名称字符串

流操作有两个顶层接口:IBlockInputStream 负责数据的读取和关系运算,IBlockOutputStream 负责将数据输出到下一环节。

3.4、Table

    在数据表的底层设计中并没有所谓的Table对象,它直接使用 IStorage接口指代数据表。
    表引擎是ClickHouse的一个显著特性, 不同的表引擎由不同的子类实现,例如IStorageSystemOneBlock (系统表)、StorageMergeTree(合并树表引擎)和 StorageTinyLog(日志表引擎)等。

3.5、Parser 和 Interpreter

    Parser分析器负责创建 AST (Abstract syntax tree,抽象语法树)对象,而Interpreter解释器则负责解释 AST ,并进一步创建查询的执行管道。它们与 IStorage 一起,串联起了整个数据查询的过程。Parser 分析器可以将一条 SQL 语句以递归下降的方法解析成 AST 语法树的形式。不同的 SQL 语句,会经由不同的 Parser 实现类解析。

3.6、Functions 与 Aggregate Functions

    普通函数,例如四则运算、日前转换、网址提取函数、IP地址脱敏函数。没有状态,函数效果作用于每行数据之上。在函数具体执行过程中,采用向量化的方式直接作用于一整列数据,而不是一行一行计算。

    聚合函数,有状态的,例如 COUNT 聚合函数,AggregateFunctionCount 的状态用整型 UInt64 记录。聚合函数的状态支持序列化与反序列化,所以能够在分布式节点之间进行传 输,以实现增量计算。

3.7、Cluster 与 Replication

集群由分片(Shard)组成,分片由副本(Replica)组成。ClickHouse 的1个节点只能拥有一个分片,如果要实现1分片、1副本,至少需要部署两个服务节点。分片是逻辑概念,物理承载由副本承担。
2分片2副本
上图示例是 2 分片 2 副本,需要 4 个物理节点。

4、ClickHouse 为什么如此之快?

  • 着眼硬件:着眼硬件,在动手实现之前就已经能够计算出粗略的性能。
  • 算法在前:针对不同使用场景 ClickHouse 选择了不同算法,性能是算法选择的首要考量指标。
  • 勇于尝鲜:敢于尝试最新、最快算法,并找到最合适算法实现。
  • 持续改进:在各个方面持续测试,持续改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单的C++:【运算符重载】新手易学

学过C语言的同志们应该都知道位运算符>> 和 << &#xff08;右移左移&#xff09;&#xff0c;但是这两个运算符在C中还是我们的输入和输出流操作符&#xff0c;那么这是为什么呢&#xff1f;&#xff0c;了解完本篇文章之后&#xff0c;我们再来回答这个问题。 C为…

python和C++代码实现模拟动态指针时钟

一、python代码实现及turtle库简单介绍 桌面时钟项目描述 1、使用turtle库绘制时钟外形及表针&#xff1b; 2、使用datetime获取系统时间&#xff1b; 3、时钟动态显示 turtle库基本命令 1、turtle.setup()函数&#xff1a;用于启动一个图形窗口&#xff0c;它有四个参数…

2023-02-22干活小计

复现BERT&#xff1a; 只能说爷今天干了一上午一下午的代码 bert的输入&#xff1a; batch_size * max_len * emb_num 768 * 768 bert的输出&#xff1a;三维字符级别特征(NER可能就更适合) 二维篇章级别特征(比如文本分类可能就更适合) batch_size * max_len * emb_num, ba…

亲身试验 Outlook防关联方法分享

Outlook在海外的用途是很广泛的&#xff0c;不仅可以用于收发邮件&#xff0c;还可以作为各类第三方网站的登录凭证。所以Microsoft对于Outlook的监管还是比较严格的&#xff0c;跨境卖家大量注册Outlook账号使用的话很容易被检测出关联然后被封号。龙哥针对Outlook防关联的问题…

35-Golang中的方法

Golang中的方法方法的介绍和使用方法的声明和调用方法的调用和传参机制原理方法的声明(定义)方法注意事项和细节讨论方法和函数的区别方法的介绍和使用 在某些情况下&#xff0c;我们需要声明(定义)方法。比如person结构体&#xff0c;除了有一些字段外(年龄&#xff0c;姓名……

unix高级编程-僵尸进程和孤儿进程

僵尸进程&#xff1a; 一个父进程利用fork创建子进程&#xff0c;如果子进程退出&#xff0c;而父进程没有利用wait 或者 waitpid 来获取子进程的状态信息&#xff0c;那么子进程的状态描述符依然保存在系统中。 孤儿进程&#xff1a;一个父进程退出&#xff0c; 而它的一个或…

java+Selenium+TestNg搭建自动化测试架构(3)实现POM(page+Object+modal)

1.Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一&#xff0c;通过对界面元素的封装减少冗余代码&#xff0c;同时在后期维护中&#xff0c;若元素定位发生变化&#xff0c;只需要调整页面元素封装的代码&#xff0c;提高测试用例的可维护性。 PageObject设计…

软件测试,刚进入一个公司如何快速上手一个项目?

目录 前言 客观现状 主观能动性 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配套学习资料和视频教学 前言 刚入职一家新公司&#xff0c;做的项目是之前很少接触的行业&#xff0c;该怎么快速的熟悉并上手自己的工作&#xf…

富文本编辑组件封装,tinymce、tinymce-vue

依赖&#xff1a;package.json yarn add tinymce tinymce/tinymce-vue {"dependencies": {"tinymce/tinymce-vue": "5.0.0","tinymce": "6.3.1","vue": "3.2.45",}, } 本地依赖&#xff1a; 在publ…

JIT-即时编译技术

VM&#xff08;HotSpot&#xff09;执行引擎中包含解释器与JIT编译器热点代码&#xff08;执行多次&#xff09;才有JIT编译的必要&#xff08;JIT编译阈值&#xff09;JVM&#xff08;HotSpot&#xff09;会有两个计数器&#xff08;次数/回边&#xff09;判断方法/代码块是否…

缺少IT人员的服装行业该如何进行数字化转型?

服装行业上、下游产业链长&#xff0c;产品属性复杂&#xff0c;是劳动密集型和技术密集型紧密结合的产物&#xff0c;是典型的实体经济代表。 近二十年是服装业发展的机遇和挑战之年&#xff0c;从“世界工厂”“中国制造”&#xff0c;逐渐向“中国设计”转变,中国服装产业经…

Kotlin新手教程九(协程)

一、协程 协程从Kotlin1.3开始引入&#xff0c;本质上协程就是轻量级的线程。协程的基本功能点有&#xff1a; 轻量&#xff1a;可以在单个线程上运行多个协程&#xff0c;因为协程支持挂起&#xff0c;不会使正在运行协程的线程阻塞。挂起比阻塞节省内存&#xff0c;且支持多…

扬帆优配|雷达供应商Arbe暴涨近50%;A股毫米波雷达概念异军突起

今日早盘&#xff0c;A股全体低开高走&#xff0c;上证指数围绕3300点重复抢夺&#xff0c;两市成交呈现大幅萎缩的趋势&#xff0c;显示市场谨慎情绪较为浓厚。 盘面上&#xff0c;白酒、国防军工、新能源、医药等板块涨幅居前&#xff0c;电信运营、网络游戏、稳妥、房地产等…

Sqoop导出hive/hdfs数据到mysql中---大数据之Apache Sqoop工作笔记006

然后我们看看数据利用sqoop,从hdfs hbase中导出到mysql中去 看看命令可以看到上面这个 这里上面还是mysql的部分,然后看看 下面--num-mappers 这个是指定mapper数 然后下面这个export-dir这里是,指定hdfs中导出数据的目录 比如这里指定的是hive的一个表/user/hive/warehouse…

IOS开发中遇到的问题总结【持续更新】

目录 知识点补给站 1. SwiftUI中的Image控件使用系统图标 知识点补给站 【Swift学习】关于 Swift | Swift 编程语言中文教程&#xff08;The Swift Programming Language&#xff09;【SwiftUI学习】不要惊慌! SwiftUI Example【SwiftUI学习】https://goswiftui.com【AppIcon…

C#、JAVA读写PLC物联网Modbus

Modbus协议是一种常用于工业自动化领域的通信协议&#xff0c;它使用简单、易实现、可靠的特点得到了广泛应用。物联网中的设备也需要使用Modbus协议进行通信。本文将介绍物联网Modbus通信的相关内容。一、Modbus协议简介Modbus协议是一种串行通信协议&#xff0c;它最初由Modi…

浅谈ThreadLocal的原理

文章目录1.ThreadLocal初识2.ThreadLocal底层原理3.ThreadLocal核心API3.1.get()方法3.2.set()方法3.3.remove()方法3.4.核心代码及流程4.ThreadLocalMap5.Hash冲突怎么解决6.ThreadLocal内存泄漏问题及解决办法7.应用场景8.总结1.ThreadLocal初识 ThreadLocal概念&#xff1a…

RPC(2)------ Netty(NIO) + 多种序列化协议 + JDK动态代理实现

依赖包解释 Guava 包含了若干被Google的 Java项目广泛依赖 的核心库&#xff0c;例如&#xff1a;集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string process…

Windows部署Jar包的三种方式

文章目录1、cmd命令启动2、bat脚本启动2.1 启动jar包2.2 关闭服务3、使用WinSW3.1 重命名3.2 xml配置3.3 安装服务3.4 卸载服务3.5 启动和停止服务1、cmd命令启动 这种方式比较简单&#xff0c;但是窗口关闭后服务也就被杀死了&#xff0c;命令如下 java -jar xxx.jar2、bat脚…

nignx(安装,正反代理,安装tomcat设置反向代理,ip透传)

1安装nginx 安装wget Yum install -y wget 下载(链接从官网找到右键获取) 以下过程root 安装gcc Yum -y install gcc c 安装pcre Yum install -y pcre pcre-devel Openssl Yum install -y openssl openssl-devel 安装zlib Yum install -y zlib zlib-devel 安装make Yum inst…