前言

上文提到了,索引分单列索引组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。

组合索引(Composite Index),又称复合索引、联合索引、多列索引,为什么可以有这么多别名,下文中可任意替代!

顾名思义,是建立在多个列上的索引,适用在多个列必须一起使用或者是从左到右方向部分连续列一起使用的业务场景。创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件,且条件不为OR)。

阅读全文 »

前言

索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

我最近在一个工单系统的迭代中遇到了性能问题,由于匆忙上线了个人的待办和待认领功能,导致数据库的查询难度激增,所以需要从数据库优化的方向来考虑,分为查询优化索引优化表结构拆分重构。我打算先从最简单高效的索引入手。

所谓索引就是为特定的 MySQL 字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找。而用的最多,并且是 MySQL 默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果。

去年我也有一篇文章有提到 MySQL 索引相关的内容,现在看来不太全面,所以打算系统又全面地写一写索引和性能优化的内容。

阅读全文 »

前言

最近对开源监控系统比较感兴趣,之前的博客对Prometheus Zabbix(去年)都做过研究,也稍微提及了Grafana,甚至Telegraf+InfluxDB。最终在云服务器上逐个进行了部署和体验。

但是明显感受到知识是不成体系的,所以决定结合个人体验和文档,对多个监控解决方案进行横向对比,这样才能更好地理解它们的优劣和擅长的领域。

以下将详细对比Prometheus和Zabbix,它们分别作为监控领域的新宠和老将,是具有代表性的。

阅读全文 »

什么是 Prometheus

Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud.

From metrics to insight. Power your metrics and alerting with a leading open-source monitoring solution.

Prometheus是新一代的监控系统解决方案,也是基于Golang的重量级云原生开源项目。

在容器化监控领域,Prometheus是不二之选,并且能兼容传统的监控方案。

从部署、使用到开发,我个人的感受是:

特点

  • 开箱即用,使用门槛低
  • 强大的开源社区和生态支持
  • 通过PromQL实现多维度数据模型的灵活查询
  • 灵活的自定义探针(如Exporter等),编写简单方便
  • 时序数据库更契合监控场景

局限

  • 不适合存储事件或者日志,更多地展示的是趋势性的监控,主要面向metrics
    • 对策:使用Loki,他是面向log的类Prometheus系统,与Grafana同门
  • 本地存储短期数据,不适合大量历史数据存储,这是设计初衷
    • 对策:远程存储使用其他TSDB,如InfluxDB
  • Exporter种类繁多,每个Exporter又相互独立、各司其职,Exporter越多,维护压力越大
    • 对策:使用Telegraf集成Prometheus(Telegraf是用于数据收集的开源Agent,资源使用率更低)
阅读全文 »

Grafana简介

Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data driven culture.

从上文得知,Prometheus部署配置完成后,官方提供了三种可视化方案:

  • EXPRESSION BROWSER(Prometheus自带的/graph界面)
  • GRAFANA(绝配)
  • CONSOLE TEMPLATES(使用 Go 模板语言创建自定义控制台,有学习和开发曲线)

使用GRAFANA实现可视化是低成本、高回报的体现,并且可以使用社区中的开源DASHBOARD(仪表盘),简直是开箱即用了。

以下是Grafana的安装部署、数据源接入、仪表盘等内容。

阅读全文 »

前言

最近专注于Go语言学习,除开兴趣使然,也意识到他在云原生领域大放异彩,众多开源项目也是鼎鼎大名,例如DockerKubernetesInfluxDBGrafana等,这里从监控场景经常接触的Prometheus开始,掌握它的基础架构、使用场景和部署与集成。

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库,2016年,由Google发起的Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation)将Prometheus纳入其第二大开源项目。

在云原生时代,随着容器技术的迅速发展,Kubernetes生态已然成为大家追捧的容器集群管理系统,而Prometheus 作为 CNCF 生态圈中的重要一员,其活跃度仅次于 Kubernetes,现已广泛用于 Kubernetes 集群的监控系统中。

Prometheus 提供了一整套监控体系,包括数据的采集、数据存储、报警,、甚至是绘图(不太好用,官方也推荐使用 Grafana)。

以下暂且介绍Prometheus的部署、配置和可视化。

阅读全文 »

前言

​ 由于工作中都是用Django + DRF来后端开发,Django虽然很生态很丰富、开箱即用也很美好,但是在某些场景中,并不需要这么多功能,后端只需提供json化的api即可,这样我就关注到了FastAPI,首先听闻它的性能可以比肩JAVA的框架,而且是异步非阻塞的,天生支持async、await,类似于flask的语法和风格也很吸引我,所以我就琢磨,能不能在之前的开发框架中,替换掉Django,使用FastAPI?很显然工作量是巨大的,需要支持已有的Login、Csrf、用户等功能,而且需要满足作为SaaS的docker部署流程。总之路很漫长,先从FastAPI的基础学起。


FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJSGo 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一
  • 高效编码:提高功能开发速度约 200% 至 300%。
  • 更少 bug:减少约 40% 的人为(开发者)导致错误。
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

先来实现一个sayhello的简单应用吧,以下使用FastAPI + SQLAlchemy(sqlite3) + html + css + vue.js + axios。

源码地址https://github.com/sususama5555/fastapi-sayhello

阅读全文 »

前言

命令行模式在Python开发中并不陌生,简单的说就是python hello_world.py这种使用命令的模式运行Python程序。目前比较主流的命令行工具主要有以下几项,

  • 内置的sys
  • argparse
  • tensorflow的Flags

当然,还有例如Fire、Docopt等工具,这里不一一展开。

本文的主角是Click,因为它真的很强大、很好用。以下概括性的讲解一下上述三款命令行工具,以及重头戏Click

阅读全文 »