研发面临的挑战
横向伸缩要求
由于互联网流量的突发性,在某些模块上,流量的变化很大。
能不能通过增加应用副本抗住流量的增加?应用的副本数能不能随着流量大小进行自适应调节?
这些是在写代码时,就应该考虑的。
交付频率加快
每次迭代至少需要进行一次完整交付。
项目越大、代码越多,新增一个新功能需要的时间就越长,需要进行的测试就越多。
如何加快交付,能不能选择一批用户先试用?再逐步放量,降低交付的风险?
可靠性要求高
一行代码写出 Bug,带崩整个系统的事情经常发生。
如何减少 Bug 的爆炸半径,将破坏系统的行为约束在一个较小的范围。在故障发生时,如何快速地发现、恢复?
任何一个微小的错误,在大流量的放大下,都会非常的致命。互联网下的应用,对系统的容错性、稳定性、自愈能力都提出了新的要求。
技术栈多样化
新的技术不断涌现,同一个系统中,使用不同的技术栈可能更具优势。
典型的,前后端分离,前端用 TypeScript,后端用 Python。实际上,在后端部分,我们可能还会继续拆分,使用 Rust 实现核心,使用 Go 实现云原生的对接,使用 Python 提供 API。
选择多语言多框架技术栈的原因可能有很多,可能和团队技能有关,也可能和具体场景下对性能的要求有关,也有可能和依赖的某些特性相关。
技术栈一旦多样化,管理这些服务的成本就会急剧上升。