中台已死,平台长青
共 11258字,需浏览 23分钟
·
2024-08-03 10:01
👉目录
1 背景
2 客户第一
3 性能和成本
4 功能设计
5 研发效率
6 运营效率
7 技术文档
8 发展的思考
01
02
- 
    
如果对系统实现不熟悉的外包同学能解决问题,那么文档也能解决,如果文档能解决,那么我们就不需要提供咨询支持的外包同学。  - 
    
如果文档解决不了,那么咨询外包同学也很难解决,他会成为任务分包的角色,这时候任务还是会落到背后的开发同学身上,此时必然打扰到开发同学,打乱原定的工作计划,且会让客户觉得 helper 并不专业。  - 
    
服务告警和运维处理涉及系统稳定性,对值班同学和技术产品的自动运维能力要求较高,交给外包有一定风险。  
- 
    
每个人都有机会熟悉全系统所有模块。  - 
    
对客户价值有更直接的认识。  - 
    
促进用户手册建设。  - 
    
更容易对不合理的设计提出挑战。  
03
- 
    
架构优化,譬如:二级和三级扇出架构、微服务合并。  - 
    
新技术应用,譬如:新 rpc 框架、协程、SIMD 并行指令。  - 
    
空间换时间,譬如:业务缓存、计算缓存、jemalloc 内存池。  - 
    
数据结构优化,譬如:用块链代替稀疏位图、贴合 cacheline 的内存结构。  - 
    
策略简化,譬如:多次查询改成单次,再通过更好的检索策略补充效果。  - 
    
实现细节,譬如:去掉拷贝、去掉锁、复用对象。  
- 
    
设备选型:  - 
     
高内存高计算型的服务,使用 AMD 设备,并且不开 NUMA。  - 
     
无须实时访问磁盘的服务,选用非 SSD 磁盘。  - 
    
配额最小化:CPU/磁盘/内存,全部最小化配置。  - 
    
自动化调度:通过 123 平台(注:内部容器服务管理平台)的调度配置,配置自动缩容阈值。  - 
    
云原生看板建设 CPU 使用率看板,查看 CPU 变化趋势。  - 
    
利用率监控 CPU 峰值利用率低于 50% 的发出告警。  - 
    
专人检查 CPU 使用率、使用量、流量变化,最晚 T+1 和业务沟通处理。  - 
    
对 CPU 有毛刺的离线计算业务做针对性治理,和业务团队沟通将流量打散。  
04
- 
    
采用类 json 的 DSL 语法,既满足通过任何检索规则组合实现复杂检索策略的需求,后来也为使用 ES 的业务迁移到 XSearch 提供了便利。  
- 
    
风格一致的代码、文档可以提高阅读效率,对于技术产品的功能设计也一样有价值,产品在不断的增加功能,一致性的设计会让一个技术产品显得越来越强(而不是增加多个需要重新学习的技术产品),在增加向量召回功能的时候,我们把向量当作一种和倒排、正排、枚举并列的一种索引能力,复用原来 XSearch 的全套流程,既减少开发量,使用上也不突兀。  
- 
    
通用检索能力,大多数的客户不需要了解分词、query 理解、检索语句组装,所以我们将检索策略做成可视化配置,只需要在界面上做选择,就能获得一个不错的召回能力。  - 
    
个性化能力,如果通用检索无法满足,需要定制化怎么办?我们通过 DSL 语法、排序插件、脚本插件提供广阔的个性能定制。  - 
    
debug 能力,业务在使用检索引擎时,用于 debug 的时间往往不比写一段召回代码的时间短,所以 debug 能力的建设一样非常重要。  
- 
    
想要规模化的产品,必然是通用的。而业务产品又可能提出来定制需求,我们通过配置化、插件系统解决大多数定制问题,譬如:要搜索标题还是搜索标签、要用默认排序还是自定义排序等等。但部分问题没办法完美解决,会付出代价,譬如:架构设计和协议设计。  - 
    
代价-架构设计:当只服务一个业务的时候,系统的变数少,不需要考虑太多插件扩展,架构简单服务耗时短、开发周期短。  - 
    
代价-协议设计:不用考虑多业务有不同字段的需求,当有新增字段时,直接追加新字段即可。而考虑到多业务时,要么是牺牲性能,定义 map 类型来应对不同业务的差异化字段,要么是使用 oneof,把不同业务的个性化字段拆分到不同 message 中,不管那种方式,都会给协议增加复杂度,对性能有影响。  
- 
    
单个业务下的技术产品,选择一般是单一明确的,追求性能或者追求易用,而平台化的技术产品则需要考虑提供多种选择。譬如:接口协议的设计上,正排索引值是返回序列化后的字符串,还是返回原始数字,追求性能的用户希望返回原始数字,追求易用性的用户希望返回字符串直接用来展示。  
- 
    
模拟查询。  - 
    
解释查询。  - 
    
文档查询。  - 
    
索引信息查看。  - 
    
全链路 trace。  
05
- 
    
MR 流水线。  - 
    
主干提交流水线。  
- 
    
分支和 tag 命名规范,提升可读。  - 
    
主干代码只能通过 MR 合入。  - 
    
MR 必须经过有经验开发者、绿带认证者评审。  
- 
    
开发者必须获得开发者资质,包括:编码规范考试、代码安全考试。  - 
    
增量代码单测覆盖率 > 85%。  
- 
    
需求扭转流程管理。  - 
    
基于 VSCode 或者 Vim 的代码格式化工具。  - 
    
测试、灰度、全量发布工具。  
- 
    
公司文化,受益于这几年公司对工程素养的重视,大量的宣导、强制课程学习、内部论坛讨论,团队全员受过 CR 的基础培训和引导。我们也通过小团队内的讨论和制度的强制落实,让每个人会意识到:  - 
     
代码可以写得更好;  - 
     
CR 活动需要花费不少时间;  - 
     
CR 是完成需求过程中的必要环节。  - 
    
团队制度,设计一套代码评审流程,并由核心同学带头落实。  - 
    
团队成员,借力公司课程、职级晋升的代码质量要求,让多数人有意愿、有能力、有时间执行代码评审。  - 
    
评审工具,通过流水线、工蜂、研效看板,确保代码评审过程可高效执行。  
06
- 
    
一站式运营系统,用户使用 XSearch 的所有的操作都在运营系统中完成,包括数据接入、检索策略、debug;管理员操作的审批、部署也都在运营系统中完成;  - 
    
用户手册,减少人工咨询;  - 
    
helper 账号,人工咨询和业务接入审批等;  - 
    
值班制度,全职投入,处理告警、用户咨询、云原生治理、业务审核等工作;  - 
    
群沟通渠道,每个业务一个沟通群;  
07
08
评论
