分布式丛林探险系列之 Redis 主从复制模式 (blog.yuanpei.me)
本文主要分享了 Redis 主从复制模式的相关内容。首先,主从复制可以为 Redis 带来数据冗余、故障恢复、负载均衡以及高可用等方面的收益,单机版的 Redis 是一个符合 CP 的系统,而集群化的 Redis 则是一个符合 AP 的系统,其一致性正是由这篇文章中描述的复制来保证。根据主从节点状态的不同,Redis 中的主从复制,可以分为 全量复制 和 部分复制 两种,全量复制是主节点生成一个快照然后发送给从节点,而部分复制则是从复制缓冲区中筛选出命令然后发给从节点,在此基础上,我们用 Docker-Compose 构建了一个“一主两从”的主从复制方案。
by @技术头条 2023-04-29 20:39 查看详情
通过 Python 预测双十一交易额 (blog.yuanpei.me)
相信只要我说出 最小二乘法 和 线性回归 这样两个关键词,各位就知道我在说什么了!博主从网上收集了从 2009 年至今历年双十一的交易额数据,如果我们将其绘制在二维坐标系内,就会得到一张散点图,而我们要做的事情,就是找到一条曲线或者方程,来对这些散点进行拟合,一旦我们确定了这样一条曲线或者方程,我们就可以预测某一年双十一的交易额。
by @技术头条 2023-04-29 20:38 查看详情
分布式丛林探险系列之 Redis 集群模式 (blog.yuanpei.me)
Redis 的集群模式,本质上是由多个主从复制模式组成的服务器分片技术,它通过哈希槽来管理集群内的节点和数据,而节点间则是通过 TCP 协议互相通信,这使得我们可以从任意节点上查询数据,因为 Redis 集群会帮助我们实现连接的重定向。与此同时,Redis 集群内通过投票来实现故障转移,其触发机制是超过半数的节点认为该节点宕机,即客观宕机,此时,就需要从该节点的从节点中筛选一个继续提供服务,当然,这个筛选还是投票决定的,谁能说这不是一种现实世界的投影呢?
by @技术头条 2023-04-28 22:32 查看详情
gRPC 搭配 Swagger 实现微服务文档化 (blog.yuanpei.me)
整个微服务架构的落地过程中,服务治理是花费时间和精力最多的环节,除了保证接口的稳定性,更多的时候,其实是不同的服务间相互打交道。那么,除了口头传达外,最好的管理接口的方式是什么呢?显然是接口文档。本文分享了两种针对 gRPC 的服务文档化的方案,第一种是由官方提供的 protoc-gen-doc,它可以从 Protobuf 生成 HTML 或者 Markdown 格式的接口文档。第二种是由博主实现的 FluentGrpc.Gateway,它实现了从 Protobuf 到 Swagger 的转换,只需要在项目中引入这个中间件,就可以把 gRPC 带进 Swagger 的世界,不管是查阅接口还是调试接口,都多了一种玩法,如果你还需要给非开发人员提供接口文档,那么,我觉得你还可以试试 YAPI,只需要导入 Swagger 格式的服务描述信息即可。
by @技术头条 2023-04-28 22:31 查看详情
SSL/TLS 加密传输与数字证书的前世今生 (blog.yuanpei.me)
因为一次服务器迁移时被证书苦虐的经历,决定花点时间研究了一下数字证书,本文从 HTTPS 协议入手,引出了对称加密、非对称加密等加密相关的内容,然后讨论了什么是证书,什么是 CA,以及 为什么需要 CA 等内容,现实世界中需要一个为证书权威性、真实性提供担保的组织,这种组织可以签发证书、验证证书、管理证书,利用数字签名的不可篡改、不可抵赖、不可复制、不可伪造等特性,根 CA 可以授权中间 CA 去签发证书,因为整个证书链都是可以追溯的。有了这些知识作为背景,我们分享了如何获得一份自签名证书和 CA 证书,两者本质上没有什么不同,唯一的区别在于其信任度不同。
by @技术头条 2023-04-28 22:31 查看详情
Golang与散列算法 (www.ssgeek.com)
散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。常用于保证数据完整性。
by @技术头条 2023-04-28 22:29 查看详情
Jenkins基于Share Library共享库的最佳实践探索 (wiki.eryajf.net)
古代治学总结有人生三境界,在我看来,Jenkins 使用接入亦有三个阶段,这也是每一个运维人员应用 Jenkins 所必须要经历的。

第一阶段:初接触,有很多不熟悉不了解,应用场景也大多是依赖手工点点点维护的 free style 或者 maven 风格的项目,通过配置一些参数,结合脚本进行项目的构建与发布。这种维护方式其实也是 Jenkins 在 1.0 时代的普遍使用姿势。它的最大弊端在于一切参数都要配置化,当维护的项目数量增多的时候,又遇到某些普遍性需要更改的地方,那么维护起来就是一场灾难了。

第二阶段:慢慢往后深入,接触越来越多,逐渐开始了解 pipeline,亦即 Jenkins 在 2.0 时代提出的一个新概念:配置即代码,或者说代码即配置。我们可以不必点点点勾选过多地配置项,只需通过代码定义即可实现相同的效果。只不过据我了解,很多人在这个阶段,因为对流水线基础语法掌握程度不够,因此还有很多人是手工配置参数,然后再结合 Jenkinsfile 来进行构建发布的,其实这种方式,并没有真正体悟到 2.0 的设计精髓,自然也无法吃到这波技术红利了。

第三阶段:你不应该满足于维护大量 Jenkinsfile 的现状中,过多的 Jenkinsfile 就像一个又一个肥大的肿块儿一般,对于后期的二次维护,都是极大的挑战。你可能听过共享库,渐渐你开始了解共享库,尝试共享库,最后将同一个类别的 Jenkinsfile 进行逻辑抽象,每个项目都变成了另外一种变相的参数化构建,从而接入项目只需配置对应的 引导文件 即可,这种方式能够极大地简化 Jenkins 的运维使用难度,对项目交付效率的提升有极大的帮助。

过往的 Jenkins 文章中,我已经写过不少第一阶段,第二阶段的概念或者实践,今天这篇文章,将会针对第三阶段的内容,结合以往的实践,手摸手教会你共享库最佳实践这堂课。
by @技术头条 2023-04-28 22:28 查看详情
大厂自研跨端框架技术揭秘 (me.ursb.me)
本文将围绕跨端框架技术的主题,分析其技术目标和 3 种演进方向,接着揭秘业内的自绘跨端方案的技术实现——包括 Kun、WebF、TDF、Weex 2.0、Waft 与 MiniX 等方案,分析各自的特点与不足,总结跨端框架的研发思路与技术要点,最终分享对跨端框架发展趋势的思考。

分享过程中,会穿插介绍跨端框架的脚本引擎的选型与技术难点、业内各跨端框架各自的困境、分享 Debugger 原理以及一核多生态的工程化思路。
by @技术头条 2023-04-28 22:25 查看详情
前端开发中的大小写敏感问题 (me.ursb.me)
大小写敏感(case sensitivity)是软件开发领域的议题,指同一个“词”拼写的大小写字母的不同可能会导致不同效果的场景。

接下来,我们谈谈前端开发领域中一些常见的大小写敏感/不敏感的场景。
by @技术头条 2023-04-28 22:25 查看详情
Pulsar压测及优化 (crossoverjie.top)
这段时间在做 MQ(Pulsar)相关的治理工作,其中一个部分内容关于消息队列的升级,比如:
1、一键创建一个测试集群;
2、运行一批测试用例,覆盖我们线上使用到的功能,并输出测试报告;
3、模拟压测,输出测试结果。

本质目的就是想直到新版本升级过程中和升级后对现有业务是否存在影响。

一键创建集群和执行测试用例比较简单,利用了 helm 和 k8s client 的 SDK 把整个流程串起来即可。
by @技术头条 2023-04-28 22:23 查看详情
程序员视角下的三体世界随想 (blog.yuanpei.me)
三体问题,其实可以看作是 N 体问题的一个特例,而所谓 N 体问题,则是指 N 个参照值相对一致的天体,仅在万有引力的作用下会呈现出什么样的运动规律。该问题最早由天才数学家希尔伯特教授,在 1990 年的全球数学大会上提出,是目前公认的人类科学界最难的 23 道数学题之一。如果你无法理解这个难度,请允许我找一个更有名的问题——费马大定理作为参照。事实上,早在 1687 年近代物理学之父牛顿,第一次提出了三体问题。此后的三百余年里,三体问题更是串联起无数如雷贯耳的名字:欧拉、拉格朗日、庞加莱、希尔伯特、开普勒…等等。
by @技术头条 2023-04-28 22:20 查看详情
小爱音箱集成 ChatGPT 的不完全教程 (blog.yuanpei.me)
在这个过程中,我最大的收获是学会了如何用编程控制米家设备。尽管现在智能家居的交互场景还相对有限,但就像 ChatGPT 一样,当你意识到 AI 正式进入一个新阶段的时候,一切都显得为时已晚。
by @技术头条 2023-04-28 22:19 查看详情
NAT 网关、NAT 穿越以及虚拟网络 (thiscute.world)
总的来说,NAT 是一项非常成功的技术,它成功帮 IPv4 续命了几十年,甚至到如今,全球网络仍然是 IPv4 的天下。
by @技术头条 2023-04-28 22:18 查看详情
FinOps for Kubernetes - 如何拆分 Kubernetes 成本 (thiscute.world)
FinOps 是一种不断发展的云财务管理学科和文化实践,通过帮助工程、财务、技术和业务团队在数据驱动的预算分配上进行协作,使成本预算能够产生最大的业务价值。
by @技术头条 2023-04-28 22:17 查看详情
Python 实用技巧与常见错误集锦 (thiscute.world)
Python 实用技巧与常见错误集锦
by @技术头条 2023-04-28 22:17 查看详情
部署一个 Kubernetes 集群 (thiscute.world)
云上的 Kubernetes 集群,基本上各云厂商都支持一键部署。这里主要关注本地部署,或者叫做裸机(baremetal)部署。

本文介绍的方法适合开发测试使用,安全性、稳定性、长期可用性等方案都可能还有问题。
by @技术头条 2023-04-28 22:16 查看详情
Kubernetes 微服务最佳实践 (thiscute.world)
本文主要介绍我个人在使用 Kubernetes 的过程中,总结出的一套「Kubernetes 配置」,是我个人的「最佳实践」。 其中大部分内容都经历过线上环境的考验,但是也有少部分还只在我脑子里模拟过,请谨慎参考。
by @技术头条 2023-04-28 22:16 查看详情
pod中将代码与运行环境分离 (www.zhengwenfeng.com)
我们在创建一个 python 的 web 服务的镜像时,一般的做法是,将 python 环境与代码打包成一个镜像,然后将这个镜像进行发布。

现在有个需求就是将 python 环境和代码分别构造成两个镜像,让他们进行解耦,并且将他们编排在一个 pod 中。

本文介绍如何将 pod 中的代码与运行的环境进行拆分。
by @技术头条 2023-04-28 22:15 查看详情
redis之五种基本数据类型 (www.zhengwenfeng.com)
本文主要讲解 redis 的五种基本数据类型:String、List、Set、Sorted Set、Hash。学习如何使用它们,并且了解它们的底层数据结构实现,这样我们才能在适当的应用场景选择最适合的数据类型来解决我们的需求。
by @技术头条 2023-04-28 22:14 查看详情
mysql之MVCC原理 (www.zhengwenfeng.com)
MVCC 的全称是 Multi- Version Concurrency Control,也就是多版本并发控制,该机制是只有支持事务的 InnoDB 引擎下才存在的,用来实现提高数据库的并发性能,可以做到:读不加锁,读写不冲突。
by @技术头条 2023-04-28 22:14 查看详情