目 录
01 出现背景
02 PrimetonLB、PrimetonMemDB在高性能Web应用中的作用
03 与PAS的集成
04 优势体现
05 总结
01
出现背景
随着互联网的快速发展和普及,各类Web应用已成为人们日常生活的重要组成,人们对Web应用的要求从过去的"能用"慢慢转变为"好用",对其性能和可靠性提出了越来越高的要求。
过去的应用通常仅仅关注于功能的完成,在性能方面可能没有进行过深入的优化,导致响应时间较长,并且承受不了高并发流量,而如今人们对应用响应时间的敏感度达到了毫秒级别,因此提高应用性能已经是越来越多企业的选择。即使用户能够忍受应用高延迟的响应,保持服务的可靠性仍是重中之重,传统的Web应用往往采用单一的服务器架构,服务器若出现故障,服务也因此将无法响应。综上所述,为了提供优质的用户体验、增强应用的竞争力和应对现代互联网环境,构建高性能Web应用成为迫切的需求。
在这个背景下,普元开发了Primeton LB和Primeton MemDB这两个关键组件,并能与PAS(Primeton Application Server,普元应用服务器中间件)形成更好的集成, 并满足构建高性能WEB中间件的需求。
Primeton LB(Primeton Load Balancer)是普元负载均衡产品的简称,是一个轻量级,高性能的负载均衡中间件。Primeton LB作为一种高性能的Web服务器和反向代理服务器,能够处理大量并发请求,并提供灵活的配置选项,以满足不同场景的需求,是Nginx的一个优秀替代方案。
Primeton MemDB(Primeton Memory DataBase)是普元数据缓存软件的简称,是普元自主研发可以替换Redis的一个高性能键值存储系统,提供快速的数据访问和持久化功能,可应用于缓存、共享Session和分布式锁等场景。
02
Primeton LB、Primeton MemDB
在高性能Web应用中的作用
1.Primeton MemDB在高性能Web应用中的作用
为了解决解决单机故障导致服务拒绝访问和服务器性能受限于硬件资源的物理上限等问题,业界一般通过水平扩容即增加服务器的数量来提升应用的性能和可用性,但若每台服务器都配置一个对外的访问接口,对用户而言又将是一种苦恼,且每台服务器所处理的请求数量可能不均,造成资源浪费等问题。针对以上情况Primeton LB具有内置的负载均衡和反向代理功能。
Primeton LB的负载均衡功能可以将请求智能地分发到多个后端服务器上,平衡每个服务器处理的请求数量,从而降低了单个服务器的负载压力。通过负载均衡,可以提高整个系统的吞吐量和并发处理能力,提供更快的响应速度和更好的用户体验。目前Primeton LB的负载均衡算法支持如下七种:
轮询 | 每个请求按时间均匀分配到不同的后端服务器。 |
权重 | 按照权重分配到后端服务器。权重越大,被分配的概率越大。 |
ip_hash | 每个请求按访问 ip 的 hash 结果分配请求。 |
最少连接 | 请求会被转发到连接数最少的服务器上。 |
url_hash | 每个请求按访问url的hash结果分配请求。 |
会话亲和 | Primeton LB根据会话ID(从Cookie中获取),将相同的会话ID的请求转发到固定的服务器上。 |
自定义请求头 | 根据请求携带自定义的请求头的值进行转发。支持正则表达式(需要以^开始,$结束)。 |
而通过反向代理,Primeton LB可以隐藏后端服务器的细节,保护服务器的安全性,并且对用户而言始终只有一个的访问接口。
但尽管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还提供了哨兵机制来实现主从集群的自动故障恢复。功能如下:哨兵节点会不断检查主节点和从节点是否按预期工作,如果主节点故障,哨兵节点会将一个从节点提升为主节点。当故障实例恢复后也以新的主节点为主。
03
与PAS的集成
PAS作为一款标准、安全、自主、高可用的面向未来架构的企业级应用服务器,支持Web应用的开发、部署、监控、管理等能力,Primeton LB与Primeton MemDB也能够很好地适配PAS。
当PAS创建集群后,可在Primeton LB中配置并绑定集群实例,使Primeton LB作为集群的负载均衡器。此时Primeton LB可以将请求分别转发到各个集群实例上,并对外通过一个统一的访问地址,从而保障应用的高可靠性。除此之外当应用使用集群方式部署后需要考虑分布式Session的问题,而PAS引入了“分布式 Session 存储”的技术,可以使用Primeton MemDB来持久化 Session 数据,大大提高了应用服务器在高并发、大集群情形下的性能表现。
04
优势体现
Primeton LB、Primeton MemDB作为构建高性能Web应用的重要组件,本身性能也十分优秀,而且广泛兼容国内不同架构CPU、操作系统,支持CPU如飞腾系列CPU、鲲鹏CPU、龙芯3000/4000/5000系列CPU、兆芯系列CPU、海光系列CPU,支持操作系统如银河麒麟V4、中标麒麟V7、麒麟V10、统信UOS20。
除此之外,相较于Nginx、Redis等类似软件,普元的Primeton LB和Primeton MemDB提供了控制台进行系统管理和配置等易用性和可维护性功能,可以在线编辑配置,实时监控实例状态,更方便用户对软件进行配置和维护。并且,Primeton LB兼容Nginx配置,不需额外的学习成本。而Primeton MemDB兼容Redis6以及原生Redis所有数据结构和API,因此基于Redis的业务系统无需修改业务代码就可以平滑迁移到 Primeton MemDB。
05
总结
Primeton LB和Primeton MemDB在Web应用的不同领域提供了强大的功能和性能优势,使得其在构建高性能Web应用中扮演着重要的角色,可以有效增强应用的并发能力,提高应用的高可用性,缩短应用的响应时间。除此之外,Primeton LB和Primeton MemDB在保持高性能的同时更加容易上手,与PAS集成也更加密切,并且兼容同类型的流行中间件,业务迁移方便。
关于作者:齐钦,普元资深顾问,参与PAS、Primeton LB、 Primeton MemDB等中间件产品研发工作,深入了解国产化中间件。