对稳定性工作的一些思考 - 什么是SRE


什么是SRE

最早接触SRE这个名词还是在跟CloudFlare进行一些业务合作的时候,当时他们有一个专门的SRE团队来负责整个CDN系统的稳定性。 本着好奇的心态去了解,发现SRE的全称是(Site Reliability Engineering,aka:站点可靠性/稳定性工程师)成为一名合格的SRE需要同时具备研发(Dev)和运维(OP)的能力。同时它又不仅仅是2个职能的叠加,而是一种对系统稳定性、可用性、团队持续迭代喝持续建设的体系化解决方案。

如何做一名SRE

研发和SRE的区别

那些跟我一样从研发开始接触稳定性工作的选手在刚开始时可能会有类似的问题那就是对于稳定性相关的工作不知...

Read more

Django将数据从Sqlite迁移到MySQL


背景

最近在做一个内部项目时,为了开发效率,所以选择了Sqlite作为数据库,在项目上线时需要将数据库切换到MySQL。

操作步骤

  1. 使用dumpdata将数据导出到文件
python manage.py dumpdata -> data.json
  1. 修改django的settings配置,改为MySQL

  2. 使用loaddata将数据导入到新数据库

python manage.py loaddata data.json

等待命令执行完毕之后,可以自行检查数据是否正确导入。

常见问题

由于字段过长导致的导入失败

这种问题是因为Sqlite对于字段长度并不做校验,比如我们定义一个...

Read more

Django使用fixture简化测试用例


在编写测试用例时需要提前准备测试用的数据。在Django中,有2种比较推荐的准备测试数据的办法:

  1. 在测试用例的setUp方法种添加测试用数据
  2. 使用fixture将测试数据导入到数据库

使用setUp添加数据

在setUp方法中添加测试数据的写法比较简单,例如:

class EXPtest(TestCase):
    def setUp(self):
        self.level0 = Level.objects.create(level=0, exp=0)
        self.level1 = Level.objects.create(level=1, exp=5)
...

Read more

好玩的博弈论 - 什么是博弈论


博弈论

博弈论是指双方或者多方存在竞争、合作、冲突等情况下,通过充分了解各方信息,并依此选择一种能为本方争取最大利益的最优决策的理论。日常生活中有很多的事情和故事都有博弈论的应用,比如“田忌赛马”。

田忌赛马

齐国大将田忌平日里喜欢跟贵族赛马赌钱。赛马的规则是每一方出上等马、中等马、下等马各一匹,共赛三场,三局两胜制。由于田忌的马比贵族的马略逊一筹,所以十赌九输。当时孙膑在田忌的府中做客,经常看见田忌同贵族赛马,对赛马的规则和双方马的实力差距都比较了解。某天孙膑看见田忌赛马又输了之后对田忌说:“明天你尽管同那些贵族们下大注,我保证让你把输的钱赢回来。”田忌相信了孙膑,第二天约贵族赛马,并...

Read more

好玩的博弈论 - 生活中的“囚徒困境”


“囚徒困境”在生活中经常能见到。比如之前我们提到的某东和某猫的价格战。虽然对于2家平台而言,都不降价才是最好的策略,但是往年每年都要进行降价促销,因此今年谁也不能保证对方不降价,此时单方面的选择降价是最好的选择,这样的话利润至少为8,但是运气好的话可能为14。如果选择不降价,虽然有可能保住10的利润,但是根据以往经验来看,利润最后更有可能为6。因此,双方都会选择降价,得到(8, 8)的结局。

但是如果2家之前就沟通好,都不降价的话,双方就能得到最好的均衡,就是(10, 10)。但是这样也构成了垄断。违反了反托拉斯法。

除了某猫和某东之外,外卖平台的价格战、滴滴和快旳打车的价格战、ofo和...

Read more

好玩的博弈论 - 纳什均衡


均衡

均衡在英文中是equilibrium,是来自经济学中的一个概念。均衡也就是平衡的意思,在经济学中是指相关因素处在一种稳定的关系中,相关因素的量都是稳定值。比如,我们去商场买东西,那我们作为买家和卖家之间是买卖关系,经过讨价还价最终将商品的价格定在了一个数值上,这个数值买卖双方都能结束,这个时候我们就说买家和卖家之间达成了一种均衡。

博弈论中的均衡是指参与者之间经过博弈,最终达成了一个稳定的结果。均衡只是博弈的一种结果,但并不是唯一的结果。博弈的均衡是稳定的,这种稳定点是可以通过计算找到的。我们以一个例子来分析一下博弈中的均衡。

女孩Alice和男孩Bob青梅竹马,对彼此都有好感,但...

Read more

Ubuntu编译安装Python3


背景

因为工作原因,所以经常需要给新机器安装Python3运行环境。所以记录一下安装过程,方便后续查阅。

安装Python

下载源码

Python的源码下载需要到官网下载,地址为:

https://www.python.org/downloads/source/

找到需要的版本进行下载,比如: 3.8.2版本。

安装依赖

在编译安装Python之前,需要先安装一些系统依赖,可以使用如下命令:

sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev  libsqlite3-dev libreadline-d...

Read more

修改django admin里的时间显示格式


在使用Django Admin做一些业务系统时发现它默认的时间格式是类似于:

May 8, 2020, 11:55 a.m.

这对于一般的客户来说,读起来有点麻烦。所以经常会收到反馈是希望有一个易读性更强的时间字段。实现方法很简单,可以这样:

在ModelAdmin中,添加一个新的时间方法,例如:

def formated_time(self, obj):
    return obj.timefield.strftime("%Y-%m-%d %H:%M:%S")

然后指定它对应的ORM中的字段以及字段的说明:

formated_time.admin_order_field = 'tim...

Read more

解决MacOS: certificate verify failed: unable to get local issuer certificate的问题


最近将工作的操作系统从Ubuntu切换到了MacOS。在运行爬虫脚本时,如果抓取HTTP的页面,则没有报错,但是当遇到HTTPS页面时,就出现了这么一个报错:

certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)

出现这个问题的原因是给这个网站的签发证书的CA证书没有在操作系统的root证书列表里。这里有2个可能:

  1. 证书是自签名证书(类似于之前的12306)
  2. CA是一个新的CA,操作系统里没有更新对应的CA证书

对于这个问题可以有2个解决办法:

  1. 在脚本中不校验服务端证书有效性;...

Read more

基金的选择


开扒基金家族

基金可以按四个维度来分类,按投资品种分、按交易渠道分、按运作方式分,按投资方式分。

注意:这四个方法并不是相互独立,而是各有交叉的,同一只基金在不同的分类标准下属于不同的类型。

按投资品种分

货币基金

货币基金用来投资企业债、银行定期存款、地方政府债、国债,比较安全相对收益也比交低,一般在2%-4%左右。

注意:没有投资债券占比要求,除了投资一年内的债券,还可以投资银行定期存款等其它收益比较稳定的有价证券。

货币基金的筛选方法:

  • 收益率:可以通过‘每万份收益’和‘7日年化’这两个指示。
  • 流动性:最好随用随取(T+0)。
  • 成立时间:成立时间3-5年以上比较好。
  • 基金规模...

Read more