工程架构设计指导原则

发展方向

建设原则

研发效率

开发便捷性

(特指新逻辑开发)

  1. 提供CodeGen、开发脚手架、IDE等工具,减少开发工作量。

  2. 合理设计函数、组件、算子、服务的接口,提供高质量文档,降低开发者的学习成本。

复用范围

(组织架构维度)

  1. 抽象逻辑支持 跨服务复用。

  2. 抽象逻辑支持 跨组织复用。

  3. 抽象逻辑支持 跨业务线复用。

形成统一业务开发框架,跨服务、跨组织、跨业务线推广

复用率

  1. 合理设计逻辑的的抽象粒度,提高长期可复用率。

  2. 合理设计逻辑的对外透出形式。

    主要分为代码、静态库、动态库、服务几个层面。按照先后顺序,可控性递减,变更影响范围递增,复用效率递增,长期维护性递增。

  3. 支持逻辑检索、逻辑推荐,减少信息壁垒,提高传播效率

  1. 抽象并沉淀公共逻辑、公共数据结构,梳理为基础算子库、业务算子库

  2. 透出形式设计原则

    1. 代码:应尽量避免代码级别复用。除非逻辑过于简单,或迭代/分裂频率非常高

    2. 库:有明确责任方,稳定运行x天且y天没有迭代或分裂的算子沉淀为库

      1. 静态库:若开发环境与运行环境可能存在差异,或希望降低功能变更的生效范围(须重新编译 + 发布),适合采用静态库

      2. 动态库:若开发环境与运行环境不会存在差异(例如Java服务,或采用容器交付),或希望加快功能变更的生效速度(仅需重新发布),适合采用动态库

    3. 服务:逻辑有明确责任方,且逻辑内聚,组织结构稳定,希望功能变更大面积生效,适合采用服务。服务等同于一个“大算子”,长期应尽可能弱化服务的概念。

  3. 提供算子搜索能力

协作效率

  1. 抽象常用数据结构,形成标准接口,减少沟通次数

  2. 降低开发、测试、发布粒度,提高上下游变更兼容性,降低协作干扰

  1. 复用频率较高的核心数据结构需要跨服务、跨组织、跨业务线统一

  2. 实现算子粒度开发、测试、发布

运维效率

稳定性

系统复杂度

  1. 支持部署隔离。

    若大量业务逻辑、业务数据合并部署,库符号、JAR包的冲突概率提高,部署过程中发生干扰的概率提高。应尽量降低部署粒度,保证部署环境隔离。

  2. 减少重复部署。

    若同样的逻辑/数据需要反复部署,出现遗漏、错误的概率提高,运维的效率降低。应尽可能保证同一逻辑/数据仅部署一次。

  1. 算子粒度环境隔离部署

  2. 相同的逻辑/数据即使被多个上游引用,仍只部署一次(冲突1)

风险隔离

  1. 防止故障扩散

    当多个上游调用同一个集群时,由任意一个上游引发的故障会扩散到所有其他上游,如coredump、负载打满等情况。在架构设计时应明确可接受的故障影响范围,谨慎设计部署与调用关系。

  2. 支持非核心逻辑局部降级

    当非核心逻辑出现故障时,不应波及到核心逻辑。在架构设计时应明确非核心逻辑的影响范围,谨慎设计部署与调用关系。

  1. 多个上游调用同一个服务时,该服务尽量独立部署(冲突1)

  2. 非核心逻辑应被剥离,并隔离部署

可观测性

  1. 提高故障处理效率

    当出现异常时,应提供故障快速定位、保存故障现场、初步分析等能力。

  2. 提供Trace能力

    支持日常请求Trace,方便业务数据分析、系统性能分析、系统异常定位。

  1. 系统应提供左侧提到功能

成本治理

  1. 资源按使用量进行保障与计费,而不是按占用量保障与计费

  2. 避免业务方“自行占用”

  1. 提供“按使用量结算”的账单

    1. 按使用量结算提供了资源量化指标,激励业务方优化吞吐,提高机器资源利用率,自发衡量业务收益与成本的ROI。按照使用量结算是资源池化的前提,资源池化能进一步提高资源利用率。

    2. 支持多租户,支持按照租户维度导入资源,并支持为租户保障定额资源供应。

  2. 不保证机器独占

    若允许业务方独占指定物理机/虚拟机,则限制了自动调度的灵活性,不利于整体资源最优配置。应仅向业务方承诺“保障使用量充足”,不承诺机器独占。

资源效率

存储效率

  1. 提供多种“性能-成本”组合的存储介质,并支持如下两种模式

    1. 业务方自行指定数据存储介质

    2. 系统根据目标智能调度数据存储介质

  2. 从单点数据视角优化资源开销

  3. 从全局调度视角优化存储资源开销

  1. 分级存储 + 冷热数据

  2. 数据压缩

    支持列存、压缩算法等,面向业务ROI优化存储成本,涉及压缩时须结合CPU成本统筹考量。

  3. 按需分配存储资源

    由业务方定义个存储介质各份数据的最大规模,平台通过智能调度实现存储效率最大化。

  4. 公共数据独立存储

    多个上游共同依赖的数据应尽量独立部署,避免重复存储。(冲突1)

吞吐&时延

  1. 优化CPU利用率

    1. 减少IO等待带来的损耗

    2. 减少无效计算

    3. 实现CPU资源弹性调度

  2. 优化网络传输开销与时延

  3. 在时延约束下 优化吞吐

  4. 在吞吐约束下 优化业务目标

  1. 非阻塞异步IO框架

    应全面推广非阻塞异步IO体系,提高重IO节点的CPU利用率。

  2. 超时请求就地熔断

    对于已经超时的逻辑,不再执行后续计算,立刻丢弃,减少无效计算

  3. 混部

    支持在离线混部,在线潮汐混部(冲突1)

  4. 体系化治理RPC引入的时延与吞吐问题

    1. 应梳理业务服务分布与机器分布,统筹协调部署,取消跨机房调用

    2. 引入新的RPC技术,优化线程模型,优化RPC序列化开销

    3. 引入零拷贝技术,减少内核开销

  5. 重点优化长尾请求

    解决优化超时带来的“吞吐量锁死”。应重点关注长尾超时约束服务吞吐上限的情况,针对性优化提高失败率约束下的CPU利用率。

  6. 面向时延约束,智能优化吞吐上限

    应尽可能细化调度的最小粒度,通过智能调度达成全局最优。

  7. 面向业务的业务智能算力调配

    通过资源调配,实现业务目标最优。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值