小机灵鬼|42 张图带你揭秘后端技术都要学啥?( 五 )


反向代理负载均衡
这里典型的就是Nginx提供的反向代理和负载均衡功能 。 用户的请求直接叨叨反向代理服务器 , 服务器先看本地是缓存过 , 有直接返回 , 没有则发送给后台的应用服务器处理 。
小机灵鬼|42 张图带你揭秘后端技术都要学啥?反向代理负载均衡
IP负载均衡
上面一种方案是基于应用层的 , IP很明显是从网络层进行负载均衡 。 TCP./IP协议栈是需要上下层结合的方式达到目标 , 当请求到达网络层的黑猴 。
负载均衡服务器对数据包中的IP地址进行转换 , 从而发送给应用服务器 。
小机灵鬼|42 张图带你揭秘后端技术都要学啥?IP负载均衡
注意 , 这种方案通常属于内核级别 , 如果数据比较小还好 , 但是大部分情况是图片等资源文件 , 这样负载均衡服务器会出现响应或者请求过大所带来的瓶颈 。
数据链路负载均衡
它可以解决因为数据量他打而导致负载均衡服务器带宽不足这个问题 。 怎么实现的呢 。 它不修改数据包的IP地址 , 而是更改mac地址 。
应用服务器和负载均衡服务器使用相同的虚拟IP 。
小机灵鬼|42 张图带你揭秘后端技术都要学啥?数据链路负载均衡
以上介绍了几种负载均衡的方式 , 但是很重要的负载均衡算法却没有设计 , 其中包含了轮询 , 随机 , 最少连接 , 下面分别对此进行介绍 。
小机灵鬼|42 张图带你揭秘后端技术都要学啥?数据存储公司存在的价值在于流量 , 流量需要数据 , 可想而知数据的存储 , 数据的高可用可说是公司的灵魂 。 那么改善数据的存储都有哪些手段或方法呢?

  • 数据主从复制
主从复制比较好理解 , 需要使用两个数据库存储一样的数据 。 其原理为当应用程序A发送更新命令到主服务器的时候 , 数据库会将这条命令同步记录到Binlog中 。
然后其它线程会从Binlog中读取并通过远程通讯的方式复制到另外服务器 。 服务器收到这更新日志后加入到自己Relay Log中 , 然后SQL执行线程从Relay Log中读取次日志并在本地数据库执行一遍 , 从而实现主从数据库同样的数据 。
小机灵鬼|42 张图带你揭秘后端技术都要学啥?主从复制
主从复制可以方便进行读写分离 , 可以使用一主多从的方式保证高可用 , 如果从数据库A挂了 , 可以将读操作迁移到从数据库完成高可用 。
但是如果主数据库挂了咋搞 , 那就Mysql的主主复制 。 可是不管上面说的那种方式都不是提升它的存储能力 , 这就需要进行数据库的分片了 。
  • 数据库分片
将一张表分成若干片 , 其中每一片都包含一部分行记录 , 然后将每一片存储在不同的服务器中 , 这样就实现一张表存放在多台服务器中 , 哪都有哪些分片存储的方案?
最开始使用"硬编码"的方式 , 此方式从字面上可以理解为直接在代码中指定 。 假定表为用户表 , 通过ID的奇偶存放在不同的服务器上 , 如下图:
小机灵鬼|42 张图带你揭秘后端技术都要学啥?这种方式的缺点很明显 , 当需要增加服务器的时候 , 就需要改动代码 , 这就不友好了 。 比较常见的数据库分片算法是通过余数Hash算法 , 根据主键ID和服务器的数量取模 , 根据余数确定服务器 。


推荐阅读