Go教程

【金秋打卡】第6天 Go中间件集成学习-中间件sdk的设计考虑问题

本文主要是介绍【金秋打卡】第6天 Go中间件集成学习-中间件sdk的设计考虑问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程名称:海量数据高并发场景,构建Go+ES8企业级搜索微服务

课程章节:6-1,6-2

课程讲师:少林码僧

课程内容

★项目中使用go继承中间件需要考虑的问题

  1. 防止删库删表

    ▲删库删表的操作一般是通过运维工单审核后才能执行

    ▲如果是一些日志数据,分表存储,定期清理。

    ▲可以对表进行整理,分出来核心表和业务表,采用白名单机制,只允许更改和删除白名单里面的库和表,对于非白名单的库表必须经过严格的工单审核,多方确认后再删,并以版本发布的形式告知整个系统

  2. 阻止异常操作

    ▲mysql不带where条件的查询、更新、删除,在sdk中集成检测机制,避免sql注入等问题

    ▲es查条件过多或者过深的嵌套查询语句

    ▲异常操作可能会对整个集群产生影响,导致线上事故

  3. 监控上报

    ▲集成后的sdk作为应用和这些中间件之间沟通的桥梁,在此进行埋点用于监控,在出现问题的时候能及时的通过查看报错信息来判断问题

  4. 多客户端支持

    ▲在同一个工程中我们可能会使用不同的中间件服务。比如,做了读写分离后的mysql,或者多个mysql集群、多个redis集群(例如:分布式)。在封装sdk的时候要支持多个不同实例\集群的访问,可以随意切换不同的服务,达到多客户端支持的目的

  5. 与原生操作一直,减少学习成本

    ▲在封装私有的sdk的时候,比如封装一个redis的通信sdk,命令(方法)尽量和redis的操作名称一直,以此来降低学习成本,避免产生歧义

    ▲比如在封装es的时候,要合理利用es对sql的支持,减少新手在切换es时候的学习成本

  6. 对参数的优雅处理

    不同依赖方对服务的使用程度是不一样的,有些只需要简单的查询,有的则需要深度定制化的操作。

    https://img4.sycdn.imooc.com/635c0c6d00012dac17290703.jpg

    比如对es的封装,InitSimpleClinet是提供给普通的用户,只需要传入链接,用户密码即可,其他的条件都是走默认值。InitClinet是提供给需要多个es集群的服务,要传入更多的参数。而InitClinetWitOptions则是给深度定制的专家用户使用的,不仅仅传入上诉条件,还要传入更为细致的es的设定参数。

  7. 单元测试和使用样例

    ▲单元测试和使用demo可以让使用者快速入门,能更清晰的看到用法,最好是复制一下,小改动就能使用

  8. 文档和代码注释详细清晰

  9. 合理的默认值+参数校验

    ▲比如mysql最大连接数,尽量在封装sdk的时候就限制掉,避免使用者对mysql了解不深而使用了错误参数,由于出问题的地方在mysql,所以很多问题在业务代码里是查询不到的,增加了排错的困难。

课程收获:

通过学习,在设计链接各种中间件的sdk的时候,就有了一些注意事项,这些规范将有助于开发更为完善的中间件sdk

https://img4.sycdn.imooc.com/635c1109000140db15101022.jpg

这篇关于【金秋打卡】第6天 Go中间件集成学习-中间件sdk的设计考虑问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!