gydtep 发表于 2021-11-6 09:14:34
前面提到了由于DTS支持的并不是很完善,所以我基于DRC(一个阿里内部数据订阅组件,类似canal)自己实现了数据同步的能力,下面介绍一下实现一致性的过程,中间也走了一些弯路。gydtep 发表于 2021-11-6 10:26:29
同时单机消费的第二个问题就是单点。所以我们要实现Failover。这里我们采用Raft协议进行多机选主以及对主的请求。当单机挂掉之后,其余的机器会自动选出新的Leader执行同步任务。gydtep 发表于 2021-11-6 11:42:19
通过实践我们发现,这种客户端排序并不可靠,我们的系统不可能无限去等待一个消息的,这里涉及到最终一致性的问题,在第3点中继续探讨。其实对于顺序消息,RocketMQ是有顺序消息的,但是RocketMQ目前还没有实现跨单元的能力gydtep 发表于 2021-11-6 13:01:36
。CRDT(Conflict-Free Replicated Data Type)是各种基础数据结构最终一致算法的理论总结,能根据一定的规则自动合并,解决冲突,达到强最终一致的效果。gydtep 发表于 2021-11-6 13:52:41
通过DRC的拆解,数据库操作有三种:insert、update、delete,这三种操作不管哪两种操作都是不能满足交换律的,会产生冲突,所以我们在并发级别(主键)加上额外信息,这里我们采用序号,也就是2中提到的染色的过程,这个过程是保留的。gydtep 发表于 2021-11-6 15:37:58
insert是不满足结合律的,可能会有主键冲突,我们把insert语句变更insert ignore,而收到insert操作说明之前并不存在这样一条记录,或者前面有delete操作。而delete操作可能还没有到。这时insert ignore操作返回结果是0,但这次的insert数据可能跟已有的记录内容并不一致,所以这里我们将这个insert操作转换为update 操作再执行一次。gydtep 发表于 2021-11-8 09:28:21
通过多种弹性机制,能够对系统容量进行精细粒度的管理,使资源的使用量能随着业务流量的变化而调整,从而极大程度的增加资源利用率,大幅降低资源成本。gydtep 发表于 2021-11-8 09:45:15
对于开发测试环境而言,SAE 的机制弹性能力能体现得更加淋漓尽致,得益于 SAE 出色的资源调度能力,可以一键启停一整套微服务应用。即便仅对一项简单的新功能进行冒烟测试,也完全可以新启一套完整而隔离的测试环境来进行。gydtep 发表于 2021-11-8 13:41:49
CI/CD 集成能力:SAE 与云效、云效 2020、 Jenkins 等产品进行了深入集成,可以方便开发者将构建好的应用快速部署。gydtep 发表于 2021-11-8 14:24:41
当然是可以的。SAE 提供容器镜像部署方式,这就代表着不管采用哪种编程语言,只要最终的应用能够发布成容器镜像,就可以部署在 SAE 上。