Java 业务开发常见错误 100 例
朱晔
贝壳金服资深架构师
51940 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
代码篇 (23讲)
Java 业务开发常见错误 100 例
15
15
1.0x
00:00/00:00
登录|注册

24 | 业务代码写完,就意味着生产就绪了?

你好,我是朱晔。今天,我们来聊聊业务代码写完,是不是就意味着生产就绪,可以直接投产了。
所谓生产就绪(Production-ready),是指应用开发完成要投入生产环境,开发层面需要额外做的一些工作。在我看来,如果应用只是开发完成了功能代码,然后就直接投产,那意味着应用其实在裸奔。在这种情况下,遇到问题因为缺乏有效的监控导致无法排查定位问题,同时很可能遇到问题我们自己都不知道,需要依靠用户反馈才知道应用出了问题。
那么,生产就绪需要做哪些工作呢?我认为,以下三方面的工作最重要。
第一,提供健康检测接口。传统采用 ping 的方式对应用进行探活检测并不准确。有的时候,应用的关键内部或外部依赖已经离线,导致其根本无法正常工作,但其对外的 Web 端口或管理端口是可以 ping 通的。我们应该提供一个专有的监控检测接口,并尽可能触达一些内部组件。
第二,暴露应用内部信息应用内部诸如线程池、内存队列等组件,往往在应用内部扮演了重要的角色,如果应用或应用框架可以对外暴露这些重要信息,并加以监控,那么就有可能在诸如 OOM 等重大问题暴露之前发现蛛丝马迹,避免出现更大的问题。
第三,建立应用指标 Metrics 监控。Metrics 可以翻译为度量或者指标,指的是对于一些关键信息以可聚合的、数值的形式做定期统计,并绘制出各种趋势图表。这里的指标监控,包括两个方面:一是,应用内部重要组件的指标监控,比如 JVM 的一些指标、接口的 QPS 等;二是,应用的业务数据的监控,比如电商订单量、游戏在线人数等。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 业务开发常见错误 100 例》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • winner_0715
    我是贝壳找房的,所以看到老师的课程感觉很亲切,有个问题就是,在向第三方提供接口的时候,是提供RPC(如Dubbo),还是HTTP呢,需要考虑哪些因素呢

    作者回复: 一般给三方接口都是通用协议 http更好,内部使用追求极致性能才考虑rpc over tcp

    4
    16
  • Darren
    第一个问题: 端点与@RestController: @Endpoint相当于@WebEndpoint和@JmxEndpoint的整合。web和jmx方式都支持 @WebEndpoint 就相当于声明成一个@RestController的控制类 请求方法分别被下面注解代替: @ReadOperation等同于GET @WriteOperation等同于 POST @DeleteOperation等同于DELETE 第二个问题就不回答了,Prometheus+Grafana暂时还未入门

    作者回复: 不错

    8
  • 终结者999号
    另外请问老师,下单的metric现在是同步到InfluxDb的,应该也可以同步到Prometheus吧

    作者回复: 完全可以,我们因为比较喜欢推而不是拉选择了InfluxDb,这2个产品都不错

    6
  • hellojd
    投产前也要容量评估,做好流量确认,加上限流模块。

    作者回复: 是

    6
  • 终结者999号
    我是作为一个央企关键部门的开发人员,对老师的这节课程感觉受益匪浅,每次出现问题都是客户报给我们故障,我们的zabbix不能完成metric的工作,所以也想引入Prometheus.

    作者回复: 可以的

    2
    4
  • 君子意如何
    老师这节课非常接地气!监控系统也会占用部分系统资源,比如我们的客户觉得自己很懂软件,给我们指定了硬件配置,跑正常的业务系统都捉襟见肘,加监控后性能有明显的下降,真是痛苦。

    作者回复: 在目前硬件这么便宜的情况下(相比人力),降低硬件配置带来潜在的系统不稳定和性能下降不太值得。。。

    3
  • 老师,指标收集的代码一般放在哪一层比较合适?

    作者回复: 框架收集一部分应用的基本信息,业务监控需要业务代码里埋点

    2
  • Michael
    老师,你好! OrderController 中的业务代码中涉及大量的指标注入代码会不会侵入性太强了,若是需要监控的业务指标很多,代码中涉及大量的这种Metrics.timer("deliverOrder.success").record(Duration.between(begin, Instant.now()));采集代码,觉得有点不太好,还有其他的方法嘛?

    作者回复: 这些是有业务属性的埋点,只能写代码(或者就是通过大数据从数据库层面来做业务监控) 或者可以默认把所有Controller和Service方法的执行全部自定埋点,然后用这个来配置业务监控,缺点是粒度会比较细,埋点数据量会很大

    2
    2
  • 程序员小跃
    我的天,这篇对于刚入后端不久的我来说,简直了,打开新世界的大门一样。

    作者回复: 哈哈

    1
  • Seven.Lin澤耿
    终于越来越明白Spring Cloud为啥叫Cloud了,强大
    1
    6
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部