继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕九州9237533
关注TA
已关注
手记 43
粉丝 2
获赞 4

课程名称海量数据高并发场景,构建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. 对参数的优雅处理

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

    http://img4.mukewang.com/635c0c6d00012dac17290703.jpg

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

  7. 单元测试和使用样例

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

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

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

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

课程收获:

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

http://img4.mukewang.com/635c1109000140db15101022.jpg

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP