一个滚动重启的状态保存问题
Created|Updated|系统架构
|Word Count:157|Reading Time:1mins|Post Views:
很多时候滚动重启,都会导致状态丢失。比较好的设计方法是把服务本身设计成无状态的,然后在上游的服务上做好 failover,然后增加 standby server,让 sticky 数据 transmit 到 standby 机器上,让 request 失败以后可以自己由上游重传到 standby server。然后就可以滚动重启了。
这大部分场景下还要考虑幂等的问题。
这就看得出热配置热替换的重要性了。在大多数情况下,除了发布新的 feature 升级以外,都应该尽量用热配置来避免重启。
Author: magicliang
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2020-12-02
服务治理组件笔记
背景 service-centric architecture 以服务为中心的架构,和 SOA 的区别是? 服务治理的模式 server-side pattern:容易集中管控,易单点失败。 client-side pattern:不容易集中管控,不易单点失败。 演化流程 基础治理能力:通信协议统一、命名服务的统一、监控预警、运营平台 高性能/易用性:通信框架高性能/通信框架轻量化/分布式链路追踪/测试工具可视化 全方位的治理能力:全链路压测平台/深度服务化 SOA/链路级流量治理/易用化平台构建 业界前言探索:SET 化高扩展架构/云原生架构治理 治理体系 该有的治理能力都要有。 注册中心 服务注册 服务概要 提供者 消费者 监控报警 节点监控 性能监控 业务监控 异常监控 服务运营 配置管理 服务分组 节点管理 服务鉴权 数据分析 性能指标 来源去向 主机分析 数据报表 调用链路 关键组件-本地代理 比如 LocalAgent,能够做到:策略下沉,解耦功能,对业务服务侵入性低。 但 Provider/Consumer 还需要使用自己的 sdk,它和远端的 ...

2019-09-26
架构整洁之道笔记
最早的《The Clean Architecture》诞生于 2012年,这个问题很早就被讨论清楚了。 思维导图: 注意,所有的接口都是在高层声明的:UseCase Input Port 和 UseCase Output port,所以高层可以实现高层的接口,低层也可以实现高层的接口。 注意,sofa的分层就是在一个横向的模块里声明了业务用例的接口和 core-model 的接口,这样源代码级的依赖都集中在抽象上: Use Case Interactor 和 Presenter 应该是可测试的,而 Data Access Interface、View、ORM 应该是 humble object。所以一个应用的低层(外层)应该是被排除掉不做测试的。 附件下载: xmind 关于源代码中的依赖关系的一些澄清: “使用”并不意味着“定义”,而只是引用 dashed outline 代表虚线框,也代表抽象。
2021-08-25
基本业务架构设计方法
如何实现自己的 validation 123456789101112131415161718192021222324252627282930313233343536373839// 抛出异常private void validateParam(Map<String, String> paramValues) { boolean validate = MapUtils.isEmpty(paramValues) || !paramValues.containsKey(ParamConstant.CUSTOMER_N0) || StringUtils.isEmpty(paramValues.get(ParamConstant.CUSTOMER_N0)); if (validate) { throw new DataBusinessException(ResultCodeEnum.PARAM_NULL); } ...

2023-02-13
推荐系统相关
新闻的推荐系统是为了给信息流的用户推荐资讯 feed。接口返回的信息不一定会被外显曝光。 在瀑布流式的外显曝光场景下,重排能够减少用户的疲劳度。 这就涉及到推荐系统的设计,流量要经过什么样的链路呢? 接入层、推荐中控、画像、召回、粗排、精排、重排。这些系统会形成星型架构和树形架构。 不同的架构之间有一个典型的优缺点需要取舍:链路长度会影响网络传输的最终效率,也会影响推荐系统的性能。 feeds推荐引擎典型架构.drawio
2018-01-30
几种共识算法
达成共识的英文原文是 come to consensus。达成共识以后,也未必代表数据是完全一致的(Raft 算法中 leader 发出 append log 的 commit 命令即算达成共识?但如果中途数据丢失,则还是会有子节点数据不一致)。 在分布式环境下,多个系统协同工作的效率,受制于系统交叉点的性能。在需要达成分布式共识的场景下,分布式共识算法在保证系统安全性的同时,限制了全系统横向扩展的性能提升。 根据环境的不同,可以应用不同的共识算法。 在完全互信的环境下-私有链、私有的分布式数据库,节点之间可以使用 Paxos 或者 Raft 这种 leader 相对固定的算法。 在有限互信的环境下-联盟链,可以使用 PBFT。PBFT 算法是依据确定性的投票(可能是漫长的投票,也可能进入死循环)达到确定性一致的算法。 在没有互信的情况下-公有链,可以使用 POW/POS/DPOS/POA。这类算法是基于概率得到正确的最终一致性,性能比 PBFT 要稍微好点。 最好的共识算法应该模块化,例如 Corda 中的 notary,Hyperledger fabric 中的 solo/k...

2022-01-20
常见架构推导法
架构演进之路,路漫漫其修远兮 架构关乎不变的顶层设计抽象。 架构关乎组件(元素)、交互(连接器)、功能(function or feature)、约束(constraint 面向当前、未来-下一场景、下一个规模、下一个地域或国家) 洋葱架构的另一种解读 系统是洋葱,看似有边界,但是每次改动总是端到端,过程让⼈人泪流满⾯面。 系统的本质 功能与质量量的结合体:功能是核心价值 + 质量实现增值或保值。 系统的复杂性 过程与过程数据 过程与过程数据.drawio 易变性 系统复杂度.drawio 系统复杂度 = 功能的数量 * 功能的过程 《人月神话》:本质复杂度(Essential Complexity)和偶然复杂度(Accident Complexity)。 解法 分离业务复杂度和系统复杂度。 回归面向对象的本质,重拾抽象思维的价值 维护效率曲线.drawio 三种编程范型.drawio 领域驱动设计 战略设计 领域驱动设计-战略设计-一般过程.drawio 需求分析 需求分析.xmind 词汇提取 知识提取.drawio 领域语⾔定义-合理的上下⽂和领域划分 顺序-...
Announcement
人生只是,守株待兔


