【精】如何在项目中开启上帝视角——由浅入深研究监控系统
监控系统俗称“第三只眼”,几乎是我们每天都会打交道的系统。本文将会从一个简单的监控系统开始,讲解系统模块组成,监控数据流向,由浅入深,研究典型监控系统的设计,最后比较一下两个监控系统的架构设计和场景表现。由于作者本人也是刚入门的新手,文章中如有错漏,欢迎随时指正。
监控系统的工作原理关于监控系统信息的分类,目前还没有比较统一的说法。本文将监控信息分为三类:基本信息、主机(容器)资源信息和应用(服务)信息,上述三种分类刚好对应了三类具有不同特点的信息:
分类
特点
举例
基本信息
由计算机本身确定、长期不变、通常只需要采集一次
CPU频率、内存大小、磁盘空间、网络地址等
主机(容器)资源信息
随时改变、客观存在、用户不可定义和修改
CPU利用率、内存利用率、磁盘利用率、网络传输速率等
应用(服务)信息
类型多样、用户可自定义和修改、每台主机都不一样
服务技术栈,metrics信息
Prometheus对于Metrics的定义如下:
Metrics are numerical measurements in layperson terms. The term ti ...
【Exp】深入理解Go语言函数与方法
函数Go语言的函数有四个组成部分:函数名、形参列表、返回值列表、函数体。一个最标准的函数形式如下:
123func twoSum(x, y int) int { return x + y}
函数的前三个组成部分构成了函数的签名,可以使用如下方式查看签名,其中%T是Go语言的占位符,用于打印变量的类型。
1234f := twoSumfmt.Printf("%T\n", f)// 输出结果:// func(int, int) int
函数在Go语言中也是一种数据类型,具有地址。可以通过函数名或者&运算符来获取函数的地址,并将其赋值给函数类型的变量。这使得在Go语言中可以像操作其他类型一样操作函数,例如将函数作为参数传递给其他函数或存储函数的地址。所以,可以使用函数作为参数传递实现回调函数,也可以将返回值设置为函数实现闭包,后面会详细讲。在我看来,函数可以理解成为一个特殊的引用数据类型,其零值为nil,可以取址、可以作为赋值符号的右操作数。
接下来文章将按照函数的四个组成部分逐步深入理解函数。
形参参数列表可以简写,例如:
1fun ...
Java内置集合框架及其线程安全性
首先需要了解一下Java的集合框架,主要包含三部分:Collection, Iterator和Map。Collection是集合,包括List, Set, Queue等等。Iterator是迭代器,Map是映射。本文不会讲解他们的基本使用和常用方法,主要针对特性和彼此的异同进行研究。我们先来看一下Java的集合框架的总览图:
这里面的数据结构非常多,一开始可能会一无所措,但是其实慢慢拆解发现也没那么难。
CollectionColletion是最常用的集合工具,下面这张图表现了Collection中的主要接口和类及其特点。
Collection Interface先来看一下Collection接口的源码都有哪些函数吧。
不难发现,Collection的这些操作都是集合的常见操作,尤其是contains, clear, add, remove等等。这些接口在不同的数据结构中有不同的实现,例如对于一个List而言,remove就是直接移除队首元素,而对于一个堆(或者说优先队列)而言,remove就是移除堆顶元素,然后将最后一个元素放上来往下筛。
List先说List。从实现方式上面看 ...
Docker部署项目指南
Docker简介这篇文章是新手向的Docker使用文章。所以现在介绍一下Docker吧。根据Docker官方的说法:
Docker helps developers build, share, run, and verify applications anywhere — without tedious environment configuration or management.
简单来说就是一个帮助开发者构建、运行和分享应用的容器,它可以让你无需考虑在不同的机器上运行的时候的环境配置问题。想象一下你自己写好的一个软件,但是到了别人的计算机无法运行,又找不到环境配置哪里没配好,那个情景有多难受。这时候,如果使用了Docker,你就会明白什么叫纵享丝滑部署。
Docker安装这里的Docker安装指的是安装Docker-CE(Community Edition)。根据Docker官方指导,有四种安装方法,这里介绍两种。
Docker Desktop
主要适用于带有桌面的计算机,如Windows,Ubuntu桌面等。安装了DockerDesktop就相当于安装了Docker-C ...
高性能计算与云计算
高性能计算与云计算互联网络互联网络分为静态互联网络和动态互联网络。
静态网络是指各节点之间有固定连接的一类网络。程序执行期间,网络连接不改变。动态网络是用开关单元构成的,可以动态改变连接状态的网络。
静态互联网络的特征
网络规模:网络的节点个数
节点度数:单向网络中,入射和出射边之和称为节点度
网络直径:任意两个节点之间的最长距离
对剖宽度:将网络对分所必须移除的边的数目,如果是奇数个的话理解成可以把某个点切开,如二叉树,N=3的线性阵列
对称:从任何一个节点观看网络都一样,称为对称。(有限个网络的场景,网孔、线性阵列是非对称的)
静态互联网络特征比较
网络名
网络规模
节点度数
网络直径
对剖宽度
对称
链路数
线性阵列
N
2
N-1
1
非
N-1
环形
N
2
==$\lfloor N/2 \rfloor$==
2
是
N
==2D网孔==
$N=n^2$
4
==2(n-1)==
n
非
= ...
Web应用开发
Web应用开发的课程笔记。
Web应用开发Web基础知识HTML基本概念
DOM:文档对象模型,是独立于平台的内容和结构。一个HTML的所有元素的表示模型就是一个DOM,表现为一个多层级的树
BOM:浏览器对象模型,独立于内容且可以和浏览器交互的对象。
BOM的层次如下:
HTTP协议
协议组成,常见状态码,常用方法
HTTP工作三大特点:无连接,媒体独立,无状态的
八种请求类型:GET, POST, PUT, DELETE, OPTIONS, HEAD, TRACE, CONNECT
HTTP请求:由请求行(请求方式、资源路径、所用HTTP版本),请求头,实体内容
HTTP响应:由响应状态行、响应头、实体内容
CSS基础四种引入方式:行内式、内嵌式、外链式、导入式。
外链式和导入式都是引入外部CSS代码的方法,异同在于:
外链式:使用<link href=””>标签引入,导入式使用@引入,例如<style>@import “css/hello.css”<style>
代码:
12345678910111 ...
WSL食用指南
这是一个WSL开发的使用指南,可以享受Linux的开发环境和Windows的办公环境(主要是买不起Mac)。下面是使用WSL开发的基本指南。
WSL食用指南基础配置篇CentOS已经停止维护,推荐使用Debian,轻量且稳定。
要想使用Debian开发,需要完成下面几件事情:
更换apt源,阿里源或者清华源都可(如果是云服务器则不需要手动换源,一般对应厂商已经换好)。
apt install build-essentials,各种开发的基础。
换源教程:
安装Debian 12.0(bookworm),执行apt update更新apt。
下载https支持:
1apt install apt-transport-https ca-certificates
修改清华源:
123456789101112# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib# deb-src https://mirrors. ...
【Sangfor】深信服产品介绍与最佳实践
通过本文,你将了解到深信服产品的技术以及学习深信服产品的最佳实践,包括HCI、aDesk、EDS和AD等产品。。
深信服超融合HCIHCI产品简介HCI产品基础
深信服HCI(Hyper-Converged Infrastructure)定位云平台的软硬件,聚焦服务器、虚拟化、数据中心和交付等。深信服的HCI只需要通用的服务器和交换机软件,就可以利用软件技术构建计算、存储、网络和安全的统一资源池,实现基础架构的简化。
与传统的云基础架构(烟囱架构)相比,HCI只需要两种设备即可实现IT的基础要求,而传统的云平台需要服务器、存储设备、网络设备等等,维护成本高,运维复杂。
深信服HCI具有极简、可靠、高性能、更安全等特点。
深信服HCI的应用场景:
新建数据中心
数据中心改造场景
CPU应用承载
K8S应用承载
HCI关键特性深信服HCI关键特性可以由下图概括:
包括了安全特性,平台特性和高可用性等方面。
aSV服务器虚拟化aSV是深信服服务器虚拟化技术,具备了热迁移、HA高可用、动态资源调度DRS和动态资源添加DRX的四个基础功能。还有一些其他的优势特性和功能。
aSV(包括其他 ...
Linux简明使用教程
下面是Linux操作系统的简单,覆盖了Linux基本使用的常用指令。
Linux简明使用教程基本命令命令行和快捷键
补全命令:使用Tab键可以补全命令
Ctrl+A:光标移动到最前,Ctrl+E:光标移动到最后,Ctrl+L:清除当前窗口
ls -a -l -t和ls -alt是一样的
Linux文件
查看文件
创建文件:使用mknod或者touch创建文件,使用mkdir创建目录
删除文件:使用rm <文件名>指令,使用rm -r <文件名>可以删除目录
移动与复制:使用mv <源文件> <目标目录>移动文件,使用cp <源文件> <目标目录>实现复制文件并移动。
创建链接文件:ln -s <A> <B>
常见的文件类型标识:
chmod是一个用于修改文件或目录权限的命令。它可以更改文件的读取、写入和执行权限,以及文件所有者和所属组的权限。
例如,将sh设置为可执行的指令为:
1chmod -x script.sh
Vim编辑器的使用Vim有输入模式,命令模 ...
【Sangfor】数据中心与云计算
本文是深信服云计算学习课程的笔记,主要记录了数据中心、负载均衡的相关重点知识。
数据中心与云计算数据中心数据中心概述数据中心(DC)是为集中放置的电子信息设备提供运行环境的建筑场所,包括主机房、辅助区等等,也就是一个实现信息的集中处理、存储、传输交换的物理空间。
互联网数据中心(IDC)包括了高速的接入带宽、高性能局域网等等。
云数据中心
2006年亚马逊推出云数据中心,开创了云数据中心的时代。我国在2007年底开始使用云服务。
传统的IT架构:
传统的数据中心缺点:资源分布分散,利用率低,平均业务恢复时间长,手工分配资源,资源无法弹性适配,多DC分散管理,协同性差。于是云数据中心成为了主流。
云数据中心优点:虚拟化、安全可靠、敏捷性高。
数据中心和服务器什么是服务器?服务器是计算机的一种,指在网络环境下运行特定的软件,为客户提供服务的计算机。服务器的特性:高可用性、可靠性、可扩展性、易用性、易管理性。
服务器应用部署的常见架构:
服务器的常见软件:
特殊系统软件:openstack虚拟化软件
服务器虚拟化:将物理资源抽象成为逻辑资源:将一台服务器变成几台甚至上百 ...
一看就明白的Go语言并发教程
Go语言提供了强大的并发编程能力,通过Goroutines、Channels和互斥锁等机制,使得并发编程变得简单和高效。本文将使用通俗的语言和简单的案例讲述Go语言并发编程的那些事儿。
一看就明白的Go语言并发教程Go线程实现原理Go线程模型的三要素
M(machine):一个M代表一个内核级线程,或称“工作线程”,在Go语言中,Machine通常对应于一个操作系统线程,它可以在CPU上执行指令。
P(processor):一个P代表一个Go语言代码片段所需要的资源(或称上下文环境),它是Go调度器自己实现的一种调度单元。
G(goroutine):一个G代表一个Go语言的代码片段,G是对Go代码段的封装。
三者之间的关系如下图:
graph TD;
Machine((Machine)) --> Processor((Processor));
Processor((Processor)) --> Machine((Machine));
Processor --> Goroutine1((Goroutine 1));
Processor --> Goroutine2(( ...
GORM入门教程与最佳实践
GORM是一种Go语言的ORM(对象关系映射)库,用于简化数据库的操作。它提供了一种简单、易于使用的方式来进行数据库的增删改查操作,支持多种数据库,如MySQL、PostgreSQL、SQLite等。下面,我们将从理论和实践的角度学习GORM框架。
GORM入门教程与最佳实践简介对象关系映射(ORM)先来讲讲什么是ORM。ORM(对象关系映射)是一种编程技术,用于将关系型数据库中的数据映射到面向对象编程语言中的对象模型。它能够自动地在数据库表和对象之间建立映射关系,并提供一种简化数据库操作的方式。
相信有过Java开发经验的人都不会对MyBatis感到陌生,GORM的思想与MyBatis相似,都是为了简化数据库的操作,将数据库的一个关系映射到业务中的一个类或者结构体(尽管MyBatis并不认为是一个ORM框架,因为其保留了使用xml编辑数据库操作语言)。
ORM的核心思想是通过将数据库表的行数据映射为对象的属性,将数据库表的列映射为对象的字段,从而实现数据库和对象之间的无缝转换。ORM框架负责处理数据库的增删改查操作,以及数据库表和对象之间的映射关系,开发者只需要操作对象,而无需直接与 ...
【再学网络】http原理与实践
HTTP(Hypertext Transfer Protocol),又叫超文本传输协议,是一种用于在客户端和服务器之间传输超文本的协议。它是互联网上应用最广泛的一种协议,用于在 Web 浏览器和 Web 服务器之间进行通信。
【再学网络】HTTP原理与实践为什么需要协议HTTP是位于OSI参考模型和TCP/IP模型中的应用层的一个工作协议,使用HTTP协议是用户和开发者的双重需要。
从用户的角度看,需要HTTP的原因有:
访问和浏览网页:HTTP 协议是 Web 浏览器和 Web 服务器之间进行通信的基础。
下载和上传文件:HTTP 协议也被用于文件传输,用户可以通过 HTTP 请求下载文件,或通过 HTTP 请求上传文件。
与 Web 应用交互:现代的 Web 应用通常是基于 HTTP 协议构建的,用户可以通过 HTTP 请求与 Web 应用进行交互。
从开发者的角度看,原因有:
通信协议的标准化:HTTP 协议定义了客户端和服务器之间通信的规范和约定,使得开发者能够按照统一的标准进行开发。
简单和易于开发:HTTP 协议采用简单的文本格式,易于理解和调试。
跨平台和 ...
Gin框架入门级教程与实践
Gin是一个用Go语言编写的高性能Web框架,它简洁、快速,并具有良好的路由和中间件支持。
Gin框架入门级教程与实践为什么使用Gin我们使用Gin的原因很直接也很简单,那就是Gin很强大也很简单。Gin框架具有如下的有点:
高性能:Gin框架使用了基于Radix树的路由匹配算法,使得路由查找非常快速。同时,Gin框架基于HTTP标准库进行开发,具有低内存占用和高并发处理能力。
简单易用:Gin框架提供了简洁的API和易于理解的代码结构,使得开发者能够快速上手并编写清晰、可维护的代码。
路由和中间件支持:Gin框架提供了灵活的路由定义方式,支持参数路由、分组路由等。同时,Gin框架内置了丰富的中间件支持,如日志、认证、CORS等,可以方便地实现各种功能和扩展需求。
JSON解析和输出:Gin框架内置了强大的JSON解析和输出功能,可以方便地处理请求数据和生成响应。同时,Gin框架还支持其他格式的数据解析和输出,如XML、YAML等。
插件生态丰富:Gin框架有着活跃的社区和丰富的插件生态,可以方便地集成其他常用库和组件,如数据库ORM、缓存库、验证库等。
这些看一下就好,以后会体会 ...
【Exp】Git的正确使用姿势与最佳实践
先问一下屏幕前的你,是不是还在使用压缩包传代码?是不是还在重命名一个“_备份”文件来保存修改,又或者说,对git的使用只停留在IDE的GUI上。当然作为一个合格的大一新生,这些事情估计都是常态。那么话不多说,我们直接开始——Git的正确使用姿势和最佳实践。
什么是git先来看看百度百科的介绍:
Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Wiki讲得更清晰一点:
Git (/ɡɪt/) is a distributed version control system that tracks changes in any set of computer files, usually used for coordinating work among programmers who are collaboratively developing source code during softwa ...