企业构建高性能Web应用的重要组件

news2024/11/23 12:12:57

f8230adc7049549ef3cef97b680855a9.jpeg

目    录

 

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

每个请求按访问urlhash结果分配请求。

会话亲和

Primeton LB根据会话ID(从Cookie中获取),将相同的会话ID的请求转发到固定的服务器上。

自定义请求头

根据请求携带自定义的请求头的值进行转发。支持正则表达式(需要以^开始,$结束)。

而通过反向代理,Primeton LB可以隐藏后端服务器的细节,保护服务器的安全性,并且对用户而言始终只有一个的访问接口。

83133f15518029759533ec4cff044db6.png

但尽管Primeton LB的高性能足以应付绝大多数的场景,但单实例的Primeton LB也面临着可能出现单点故障的问题,因此Primeton LB支持通过Keepalived这一高可用的解决方案来保证服务的高可用。具体方案为配置高可用组后,用户请求的将是Keepalived配置的地址,随后再转发到具体Primeton LB实例上,除此之外,Keepalived监控着高可用组内主Primeton LB实例的状态,若主实例出现故障,将自动实现故障转移来保证服务的高可用。

cda0dca5d9081be0de5f81c1910fa935.png

虽然同一高可用组,只有一个主Primeton LB实例在对外服务,可能造成资源浪费问题,但仍可通过配置多个高可用组,使Primeton LB实例之间互为主备关系来解决。

2.Primeton MemDB在高性能Web应用中的作用

为了提高应用的响应速度,应用会进行各种各样的优化,其中增加缓存是最为常见的一种方法。Primeton MemDB作为一个高速的Key-Value内存存储系统,天然有着充当缓存的优势。

f007119d079e767757a1c6884b84d6e9.png

由于磁盘读取速度远远慢于内存的读取速度,而数据库内的数据都存储在磁盘上,当请求需要访问数据库时,无疑会大大增加请求的响应时间,因此可将Primeton MemDB作为数据库的缓存,客户端查询数据时不直接访问数据库而是先请求Primeton MemDB,若存在数据则直接返回,若不存在数据,再查询数据库,从而提高请求整体的响应速度。

52938e3ae873423aa7f7bdc0f84dbec4.png

同时存储在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的并发能力

9ae43b014c919c4e1f0bb5d284adc680.png

除此之外,Primeton MemDB还提供了哨兵机制来实现主从集群的自动故障恢复。功能如下:哨兵节点会不断检查主节点和从节点是否按预期工作,如果主节点故障,哨兵节点会将一个从节点提升为主节点。当故障实例恢复后也以新的主节点为主。

92e35574ed56a56e1efa1cd901621b48.png

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集成也更加密切,并且兼容同类型的流行中间件,业务迁移方便。

745600f0f908dcc1bb9b8e51a6c58d69.jpeg关于作者:齐钦,普元资深顾问,参与PAS、Primeton LB、 Primeton MemDB等中间件产品研发工作,深入了解国产化中间件。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用QMenu和mousePressEvent制作右键弹出菜单

我需要实现一个在QTextBrowser上邮件弹出菜单的效果,如下所示: 创建QTextBrowser的子类MyTextBrowser 首先创建一个QTextBrowser的子类,MyTextBrowser,如下所示:并定义一个QMenu指针 #ifndef MYTEXTBROWSER_H #defin…

webpack打包处理字体图标、map4、map3、avi资源

一、字体图标资源的下载(阿里巴巴图标库) iconfont官网:https://www.iconfont.cn/ 这里你可以搜索你想要的字体图标,或者选择官方的图标库中查找,我这里就以官方的图标库为例: 选择几个加入购物车 点…

关于libc++_shared.so 与libstdc++、libc++的链接关系

问题点1: -lstdc 与libc_shared.so的关联; 当在makefile中引入-lstdc时,其意味着调用动态库libstdc.so, Note:动态库libstdc.so 所对应的静态库是libstdc.a; Note:当前测试libstdc.so来自于Android12的./prebuilts/gcc/linux-x86/host/x8…

图数据库实践 - 如何将图数据库应用于供应链管理

导读 当前,随着全球化的加速和供应链的复杂性增加,供应链风险管理已经成为企业日常运营中不可忽视的重要方面。由于自然灾害、贸易保护、供应商更迭等因素的影响,供应链中的任何一个环节出现问题都可能导致生产中断、物流延误、成本增加&…

结构型设计模式06-桥接模式

🧑‍💻作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 桥接模式 1、桥接模式模式介绍 桥接模式(Bridge Pattern)是一种结构型模式之一…

ssm+java+mysql在线捐赠系统

本系统实现一个在线捐赠系统,分为用户和管理员两种用户。具体功能描述如下: 后台管理员模块包括: 1. 系统用户管理:此功能为超级管理员所有,普通管理员没有此权限,实现超级管理员可以对普通管理员信息的…

如和使用matlab进行求导 ,入门级教程

文章目录 问题如图所示运行结果如图代码分析完整代码完结撒花 问题如图所示 运行结果如图 代码分析 % 定义样本数量 n 500;这行代码定义了一个变量 n,它代表样本数量。这个变量在后面的代码中会被用到。 % 将 s 和 z 取值范围分成子区间的个数 num_intervals 40…

MySQL数据库迁移到ORACLE(持续更新)

1. 使用Oracle SQL Developer 官方 SQL Developer 23.1下载 选择Windows 64-bit with JDK 11 included安装 2.下载后解压,选择exe执行启动,启动后见图 3. 创建连接 默认支持创建Oracle连接(见下图),第三方连接需导入…

企业微信自建应用 挂载网页步骤

打开企业微信网页端,并登录 企业微信 https://work.weixin.qq.com/wework_admin/frame#index 点击应用管理 再次点击 应用,划到自建版块,点击创建应用 依次添加应用信息 点击创建应用, 添加指定网页信息

【Android Studio】Flamingo版本 更新gradle插件(AGP) 7.+到8.+

步骤 build.gradle(module) android {namespace //adddefaultConfig {applicationId }}AndroidManifest.xml 取消package属性 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/andr…

如何设置imagedraw.draw.text的字体大小

如何设置imagedraw.draw.text的字体大小 解决方法 虽然绘制框是draw.text() 但是这个函数没有提供修改的参数 解决方法 其实在字体中已经设置了大小了&#xff0c;他是按照图像调整的&#xff0c;我就直接修改了。 参考文章

QTableWidget自定义单元格

一 自定义QTableWidget 创建一个Widget项目&#xff0c;注释掉其中的ui->setupUi(this);使用自定义的布局。 #include "widget.h" #include "ui_widget.h" #include <QTableWidget> #include <QTableWidgetItem> #include <QLineEdit&…

Vue.js中的provide和inject方法是什么,有什么区别

Vue.js中的provide和inject方法 在Vue.js中&#xff0c;provide和inject是用于父组件向子组件传递数据的一种技术。通过使用provide和inject&#xff0c;我们可以在组件树中任意层次的组件之间进行数据的传递和共享&#xff0c;从而实现复杂的数据交互和状态管理的需求。本文将…

FANUC机器人MODBUS TCP通信配置方法(示教器实物演示)

FANUC机器人MODBUS TCP通信配置方法(示教器实物演示) 机器人一侧的配置: 如下图所示,示教器上找到设置—主机通讯, 如下图所示,选择第一项TCP/IP,点击详细进入配置界面, 如下图所示,设置机器人端口1#的IP地址为192.168.1.10,子网掩码:255.255.255.0 如下图所示…

【深入理解Linux内核锁】一、内核锁的由来

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强公司&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

Java Web——使用Filter实现用户登录

实验名称&#xff1a; 使用Filter实现用户登录 实验目的&#xff1a; &#xff08;1&#xff09;了解什么是Filter。 &#xff08;2&#xff09;熟悉Filter的拦截过程和接口中的方法。 &#xff08;3&#xff09;掌握第一个Filter程序的编写方法。 &#xff08;4&#xf…

华为荣获上海市技术发明一等奖!基于CANN的视频增强平台以AI技术修复历史视频

2023年5月26日&#xff0c;上海市科学技术奖励大会隆重召开&#xff0c;由上海交通大学牵头&#xff0c;中国科学院深圳先进技术研究院、咪咕视讯科技有限公司、华为技术有限公司、上海云视科技股份有限公司、上海人工智能创新中心、上海媒智科技有限公司、上海数字电视国家工程…

Oracle免费云设置Multi-factor Authentication

申请Oracle免费云账号的时候系统就强迫用户设置Multi-factor Authentication&#xff0c;我选择了OracleMobileAuthenticator作为2次认证工具。刚开始用还顺利&#xff0c;但用了一段时间后Oracle登录页面迟迟未向OracleMobileAuthenticator发送通知&#xff0c;要等非常久App才…

大模型 LLM 综述, A Survey of Large Language Models

大模型 LLM 综述, A Survey of Large Language Models 一、概述 一般认为NLP领域的大模型>10 Billion参数(也有人认为是6B、7B, 工业界用, 开始展现涌现能力); 经典大模型有GPT-3、BLOOM、Flan-T5、GPT-NeoX、OPT、GLM-130B、PaLM、LaMDA、LLaMA等; 大模型时间线, 图来自…

chatgpt赋能python:Python绘图教程:将画笔移动到绝对位置的方法

Python绘图教程&#xff1a;将画笔移动到绝对位置的方法 Python作为一门高级编程语言&#xff0c;设计初衷是让编程变得简单、易学、易用&#xff0c;且支持多种编程范式&#xff0c;其中产生了让人惊艳的绘图模块——Turtle&#xff08;海龟&#xff09;。 在这篇教程中&…