05 2023 档案

摘要:### 楔子 **etcd 的一个典型的应用场景是 Leader 选举,那么 etcd 为什么可以用来实现 Leader 选举?核心特性实现原理又是怎样的?** **本篇文章就来聊一聊 Leader 选举背后的技术点之一:租约(Lease), 通过解析它的核心原理、性能优化思路,从而对 Lease 阅读全文
posted @ 2023-05-31 16:04 古明地盆 阅读(1577) 评论(0) 推荐(0)
摘要:### 楔子 **前面我们已经知道了如何使用 etcd 存储数据,但 etcd 作为云原生的基石,也大量应用在微服务上面。而提到微服务,你应该知道多租户的概念,多个用户使用同一个集群。那么这个时候如何实现隔离呢?因为如果不隔离,那么 A 用户可能会将 B 用户的数据覆盖掉,或者越权访问。** **e 阅读全文
posted @ 2023-05-31 00:19 古明地盆 阅读(2055) 评论(0) 推荐(0)
摘要:### 楔子 **通过前面两篇文章,我们已经对 etcd 有了一个基本的了解,那么接下来就要安装 etcd 了。安装完之后,再来全面介绍 etcd 的语法,etcd 的功能还是很强大的。** **下面就来安装 etcd。** ### 安装 etcd **先说一下配置,首先操作系统是 CentOS 7 阅读全文
posted @ 2023-05-29 23:49 古明地盆 阅读(2253) 评论(0) 推荐(0)
摘要:### 楔子 **在上一篇文章介绍 etcd 的时候,我们多次提到 Raft 协议,etcd 正是基于 Raft 协议实现高可用以及数据强一致性的。那么 Raft 到底是什么样的协议,它解决了分布式系统的哪些痛点呢?我们就来聊一聊。** **首先为什么会有 Raft 协议呢?回想一下,早期我们使用的 阅读全文
posted @ 2023-05-29 00:08 古明地盆 阅读(1381) 评论(0) 推荐(0)
摘要:### 楔子 **本次来介绍 etcd,它负责 k8s 元数据的存储,k8s 的状态数据全部存储在 etcd 上面。随着 k8s 的火热,etcd 也越来越受到重视,截止到此刻,它在 GitHub 的 star 数已经达到了 43.5k,很多软件工程师都在使用 etcd 去解决业务场景中遇到的痛点。 阅读全文
posted @ 2023-05-26 15:37 古明地盆 阅读(898) 评论(0) 推荐(3)
摘要:楔子 最近在我的交流群里面,大家聊到了 Python 的异步框架,并有人给出了一个网站的 benchmark。 Python 异步框架还真不少,其中大家最熟悉的莫过于 FastAPI,只是它的并发量其实没有想象中的那么高。但宣传的很到位,加上生态不错,之前一直是我的第一选择。不过排名第一的 blac 阅读全文
posted @ 2023-05-25 19:59 古明地盆 阅读(3805) 评论(0) 推荐(5)
摘要:## 楔子 **准备开一个新系列来介绍 k8s,关于 k8s 的重要性不言而喻,在云原生时代它就是分布式架构的****操作系统****。但介绍 k8s 之前我想先聊一聊 docker,我们知道 docker 是容器化引擎(负责创建容器),而 k8s 负责容器编排,可以在成百上千个节点上自动管理 do 阅读全文
posted @ 2023-05-22 15:05 古明地盆 阅读(544) 评论(0) 推荐(1)
摘要:楔子 到现在我们已经了解了 asyncio 提供的大部分功能,使用前面文章中介绍的 asyncio 模块,你应该能完成几乎所有你需要完成的任务。但对于更高级的使用场景,你可能还需要使用一些鲜为人知的技术,在设计自己的 asyncio API 时尤其如此。 在本篇文章中,我们将学习 asyncio 中 阅读全文
posted @ 2023-05-15 23:09 古明地盆 阅读(4159) 评论(0) 推荐(2)
摘要:楔子 Python 编写的应用程序需要 Python 运行环境,然而,并不是所有我们想要交互的组件都是用 Python 编写的。我们可能已经使用了一个用 C++ 、Go、Rust 或其他语言编写的应用程序,这些语言提供了更好的运行时特征,或者可以提供很优秀的实现方式,而无需我们重新实现。可能还希望使 阅读全文
posted @ 2023-05-14 12:18 古明地盆 阅读(1819) 评论(0) 推荐(0)
摘要:楔子 在设计应用程序来处理事件或其他类型的数据时,经常需要一种机制来存储这些事件,并将它们分发给一组 worker。然后这些 worker 可根据这些事件同时执行我们需要执行的任何操作,从而节省时间。asyncio 提供了一个异步队列,可以让我们实现这一点,可将数据块添加到队列中,并让多个 work 阅读全文
posted @ 2023-05-13 23:54 古明地盆 阅读(3663) 评论(0) 推荐(1)
摘要:楔子 使用多线程和多进程编写应用程序时,需要考虑非原子操作时的竞态条件,因为即使是并发增加整数这样简单的操作也可能导致微妙的、难以重现的 bug。而 asyncio 是单线程的(除非与多线程和 multiprocessing 进行交互),这是否意味着我们就可以不必考虑竞争条件呢?事实证明,事情并非那 阅读全文
posted @ 2023-05-12 15:54 古明地盆 阅读(2670) 评论(0) 推荐(1)
摘要:楔子 许多 Web 应用程序都被构建为单体应用程序,单体应用程序通常是包含多个模块的大中型应用程序,这些模块作为一个单元独立部署和管理。虽然这种模型本质上没有任何问题(单体应用程序非常好,甚至更可取,因为它们通常更简单),但确实存在缺点。即使你对单体应用程序只进行了小幅更改,也需要重新部署整个应用程 阅读全文
posted @ 2023-05-11 02:10 古明地盆 阅读(1308) 评论(0) 推荐(1)
摘要:楔子 Web 应用程序为我们今天在 Internet 上使用的大多数网站提供支持,如果你曾在拥有互联网业务的公司担任过开发人员,那么你可能在职业生涯的某个阶段编写过 Web 应用程序。在同步 Python 的世界中,这意味着你使用过 Flask、Bottle 或非常流行的 Django 之类的框架。 阅读全文
posted @ 2023-05-09 23:03 古明地盆 阅读(1824) 评论(1) 推荐(2)
摘要:### 楔子 **在编写网络应用程序时,我们使用了 socket 库来读取和写入客户端。虽然在构建低级网络库时直接使用套接字很有效,但用法上还是有些复杂,例如启动服务端、等待客户端连接以及向客户端发送数据等等。asyncio 的设计者意识到这一点,并构建了网络流 API,这些更高级的 API 比套接 阅读全文
posted @ 2023-05-08 14:48 古明地盆 阅读(1951) 评论(0) 推荐(0)
摘要:楔子 在从头开始开发新的 IO 密集型应用程序时,asyncio 可能是首选技术,并且也要使用与 asyncio 搭配工作的非阻塞库,如 asyncpg、aiohttp 等等。然而我们工作的很大一部分可能是使用阻塞 IO 库管理现有的代码,例如对 HTTP 发请求的 requests,用于 Post 阅读全文
posted @ 2023-05-07 21:42 古明地盆 阅读(6450) 评论(0) 推荐(1)
摘要:楔子 到目前为止我们使用 asyncio 获得的性能提升,一直专注在并发运行 IO 密集型工作上面,当然运行 IO 密集型工作是 asyncio 的主要工作,并且按照目前编写代码的方式,需要注意不要在协程中运行任何的 CPU 密集型代码。但这似乎严重限制了 asyncio 的使用,因为这个库能做的事 阅读全文
posted @ 2023-05-06 15:38 古明地盆 阅读(3272) 评论(0) 推荐(5)
摘要:楔子 上一篇文章探讨了使用 aiohttp 库发出非阻塞 Web 请求,还讨论了使用几种不同的异步 API 来同时运行这些请求。通过结合 asyncio API 和 aiohttp 库,可以同时运行多个耗时的 Web 请求,从而提高应用程序的运行速度。但我们上一章学到的概念不仅适用于 Web 请求, 阅读全文
posted @ 2023-05-04 14:32 古明地盆 阅读(5462) 评论(0) 推荐(0)