Pensieve: 1905

2019-05-26 18:50

所观所读

最近事情比较多, 上公车后往往没心情读大部头了, 于是看了看剧, 顺手看了一些休闲级的书. 比如, 读完了马亲王的古董局中局, 这本实在有点不能看了, 整个创作水平下降到鬼吹灯的档次了. 我还是喜欢他写的埋梗卖梗的书, 这种近猎奇类的RPG攻略没什么兴趣. 另外在读的一本是当音乐停止之后, 我喜欢这种断代史.

接下来是最近看的影视剧, 权力游戏第八季看完了前三集就弃了, 理由众所周知. 倒是这次大众对结局一致不满后, 原作者跑出来说拍成这样他也不愿意什么的, 让我对这个作者有了更多的厌恶. 是, 作者没必要对读者负责, 作者想怎么写就什么写, 想什么时候写完就什么时候写完, 这是作者的自由, 天赋神权. 现在的这个结局当然也不是作者独裁, 而是和电视编剧一起创作的结果. 但是你自己驾驭不住这么多人, 写了这么多冲突, 摊子铺得那么大, 想要一个好的结局又没有好的笔力, 剧情烂尾还往编剧那儿甩锅, 合适吗? 你早点努力些, 把这部写完了, 哪来这么多幺蛾子?

除此之外, 还看完了流浪地球和两杆大烟枪, 都没什么特别的感觉. 最近生活大爆炸全剧终, 找来最终季开始看. 看了一半了, 预计月底前能看完, 至少编剧是更有诚意的.

所玩

饥荒遇到了一个大bug. 我用机器人, 转生了若干次后在夏天进了地穴探险, 没待一两天出来了, 发现外面正值严冬, 而且一群野狗在追我, 原因大概是出洞穴的时候重新计算季节, 没考虑到转生只拿了当前总计生存天数. 我相信这个档我能熬过去, 不过我对这个移植的诚意丧失了一些信心. 有心情的时候回头再玩吧. 另, 我全价买之后不久它就半价打折了…

月中的时候尝试了下新的Asphalt版本, Asphalt Legend, 结果发现里面开始有了收集碎片的元素, 于是果断弃了. 这种为了延长游戏寿命而降低游戏体验的事情, 真让人不齿. 倒是很希望Switch上能有个好一点的赛车游戏啊… 叹气.

暗黑三新赛季终于又开始了, 到现在刷了700多级, 大秘境刷到了95, 这个赛季眼看又要结束了: 这次身上还有若干件装备没远古, 完全没用宝石堆属性, 更是完全没有用赛季的梦魇套特效. 罢了罢了, 快点玩完这个赛季玩死亡细胞吧.

Ennio

最近在和Michael Diender一起搞一个用于调度Cloudformation里的Stack的框架. 里面包含了一些我们对现有的技术架构的一些反思. 在谈这个项目前, 我想先简单介绍一下供职单位目前对Cloudformation的使用方式.

数年前, 所在的供职单位开始把自有的业务往AWS上迁移, 迁移过程中自然要用到Cloudformation. 当时在组里的一些人对此有了一个讨论, 一些人建议用Ansible来生成模版, 并通过Ansible的Role来管理; 另外一些人建议应该有一层比较可靠的DSL来优化整个过程(原话是, 应该有一个企业级的解决方案). 当时, 同意第二种方案的人占了多数, 供职单位开始使用stacker, 并在它的基础上做了二次开发, 加入了很多特性. 我大概也是这个时候开始在这个供职单位做事, 自己也给这个过程添加了一些特性.

但是, 使用这个框架并不是无痛的, 事实上, 这个决定给我们带来的痛苦甚至大余收益:

上面的缺点都还只是stacker本身的缺点, 而我们自己在二次开发的时候, 设计有些不当, 也是造成使用上各种困难的重要原因. 我们二次开发时加入的特性包括:

于是, 也给自己挖了这么些坑:

这样的种种问题, 我们有些有解决方案, 有些没有. 所以当这个问题出现了一段时间后, 组内开始反思, 并觉得stacker太难用, 没必要. 中肯地说, 这种看法是有道理的, 但是如果自己从头来写Cloudformation模板, 则我们会很想念stacker里的这些特性:

现在我们该说一下新框架了. 这部分代码大部分源自我在一个新项目的实践, 在这个项目中, 我们的策略是:

在这个新项目中, 我们没有用任何的模板引擎, 而这不算是一个良好的行为. 为此, 我们正准备给这套框架增加jinja2模板引擎, 这样不用写难以维护的Cloudformation函数了. 理想状况下, 项目的目录结构应该类似:

.           # 项目根目录
├── infra   # Infra代码
│   ├─── apache         # apache stack的相关文件
│   │    ├── apache.j2  # apache stack的cloudformation模板, 使用jinja2模板
│   │    └── apache.yml # 上面jinja模板中使用到的变量
│   ├─── mysql          # mysql stack的相关文件
│   │    ├── mysql.j2
│   │    └── mysql.yml
│   ├─── cdn            # cdn stack的相关文件
│   │    ├── cdn.j2
│   │    └── cdn.yml
│   ├─── environments   # 各个环境下的变量
│   │    ├── dev.yml    # dev账号中运行的
│   │    ├── dev-kx.yml # dev账号中运行的我的个人测试Stack所使用的变量
│   │    ├── stg.yml    # stg账号中运行的
│   │    └── prd.yml    # stg账号中运行的
│   ├── manage.py       # 项目的Python代码, 包括各个stack的参数获取, stack部署前后的钩子等
│   └── README.md       # 文档
└── src     # 项目源码等其他内容

目前, 整个项目的结构已经基本清楚了, 大部分代码也已经存在了. 就等着我最后把这套框架写完了…