腾讯Mini项目课程前置学习笔记(第一轮)

news2024/10/6 6:50:37

Mini项目课程前置学习笔记(第一轮)


时间:5.20 ~ 5.23


项目基本介绍

项目 B. 指标监控服务重构

指标的收集与展示是后台系统监控中非常重要的一环,很可惜大而全的全链路监控方案并不适合我们,于是就有了本 mini 项目。本项目需要完成 go 语言的后台 SDK 开发、指标收集服务开发,并在我们提供的样例后台服务中使用 SDK 完成指定的 SRE 上报,并在 grafana 中配置相应的监控报表。挑战性在于保证资源消耗尽可能低的同时尽量提高查询性能,需要对比、验证在两种 otel-collector 下不同 clickhouse 数据表架构及不同索引下的性能差异。

  • 目的:指标的收集与展示是后台系统监控中非常重要的一环,很可惜大而全的全链路监控方案并不适合我们,于是就有了本 mini 项目。本项目需要完成 clickhouse 的 schema 设计和调优go 语言的后台 SDK 开发指标收集服务开发,并在我们提供的样例后台服务中使用 SDK 完成指定的 SRE 上报,并在 grafana 中配置相应的监控报表。挑战性在于保证资源消耗尽可能低的同时尽量提高查询性能,需要对比、验证不同数据表架构、索引的设计实现

  • 负责人:oliverdding 助手:kevineluo

  • 意义:

    • 对于实习生的意义:go 后台编程、clickhouse 数据库使用、clickhouse 性能调优、grafana 使用、SRE 概念与落地实现
    • 对于公司的意义:抛弃 PostgreSQL 服务,升级监控模块,降低交付成本
  • 用户群体(画像):

    • 职位:测试、研发、区技
    • 职级: 工程师
  • 使用具体场景:

    • 日常 SRE 报表
    • 服务监控
  • 先导知识与先导知识的学习方式,素材

    • 博客/网页

      • SRE:简单了解

        • SLI
        • SLO
        • SLA
      • ClickHouse:主要打交道的 OLAP 数据库

        • 主键索引:对于 ClickHouse 而言主键索引非常重要,认真学习(注意区分Primary Key 和 Order By Key)
        • 跳表索引:对于查询加速很有帮助,认真学习
        • 分区键:不是特别重要,可以按月划分
        • 四种插入方式选择:Bulk Insert、Streaming Insert、Buffer Engine 和AsynchronousInsert
          • 自行了解四种插入方式,并最终选择一种参考:image-20230521130805835
        • go 语言 ck 库选择:推荐 ch-go,其他的都不建议使用
      • Altinity Knowledge Base:极其有用的 ClickHouse 运维、调优相关文档

      • 什么是 trace,分布式调用监控的本质是什么?:扩展阅读

    • 推荐书本

      • The Site Reliability Workbook:SRE 书籍,用到再翻
    • 推荐开源项目

      • uptrace:全链路监控方案,可以参考表实现、SDK 实现和表结构
      • open telementry metrics:参考指标类型
    • 基础项目介绍

      • 架构设计文档:
      • 功能介绍文档:
      • 代码目录文档:
      • 数据流文档:
      • 宣传文档:
  • 组织要求:参与人数与角色

    • 总体人数:5~7
  • 角色:1~2 SDK 测开;3~4 后台测开;1 组长;


理解项目需求和技术栈

SRE

SRE is what you get when you treat operations as if it’s a software problem. Our mission is to protect, provide for, and progress the software and systems behind all of Google’s public services — Google Search, Ads, Gmail, Android, YouTube, and App Engine, to name just a few — with an ever-watchful eye on their availability, latency, performance, and capacity.

当您将操作视为软件问题时,您会得到 SRE。我们的使命是保护、提供和改进支持所有 Google 公共服务(Google 搜索、广告、Gmail、Android、YouTube 和 App Engine 等)的软件和系统,并时刻关注它们的可用性、延迟、性能和容量。

chatgpt prompt

你作为一位有多年开发经验的高级软件开发兼架构工程师,可以给出SRE(Site Reliability Engineering)的概念和基本例子吗

当谈到网站可靠性工程时,SRE(Site Reliability Engineering) 是一个广泛使用的概念,它涵盖了确保网站高可用性、可扩展性和安全性的一系列技术和策略。

SRE 的核心目标是提高网站的可用性和性能,同时降低维护成本。为了实现这个目标,SRE 团队通常会执行以下任务:

  • 监控网站的性能、可用性和安全性,并识别和解决潜在的问题
  • 实施和维护网站的基础架构,例如服务器、网络、存储和负载均衡器等。
  • 确保网站的可扩展性,以便在需要时能够轻松增加或缩小服务器规模。
  • 实施安全性措施,例如防火墙、访问控制和漏洞扫描等,以保护网站免受攻击。
  • 优化网站的性能和可访问性,例如实施缓存、负载均衡和域名解析等。

一个简单的例子是,SRE 团队可能会创建一个监控脚本,以自动检测网站的性能问题。如果性能下降,该脚本将发送一封警报邮件给 SRE 团队,以便他们可以立即采取行动解决问题。另一个例子是,SRE 团队可能会实施负载均衡器,以确保网站的最大可用性和性能,同时减少服务器的负载。负载均衡器可以将流量分配到多个服务器上,以确保每个服务器都得到公平的流量负载。

总之,SRE 是一个高度技术性的领域,它涉及了许多不同的技术和策略,以提高网站的可用性和性能。作为一名 SRE 工程师,需要具备扎实的技术技能、良好的项目管理能力和良好的沟通能力,才能成功地执行 SRE 任务。

继续介绍一下SLI、SLO、SLA的概念和例子

SLI、SLO、SLA 是三个与服务质量相关的术语,它们通常在 SRE 中用于监控和保证网站的可用性和性能。

  1. SLI (Service Level Agreement):服务级协议

SLI 是一种与服务质量相关的协议,它定义了客户端与服务器之间通信的标准。SLI 通常是以百分比的形式定义的,例如“99.99%”的可用性,表示在服务的整个生命周期中,服务器将只能处于忙碌状态 (即不可用) 的时间不能超过 0.01%。

为了达成 SLI,SRE 团队需要进行以下工作:

  • 设计和实施服务器和网络基础设施,以确保它们能够满足 SLI。
  • 监控网站的性能和行为,并识别任何可能影响 SLI 的问题。
  • 确保网站的可靠性和可用性,例如实施负载均衡、缓存和容错技术等。
  1. SLO (Service Level Objective):服务级别目标

SLO 是与服务质量相关的目标,它们描述了网站在特定时间段内的性能表现。SLO 通常以秒或分钟为单位定义,例如“10ms”的响应时间,表示服务器必须在接收到客户端请求后的 10 毫秒内返回响应。

为了达成 SLO,SRE 团队需要进行以下工作:

  • 设计和实施服务器和网络基础设施,以确保它们能够满足 SLO。
  • 监控网站的性能和行为,并识别任何可能影响 SLO 的问题。
  • 实施优化技术,例如缓存、负载均衡和请求拦截等,以缩短响应时间。
  1. SLA (Service Level Agreement):服务级别协议

SLA 是一种合同,它定义了客户端和服务器之间的服务标准。SLA 通常包括 SLI 和 SLO,并且通常由客户和服务提供商之间签订

SLA 可以帮助服务提供商确保他们能够提供高质量的服务,同时也可以帮助客户评估服务提供商的可靠性和可用性

例如,一个在线零售商可能会签订 SLA,以承诺在顾客付款后 24 小时内提供货物。SLA 还可以包括退款保证,承诺在顾客申请退款后 24 小时内将退款到达顾客账户。

可以横向对比一下SLI、SLO、SLA的特点和区别吗,以表格形式,只需要一个表格

好的,以下是一个表格展示:

术语SLI (Service Level Agreement)SLO (Service Level Objective)SLA (Service Level Agreement)
特点定义了客户端与服务器之间通信的标准,通常以百分比的形式定义,例如“99.99%”的可用性描述了网站在特定时间段内的性能表现,通常以秒或分钟为单位定义,例如“10ms”的响应时间一种合同,它定义了客户端和服务器之间的服务标准,通常包括 SLI 和 SLO,并且通常由客户和服务提供商之间签订
区别SLI 只定义了客户端与服务器之间的可用性,而 SLO 则定义了在特定时间段内的性能表现SLO 通常是以秒或分钟为单位定义的,而 SLI 通常是以百分比的形式定义的SLA 是客户和服务提供商之间签订的合同,通常包括 SLI 和 SLO

Go

  1. 在线博客
    • Go语言学习之路/Go语言教程
    • Golang修养之路
    • Easy搞定Golang设计模式
  2. 官方文档
  3. chatgpt

ClickHouse

快速入门
1.在线文档

ClickHouse深度揭秘

ClickHouse官方文档

2.部署

Docker部署Clickhouse

sudo docker run -d \
--name clickhouse-server \
--privileged=true \
--ulimit nofile=55122:262144 \
-p 55123:8123 \
-p 55124:9000 \
-p 55125:9009 \
yandex/clickhouse-server:latest

sudo docker cp clickhouse-server:/etc/clickhouse-server/config.xml /home/xzx/docker/clickhouse/config/config.xml

sudo docker cp clickhouse-server:/etc/clickhouse-server/users.xml /home/xzx/docker/clickhouse/config/users.xml

sudo docker rm -f clickhouse-server

# 修改配置文件,配置用户+密码

sudo docker run -d \
--name xzx-clickhouse-server \
--ulimit nofile=55122:262144 \
--privileged=true \
--restart=always \
-p 55123:8123 \
-p 55124:9000 \
-p 55125:9009 \
-v /home/xzx/docker/clickhouse/data:/var/lib/clickhouse:rw \
-v /home/xzx/docker/clickhouse/log:/var/log/clickhouse-server:rw \
-v /home/xzx/docker/clickhouse/config/config.xml:/etc/clickhouse-server/config.xml \
-v /home/xzx/docker/clickhouse/config/users.xml:/etc/clickhouse-server/users.xml \
yandex/clickhouse-server:latest
3.可视化界面

下载Clickhouse的可视化界面DBM

DBM官方文档

image-20230521161331146

使用GoLand连接Clickhouse

image-20230521200753697

4.数据类型
  1. 整型
  2. 浮点型
  3. 布尔型
  4. Decimal型
  5. 字符串
  6. 枚举类型
  7. 时间类型
  8. 数组
5.表引擎
  1. TinyLog:磁盘保存,不支持索引,并发
  2. Memory:内存保存,不支持索引
  3. MergeTree:支持索引分区
    1. partition by 分区(可选):加速检索,并行处理,合并
    2. primary key 主键(可选):一级索引,不是唯一约束image-20230522170001577
    3. order by(必选)
    4. 二级索引
    5. 数据TTL:生命周期
    6. ReplacingMergeTree:分区内去重,自动合并,保留最新记录
    7. SummingMergeTree:聚合
6.SQL操作
  1. Insert

  2. Update 和 Delete:Mutation查询

    Mutation每次修改或者删除都会导致放弃目标数据的原有分区,重新构建新分区。所以尽量做批量的变更,不要进行频繁小数据的操作。
    
  3. 查询操作与标准SQL差别不大

  4. Alter,同MySQL的修改字段基本一致

  5. 导出数据

7.副本
8.分片集群
高级
1.Explain查看执行计划
  1. PLAIN:执行计划
  2. AST:语法树
  3. SYNTAX:语法优化
  4. PIPELINE
2.建表优化
  1. 数据类型

    1. 能用时间字段表示就不要用字符串,DateTime不需要经过函数转换处理,执行效率高,可读性好

    2. 使用默认字段表示空,或者自行指定一个在业务中无意义的值

  2. 分区和索引

    1. 分区粒度不宜过粗或过细,一般选择按天分区
    2. 必须指定索引列(排序列-order by),满足高级列在前、查询频率大的在前原则
  3. 表参数

  4. 写入和删除优化

    1. 尽量不要单条或小批量
    2. 不要一次写入太多分区,或数据写入太快
  5. 常见配置

    1. CPU资源
    2. 内存资源
    3. 存储
3.语法优化规则

基于RBO(Rule Based Optimization)
1. COUNT优化
2. 消除子查询重复字段
3. 谓词下推:having 过滤会下推到 where 提前过滤
4. 聚合计算外推
5. 聚合函数消除
6. 删除重复的order by key
7. 删除重复的limit by key
8. 删除重复的using key
9. 标量替换
10. 三元运算优化

4.查询优化
  1. 单表查询
    1. Prewhere替换where
    2. 数据采样
    3. 列裁剪与分区裁剪
    4. orderby 结合 where、limit
    5. 避免构建虚拟列
    6. uniqCombined替换distinct
    7. 使用物化视图
    8. 其他注意事项
  2. 多表关联
    1. 用IN代替JOIN
    2. 大小表JOIN:小表在右
    3. 分布式表使用GLOBAL
    4. 使用字典表
    5. 提前过滤
5.数据一致性
6.物化视图

普通视图不保存数据,保存的仅仅是查询语句,查询的时候还是从原表读取数据,可以将普通视图理解为是个子查询。物化视图则是把查询的结果根据相应的引擎存入到了磁盘或内存中,对数据重新进行了组织,你可以理解物化视图是完全的一张新表。

监控与备份
Go客户端库的选择

ClickHouse Go

Choosing a Client

Selecting a client library depends on your usage patterns and need for optimal performance. For insert heavy use cases, where millions of inserts are required per second, we recommend using the low level client ch-go. This client avoids the associated overhead of pivoting the data from a row-orientated format to columns, as the ClickHouse native format requires. Furthermore, it avoids any reflection or use of the interface{} (any) type to simplify usage.

选择客户端库取决于您的使用模式和最佳性能需求。对于每秒需要数百万次插入的大量插入用例,我们建议使用低级客户端 ch-go。该客户端避免了将数据从面向行的格式转换为列的相关开销,正如 ClickHouse 本机格式所要求的那样。此外,它避免了任何反射或使用接口{}(任何)类型以简化使用。

For query workloads focused on aggregations or lower throughput insert workloads, the clickhouse-go provides a familiar database/sql interface and more straightforward row semantics. Users can also optionally use HTTP for the transport protocol and take advantage of helper functions to marshal rows to and from structs.

对于专注于聚合或低吞吐量插入工作负载的查询工作负载clickhouse-go 提供了熟悉的数据库/sql 接口和更直接的行语义。用户还可以选择使用 HTTP 作为传输协议,并利用辅助函数将行编组到结构和从结构中编组。

Ch-go

ch-go


Grafana

Grafana官方文档

Grafana中文入门教程

image-20230522141810186

image-20230522142012566

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

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

相关文章

cesium在vue中引入报错

npm install cesium1.95.0 找了很久各种办法都用了 最后就是降到这个版本。 在main.js中这样引入就可以运行起来了 import * as Cesium from cesium/Build/Cesium/Cesium.js; import cesium/Build/Cesium/Widgets/widgets.css; Vue.prototype.cesiumCesium 没出来是因为这个…

根据表名称快速查询表所有字段是否包含特定数据筛选

当前需要清理某个表中所有字段,检查是否有包含DEl字符的脏数据,如果字段比较少的直接根据字段查询即可,但是如果有几十个字段的话,逐个检查会很慢。 当前使用的方式是: 1:根据表名称获取当前表所有的字段 …

《信息系统项目管理师教程(第4版)》第1章至第5章 信息化发展、信息技术发展、信息系统治理、信息系统管理、信息系统工程 常见考点、知识点、思维导图、xmind

第一章至第五章多以选择题形式考察,分值在20分左右。已将考点、知识点整理成思维导图,可免费下载。以下是思维导图的部分截图: 第一章 信息化发展 第二章 信息技术发展 第三章 信息系统治理 第四章 信息系统管理 第五章 信息系统工程

代码随想录算法训练营第四十二天 | 动态规划 part 4 | 01背包问题(二维、一维滚动数组)、416. 分割等和子集

目录 01背包问题 二维代码 01背包问题(一维滚动数组)代码 416. 分割等和子集思路代码 01背包问题 二维 背包问题汇总: 二维数组dp——01背包五部曲 dp[i][j]表示从下标为[0-i]的物品里面任意取,放进容量为j的背包,价值…

Redis入门 (店铺营业状态设置) --苍穹外卖day4

目录 redis简介 redis下载与安装 redis服务启动与停止​编辑 redis数据类型 五种常用数据类型 各个类型特点 redis常用命令 字符串 哈希 列表 集合 有序集合 通用指令 ​在Java中操作Redis 导入坐标 编写配置类​ 通过RedisTem~对象操作 字符串 ​哈希 列…

什么是CDN

CDN是什么? 假设有一个IP为100.1.1.1的服务器网站,在没有CDN的情况下,PC先访问该服务器的DNS服务器,经过域名解析后再去访问服务器,如下图: 如果部署了CDN,这时候就有一个能识别CDN节点的DNS服…

经过打包后运行app.exe文件之后问题解决

项目文件经过python代码如何打包方法打包之后文件目录是下面这样的。 按照下面的路径运行app.exe文件报错: RuntimeError: Unable to open E:\face_detection\dist\app\face_recognition_models\models\shape_predictor_68_face_landmarks.dat [35816] Failed to…

AI在线工具分享

1、ChatGPT ChatGPT是一种由OpenAI训练的大型语言模型。它的原理是基于Transformer架构,通过预训练大量文本数据来学习如何生成人类可读的文本,然后通过接受输入并生成输出来实现对话。 ChatGPT的用途非常广泛,可以用于自然语言处理&#xf…

Seata入门系列【1】安装seata 1.7.1+nacos 2.1.1

1 介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Github: https://github.com/seata/seata 官方文档:h…

短期光伏发电量短期预测(Python代码,先对异常值处理,再基于XGBoost模型预测)

一.代码流程(运行效果:短期光伏发电量短期预测(Python代码,先对异常值处理,再基于XGBoost模型预测)_哔哩哔哩_bilibili 模型流程: 导入所需的库,包括NumPy、Pandas、Matplotlib、Sea…

TS编译选项——TS文件编译后消除注释

在tsconfig.json文件中配置removeComments属性 {"compilerOptions": {// outDir 用于指定编译后文件所在目录"outDir": "./dist", // 将编译后文件放在dis目录下// 是否文件编译后移除注释"removeComments": true} } 左边是编写的t…

通过解读yolov5_gpu_optimization学习如何使用onnx_surgon

onnx实战一: 解析yolov5 gpu的onnx优化案例: 这是一个英伟达的仓库, 这个仓库的做法就是通过用gs对onnx进行修改减少算子然后最后使用TensorRT插件实现算子, 左边是优化过的, 右边是原版的。 通过这个案例理解原版的onnx的导出流程然后我们看英伟达是怎么拿gs来优化…

伦敦银如何选择最优的交易方法

经常有投资者会问,伦敦银投资中如何选择最好的方法呢?我们进行伦敦银投资,目的就是找到一个能够盈利的交易方法,它能够使我们大部分交易都是盈利,少部分交易亏损,但是可以将亏损控制在一定的范围之内&#…

Windows10关闭此电脑“桌面”“图片”“视频”“3D对象”“文档”等显示,只显示“设备与驱动器”

如何关闭下图"文件夹"等7个子文件夹,只显示“设备和驱动器”? 关闭步骤: 打开cmd,输入regedit打开注册表编辑器打开注册表编辑器后,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\My…

会声会影和剪映哪个好,2023年全新功能对比详细解析

随着网络视频的蓬勃发展,越来越多的人开始涉足视频剪辑领域,毕竟技多不压身嘛。在众多剪辑软件中,剪映和会声会影是备受新手青睐的两种。那么,会声会影和剪映哪个好呢?在它们之间,哪一个更适合初学者呢接&a…

软件测试之Web安全测试详解

前言 随着互联网时代的蓬勃发展,基于Web环境下的应用系统、应用软件也得到了越来越广泛的使用。 目前,很多企业的业务发展都依赖于互联网,比如,网上银行、网络购物、网络游戏等。但,由于很多恶意攻击者想通过截获他人…

ASCII码-对照表

ASCII 1> ASCII 控制字符2> ASCII 显示字符3> 常用ASCII码3.1> 【CR】\r 回车符3.2> 【LF】\n 换行符3.3> 不同操作系统,文件中换行 1> ASCII 控制字符 2> ASCII 显示字符 3> 常用ASCII码 3.1> 【CR】‘\r’ 回车符 CR Carriage Re…

如何通过git指令加入管理者仓库并提交分支(Github Gitee)

文章目录 创建GitHub、Gitee账户安装git下载gitgit基础配置 管理者创建gitee仓库新建仓库配置公钥 管理者管理仓库开发者通过git指令提交git提交错误原因: 创建GitHub、Gitee账户 GitHub: https://github.com/ Gitee : https://gitee.com/ …

redis做缓存(cache)

什么是缓存 缓存(Cache)的核心思路就是把一些常用的数据放到访问速度更快的地方,方便获取。关于硬件的访问速度来说 CPU寄存器>内存>硬盘>网络 因此常见使用内存作为硬盘的缓存,例如redis。使用硬盘作为网络的缓存,例如浏览器通过h…

2023-9-25 货仓选址

题目链接&#xff1a;货仓选址 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n; int a[N];int main() {cin >> n;for(int i 0; i < n; i ) cin >> a[i];sort(a, a n);int res 0;for(int i 0; i < …