滚动重启、金丝雀发布、AB testing 和蓝绿部署
本文讨论发布周期(release cycles)里 deployment strategy 的问题,抛开大规模部署的 big bang deployment。 滚动重启、金丝雀发布、AB testing 在 martin fowler 的博客里,金丝雀发布和滚动重启和 AB testing 并没有本质区别,都是 phased approach或者 incremental approach,是 ParallelChange 思想的实践。 当我们拥有一个新版本时: 滚动重启(rolling restart) rolling restart 会让新旧版本在环境里长时间共存,逐一使节点部署新版本,这样易于发现问题和回滚。 金丝雀发布(canary release) 而金丝雀发布同样允许新旧版本长时间共存,在逐一部署新节点的前提下,逐步利用 LB 之类的基础设施来切分用户,其策略还可以细分为: 先不给新版本,在无流量的情况下在生产环境验证 - 很多大厂的实现都忽略了这点。 尽量让内部用户先使用 - FB 之类的大厂的员工都非常多,使用一个特性开关(名字很多,比如 feature bits,...
部署环境
列举环境 根据 wikipedia,工业界总是把开发环境和生产环境分离出来,中间还有若干个 stages。 结构化的发布管理允许分阶段部署(rollout),测试和在遇到问题时回滚(rollback)。 常见的环境有: 4-tier architecture is development, testing, model, production (DEV, TEST, MODL, PROD), Quality Control (QC), for acceptance testing; sandbox or experimental (EXP) Another common architecture is development, testing, acceptance and production (DTAP) Development 构造对软件的变动的环境,大多数情况下仅仅是开发者的工作站(workstation)。在这个环境里实验变更和进行单元测试。集成环境有时候也可以被认为是开发环境,在集成环境里专门对 repo 里的源代码 copy 进行构建和单元测试。 T...
CI/CD 方法论
CI/CD 的重要性 Martin Fowler说过,“持续集成并不能消除Bug,而是让它们非常容易发现和改正。” 持续集成和持续交付作为敏捷开发的一种最佳实践,通过包括构建、部署、测试、发布流程的自动化,实现质量内建,让质量问题可以快速发现和消除,从而提升软件交付的质量和效率。 基本策略 分支模型是CICD落地的源头,研发过程各角色间的协作方式以及研发过程内代码版本的流转方式都取决于分支模型。 首先划分环境。 划分环境后设计分支,注重开发和发布两个场景。 根据分支设计流水线,验证应该发生在全流水线里。 一般的分支模型 参考文献: 《在阿里,我们如何管理代码分支?》 《What is Trunk-Based Development?》 《提升团队的微服务落地能力》
如何做全链路压测
性能测试 压测问题.xmind 性能测试的必要性 营销活动周期 首先引入一个营销活动周期的概念,它是一个闭环流程: PS:1和2之间再加一个步骤。环境改造和基础数据准备。强调必须在生产环境。 压测环境准备:需要复用真实的线上环境,压测结果和问题暴露才都是最真实情况。可通过压测流量全局识别、透传(数据进入影子区域)。 基础数据准备:以电商场景为例,构造满足大促场景的核心基础相关数据(如买家、卖家、商品信息),以线上数据为数据源,进行采样、过滤、脱敏,并保持同等量级。 阿里实际上是 2013 年才开始做全链路压测的,现在的压测周期更加智能化。可以在白天由几个人值守进行,包含以下活动: 压测环境改造 整个阿里经济体的压测环境,包括双十一压测,全部选择的是线上环境,此时需要评估: 如果要进行全链路压测,是否直接可以使用现有环境。 同一个API多次压测是否会被拦截-容易被忽略。 是否会有脏数据影响、如果有影响应该如何改造避免-必须进行的改造项目:1 识别+ 透传流量标,2 构造影子数据区域。 以上这些问题总结下来即为两类问题:业务问题和数据传递问题。问题比较明确,我们就根据...
Redis 笔记之十一-集群 Cluster
背景 在 Redis Cluster 方案诞生以前,在 Redis 集群遇到单机资源和流量瓶颈时,有两种常见分布式解决方案: 客户端方案:需要自己处理分区逻辑、路由、故障转移(有时候 Routing、LB 和 Failover是同一个问题,都需要通过 routing 技术来切换流量的 endpoint)。 代理方案:减轻了客户端的职责和压力,架构上的负担过重。 Redis Cluster 的出现,极大地降低了架构师的负担,解放了生产力。 数据分布 数据分布理论 |分区方式|特点|代表产品|取舍逻辑| |:–:|:–:|:–:| |哈希分区| 离散度好 数据分布业务无关 无法顺序访问| KV型 Redis Cluster Cassandra Dynamo Elastic Search|如果需要平衡地存储大量数据而只有随机访问其中的若干条,则可以使用简单的哈希分区| |顺序分区|离散度易倾斜 数据分布业务相关 可顺序访问| 表型 Bigtable HBase Hypertable|如果需要存储大量数据且需要支持区间查找,则也需要使用简单的顺序分区,如果要解决负载均衡的问题可能需要...
保险专业基本功
保险行业市场参与者 直保公司(也就是常见的保险公司),如泰康人寿、平安财险。 保险中介(帮直保公司卖保险的机构),如携程保代、慧择经纪、XX银行分行兼业代理。 再保险公司(直保公司将无法独自分摊的风险进行再分摊),如瑞士再保险,中国再保险。 保险公估(帮助保险公司理赔的专业公司),如泛华公估、民太安公估。 保险资管公司(帮助保险公司进行资产管理的公司),如中国人保资产管理。 类目的区别 财产险:经营跟财产损失有关的业务,主要是车险。 寿险:经营与人身损失有关的业务,主要是重疾险、健康险及寿险等。 财产险公司及寿险公司均可经营一年期及更短保障期限的健康险及意外险业务,这就是为什么百万医疗虽然是人身相关的保险,但是最早研发推出的是众安在线(一家财产险公司),而支付宝的好医保·长期医疗6年期百万医疗只能由人保健康这类人寿险公司推出。 互联网保险的模式 什么是场景保险模式 依靠场景销售保险产品,可以是传统的保险产品定制也可以是全新设计的保险产品。 a) 传统的保险产品定制:以携程为代表,机票搭售航意险,以变现为导向。 b) 全新设计的保险产品:以“准时宝”、“退回运费险”为代表,针...
Redis 笔记之十-哨兵 Sentinel
Redis 有若干套高可用实现方案。2.8 开始提供哨兵功能(不要使用更低版本的哨兵,可能有 bug)。 基本概念 主从复制模式的问题 Redis 天然就带有主从复制的功能,但主从复制有若干缺点: 需要手工干预,缺乏自动 FO 机制-分布式高可用问题。 单机的写能力有限-分布式容量问题。 单机的存储能力有限-分布式容量问题。 一个经典的高可用场景 当一个主从集群的 主节点 失效的时候,经典的恢复步骤如下: 主节点失效。 选出新的从节点,slaveof no one。 先更新应用方的连接。 再让其他从节点换主。 再把恢复好的主节点作为新的从节点复制新的主节点。 3 和 4 的步骤可以互换。这种需要手工介入的运行机制不能被当作高可用的。而 sentinel 的作用是把这些经典步骤从手工实现为自动。 Sentinel 的高可用性 Sentinel 方案是在原生的 Master-Slave 集群之外加上一个 Sentinel 集群。 每个 Sentinel 节点会监控其他 Sentinel 节点和所有 Redis 节点。任何一个不可达的节点,它都会将其做下线标识。 如果标识的是...
复式记账法
借记和贷记 解释一 借贷是符号,对于资产和费用,借方是增加,贷方是减少。 对于负债,权益和收入,借方是减少,贷方是增加。 提高,借贷表示价值流向,借方表示价值去向,贷方表示价值来源。 借方资产,表示价值流向资产,资产增加了。 借方负债,表示价值流向负债,偿还了负债,负债减少了。 贷方权益,表示价值来源于权益,权益增加了。贷方收入,表示价值来源于收入,收入增加了。 因为价值的来源和去向必定是相等的,所以有借必有贷,借贷必相等。 解释二 复式簿记中,“借”的含义是“借进来”,“贷”的含义是“借出去”,而这个“借进来”和“借出去”又是从对方的视角来看的。复式簿记发展的最初是以记录债权、债务为目的使用的,而且也没有那么多会计科目,基本都是使用人名(或者商店名字)来进行记录的。而这里的“借进来”“借出去”并不一定是借,这是用来表示财产的流向的。下面为了解释借方、贷方的含义,会有很多简化处理。用户A向银行存钱,在银行的账本上,在现金这个会计科目下,会记录从用户A处“借进来”200元;在用户A这个会计科目下,记录“借出去”现金200元。这里的“借进来”对应着现金会计科目下的“借方”,“借出去”...
世界上最简单的会计书
世界上最简单的会计书.xmind
常见数学术语中英文对照
集合与简易逻辑 集合(集) set 非负整数集 the set of all non-negative integers 自然数集 the set of all natural numbers 正整数集 the set of all positive integers 整数集 the set of all integers 有理数集 the set of all rational numbers 实数集 the set of all real numbers 元素 element 属于 belong to 不属于 not belong to 有限集 ...