Webfunny前端监控如何搭建高并发使用场景

Webfunny可以支持千万级别PV的日活量了。但是,我们默认的部署配置,是无法支持这么高的日活量的,需要我们做一些支持高并发的配置和操作,下面让我们一起看下如何让webfunny支持更高的并发量吧,下图为webfunny高并发架构图:

在这里插入图片描述

一、提升mysql最大连接数

正常情况下,如果我们的日志并发量比较高,我们遇到的第一个并发问题,应该是数据库的最大连接数。

如果给mysql设置一个合理的最大连接数,应该就能够支持一定量的并发了。

  1. 如何设置mysql连接数,请参考我的这篇博客:Mysql连接数设置

  2. 如何设置连接池数量,默认设置500,如果并发量高的用户,可以提高连接池数量,配置文件: config/db_local.js

  pool: {max: 500,  // 此处可提升min: 0,acquire: 30000,idle: 10000}, 

二、多点部署

如果你们日活量达到百万、甚至千万的级别,并且你们只部署了一台机器,那么将会遇到另一个瓶颈,就是服务器的TCP连接数不够用了。一旦出现流量高峰,很多日志上报请求都会连接超时,将会丢失大量的日志数据。

此时需要部署多台服务器,来缓解TCP连接数的压力。但是多台服务器的ip不同,如果才能让上报日志分发到不同的服务器上呢?

方式一(推荐):使用阿里云的负载均衡(SLB),将你的上报域名平均分配到多台机器上,即可实现多点部署。

方式二(自己配置):使用Nginx配置负载均衡,又Nginx来分发这些日志上报请求,配置如下:

http {# 分发upstream myApps {server 111.222.96.101:8011 weight=1; # weight 是权重,代表分发的比例server 111.222.96.102:8011 weight=1; # weight 是权重,代表分发的比例}# 代理server {location /server/upLog {proxy_pass http://myApps/server/upLog;proxy_connect_timeout 3000;proxy_send_timeout 3000;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}  }

注意:既然是多点部署,那么就需要区分主从服务器。

  1. 选一台服务器作为主服务器,启动方式为:npm run prd;重启命令为:npm run restart

  2. 剩下的服务器全都作为从服务器,启动方式为:npm run slave;重启命令为:npm run reslave;从服务器不会执行查询操作。

三、搭建消息队列

使用消息队列(RabbitMq),主要是为了缓解流量高峰的压力,削峰填谷。目前只能够支持RabbitMq,后续将会暴露出消息接口,以支持多种消息队列。

首先、我们需要多个消息队列服务,一台服务器对应一个消息队列。

你也可以安装在当前服务器上 Rabbitmq安装方法如下:

1)ubantu16 安装RabbitMQ服务软件包,很多教程都要求安装erlang, 但是更新apt以后,直接执行安装命令,会自动安装erlang的核心组件的。(erlang始终无法成功安装,真心累。)

$ apt-get update
$ apt-get install rabbitmq-server // 安装
$ rabbitmq-plugins enable rabbitmq_management // 启动插件,浏览器才能访问

正常情况下是直接成功的,直接访问ip端口号就可以打开了 http://IP:15672, 如下图:

在这里插入图片描述

2)现在我们需要一个有效的登录名和密码,执行如下命令

$ rabbitmqctl add_user username password  // 设置用户名密码
$ rabbitmqctl set_user_tags username administrator  // 设置为管理员身份
$ rabbitmqctl set_permissions -p / username ".*" ".*" ".*"  //为用户设置读写等权限

OK, 现在我们登录进来就是这样的界面,如此消息队列服务我们算是搭建完成了。

在这里插入图片描述

其次、进入monitor/config_variable/config.json文件中,调整参数:messageQueue: true, 进入lib/RabbitMq.js文件中配置消息队列的连接 amqp.createConnection({url: “amqp://用户名:密码@127.0.0.1:5672”});

注意:不可以多台服务器都向同一个消息队列服务添加消息,这样消息队列本身也扛不住。

四、配置读写分离(mysql主从同步)
我们把消息队列服务搭建好以后,就会遇到第二个瓶颈:大数据的查询

因为我们的分析日志的,所以免不了对大数据的分析和查询,如果在进行大量数据查询的时候,遇到了流量高峰,那么数据库的连接数就会瞬间耗尽,从而产生了大量的连接数报警,所以,我需要做读写分离。

  1. 我们需要配置mysql的主从同步,有条件的可以配置一主多从。(一般一主一从也就差不多够用了)配置方法请参考:主从同步配置

主从同步常见问题及处理:常见问题1、常见问题2、常见问题3

PS:主从同步的配置比较麻烦,请用户自己查询相关文档,完成配置,或者直接使用运行商的数据库。

  1. 配置mysql的最大连接数,mysql默认最大连接数很小,至少是设置1000以上(这个我也说不清设置多少最好,一般设置几千应该没问题)

  2. 进入webfunny_monitor/bin/mysqlConfig.js文件中,找到参数「read」,配置从库的连接即可。

好了,webfunny前端监控的高并发配置就算完成了,感兴趣的同学可以直接访问webfunny搭建自己的埋点系统
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI安全前沿:模型攻击与防御策略

引言 随着chatGPT的横空出世,通用人工智能的时代正式开启。人工智能极大地影响了人类的生活方式和生产方式,例如以ChatGPT为代表的各类大模型,能够理解和生成人类语言,并以对话的方式同人类进行互动,能够执行撰写文本…

Hot Chips 2024:博通(Broadcom)展示AI计算ASIC的光学连接

引言 在2024年的Hot Chips会议上,博通展示了其最新的AI计算专用集成电路(ASIC),这款ASIC集成了光学连接技术。这一展示不仅体现了博通在定制AI加速器领域的领先地位,也预示着未来数据中心网络技术的一个重要发展方向。…

重塑视频监控体验:WebRTC技术如何赋能智慧工厂视频高效管理场景

视频汇聚EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。 EasyCVR平台不仅兼容多种主流标准协议及私有协议/SDK的接入(如&…

qt实现三原色滑动条变色

在qt中有这样一个控件: 就是这个Horizontal Slider他的作用相信大家都知道了,也就是通过滑动来改变数值。今天我们就使用这个控件实现一个三原色滑动变色。 实现效果: 1.创建UI界面 这个就不用多说了,这个大家就按照我的这个去…

Python虚拟环境创建和使用总结

参考: venv --- 虚拟环境的创建 — Python 3.12.5 文档 【Python进阶】Python虚拟环境使用全方位指南:从零开始轻松实践 - 知乎 (zhihu.com) Python 如何删除使用 venv 创建的 Python3 虚拟环境|极客教程 (geek-docs.com) 我们知道,python程序…

【C/C++】C++类与对象基本概念(抽象封装、类的定义与使用、构造函数、析构函数、静态成员、友元)

目录 七、类与对象基本概念7.1 抽象7.2 类的定义与声明7.3 访问控制7.4 类的实现与使用7.5 对象指针、this指针与对象引用7.6 构造函数7.7 析构函数7.8 拷贝构造函数7.9 类类型作为函数参数7.10 对象数组7.11 静态成员7.12 常对象与常成员(const)7.13 友…

讲个SystemVerilog disable语句的坑

前言 记录个使用SystemVerilog disable语句时遇到的坑,这个坑有点反直觉,以至于我当时有点不信,觉得可能是EDA仿真工具的问题。后来查看了SystemVerilog手册和使用不同EDA工具进行验证,才慢慢接受了。结论是:SystemVe…

ctfshow之web58~web71

目录 web58 思路一: 思路二: 思路三: web59~web65 web66~web67 web68~web70 web71 web58 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); } PHP eval() 函数介绍 定义和用法 eval() 函数把字符串按…

新型蜜罐有哪些?未来方向如何?

前言:技术发展为时代带来变革,同时技术创新性对蜜罐产生推动力。 一、新型蜜罐的诞生 技术发展为时代带来变革,同时技术创新性对蜜罐产生推动力,通过借鉴不同技术思想、方法,与其它技术结合形成优势互补,…

python内置模块time详解(我们需要了解的多种时间格式)

Python的time模块提供了各种与时间相关的函数。我们可以获取当前时间、操作时间日期、计算两个时间差等。 时间有两种标准表示法: 数字表示: 整数或浮点数,通常是自从1970年1月1日以来的秒数。9个整数组成的元组:元组项包含年份,月份&#…

Diffusion 模型生成图片太慢了?用 AE(AutoEncoder) 和 VAE 加速一波!

Diffusion 模型生成图片太慢了?用 AE(AutoEncoder) 和 VAE(Variational AutoEncoder) 压缩图片加速一波! 本文分为两个部分:理论学习和代码实践。 先预览一下 AE 和 VAE 模型的效果: 理论学习 本文价值 Diffusion 模型生成图片的效…

图像识别智能垃圾桶项目开发--语音命令识别垃圾

一、项目思维导图 二、语音模块配置信息 三、项目程序 main.c garbage.c garbage.h uartTool.c //串口发送数据 uartTool.h

台式机CPU温度90℃以上-排查思路

虽然现在台式机不值钱。 但是对于穷苦老百姓来说,还是害怕它坏掉,坏掉就又需要花钱买了。 ①风扇清理所有灰尘(风扇的散热网是可以拆下来的), 主板清理所有灰尘(用画笔或者干燥的牙刷,注意是…

编程效率进阶:打造你专属的 Git 别名与 PyCharm 完美结合

在日常开发中,Git 是我们不可或缺的工具。掌握常用 Git 命令可以帮助我们更高效地进行版本控制,但随着命令的复杂性增加,记住所有命令变得困难。这时,Git 别名的设置就显得尤为重要。此外,许多开发者使用 PyCharm 作为…

TypeScript与vue

一、为组件的props标注类型 - 在没有使用TS之前,是这样接受props: - 在TS环境中,是这样接受props: - 对于props的可选项如何限制呢? 1、类型限制 类型限制在接收的时候就已经定义好了 2、可选属性(必填限制…

c# net8调用vc写的dll

dll程序(vc,x86) 头文件 extern "C" int __declspec(dllexport) WINAPI add(int a, int b);实现 int WINAPI add(int a, int b) {return a b; }c#/net8 函数声明: [DllImport("dll/Dll1.dll", CallingConvention CallingCo…

c++中的匿名对象及内存管理及模版初阶

目录 c中的匿名对象 日期到天数的转换 深入理解析构 深入理解拷贝构造 内存管理 全局变量和static变量的区别; malloc/calloc/realloc的区别 new和delete的意义? operator new与operator delete函数 对比malloc和new operator 定制operator ne…

switch语句和while循环

switch语句和while循环 switch语句break的用法default的用法switch语句中的case和default的顺序问题 while语句while语句的执行流程while语句的具体例子 switch语句 switch 语句是⼀种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。它把多重 的 else if…

Markdown语法与Latex公式汇总

1 基本语法 1.1 标题 语法如下: 效果如下: 1.2 字体样式 语法效果普通正文字体普通正文字体*倾斜字体*倾斜字体**加粗字体**加粗字体***倾斜加粗字体***倾斜字体~~划线字体~~倾斜字体 1.3 分割线 语法如下: 效果如下: …

鸿蒙项目签名配置

配置需要以下四个文件: 1. p12文件 2. csr文件 3. cer文件 打开AGC平台 点击申请调试证书 4. p7b文件 最后在项目中进行配置 配置项目的module.json5中