如何阐述自己做了一个什么样的东西

线上qps2000,主要的性能瓶颈在于出现在数据库I/O上。另外,如果是一个正常部署的容器,qps能达到几百就不错了。资讯服务现在做了静态的底层页,所以热点新闻多数会命中底层页,即便没有命中底层页,也会走多层的缓存,不会直接打到资讯服务的接口上。

技术方案

解决哪些问题?模块如何拆分?
解决资讯服务mongo pg数据不是同事写入的问题,该问题会造成底层页404。

收敛资讯发文入口、目前发文都是直接写的PG,不好控制。

竞争对手的解决方案是什么?行业领先的解决方案是什么?

收敛服务业务垂直分割

数据存储怎么设计?扩展性考虑了嘛?

存储:Mongodb+PG

扩展性:mongo支持分表(按照SEQ分表)、非基础属性计划迁移到画像。

是否需要缓存?缓存如何设计?如何保证数据一致性?缓存失效怎么处理?

无缓存

代码设计是怎么样的?使用什么设计模式解决问题?

需要调用外部哪些服务?所有调用的处理容错和监控做了嘛?(所有服务都认为不可信:包括可用性,数据字段返回异常)

依赖的服务:stockMatch

容错:Sentinel 对 stockMatch、写mongo、写PG(出基础表以外的)、查pub205之类的

降级:Sentinel 对 stockMatch、写mongo、写PG(出基础表以外的)、查pub205之类的

监控: 基础监控报警 、jvm指标、所有写入的操作。

日志:所有写入的操作。

这个开发任务可以抽取哪几个组件?

基于接口抽象出http sdk(composer)

这个开发任务可以抽取哪几个服务?

服务:newsinfo(http)

是否需要独立平台来解决更大的系统性问题?

独立部署

性能瓶颈点是什么?业务需求并发是多少?如何保证并发支撑?如何做到线性扩容?

瓶颈:数据库,mongodb的IO,PG的IO。

并发:发文接口没有统计。需要挖一下日志。

并发支持:多副本

线性扩容:mongo可以做分区扩容、PG@ifind、容器副本扩容、cpu扩容

系统关键的容错方案是什么?如何兜底?

写PG失败:重试、如果不是基础表就丢弃。基础报表失败则发文失败。

写mongo失败:重试、不处理mongo了。

stockmatch失败:重试、丢弃

可测性如何保证?测试工具,测试数据能否提供?

在flashcms想中的savenews方法记录$item序列化日志,在测试环境上回放。验证PG数据的数据和正式环境的数据是否一致,验证mongo的数据格式。验证底层页。

工具:item日志解析脚本、回放脚本、数据对比工具

测试数据:$item的日志

监控如何考虑?这个业务或者功能有哪些关键节点?使用什么方式的监控?

基础监控模块,流控进行监控,监控 写入mongo、写入PG。失败进行报警。

日志需要覆盖哪些主要流程来确保后续的排查方案?

写入时、feign日志、feign失败日志

排查方案:记录elk日志

问题排查方案是什么?排查工具是否提供?

监控、Elk。

部署方案是什么?

k8s独立部署、

你可能感兴趣的:(私人干货,java)