【有书共读10】《码农翻身》第三章-浪潮之巅的 Web
加密
哈希加密
- 常见哈希加密算法:MD5、SHA、Bcrypt。
- 彩虹表:暴力枚举来破解。
- 彩虹表防御措施:总的思路是通过增加计算成本来提升黑客的破解难度。具体方法有:a. 加盐,盐可以是固定盐或随机盐,盐的插入位置也可以选择;b. 多次哈希,单纯的增加计算成本。
对称机密
- 常见对称加密算法:DES、AES。
非对称机密
- RSA。
- 核心概念:消息(传输的内容)、消息摘要(对消息进行哈希加密后得到消息摘要)、数字签名(用 CA 的私钥对消息摘要进行机密后得到数字签名)、数字证书(消息和数字签名一起构成数字证书)、CA(证书颁发机构)。
- 非对称加密的核心是要将公钥安全地传输到客户端,前提是操作系统或浏览器内置了受信任的根证书颁发机构的公钥,此时网站和 CA 之间就已经可以建立起安全的连接,具体步骤:
- 将网站公钥及其他信息加密生成消息摘要,再用 CA 的私钥加密形成数字签名,最后将消息摘要和数字签名组合成数字证书;
- 网站将证书传输给客户端,客户端拿到证书后用 CA 的公钥对数字签名进行解密,然后对消息进行加密与解密后获得的消息摘要进行比较,一致的话说明证书没有被篡改,获得网站的公钥。
- 安全获得公钥后客户端就可以用网站的公钥加密对称机密的秘钥,传输给网站,只有网站能用它的私钥解密获得秘钥,之后客户端和网站就能用对称机密的方式进行通信了。
- 机密算法计算成本:哈希加密 > 对称加密 > 非对称机密。
认证
Session
- 传输的 sessionId 不包含用户信息,只是一个唯一标志,服务端保存这个标志和用户信息的映射,当用户登出时销毁这个映射。
Token
- 将用户信息和其他信息(如过期时间)进行加密形成一个 token 发送给客户端,认证的时候对 token 进行节目就可以拿到用户信息,不需要再服务端存储 token 和用户信息的映射关系。
高可用
MySQL
- 分区表:MySQL 实现,对客户端透明,处于同一个数据库中。
- 分表:对表进行垂直拆分,分成多个表。
- 分库:将多个表分开存储在不同的数据库。
- 分片:根据一定的分片规则(如一致性哈希算法)对表进行水平拆分。
- 复制,读写分离。
- 集群,MySQL cluster。
Redis
- 分片,哈希槽。
- 复制,读写分离,Redis Sentinel。
- 集群,Redis Cluster。
Nginx
- 双机热备,利用 keepAlived。
微服务
服务治理
- 包括服务的注册与发现,需要定期发送心跳进行健康检查。常用的服务发现工具:Eureke、Zookeeper、Consul、etcd。
服务消费
- 从注册中心获得服务列表,利用负载均衡算法选取一个服务进行消费。
服务调用
- REST 或 RPC。
服务熔断
- 当服务调用超时时返回一个默认的响应。
配置中心
- 分布式系统的配置中心。
消息总线
- 消息队列实现。
I/O 多路复用
select 模型
- 操作系统通知 selector 有 socket 准备好了,selector 遍历 fds,找出准备好的,阻塞读取。操作系统最多监控 1024 个 fds。
poll 模型
- 解决了 fds 集合大小只能是 1024 的问题。
epoll 模型
- 操作系统通知 selector 有哪些 socket 准备好了,selector 读取指定的 socket。