ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

nginx+tomcat+redis+mysql

2022-09-08 18:05:35  阅读:94  来源: 互联网

标签:事务 tomcat 数据库 redis nginx 服务器 数据 节点


一、nginx

nignx是一个高性能的http和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

传统的web服务器体系结构中,每个客户端访问时候都要单独的进程或者线程进行处理,随着访问网站的人越来越多,并发连接的数量越来越大,web服务器就变得缓慢,从而降低了用户体验。

单独的进程/线程都会消耗内存和CPU时间。

NGINX开发的目标是实现10倍以上的性能,优化服务器资源的使用,同时也能够扩展和支持网站的动态增长。 因此,NGINX成为最知名的模块化,事件驱动,异步,单线程Web服务器和Web代理之一。

二、tomcat

Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于 Tomcat 本身也内含了一个 HTTP 服务器,它也可以被视作一个单独的 Web 服务器。但是,不能将 Tomcat 和 Apache HTTP 服务器混淆。

tomcat中有三个容器
web容器:我们讲到servlet可以理解服务器端处理数据的java小程序,那么谁来负责管理servlet呢?这时候我们就要用到web容器。它帮助我们管理着servlet等,使我们只需要将重心专注于业务逻辑。

jsp容器:jsp容器基于web容器管理,将Java文件翻译成二进制文件,系统能够识别的语言

serverlet容器:处理客户端的请求并填充response对象

Servlet容器实现了Container接口。在Tomcat中有4种级别的容器:Engine,Host,Context和Wrapper。

Engine:整个Catalina Servlet引擎;

Host:包含一个或多个Context容器的虚拟主机;

Context:表示一个Web应用程序,可以包含多个Wrapper;

Wrapper:表示一个独立的Servlet;

三、Redis

1优缺点
优点:Redis基于内存运行并支持持久化(内存运行:处理高热数据优秀,不占用多的进程)

数据读取的速度最高可达110000次/s,数据写入速度最高可达81000次/s

原子性:redis所有操作都是原子性的,支持数据备份,即master-salve模式的数据备份

缺点:不具自动容错和恢复功能,数据库容易受到物理内存的限制,不能作为海量数据的高热性能读写。

用法:在数据库前面做分压。三大分为主从模式,哨兵,集群模式。是一个非关的数据库。

2关系型和非关系型的数据库区别
(1)存储方式不同MySQL以记录为行,字段为列,形成表格方式存储

(2)非关数据库数据类型哈希,字符串,列表等

按照扩展方式不同:

(1)关系型:水平扩展(节点扩容,可以多一个节点)数据库中进行分库分表

(2)非关:垂直扩展(硬件资源进行扩展CPU,磁盘,或者直接升级服务器)

Redis集群没有使用一致性hash,而是使用了哈希槽的方式,redis集群有16384个哈希槽,每个key通过一点过算法后,会决定放在那个槽内。(每个槽大小大概512)。平均分配!!

 

注意:默认情况下是平均分配!!!实际生产中需要看节点性能!!

对事物的支持不同:

(1)关系型数据库:特别适合高事务性要求和需要控制执行计划的任务

(2)非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面

关系型数据库和非关系型数据库都有各自的特点和应用场景。两者相结合将会给web2.0的数据库带来新的思路。

MySQL 前置缓存数据库--》redis

为前端服务缓存一些后台--》为nginx缓存图片(就是i/o和网络资源压力大点)

MySQL 高热数据库 --》redis

ps:非关数据库不需要手动创建数据库和集合(本身非关数据库中含有0-15,一共16个数)

redis服务器程序是单进程还是多进程

采用epull机制执行单进程实行高并发的一个操作,但是redis在提高高并发处理能力时候,会给服务器的cpu造成很大压力。生产中建议开启2个进程:

1备份

2抗高并发的同时尽量不给cpu造成压力

3什么是事务?
事务就是一个单独的隔离操作:事务中所有的命令都会被序列化,按照顺序执行。执行过程中,不会被其它客户端发来的信息打断。

Redis 事务的本质是通过MULTI、EXEC、WATCH等一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

 

客户在访问过程中,由于网页没有加载,客户不停的刷新,会建立相同的会话,访问redis时候,会出现重复的会话,可以对redis做session会话池控制。

redis有丰富的特性-redis还支持publish(发布消息)/subscribe(订阅),通知,设置key有效期等特性。

redis概念穿透,击穿,雪崩

4分布式锁


一个进程进来后,第一条线程会在redis中处理,此时会在第一条地方加一个锁,防止后面的进程进入导致拥塞。这边有个watch dog监控锁,如果请求处理完,会自动解锁(比如30s之后自动断开,锁的自动释放时间),如果规定时间没有处理完,watch dog不会解锁,等待完成手动或者自动执行解锁。再放入下一个进程进行处理。

核心技术:setnx+分布式锁

5,RDB!!!!


一旦触发save,子进程的所有任务都会被阻塞
触发方式:
1手动触发:直接执行bgsave持久化命令
2自动触发:按照规定周期执行的语句的数量来触发,配置文件中例如save m n -----》save 90 10
bgsave执行时,会控制RDB紫禁城再执行的位置创建.rdb文件,特性是,RDB持久化生产的文件,只记录的结果
有点偏于全量备份,为了提高处理速度和减少落地在磁盘中占用体积,RDB的数据会进行压缩处理。
内存中数据消失了,一旦数据加载失败,会启动失败
特殊的触发方式:主动的关闭redis,但RDB持久化优先级较低
应用场景:
1主动关闭时,触发RDB(redis 默认开启RDB)
2主从复制时,master同步给SLAVE时,,会触发RDB(全量复制),然后触发AOF的增量复制
3在redis重启时,当AOF未开启时候,才会基于RDB文件进行恢复数据,运行redis。

 

追加的是每一天追加记录,把缓冲区的数据同步到磁盘中,再加以持久化。

6触发条件
1always 每产生一条,就同步一条 可能造成数据压力大,导致频繁的写入,每写到缓冲区导致i/o占用过大,
还有追加部分导致缓冲区爆满,同步率变低。(生产中几乎不用)
2no 不自动触发
3everysecond 每秒同步一次 在一定层度上可以减少压力,但也可能导致缓冲区爆满
再redis前面分流:
1令牌桶算法(就是一个桶放慢令牌,一次打给能放100个令牌,设置放令牌速度决定通过)
2漏桶算法(容量100,会填充,可以控制填充和下落速度),限流。
3防火墙控制流量或者次数
4 lru算法,控制再内存中高热数据的保存时间(redis在作为MySQL缓存数据库时候,存的都是高热数据。)

7淘汰策略
默认是惰性删除

随即淘汰

淘汰近期命中较少的数据 随着时间的推移,命终值会减少,所谓的数据中,在做高热数据的前提下是或者,套题近期命中较少的数据(相对而言不是重要的数据)。

定期删除————》保证两种持久化完成的情况下,同时业务不繁忙/终止业务的时候,删除为了解决缓存压力过功能模块:AOF的持久化。

8主从复制原理


9哨兵模式原理
1哨兵是有自己的配置文件,只要去指向master节点IP时候就可以了

2哨兵节点会和配置的主节点建立起两条连接命令连接和订阅连接

PS:redis发布订阅(pub/sub)是一种信息通信模式:发送者发消息,订阅者接收消息

3哨兵会通过命令连接每10s发送一次INFO命令,通过INFO命令,主节点会返回自己的run_id和自己的从节点信息。

4哨兵会对这些从节点建立两条连接命令,连接和订阅连接

5哨兵通过命令连接向从节点发送INFO命令,获取到他的一些信息:

run id(redis服务器id)

role(职能)

从服务器的复制偏移量offset

其它

6通过命令连接向服务器的sentinel:hello频道发送一条信息,内容包括自己的IP端口,run_id,配置(后续投票的时候会用到等)

7通过订阅连接对象服务器的sentinel:hello频道做了监听,所以所有的向该频道发送的哨兵的消息都能被接受到

8解析监听到的消息,进行分析提取,就可以知道还有哪些别的哨兵服务节点也在监听这些主从节点了,更新结构体将这些哨兵节点记录下来

9向观察到的其他的哨兵节点进行监听

四、MySQL之MHA

它为 MySQL主从复制架构提供了 automating master failover (自动化主故障转移)功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。

五、keepalived

keepalived是基于vrrp协议的一款高可用软件。keepalived有一主服务器和多台备份服务器,在主和备上部署相同的服务配置,当诸如武器出现故障,虚拟IP地址会自动漂移到备份服务器。

VRRP(虚拟路由器冗余协议)

VRRP是为了解决静态路由的高可用。

1,数据库概念(读取方式)

脏读:事务A可以读到事务B修改过还没提交的数据,此时事务B一旦回滚,事务A再次读就读不到了。

幻读:a和b都在读取数据库,a进行更改数据库保存,b按照相同的路径再读取的时候会发现多出来一些内容。

不可重复读::一个事务先后读取同一条记录,而事务在两次读取之间该数据被其它事务所修改,则两次读取的数据不同,我们称之为不可重复读。

2,数据库事务的四大特性

(1)原子性:事务包含的所有数据库操作要么全部成功,要么全部失败回滚

(2)一致性:一盒事务执行之前和执行后都必须处于一致状态。

(3)隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

(4)持久性:一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

 

标签:事务,tomcat,数据库,redis,nginx,服务器,数据,节点
来源: https://www.cnblogs.com/elfin/p/16670187.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有