年轻人折腾的第一台独服 – PVE 7.4 + NAT 内网 + DHCP + K8S 多节点集群 + Istio + CertManager(letsencrypt)

By | 7月 31, 2023

在狗云家抢了一台重庆联通的独服,每个月 200 块钱,10C 64G 800G,带宽入 50Mbps 出 30Mbps。性价比算是很不错了。有需要的可以去看看,不过不知道现在还有没有刚上线的时候那么大优惠了:https://www.dogyun.com/?ref=doraemon (有 aff,介意可自行去除后缀)。

机器下来之后,这么宽敞的“别墅”肯定不能像之前买 VPS 1C2G 那样扣扣索索的装 LNMP 之类的去跑网站。PVE…

QCon 2023 北京之行记录

By | 2月 12, 2023

终于在 2023 春节上班之后的第一周把 QCon 北京的演讲搞完了,本文记录一些过程中的点点滴滴。

接到邀请还是 22 年 3 月底的时候,有一天主管问我,有个 QCon 5 月份演讲的机会,你去不去?可以把你手头现在做的工作讲一讲。当时也没有想太多,就答应了下来。

主题是基础设施,然后按照邓邓主编的要求,提供了议题申请单,写了一下大概要讲什么东西,之后就开始写写画画 PPT 什么的,结果一个月后通知,因为疫情会议延期,具体时间待定。等到了…

[笔记] 系统设计面试框架

By | 1月 29, 2023

以下为 ByteByteGo 04 – A Framework For System Design Interviews 文章笔记内容:

系统设计面试其实是模拟日常工作中,和同事们面对某一个不确定问题,共同探讨一个最终满足目标的解决方案的过程。在这个里面,重要的是探讨的过程,当然不是说最终的方案不重要,而是在系统设计面试的过程中,主要会考察一个人的协作能力、在压力下工作的能力、妥善解决分歧的能力,以及如何在有限的成本下做权衡与取舍的能力。最终的解决方案往往并不是确定性的,也没有什么标准答案。…

保姆级教程,群晖 + Emby 打造家庭影音中心

By | 1月 2, 2023

元旦在家,看着吃灰的 ThinkPad P1,开始动了它的坏心思。虽然家里有一个群晖 DS216j,但也是四五年前的老古董了,电影稍微大一点解码就卡,这台 ThinkPad 性能对于家庭影音来说绰绰有余,杀鸡用牛刀了。

弄好之后的效果如下(手机、Pad、电脑、电视风格及体验一致,内网和外网一致):

然后就可以开始搞了,开搞之前,先把现状和目标捋清楚。

现状:

  • 有一台白群晖 DS216j,性能那是相当的低。里面有两块 WD

Elasticsearch 运维 – Shard 原理

By | 2月 21, 2021

分片是 Elasticsearch 分布式存储的基石。在 Elasticsearch 中有 主分片(Primary Shard)副本分片(Replica Shard) 两种。

Primary Shard

Elasticsearch 通过主分片,将数据分布在所有的节点上。主分片可以将一份索引的数据,分散在多个 Data Node 上,实现存储的水平扩展。

主分片(Primary Shard)数在索引创建的时候指定,后续默认不能修改,如果需要修改,需重建索引。…

Elastcisearch 运维 – 角色划分与选主流程

By | 2月 21, 2021

Elasticsearch 的分布式架构

  • 不同的集群通过不同的名字来区分,默认名字“elasticsearch”
  • 通过配置文件修改,或者在命令行中 -E cluster.name=name 进行设定

节点

  • 节点是一个 Elasticsearch 的实例,本质上是一个 Java 进程。一台机器上可以运行多个,但生产环境一般只运行一个 Elasticsearch 实例
  • 每一个节点都有名字,通过配置文件配置,或者启动的时候 -E node.name=nodename

MySQL 普通索引和唯一索引

By | 2月 17, 2021

问题引入

假设在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似的 SQL:

select name from user where id_card = 'xxx';

所以,我们一定会考虑在 id_card 字段上建索引。

由于身份证号字段比较大,所以它不适合当做主键。那么 id_card 字段是要创建唯一索引还是普通索引呢?此处假设业务代码已经保证了不会写入重复的身份证号,这两个选择在逻辑上都是正确的。…

MySQL 索引

By | 2月 14, 2021

索引分类

索引类型分为 主键索引非主键索引

主键索引的叶子节点存储的是整行数据。在 InnoDB 里,主键索引也被称为 聚簇索引(clustered index)

非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为 二级索引(secondary index)

基于主键索引和普通索引的查询有什么区别?

  • 如果语句是 select * from T where id=500 这种主键查询方式,则只需要搜索 id 这个索引对应的

MySQL 日志模块

By | 2月 13, 2021

MySQL 里如果每一次的更新操作都写磁盘的话,那么这个过程中磁盘要找到对应的那条记录,然后再更新,整个过程中的 IO 成本、查找成本都很高,所以 MySQL 中采用了 WAL(Write-Ahead Logging)技术来解决这个问题。

关键点是:先写日志,再写磁盘

redo log

redo log 是 InnoDB 引擎特有的日志。

当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 中,并更新内存,这个时候更新就算完成了。同时,InnoDB…

MySQL 事务

By | 5月 6, 2021

概念

ACID:Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。

隔离级别

SQL 标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)、串行化(serializable)

下面的表格从自己和他人的视角分别描述这四个隔离级别:

隔离级别 自己视角

2021-01-20

By | 1月 20, 2021

今年过年看起来是回不去河北了,回四川估计也大概率没戏了 😔

等到 2 月份如果情况还不明朗,就自己准备点过年的吃的喝的一个人在杭州过吧。可能是第一次在外自己过年了。

乡愁。

Kubernetes 设计解读 – Replica Set

By | 9月 13, 2020

Replica Set 可以被认为是升级版的 Replication Controller。也就是说,Replica Set 也是用于保证与 label selector 匹配的 Pod 数量维持在期望状态。

Replica Set 和 Replication Controller 的区别是引入了基于子集的 selector 查询条件,而 Replication Controller 仅支持基于值相等的 selector 条件查询。

虽然 Replica…

Kubernetes 设计解读 – Service

By | 9月 13, 2020

由于重新调度的原因,Pod 在 Kubernetes 上的地址是不固定的,因此需要一个代理来确保需要使用 Pod 的应用不需要知道 Pod 的真实地址。另一个原因是当使用 Replication Controller 创建了多个Pod 的副本时,需要一个代理来为这些 Pod 做负载均衡。

定义 service

Service 主要由一个 IP 地址和一个 label selector 组成。在创建之初,每个 service 被分配了一个独一无二的…

Kubernetes 设计解读 – Replication Controller

By | 9月 13, 2020

Replication Controller 是 Kubernetes 为了解决 “如何构造完全同质的 Pod 副本” 问题而引入的资源对象。

Replication Controller 决定了一个 Pod 有多少同时运行的副本,并保证这些副本的期望状态与当前状态一致。在设计上依然体现出了“旁路控制”的思想,为每个 Pod “外挂” 了一个控制器进程,从而避免了该组件成为性能瓶颈,即使这个控制器进程失效,容器依然可以正常运行。…

Kubernetes 设计解读 – Pod

By | 9月 13, 2020

在 Kubernetes 中,能够被创建、调度和管理的最小单元是 Pod。

Pod 可以想象成一个篮子,而容器则是篮子里的鸡蛋,当 Kubernetes 需要调度容器时,它直接把一个篮子(连同篮子里的鸡蛋)从一个宿主机调度到另一个宿主机,而不是一个一个地搬运里面的鸡蛋。篮子与鸡蛋的关系主要表现在:
1. 一个 Pod 里的容器能有多少定义的资源也取决于这个篮子的大小
2. label 是贴在篮子上的
3. IP 分配给篮子而不是容器,篮子里面的所有容器共享这个…

在 Kubernetes 集群中启动一个 Bash

By | 9月 13, 2020
kubectl run my-shell --rm -i --tty --image ubuntu -- bash

参数说明:

  • --rm : 当脱离容器后对该容器进行删除,也就是说当你退出这个 bash 后,会自动清理对应的 Deployment 和 Pod
  • -i/-tty : 允许 attach 到这个交互的会话中
  • -- : 界定 kubctl run 的参数结束标识
  • bash : 要启动的命令

经济学 – 价格

By | 7月 8, 2020

计划经济的三个不可逾越的根本障碍

人际效用不可比较

每个人对不同的物品有不同的偏好、不同的个人估值。没有一把尺子可以准确衡量每个人对于指定的物品的估值。我喜欢的,你不喜欢。我们计算不出来每一种物品效用的绝对高低。

所以会有一个有趣的现象,就是个人和企业的高度计划性,与整个社会的无计划性,是可以并存的。比如打仗中要攻下某个山头,那就简单了,我们会不惜一切代价把那个山头攻下来,但是发展经济呢?发展什么呢?做面包还是做黄油还是大炮?不知道。不知道劲儿往哪使。…