最近机缘巧合,需要重新认识一下 openstack 这门技术,之前其实也接触过很多虚拟化的技术,但是不够统一,也打算将之前了解的虚拟化技术好好的回顾一遍。
前一段时间看到知乎上的一个问题,Golang 开发需要协程池吗? 看了知乎上大佬上的一些回答,大部分人的回答都是不需要,不过这里我也想表达一下自己的看法。
上篇文章介绍了MySQL的索引机制,基本上对MySQL如何优化查询速度做了比较充分的了解
第二篇文章介绍一下事务,事务不是 MySQL 的原生支持,而是 InnoDB 存储引擎带来的 Feature。旧版本MySQL的默认存储引擎 MyISAM 就不支持事务能力。正因为事物能力,MySQL 的功能越发强大,也是因为事务,MySQL经常存在和索引无关的很多慢查询。
eBPF 是什么? eBPF:过去 50 年操作系统最大的变革!!!
在过去,如果想让应用程序处理网络数据包是不可能的,因为应用程序运行在Linux的用户空间,它是不能直接访问主机的网络缓冲区,这里由内核管理和保护。内核保证了进程隔离,进程只能通过系统调用(syscall)来获取自己的网络数据包信息。
1992 年的 USENIX 会议上,The BSD Packet Filter: A New Architecture for User-level Packet Capture ,第一次提到 BSD Packet Filter (简称BPF)这个概念,这篇论文带来了一个革命性技术。正如其名称他是包过滤相关的技术,其基本原理是用户态定义 BPF 字节码来定义过滤表达式,然后传递给内核,再由虚拟机解释运行。
有了 BPF 之后,应用程序不再需要 syscall,数据包不需要在内核空间和用户空间之间来回交互传递。而是我们将代码直接交给内核,让内核自己执行,这样就可以让代码全速运行,效率更高。
我们使用的 tcpdump 主要通过 libpcap 实现,而libpcap 就是基于 eBPF 。执行下面的命令,导出 tcpdump 所灌入内核的 BPF 程序。如下的 tcpdump 命令,可以直接过滤出IP地址包含 1.1.1.1 和 2.2.2.2 的数据包。
tcpdump -d 'ip src 1.1.1.1 or ip src 2.2.2.2' (000) ldh [12] # 找到以太网类型字段 (001) jeq #0x800 jt 2 jf 6 # 判断是否为以太网 (002) ld [26] # 判断IP头部 (003) jeq #0x1010101 jt 5 jf 4 (004) jeq #0x2020202 jt 5 jf 6 (005) ret #262144 (006) ret #0 1 2 3 4 5 6 7 8 9 // Filter BPF Code static struct sock_filter bpfcode[8] = { { 0x28, 0, 0, 0x0000000c }, // (000) ldh [12] xxxx }; sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); bind(sock, (struct sockaddr *) &addr, sizeof(addr)); setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &bpf, sizeof(bpf)); Linux 利用 socketopt 中的 SO_ATTACH_FILTER、SO_DETACH_FILTER 来执行系统调用,具体可参考 socket manual page。
MySQL 之前已经接触过非常多了,只是将MySQL当作一个 excel 文档,需要取数据了通过命令获取。 但是实际上 MySQL 内部还是有很多奥秘的,一条语句的执行也有很多有意思的设计逻辑。
下面对自己学习的MySQL的执行过程做一个学习记录。通过把MySQL 拆解一下,来对MySQL做更深层次的理解。再遇到一些异常或者问题时,可以直戳本质,更为快速定位并解决问题。
前言:最近打算将自己的一些服务尽可能的迁移到 k8s 集群里,ELK 就是其中的一个,后面可以的话将本博客的 搜索功能从 algolia 迁移到 自己的ES 里。搜索这个东西的确很有意思的,在没有自己的 OLAP 分析平台之前,ES 的确是最佳选择。值得好好学习一下。
前面已经有文章介绍 k8s 集群的搭建方法和ES的部署方式了。
ubuntu20.04 部署 kubernetes(k8s) Elasticsearch 简介 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
快速入门 基本概念 节点 Node、集群 Cluster 和 分片 Shard ElasticSearch 是分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个实例。单个实例称为一个节点(node),一组节点构成一个集群(cluster)。分片是底层的工作单元,文档保存在分片内,分片又被分配到集群内的各个节点里,每个分片仅保存全部数据的一部分。
索引 Index、类型 Type 和 文档 Document 索引是一类文档的结合。而文档是具体的一条数据。对比我们比较熟悉的关系型数据库如下:
RDBMS(MySQL) Elasticsearch Table Index(Type) Row Doucment Column Field Schema Mapping SQL DSL 使用 Restful API 交互 elasticsearch 本身使用 Restful API 通过端口 9200进行交互。其基本组成如下