泛微e8做网站门户dede 电商网站

web/2025/10/7 1:25:33/文章来源:
泛微e8做网站门户,dede 电商网站,大足建网站的,网站制作方案的重要性我在上一篇文章中#xff0c;提到了目前的认证方式存在一些问题#xff0c;需要替换为一种更简单的认证方式。 但是最后发现#xff0c;认证这个实在是没有办法简单化#xff0c;认证本身又是另外一个不小的话题了#xff0c;因此关于这一点先留个坑。 本文先讨论一下另外…我在上一篇文章中提到了目前的认证方式存在一些问题需要替换为一种更简单的认证方式。 但是最后发现认证这个实在是没有办法简单化认证本身又是另外一个不小的话题了因此关于这一点先留个坑。 本文先讨论一下另外一个也比较重要的功能监控。 为认证预留扩展点 虽然我们暂时不去实现更加完善的认证流程但是我们依然可以先为其预留一个扩展点 这样在未来我们要实现认证的时候就不需要改动太多的代码了。 同样的我们也可以基于 DIP 原则来实现我们可以定义一个 Authenticator 接口 type Authenticator interface {// Authenticate 验证请求是否合法第一个返回值为用户 id第二个返回值为错误Authenticate(r *http.Request) (string, error) }然后我们可以在 Hub 结构体中添加一个 authenticator 字段 type Hub struct {// 验证器authenticator Authenticator }而对于我们目前的这种基于 jwt token 的认证方式我们可以实现一个 JwtAuthenticator var _ Authenticator JWTAuthenticator{}type JWTAuthenticator struct { }func (J *JWTAuthenticator) Authenticate(r *http.Request) (string, error) {jwt : NewJwt(r.FormValue(token))return jwt.Parse() }接着我们在 newHub 中初始化这个 authenticator func newHub() *Hub {return Hub{// ... 其他代码 ...authenticator: JWTAuthenticator{},} }这样我们就可以在 serveWs 中使用这个 authenticator 了 func serveWs(hub *Hub, w http.ResponseWriter, r *http.Request) {uid, err : hub.authenticator.Authenticate(r)if err ! nil {log.Println(fmt.Errorf(jwt parse error: %w, err))return}// ... 其他代码 }在后面我们实现了更加完善的认证流程之后我们只需要实现一个新的 Authenticator 即可。 2023 了应用监控怎么做 发展到今天我们已经有了很多很好用的监控相关的东西比如 Prometheus、Grafana 以及一些分布式链路追踪的组件如 skywalking、jaeger 等。 但是他们各自的应用场景都不太一样并不存在一个万能的监控工具因此我们需要根据自己的需求来选择 PrometheusPrometheus 是一个开源的系统监控和报警工具。主要用于收集、存储和查询系统的监控数据以便进行性能分析、故障排除和告警。GrafanaGrafana 是一个开源的数据可视化和监控平台用于创建、查询、分析和可视化时间序列数据。目前比较常见的组合就是 Prometheus Grafana通过 Prometheus 收集数据然后通过 Grafana 展示数据。分布式链路追踪常用语分布式系统的调用链路追踪可以用于分析系统的性能瓶颈以及分析系统的调用链路。常见的实现有 skywalking、jaeger 等。 在我们这个实例中我们只需要实现一个简单的监控即可因此我们可以使用 Prometheus Grafana 的组合。 Prometheus 基本原理 但在此之前我们最好先了解一下 Prometheus 的工作原理下面是来自 Prometheus 官网的架构图 我们可以从两个角度来看这张图组件、流程。 组件 Prometheus ServerPrometheus 服务端主要负责数据的收集、存储、查询等。上图中间部分AlertmanagerPrometheus 的告警组件主要负责告警的发送。上图右上角Prometheus web UI可以在这个界面执行 PromQL另外 Grafana 可以让我们以一种更直观的方式来查看指标数据也是使用 PromQL。上图右下角exportersexporters 是 Prometheus 的数据采集组件主要负责从各个组件中采集数据然后发送给 Prometheus Server。非常常见的如 node_exporter也就是服务器基础指标的采集组件。除了 exporters还有一种常见的数据采集方式是 Pushgateway也就是将数据推送到 Pushgateway然后由 Prometheus Server 从 Pushgateway 中拉取数据。也就是上图左边部分 流程 采集数据也就是从 Pushgateway 或者 exporter 拉取一些指标数据。存储数据Prometheus Server 会将采集到的数据存储到本地的 TSDB 中。查询数据我们可以通过 web UI 或者 Grafana 来查看数据。 最后我们可以在 Grafana 中看到如下图表 通过这个图我们就可以很直观的看到我们的系统的一些指标数据了并且能看到这些指标随着时间的变化趋势。 Grafana 里面的图表都是一个个的 PromQL 查询出来的结果对于常见的一些监控指标Grafana 上可以找到很多现有的模板直接使用即可。 Prometheus 采集的是什么数据 举一个简单的例子对于一个运行中的系统而言每一刻它的状态都是不太一样的比如可能上一秒 CPU 使用率是 10%下一秒就变成了 100% 了 但可能过 1 秒又降低到了 10%。当我们的系统出性能问题的时候我们就需要去分析这些指标数据找到问题所在。 比如排查一下出现性能问题的那个时间点CPU 使用率是不是很高如果是的话那么就有可能是 CPU 导致的性能问题。 而 Prometheus 的作用就是帮助我们采集这些指标数据然后存储起来等待某天我们需要分析的时候再去查询这些数据。 又或者监控到指标有异常的时候可以通过 Alertmanager 来发送告警。 Prometheus 采集数据频率 Prometheus 采集数据的频率是可以配置的我们一般配置为 1 分钟采集一次。 也就是说每隔 1 分钟Prometheus 才会从 exporter 拉取一次数据然后存储起来。 应用指标数据采集 对于我们的应用而言往往也有一些指标可以帮助我们看到应用内部的状态比如应用内的线程数、应用占用的内存、应用的 QPS 等等。 但是对于应用指标的监控并没有一个统一的标准我们需要根据自己应用的实际情况来决定采集哪些指标。 我们的消息推送系统如何做监控 应用指标 对于我们的消息推送系统而言目前采集以下这两个重要指即可 连接数可以了解服务器当前负载 连接数我们可以直接通过 len(hub.clients) 来获取非常简单。 等待推送的消息数可以了解服务器能否及时处理消息 我们可以在 Hub 中添加一个 pending atomic.Int64 字段来记录当前等待推送的消息数然后在 send 方法中进行更新 func send(hub *Hub, w http.ResponseWriter, r *http.Request) {// ... 其他代码 ...hub.pending.Add(1) }同时在处理完成之后我们也需要将其减 1所以 writePump 也需要进行修改 func (c *Client) writePump() {for {select {case messageLog, ok : -c.send:c.conn.SetWriteDeadline(time.Now().Add(writeWait))if !ok {// ...c.hub.pending.Add(int64(-1 * len(c.send)))return}if err : c.conn.WriteMessage(websocket.TextMessage, []byte(messageLog.Message)); err ! nil {// ...c.hub.pending.Add(int64(-1 * len(c.send)))return}}c.hub.pending.Add(int64(-1))} }我们在 writePump 中有三个地方需要对 pending 字段做减法连接关闭、发送出错、发送成功。 exporter 以及 Grafana 配置 现在我们知道了我们有两个比较关键的指标需要采集那到底是如何采集的呢 具体来说会有以下两步 在消息推送系统中添加一个 /metrics 接口 这个接口的作用就是将我们的指标数据暴露出来以便 Prometheus 采集。 它返回的就是请求时的连接数和等待推送的消息数返回的格式也有一定要求但也不复杂具体来说就是 一行一个指标可以返回多个指标多行即可每个指标前一行指定其类型TYPE每行的格式为指标名称{标签名称标签值, ...} 指标值 下面是一个简单的例子 # HELP http_requests_total The total number of HTTP requests. # TYPE http_requests_total counter http_requests_total{methodGET, endpoint/api} 100 http_requests_total{methodPOST, endpoint/api} 50在这个示例中: http_requests_total 是指标名称{methodGET, endpoint/api} 是标签集合用于唯一标识两个不同的时间序列。100 和 50 是样本值表示在特定时间点上的 HTTP 请求总数。 最终我们得到了一个如下的 /metrics 接口 func metrics(hub *Hub, w http.ResponseWriter, r *http.Request) {var pending hub.pending.Load()var connections len(hub.clients)w.Write([]byte(fmt.Sprintf(# HELP connections 连接数\n# TYPE connections gauge\nconnections %d\n, connections)))w.Write([]byte(fmt.Sprintf(# HELP pending 等待发送的消息数量\n# TYPE pending gauge\npending %d\n, pending))) }不要忘记了在 main 中加上一个入口 http.HandleFunc(/metrics, func(w http.ResponseWriter, r *http.Request) {metrics(hub, w, r) })最终这个接口会返回如下的数据 # HELP connections 连接数 # TYPE connections gauge connections 0 # HELP pending 等待发送的消息数量 # TYPE pending gauge pending 0在 Prometheus 中配置 exporter 我们需要在 Prometheus 配置文件中加上以下配置 scrape_configs:# 拉取我们的应用指标- job_name: websocketstatic_configs:- targets: [192.168.2.107:8181]注意这里不需要在后面加上 /metrics因为 Prometheus 默认就是去拉取 /metrics 接口的。 然后我们就可以在 Prometheus 的 web UI 中看到我们的指标数据了。 在 Grafana 中配置图表 最后我们可以在 Grafana 中配置一个图表来展示我们的指标数据 这样我们就可以看到一个等待发送的消息数量以及连接数的变化了。 总结 最后再来简单回顾一下本文所讲内容主要包括以下几个方面 认证方式是另外一个比较复杂的话题但是我们依然可以为其预留出一个扩展点先实现其他功能后再来完善。目前市面上有很多监控相关的组件本文使用了 Prometheus 作为例子来演示如何在项目中采集应用的指标数据以及如何通过 Grafana 来展示这些指标的变化。Prometheus 中包含了 Prometheus Server和exporters等组件其中Server是实际存储数据的地方而exporters 是用来采集指标数据的程序。Prometheus 采集到的数据我们可以通过 Grafana 来进行可视化展示更加的直观。应用中也可以暴露一个 /metrics 端口来返回应用当前的一些状态只要遵循 Prometheus 的规范即可。

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

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

相关文章

钦州建设局网站wordpress去除仪表盘

03贪心:摆动序列 376. 摆动序列 局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。 整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。…

陕西购物商城网站建设宿州产品网站建设

步骤如下: 一、 二、 三、 四、 五、 六、 七、 八、 九、检验 注意:只有本机可以访问ftp,外部电脑无法访问ftp?可能是防火墙未关闭。

优秀策划设计网站4线城市搞网站开发

编者按: 1024 是 2 的十次方,是二进制计数的基本计量单位之一。在计算机的发展史中,在和 0/1 所代表的二进制世界里,有人用代码编织出了形形色色的数字、程序、互联网,创造出一个个神话。 ——他们就是一群可爱、低调…

挖掘关键词爱站网宁波seo教程app推广

Docker安装Mysql5.7,解决无法访问DockerHub问题 简介 Docker Hub 无法访问,应用安装失败,镜像拉取超时的解决方案。 摘要 : 当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的…

成都网站设计价格漂亮的网页设计欣赏

在聊SharePoint开发之前,有必要说下什么是SharePoint. 在我工作的过程中,经常遇到客户对SharePoint不太了解的情况。有客户说,SharePoint太烂了,DropBox能做到的什么什么功能,SharePoint竟然做不到,很明显…

大同网站建设哪里好我国旅游网站的建设

关注我,学习Rust不迷路 工欲善其事,必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具,然后写一个简单的小程序。 安装 Rust环境 Rust 官方有提供一个叫做 rustup 的工具,专门用于 rust 版本的管理,网…

网站同城在线哪里做最新在线代理服务器

编写一个java程序,设计一个汽车类Vehicle,包含的属性有车轮的个数wheels和车重weight。小汽车类Car是Vehicle的子类,包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个类都有构造方法和输…

网站国外空间北京企业网站推广价格

flyway (一种数据库版本控制工具 document) 两种文件 V 和 R V: V 开头是不可重复执行的文件,每次修改完都该更改名称 R: R 开头是可重复执行的文件,需要保证内部sql都是可以重复执行的 名称格式: V__table_name.sql, R__table_name.sql …

电脑网站拦截怎么解除ie显示wordpress网页不完整

反向代理服务器是一种部署在客户端和后端/源服务器之间的代理服务器,例如 NGINX、Apache 等 HTTP 服务器或用 Nodejs、Python、Java、Ruby 编写的应用程序服务器、PHP 和许多其他编程语言。 它是一个网关或中间服务器,它接受客户端请求,将其传…

网站制作价格浦东医院网站建设

Android AsyncTask两种线程池分析和总结(一) 前言在android AsyncTask里面有两种线程池供我们调用1. THREAD_POOL_EXECUTOR, 异步线程池2. SERIAL_EXECUTOR,同步线程池正如上面名称描述的那样,一个是异步线程池&#xff…

冠县住房和城乡建设局网站网站建设新手如何自己做网站

C线程库是C11新增的重要的技术之一,接下来来简单学习一下吧! thread类常用接口 函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动任何线程。thread(fn, args1, args2, ...)构造一个线程对象,并…

网站移动端优化的重点有哪些菜鸟怎么做网站

点击上方蓝字关注“汪宇杰博客”导语前阵有美国读者嘲讽我的博客在美国地区页面加载速度太慢,还好意思写性能优化的文章。为了让美国朋友们闭嘴,并不给中国人丢脸,我使用了钞能力,在 Azure 国际版上给我的博客部署了一个美国地区的…

做网站项目的意义ppt介绍做网站第一部

目录 1.线性表的类型定义 2.基本操作 3.线性表的存储结构 4.补充 1.元素类型说明 2.数组定义​编辑 3.c语言的内存动态分配 4.c的动态存储分配 5.c中的参数传递 引用类型作参数 6.顺序表基本操作的实现 1.线性表的初始化 代码示例: 2.销毁线性表&…

网站免费源码大全wordpress page样式

.clearfix { *zoom:1;}.clearfix:after{clear:both; display:block; height:0; visibility:hidden; line-height:0; content:\20;}转载于:https://www.cnblogs.com/chenhuichao/p/9223571.html

吉林移动网站网站建设公司项目介绍

Android之判断是否有网封装类 我们做项目的时候,一般都不能离开网络,下面是对判断是否有网类的封装 import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import…

网站翻页模板湖南二维码标签报价

大家好,今天我们要聊的是一个关于智能电表的小疑惑——智能电表是否能被“偷电”。可能你听过这样的说法,有人声称通过某些方法可以让电表不准确计费,甚至可以“偷电”。但事实真的是这样吗?让我们一起来科普一下。 首先,智能电表…

购物网站建设实训心得体会成都 网站备案 幕布拍摄点

ChatGPT是这样介绍自己的: ChatGPT是由OpenAI开发的一种基于大规模预训练的语言模型。它是建立在GPT(Generative Pre-trained Transformer)架构的基础上,经过大量的数据训练而成。 ChatGPT旨在通过对话与用户进行交互&#xff0…

网站没有建设好可以备案吗如何做做网站

约束 概念:就是用来作用表中字段的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确性,有效性和完整性。 约束演示 #定义一个学生表,表中要求如下: #sn 表示学生学号,要求使用 …

情感视频素材网站品牌型网店

背景:最近在重新学习vi/vim,发现这个编辑器的用法真是太灵活了,所能掌控的也太多了,这次学习了一些之前没有学习过的内容,之前都是移动鼠标、编辑、复制、粘贴、保存等等(点我查看),本次将介绍 标签、区域、…

长春网站建设net网络编程技术期末考试

ISR(In-sync Replicas):保持同步的副本 OSR(Outof-sync Replicas):不同步的副本。最开始所有的副本都在ISR中,在kafka工作的过程中,如果某个副本同步速度慢于replica.lag.time.max.ms指定的阈值,则被踢出ISR存入OSR&am…