去哪儿支付系统架构演进(下篇)
- 接口定义:粒度控制、边界控制。一个接口不能存在模棱两可的情况,只做其一
- 参数标准:复杂接口使用对象做参数(避免map)、统一父类、支持扩展属性透传、提供create/builder构造合法参数、使用枚举限制参数范围。有效避免调用端参数错传
- 返回值:统一QResponse封装、错误码管理(非数字形式含义明确、按业务区分避免重复等)
- 业务模板:定义标准业务处理流程、标准化异常处理
- 接口文档化:定义好接口后,通过注解动态生成接口文档
a)接口参数:command、校验器、参数类型配置化。
command中定义接口信息,包括请求返回参数、每个参数的参数类型、参数的校验器、参数类型的校验器。校验器可以组合使用,也可以自定义实现扩展。如下示例:
- 接口监控模板化:http、Dubbo多系统统一模板,集中展示管理。
- 组件可监控化:Redis/Memcache、Mybatis 、Lock 、QMQ 、 EventBus 、DataSource 、JobScheduler
- 监控面板自动化生成:Python自动化生成脚本,新创建系统只需要提供系统名称和面板配置节点即可生成标准监控面板
- 系统硬件资源、tomcat、业务关键指标可视化监控
- servlet3异步:释放出http线程提高系统整体吞吐量,可隔离开不同业务的工作线程
- qmq:使用最广泛也更灵活的异步
- dubbo:对于服务提供者响应比较慢的情况
- python监控脚本框架,从db、java模块api、redis等获取数据,计算指标并发送
- 整体架构可插件化、有通用标准功能、也可定制化开发
- 指标可直接推送至watcher(dashboard)系统添加监控页
- 报警方式有mail、sms、qtalk
- metric_manager:指标管理器
- graphite_sender:指标推送
- Dbpool:数据库链接池管理
- Scheduler:调度器,定时执行指标数据获取
- 调用量特别小,波动明细,没有连续性,不具有对比性
- 期望值:如下图所示,当前值与期望值偏差加大