架构师训练营第十一周学习总结
本周学习内容主要围绕系统的安全和可靠性,主要通过学习掌握一些安全防范的手段、高可用的架构来加强自己对这些知识点理解。
系统安全
系统安全是我们做架构设计需要考虑到的一个重要的部分,首要保护的就是系统不被非法入侵、数据不被窃取和重要数据不泄露。
防入侵
事实上,在工作过程中我个人也遇到了几次被黑客入侵服务器的情况,基本上大多都是不规范使用服务器导致的,例如某些服务开放了某些访问的端口,Redis(6379端口),Docker远程API(2375)等等,当这些访问端口可以通过公网访问,同时不需要身份验证,那么黑客就可以利用这些访问权限进行攻击。除此之外,一些可以上传文件的功能也需要关注恶意程序是否可能被上传并执行。
针对这类安全隐患,我们首先要加强隔离的手段,通过内网隔离,把我们大部分的服务器不暴露公网IP,减少被直接访问的可能,用网关来访问内网机器,其次各类访问的方式需要加入安全验证,减少被外部用户轻松拿到Root权限。
其余的一些注入攻击主要通过对敏感字符进行一定的预处理,SQL的预编译,脚本内容的处理等。
防窃取和泄漏数据
核心系统的访问权限需要严格管控,一些访问凭证只能保管在少数人和若干运维手上,线上生产环境的服务器通过统一的配置服务来获取这些凭证,通过安全的链路获取,避免信息被窃取。同时我们的数据库中的关键数据进行加密,例如我们的用户密码可以通过单向散列函数处理后保存,避免明文存储。
全站使用HTTPS来进行访问,减少链路不安全的可能性。
此外还可以建立一些安全特征风险管控,例如某些接口被频繁访问时进行一定的拦截,识别一些攻击特征后对IP进行屏蔽或验证码机器人识别等。
高可用架构
高可用架构在这次学习中收获较大的还是管理流程规范性上。而常规的高可用架构,诸如多实例扩展,异地灾备这些在之前的知识体系中就已经建立了,但是由于这些高可用成本原因,一般也很难付诸实践,只单纯停留在理论基础上。
而管理流程规范则比较适合大部分公司可以实践的内容,通过对代码审查、版本发布和上线预验证等多个环节进行管控,把我们的系统可用性隐患降低到最小。可以说,目前大部分的系统不可用优先关注一些我们内部代码品质、人为疏漏导致的问题,正是这些小毛病,最终引发了大的故障。
从架构上,我们可以准备预验证的环境,把部分的服务器进行版本升级进行验证,可以通过流量打标的方式,让服务网关把特定的测试数据导入到预验证环境进行集成测试,待观察一段时间系统各项指标正常后再进行大规模升级。
从管理上,我们的版本管理尽量采用分支开发、主干发布,每天早上上班从主干分支获取最新代码到分支上,每天下班看看是否有代码需要合并到主干分支,而主干可以分成master、release和dev,做三层管理。
master交给团队负责人或技术主管来管理,release作为发布使用的分支,dev作为开发的主干分支,同时dev可以按照功能特性或模块再拆分成各个开发主分支,基于开发主分支每个开发人员再建立自己的开发分支。
当单元测试通过,提交到dev分支进行冲突解决。测试人员或自动化发布脚本对dev分支进行集成测试,测试通过后,合并到release进行发布。发布后验证通过并进行大规模升级后,由负责人合并到master分支归档一个稳定阶段版本。
平时做一些Bug分析,关注Bug的产生原因,日后减少一些类似Bug的产生。
版权声明: 本文为 InfoQ 作者【Gosling】的原创文章。
原文链接:【http://xie.infoq.cn/article/567243c4de150c6f3dfc03198】。文章转载请联系作者。
评论