作者:手机用户2502895517 | 来源:互联网 | 2023-06-03 11:28
架构
回收策略
Tair
- 官方网站
- 《Tair和Redis的对比》
- 特点:可以配置备份节点数目,通过异步同步到备份节点
- 一致性Hash算法。
- 架构:和Hadoop 的设计思想类似,有Configserver,DataServer,Configserver 通过心跳来检测,Configserver也有主备关系。
几种存储引擎:
- MDB,完全内存性,可以用来存储Session等数据。
- Rdb(类似于Redis),轻量化,去除了aof之类的操作,支持Restfull操作
- LDB(LevelDB存储引擎),持久化存储,LDB 作为rdb的持久化,google实现,比较高效,理论基础是LSM(Log-Structured-Merge Tree)算法,现在内存中修改数据,达到一定量时(和内存汇总的旧数据一同写入磁盘)再写入磁盘,存储更加高效,县比喻Hash算法。
- Tair采用共享内存来存储数据,如果服务挂掉(非服务器),重启服务之后,数据亦然还在。
消息队列
消息总线
消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本。
消息的顺序
RabbitMQ
支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。
- 《RabbitMQ的应用场景以及基本原理介绍》
- 《消息队列之 RabbitMQ》
- 《RabbitMQ之消息确认机制(事务+Confirm)》
RocketMQ
Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。
ActiveMQ
纯Java实现,兼容JMS,可以内嵌于Java应用中。
Kafka
高吞吐量、采用拉模式。适合高IO场景,比如日志同步。
- 官方网站
- 《各消息队列对比,Kafka深度解析,众人推荐,精彩好文!》
- 《Kafka分区机制介绍与示例》
Redis 消息推送
生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。
- 《Redis学习笔记之十:Redis用作消息队列》
ZeroMQ
TODO
定时调度
单机定时调度
分布式定时调度
RPC
Dubbo
** SPI **
TODO
Thrift
gRPC
服务端可以认证加密,在外网环境下,可以保证数据安全。
数据库中间件
Sharding Jdbc
日志系统
日志搜集
- 《从零开始搭建一个ELKB日志收集系统》
- 《用ELK搭建简单的日志收集分析系统》
- 《日志收集系统-探究》
配置中心
servlet 3.0 异步特性可用于配置中心的客户端
API 网关
主要职责:请求转发、安全认证、协议转换、容灾。
《API网关那些儿》
《谈API网关的背景、架构以及落地方案》
《使用Zuul构建API Gateway》
《HTTP API网关选择之一Kong介绍》
网络
协议
OSI 七层协议
- 《OSI七层协议模型、TCP/IP四层模型学习笔记》
TCP/IP
- 《深入浅出 TCP/IP 协议》
- 《TCP协议中的三次握手和四次挥手》
HTTP
HTTP2.0
- 《HTTP 2.0 原理详细分析》
-
《HTTP2.0的基本单位为二进制帧》
HTTPS
网络模型
-
《web优化必须了解的原理之I/o的五种模型和web的三种工作模式》
- 五种I/O模型:阻塞I/O,非阻塞I/O,I/O复用、事件(信号)驱动I/O、异步I/O,前四种I/O属于同步操作,I/O的第一阶段不同、第二阶段相同,最后的一种则属于异步操作。
- 三种 Web Server 工作方式:Prefork(多进程)、Worker方式(线程方式)、Event方式。
-
《select、poll、epoll之间的区别总结》
- select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。
- select 有打开文件描述符数量限制,默认1024(2048 for x64),100万并发,就要用1000个进程、切换开销大;poll采用链表结构,没有数量限制。
- select,poll “醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,通过回调机制节省大量CPU时间;select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,而epoll只要一次拷贝。
- poll会随着并发增加,性能逐渐下降,epoll采用红黑树结构,性能稳定,不会随着连接数增加而降低。
-
《select,poll,epoll比较 》
- 在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。
-
《深入理解Java NIO》
- NIO 是一种同步非阻塞的 IO 模型。同步是指线程不断轮询 IO 事件是否就绪,非阻塞是指线程在等待 IO 的时候,可以同时做其他任务
《BIO与NIO、AIO的区别》
《两种高效的服务器设计模型:Reactor和Proactor模型》
Epoll
Java NIO
- 《深入理解Java NIO》
- 《Java NIO编写Socket服务器的一个例子》
kqueue
连接和短连接
框架
-
《Netty原理剖析》
- Reactor 模式介绍。
- Netty 是 Reactor 模式的一种实现。
零拷贝(Zero-copy)
-
《对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解》
- 多个物理分离的buffer,通过逻辑上合并成为一个,从而避免了数据在内存之间的拷贝。
序列化(二进制协议)
Hessian
-
《Hessian原理分析》
Binary-RPC;不仅仅是序列化
Protobuf
《Protobuf协议的Java应用例子》
Goolge出品、占用空间和效率完胜其他序列化类库,如Hessian;需要编写 .proto 文件。
-
《Protocol Buffers序列化协议及应用》
-
《简单的使用 protobuf 和 protostuff》
- protostuff 的好处是不用写 .proto 文件,Java 对象直接就可以序列化。
数据库
基础理论
数据库设计的三大范式
-
《数据库的三大范式以及五大约束》
- 第一范式:数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;
- 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;
- 第三范式:必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);
MySQL
原理
InnoDB
优化
《MySQL36条军规》
《MYSQL性能优化的最佳20+条经验》
《SQL优化之道》
《mysql数据库死锁的产生原因及解决办法》
《导致索引失效的可能情况》
-
《 MYSQL分页limit速度太慢优化方法》
索引
聚集索引, 非聚集索引
- 《MySQL 聚集索引/非聚集索引简述》
- 《MyISAM和InnoDB的索引实现》
MyISAM 是非聚集,InnoDB 是聚集
复合索引
自适应哈希索引(AHI)
explain
- 《MySQL 性能优化神器 Explain 使用分析》
NoSQL
MongoDB
- MongoDB 教程
-
《Mongodb相对于关系型数据库的优缺点》
- 优点:弱一致性(最终一致),更能保证用户的访问速度;内置GridFS,支持大容量的存储;Schema-less 数据库,不用预先定义结构;内置Sharding;相比于其他NoSQL,第三方支持丰富;性能优越;
- 缺点:mongodb不支持事务操作;mongodb占用空间过大;MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方;
Hbase
《简明 HBase 入门教程(开篇)》
《深入学习HBase架构原理》
《传统的行存储和(HBase)列存储的区别》
-
《Hbase与传统数据库的区别》
-
《HBase Rowkey设计》
- rowkey 按照字典顺序排列,便于批量扫描。
- 通过散列可以避免热点。
搜索引擎
搜索引擎原理
Lucene
Elasticsearch
- 《Elasticsearch学习,请先看这一篇!》
- 《Elasticsearch索引原理》
Solr
- 《 Apache Solr入门教程》
- 《elasticsearch与solr比较》
sphinx
性能
性能优化方法论
-
《15天的性能优化工作,5方面的调优经验》
- 代码层面、业务层面、数据库层面、服务器层面、前端优化。
《系统性能优化的几个方面》
容量评估
- 《联网性能与容量评估的方法论和典型案例》
-
《互联网架构,如何进行容量设计?》
- 评估总访问量、评估平均访问量QPS、评估高峰QPS、评估系统、单机极限QPS
CDN 网络
- 《CDN加速原理》
- 《国内有哪些比较好的 CDN?》
连接池
性能调优