关于 Kubernetes 和容器化的一些随想
这段时间在不少群里争论过关于 Kubernetes 和容器化的一些事,干脆总结下一些碎碎念作为一个概括吧。本文仅代表个人立场,不代表商业观点 容器化目前很主流的一个观点,是能上容器尽可能上容器,说实话这个想法实际上是有一定的合理性的,去 review 这个想法,我们需要去看一下容器这个东西,给我们带来了什么样的改变 容器首先毫无疑问,会给我们带来非常多的好处: 真正意义上让开发与生产环境保持一致是一种非常方便的事,换句话说,开发说的“这个服务在我本地没啥问题”是一句有用的话了 让部署一些服务变的更为方便,无论是分发,还是部署, 能做到一定程度上的资源隔离与分配 那么,看起来我们是不是可以无脑用容器?不,不是,我们需要再来 Review 一下,容器化后我们所要面临的一些弊端: 容器安全性问题,目前最主流的容器实现(此处点名 Docker)本质上而言还是基于 CGroups + NS 来进行资源与进程隔离。那么其安全性将会是一个非常值得考量的问题。毕竟 Docker...
简单聊聊 Maglev ,来自 Google 的软负载均衡实践
好久没博客了,来写个简单的读论文笔记吧,这篇文章是来自 Google 2016 年发表的一篇论文 Maglev: A Fast and Reliable Software Network Load Balancer 分享了他们内部从08年开始大规模使用的软负载均衡系统的实现。里面很多很有趣的细节,我看我能写多少,算多少吧 背景负载均衡的概念大家肯定都比较熟悉了,再次不再赘述。现在我们需要考虑 Google 的场景。设计之初,Google 需要一种高性能的 LB 来承担 Google 一些重头服务的流量,比如 Google 搜索,Gmail 等等。由于流量非常庞大,那么 LB 需要非常强大的性能来处理大量的流量。 在这里,传统的想法可能说,我直接上专业的硬件负载均衡,能用钱解决的问题,都不算事(笑。但是这样的方案有着不小的问题 硬件负载均衡单点的性能决定了整个网络能承担的请求 在 HA 上存在缺陷。为了保证单点失效的时候,整个网络集群不陷入瘫痪。那么我们通常需要 1:1 的做冗余 灵活性和编程性欠缺,想做骚操作的时候没有切入点 太贵了。贵到 Google...
为什么 Python 的 Type Hint 没有流行起来
在知乎上看到一个很有意思的问题,为什么TypeScript如此流行,却少见有人写带类型标注的Python? 虽然我没忍住在知乎上输出了答案,但是为了以防万一,我在博客上扩展,与更新一下 BTW 最近上线真的心力憔悴,写个文章放松下 开始其实这个答案很简单,历史包袱与 ROI,在了解为什么有这样的现象之前,首先我们要去了解 Type Hint 能给我们带来什么,然后我们需要去了解 Type Hint 的前世今生 在现在这个时间点(2020.03)来看,Type Hint 能给我们带来肉眼可见的收益是 通过 annotation ,配合 IDE 的支持,能让我们在代码编辑的时候的体验更好 通过 mypy/pytype 等工具的支持,我们能在 CI/CD 流程中去集成静态类型检查 通过 pydantic 以及很多新式框架的支持,我们能够减少很多重复的工作 可能大家以为从 Python 3.5 引入 PEP 484 开始,Python Type Hint 便已经成熟。但是实际上,这个时间比大家想象的短的多 好了,我们现在要去回顾一下整个 Type Hint...
简单聊聊 MySQL 全文索引
最近踩 MYSQL 中文本搜索的坑踩了挺多,来写个具体的文章总结下 MYSQL 中文本搜索的一些知识点吧 模糊搜索在我们是使用 MYSQL 的过程中,总会有一些模糊搜索的需求,比如我们现在有这样一张表 1234567891011create table if not exists `user`( `id` bigint(20) not null auto_increment, `name` varchar(255) not null, `age` int not null, `update_time` timestamp not null, `create_time` timestamp not null, index (`name`), primary key (`id`)) engine = InnoDB charset = 'utf8mb4'; 现在我们需要对于 name 做一些模糊匹配的需求,比如我们需要去匹配 name 中包含...
Leetcode Weekly Contest 176 题解
emmmm,我的拖延症没救了,顺便加上这周沉迷 Kotlin ,这篇本应该周一就写完的题解拖到现在,= =然而这周双周赛,,我又得写两篇题解了。。。 1351. Count Negative Numbers in a Sorted Matrix题面: Given a m * n matrix grid which is sorted in non-increasing order both row-wise and column-wise.Return the number of negative numbers in grid. 示例: 123Input: grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]Output: 8Explanation: There are 8 negatives number in the...
Leetcode BiWeekly Contest 19 题解
例行 Leetcode 周赛,这周双周赛,两场赛打下来,有点酸爽,先写个 BiWeekly 19 Contest 的题解吧 1342. Number of Steps to Reduce a Number to Zer题面: Given a non-negative integer num, return the number of steps to reduce it to zero. If the current number is even, you have to divide it by 2, otherwise, you have to subtract 1 from it. 示例: 123456789Input: num = 14Output: 6Explanation: Step 1) 14 is even; divide by 2 and obtain 7. Step 2) 7 is odd; subtract 1 and obtain 6. Step 3) 6 is even; divide by 2 and obtain 3. ...
Leetcode Weekly Contest 174 题解
最近因为生病好久没刷题,今早开始打了一场 Leetcode 的周赛,来写个题解,今早状态还行,,BTW 以后每周都会打周赛,争取写题解 Leetcode 1341. The K Weakest Rows in a Matrix描述: Given a m * n matrix mat of ones (representing soldiers) and zeros (representing civilians), return the indexes of the k weakest rows in the matrix ordered from the weakest to the strongest.A row i is weaker than row j, if the number of soldiers in row i is less than the number of soldiers in row j, or they have the same number of soldiers but i is less than j. Soldiers are...
简单安利 Rime 输入法
唉,最近因为气胸大过年的住院,春节颓废了好久,今天开始回北京,干脆来安利一个输入法— Rime 碎碎念如同大多数人一样,我之前也是使用搜狗输入法作为自己的主力输入法,但是搜狗输入法的一些缺陷让我放弃了使用搜狗输入法 作为传统艺能,搜狗输入法隐私保护成迷,在 MacOS 上某几个版本的搜狗在寻求获取我的通讯录和日历读取权限 作为传统艺能,搜狗输入法的广告推送实在是一言难尽,特别是在 Windows 上,已经禁了一些组件,但是还是防不胜防 因为和港澳台和国外社区朋友的交流需要,我需要输入法能够比较好的支持繁体,而搜狗输入法的繁体支持也是一言难尽 搜狗输入法的定制能力也着实不满足我的需求。。 因此我在18年开始在寻求一种开源,可控,可定制,对简/繁输入都比较友好的输入法。经过寻找之后,Rime 输入法进入了我的视线,经过一年多的使用,我觉得这个真的是一款非常棒的输入法 Rime 是什么?Rime (又名 中州韻)是一款开源的跨平台的输入法引擎,完全开源,完全可定制,你甚至可以基于 Rime 的源码,来封装一套自己的输入法引擎。同时因为 Rime...
简单聊聊 SQL 中的 Prepared Statements
好久没写文章了,新年还是得写点技术水文来保证下状态,正好最近遇到一个比较有意思的问题,就来简单聊聊一下关于 MySQL 中 Prepared Statements 吧 开始gorm 是大家在使用 Go 开发时的比较常用的 ORM 了,最近在使用 gORM 的时候遇到一个很有意思的问题。首先我大概描述一下这个问题 在使用 gORM 的 Raw 方法进行 SQL 查询时,构造了如下类似的 SQL 1select * from demo where match(name) AGAINST('+?' IN BOOLEAN MODE) 在随后传入参数的时候,返回 Error : sql: expected 0 arguments, got 1。而其余的诸如如下的查询就正常执行 1select * from demo where name = ? 最开始我以为这是 gORM 中拼接 SQL 模块的问题,但是看了下代码后发现一个很有趣的逻辑。gORM 中并没有拼接 Raw SQL 的相关逻辑,它会直接调用 Golang 中的标准库 database/sql 来进行...
年轻人第一台 Mac,来自一个开发者的 Macbook Pro 2019 16寸简评
从工作开始,一直就想买个 Mac,但是一直没有买成,虽说有公司配发的 Mac(这也让我从 Macbook Pro 2015 13寸到 Macbook Pro 2017 15寸,到 Macbook Pro 2017 15寸,到 Macbook Pro 2018 13寸,到 Macbook Pro 2018 15寸用了个遍,23333),但是没有自己的 Mac始终是一个比较遗憾的事,所以这次新款 Mac 出来后,就瞬时公司员工优惠(官网95折)+12期免息分期入手了,现在我来从一个开发者的角度来给一个简单的评测吧 正文为什么会考虑 Mac写这个文章之前,我需要介绍下我买 Mac 的背景。目前我的主力机是来自蓝天的准系统,P775TM,配置是 i7 8700+32G+512G SSD+1070。工作系统是 Manjaro(一个 Linux 发型版)。在目前开发的时候觉得非常舒服,但是我也遇到了几个问题 太重了,有些时候临时有事需要出门带着并不方便 Linux...