规整数据的重要性

对于后端而言,无论前端是否校验了表单(前端可能出于用户体验会做校验),后端都必须校验一次。并且在数据有问题时及时终止 处理。常见的请求处理如下:

请求 -> Web后端 -> 服务1
                <-
                -> 服务2
     <-         <-
            -> 异步任务
                -> 服务3
                <-

如果我们不在最开始就将数据处理成规整的、统一的结构,那么在异步任务处,还需要再次做各种校验,尤其是当异步任务大量使用 到web后端接收到的参数时。

因此,在web后端接受到参数时,就应当将数据处理好,拒绝不正常的请求和参数。为其后所有的处理提供一个规整的、统一的、干净 的参数。

于此同时,有另外一个让人忧心。当服务的数量多起来之后(微服务拆分可以将服务数量骤然提升,因业务本身数量增加也会导致服务数量 增加),服务与服务之间是否能够相互信任?他们是否需要校验对方的参数?是否需要:

  • 无条件的相信对方的参数?
  • 需要验签?

如果验签,那么务必保证大家的验签算法都一致、足够安全、足够简单。否则人手一套验签算法,只会耗费无数心力。更好的方式,仍然 是在整个流量进入的最开始,就处理好,其后将不同的服务划分成不同的服务群。服务群处在同一个VPC里,它们之间相互信任。服务群 之间可以选择进行一些校验。

另外服务多起来之后,还会面临一个与此话题无关的话题,随着函数请求变成了网络请求,请求的返回状态数量骤增,而状态判断则是 所有网络调用可能返回状态的组合。要在一群不可靠的服务间构建可靠的服务,很难。而如果信任这些服务,那么服务的质量则会受底层 服务质量所影响。

最后,就让我无脑的结束这个话题。提前规整数据,看起来多耗费了心力,但长远看来,省了很多心力。


更多文章
  • jQuery简明教程
  • Python RQ(Redis Queue)添加gevent支持
  • 读《超级运营术》- 如何做社区?
  • 技术人,光有技术是不行的
  • 使用shairport-sync搭建airplay音频服务器
  • 搭建aria2服务器
  • VirtManager Windows自适应屏幕
  • 使用btrfs组建RAID1
  • Swagger? 不好用
  • Golang/Python最佳实践
  • 读《毛泽东选集》
  • GORM源码阅读与分析
  • 随想
  • Golang中的错误处理
  • Golang 的槽点