一个小问题的分析

本贴最后更新于 2421 天前,其中的信息可能已经时异事殊

今天线上出现了一个字符超长引起 mysql 抛出异常的问题

问题本身不大,上游系统有 bug,传递的字符串没有做 trim 处理,导致报文节点中的字段远远超出预留长度

反应给领导的时候,领导对我的汇报并不满意

我说,这个问题是由于上游传下的数据过长

领导说,这是表象,出现这个问题的根本原因是什么?为什么在上游传下来的时候没有校验住,而使错误的数据流入系统了引起报警呢

之后的对话有点记不清了,我提出这个校验应该由上游系统做,于是叫来了上游系统的负责人,在一旁的组长也加入了讨论

讨论中大体涉及到了如下几点:

  • 错误的数据是前端下传的,还是系统 bug 引起的
  • 前端控件是否有限制,是否有校验,是否有提示
  • 是否应对数据长度添加校验

讨论中还是感到了自己表述能力的匮乏。讨论中提到的点,我也大都能想到,但是当我向领导汇报的时候,我似乎只能说个,上游系统问题,上游应当校验,听起来倒有点推卸责任的感觉

我所思考的内容是:

这个数据到本系统时,已经分发到了多个其他系统,所以类似异常数据的处理,肯定不在本系统做,做了其他系统也要做,如果处理逻辑差异较大,会造成数据不一致

而上游若要对字段长度做校验,那理论上所有字段都应该校验,但是关于数据长度,要么业务上有明确的限制,比如评论限制 200 条,那么底层保留两百的长度,这种校验则应在前端就有所体现,校验逻辑应当在前端直接提交的服务端有所体现。

而如果没有明确的业务上的长度限制,如用户地址,理论上,用户想输入多少就输入多少,但是正常情况下,地址信息的长度是有限的,最详细的地址比如身份证上的地址,长度也是有限的,要保存数据的服务端预留一个长度即可,如果加上校验,则很被动,一旦出现真实的而又超出系统限制的字段,不仅需要修改数据库的长度,还要修改代码中的校验长度,无法快速的让正确信息保存下来

所以,对于本次问题的结论,我想应当是:
上游修正 bug,其他系统不动

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 152 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9945 引用 • 45160 回帖 • 76 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • KylinShaw

    D 大说的对,再烂的参数也不能炸,客户走进酒吧点了一桶泡面,点了一份蛋炒饭,但是你的酒吧不能就这么炸了,你直接回复没有就好了,你不能说客户不能这么点单,这么点单不合符规矩。

    1 回复
  • 其他回帖
  • ayoungman

    对啊,直接在前端直接限制或者实现校验,就不会出现问题了。
    楼主也说了需要多个系统处理,这就更显现出在数据入口的前端验证更加简单。

  • mainlove

    肯定是后台要判定 像 laket 的 ORM,建表的长度注解对应存储的数据的格式 是都有校验的
    现在都是分离的情况,不可能让所有系统按照某个标准来
    自己要管好自己的容错率

    1 回复
  • ZephyrJung via macOS

    受教了🙏

  • 查看全部回帖
ZephyrJung
一切有为法,如梦幻泡影,如露亦如电,应作如是观 香港

推荐标签 标签

  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 385 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    92 引用 • 122 回帖 • 622 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 661 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 12 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    108 引用 • 153 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 157 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 78 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 114 回帖 • 176 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    115 引用 • 317 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 819 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 16 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖 • 1 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 7 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 403 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    59 引用 • 25 回帖 • 5 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 8 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖 • 4 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1127 回帖 • 110 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 174 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    291 引用 • 4495 回帖 • 659 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 656 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 676 关注
  • 叶归
    10 引用 • 47 回帖 • 20 关注