课程名称:海量数据高并发场景,构建Go+ES8企业级搜索微服务
课程章节:6-1,6-2
课程讲师:少林码僧
课程内容:
★项目中使用go继承中间件需要考虑的问题
防止删库删表
▲删库删表的操作一般是通过运维工单审核后才能执行
▲如果是一些日志数据,分表存储,定期清理。
▲可以对表进行整理,分出来核心表和业务表,采用白名单机制,只允许更改和删除白名单里面的库和表,对于非白名单的库表必须经过严格的工单审核,多方确认后再删,并以版本发布的形式告知整个系统
阻止异常操作
▲mysql不带where条件的查询、更新、删除,在sdk中集成检测机制,避免sql注入等问题
▲es查条件过多或者过深的嵌套查询语句
▲异常操作可能会对整个集群产生影响,导致线上事故
监控上报
▲集成后的sdk作为应用和这些中间件之间沟通的桥梁,在此进行埋点用于监控,在出现问题的时候能及时的通过查看报错信息来判断问题
多客户端支持
▲在同一个工程中我们可能会使用不同的中间件服务。比如,做了读写分离后的mysql,或者多个mysql集群、多个redis集群(例如:分布式)。在封装sdk的时候要支持多个不同实例\集群的访问,可以随意切换不同的服务,达到多客户端支持的目的
与原生操作一直,减少学习成本
▲在封装私有的sdk的时候,比如封装一个redis的通信sdk,命令(方法)尽量和redis的操作名称一直,以此来降低学习成本,避免产生歧义
▲比如在封装es的时候,要合理利用es对sql的支持,减少新手在切换es时候的学习成本
对参数的优雅处理
▲不同依赖方对服务的使用程度是不一样的,有些只需要简单的查询,有的则需要深度定制化的操作。
比如对es的封装,InitSimpleClinet是提供给普通的用户,只需要传入链接,用户密码即可,其他的条件都是走默认值。InitClinet是提供给需要多个es集群的服务,要传入更多的参数。而InitClinetWitOptions则是给深度定制的专家用户使用的,不仅仅传入上诉条件,还要传入更为细致的es的设定参数。
单元测试和使用样例
▲单元测试和使用demo可以让使用者快速入门,能更清晰的看到用法,最好是复制一下,小改动就能使用
文档和代码注释详细清晰
合理的默认值+参数校验
▲比如mysql最大连接数,尽量在封装sdk的时候就限制掉,避免使用者对mysql了解不深而使用了错误参数,由于出问题的地方在mysql,所以很多问题在业务代码里是查询不到的,增加了排错的困难。
课程收获:
通过学习,在设计链接各种中间件的sdk的时候,就有了一些注意事项,这些规范将有助于开发更为完善的中间件sdk