一、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)持久性:一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/288370.html