目 录
出现背景
Primeton LB、Primeton MemDB
在高性能Web应用中的作用
轮询
|
每个请求按时间均匀分配到不同的后端服务器。
|
权重
|
按照权重分配到后端服务器。权重越大,被分配的概率越大。
|
ip_hash
|
每个请求按访问 ip 的 hash 结果分配请求。
|
最少连接
|
请求会被转发到连接数最少的服务器上。
|
url_hash
|
每个请求按访问url的hash结果分配请求。
|
会话亲和
|
Primeton LB根据会话ID(从Cookie中获取),将相同的会话ID的请求转发到固定的服务器上。
|
自定义请求头
|
根据请求携带自定义的请求头的值进行转发。支持正则表达式(需要以^开始,$结束)。 |
但尽管Primeton LB的高性能足以应付绝大多数的场景,但单实例的Primeton LB也面临着可能出现单点故障的问题,因此Primeton LB支持通过Keepalived这一高可用的解决方案来保证服务的高可用。具体方案为配置高可用组后,用户请求的将是Keepalived配置的地址,随后再转发到具体Primeton LB实例上,除此之外,Keepalived监控着高可用组内主Primeton LB实例的状态,若主实例出现故障,将自动实现故障转移来保证服务的高可用。
虽然同一高可用组,只有一个主Primeton LB实例在对外服务,可能造成资源浪费问题,但仍可通过配置多个高可用组,使Primeton LB实例之间互为主备关系来解决。
2.Primeton MemDB在高性能Web应用中的作用
为了提高应用的响应速度,应用会进行各种各样的优化,其中增加缓存是最为常见的一种方法。Primeton MemDB作为一个高速的Key-Value内存存储系统,天然有着充当缓存的优势。
由于磁盘读取速度远远慢于内存的读取速度,而数据库内的数据都存储在磁盘上,当请求需要访问数据库时,无疑会大大增加请求的响应时间,因此可将Primeton MemDB作为数据库的缓存,客户端查询数据时不直接访问数据库而是先请求Primeton MemDB,若存在数据则直接返回,若不存在数据,再查询数据库,从而提高请求整体的响应速度。
同时存储在Primeton MemDB内的数据可设置超时时间,超时后,数据将自动清理,避免无限存储数据最终占满内存。由于Primeton MemDB是内存存储的,当服务重启后,数据将丢失,因此Primeton MemDB支持AOF与RDB的持久化方式,可分别通过配置文件配置。
AOF
|
AOF持久化方式具有更高的数据安全性,它可以记录每个写操作,包括增量操作和更新操作。当Primeton MemDB服务器启动时,它会重新执行AOF文件中的写命令以恢复数据库的状态。AOF文件的大小通常比RDB文件大,因为它记录了所有写操作,这可能会导致AOF文件占用更多的磁盘空间,并且在恢复数据时需要更长的时间。
|
RDB
|
RDB持久化通过将数据库的快照保存到磁盘上的二进制文件中来记录数据库状态。这个快照是在特定时间点上的数据库状态的完整副本,可通过配置文件修改两次备份间隔。但由于备份是定期执行,可能会丢失最后一次RDB操作到故障发生时写操作的数据。
|
虽然单机的Primeton MemDB性能已经能够支持上万级别的QPS,但是随着用户规模的与日俱增,并发量很有可能突破Primeton MemDB的上限,因此可通过配置主从模式实现读写分离来进一步提高Primeton MemDB的并发能力。
除此之外,Primeton MemDB还提供了哨兵机制来实现主从集群的自动故障恢复。功能如下:哨兵节点会不断检查主节点和从节点是否按预期工作,如果主节点故障,哨兵节点会将一个从节点提升为主节点。当故障实例恢复后也以新的主节点为主。
与PAS的集成
优势体现
总结
关于作者:齐钦,普元资深顾问,参与PAS、Primeton LB、 Primeton MemDB等中间件产品研发工作,深入了解国产化中间件。
本文分享自微信公众号 - EAWorld(eaworld)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。