中台已死,平台长青
共 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
评论