跳转至

博客

基于 Prometheus 的微服务监控指南

监控系统

随着微服务架构的广泛应用,现代软件系统的复杂性不断增加,对于系统监控和故障排除也更加困难。

在微服务架构中,每个服务都是独立运行的,需要对大量的服务进行监控。

且研发几乎不可能对系统存在的风险有100%的认知,即使做到了100%的认知,也不可能对所有风险环节做了100%容错,有效预警可以帮助研发及时发现系统中潜在的bug。

一个有效的监控系统成为保证微服务高可用、稳定性、可靠性的关键因素。

监控系统可以提供以下几个方面的帮助:

  • 实时监测服务的健康状态和性能指标,以便及时检测和排除故障。
  • 收集各个服务的指标数据,用于分析和优化系统性能。
  • 对所有服务的监控数据进行统一管理和可视化展示,方便了解整个系统的情况。

本文将介绍如何使用Prometheus对golang微服务进行监控。

golang源码生成文档及注释语法

go version: 1.22.6

godoc

已弃用godoc 无法选择要显示的包版本,由 golang.org/x/pkgsite/cmd/pkgsite 替代。

godoc 提取 Go 代码里的注释生成网页的形式的 Go 程序文档

VSCode Remote Development-go开发环境搭建

安装vscode

刚学习go的时候一直使用的vscode开发,轻巧方便。但随着工程代码量增加,本地下载的包越来越多,代码提示和自动补全功能变得越来越慢,就转向了goland神IDE,打开一个工程占用1.5G内存,吓得我赶紧又加了8G内存!!!

正式版的vscode已支持VSCode Remote Development,附上vscode下载地址:Visual Studio Code下载地址

安装完成,安装GO扩展和Remote Development扩展,Remote Development扩展包含了Remote - SSHRemote - ContainersRemote - WSL三个扩展,分别用于通过ssh远程连接、连接docker容器和连接 Windows Subsystem for Linux (WSL)

李开复:留学带给我的十件礼物,第一件是自信

本文由 简悦 SimpRead 转码, 原文地址 https://mp.weixin.qq.com/s/BLIQNoeB9zFm6DZSpLlYgQ

今天分享的文章,是我之前的一个演讲,总结了自己从初中到大学的留学生涯得到的十个最大的收获。最近有媒体朋友整理发表,就转载过来。

目的是跟大家分享,如今历经世事的我,再回首成长历程,我发现那些珍贵的、终身受益的东西,不是科学知识,也不是当时引以为傲的成绩榜单,而是那些最基本的,人之所以为人的人格底色。

这些品质和能力,让我在后来的人生中,不断获得新的技能和社会能力,最终塑造了现在的我。

推荐给年轻的父母阅读,打好孩子的品格地基,比那些赢在起跑线上的速成技能要重要的多。而在所有的品格里,自信是第一位的。

git多账户共存

问题

很多开发者都会遇到在自己的电脑上使用不止一个 git 帐号的情况。一般一个是自己的 github 帐号,另一个则是公司的 git 帐号,比如 gitlab、bitbucket 等。如果采用 https 方式获取仓库,多个 git 帐号间不会有冲突,但在每次 pull、push 的时候都要输入帐号密码,十分麻烦。而且当代码库十分庞大时,如果仍然采用 https 方式,在 git pull 时可能出现超时不响应的情况,此时只能采用 ssh 方式。ssh 在配置完 ssh key 后使用起来很方便,但是 git 帐号间可能出现冲突,这时候该如何解决呢?

goroutine并发控制

通信

共享内存
func  Test() {
    ordersInfoApp  :=  make([]orderInfoApp, 0, totalCount)
    var  mux sync.Mutex
    wg  := sync.WaitGroup{}

    for  i  :=  0; i <=  10; i++ {
        wg.Add(1)
        go  func(pageIndex int) {
            // do somethine
            var  ordersInfo orderInfoApp
            mux.Lock()
            ordersInfoApp  =  append(ordersInfoApp, ordersInfo)
            mux.Unlock()

            wg.Done()
        }(i)
    }

    wg.Wait()
}

一般在简单的数据传递下使用