初创公司随着业务的进一步发展,当DAU达到十万的时候,通常是最关键的时刻,既要保证业务的稳定运行,又要进行产品的快速迭代。到了这个阶段,由于业务模式得到了一定的验证和反馈,有可能会出现很多竞品或友商。一方面,随着风险资本的注入,会依赖更有质量的数据进行发展运营,另一方面,竞品的出现又导致了市场的加速前进.因此,能否在这个阶段保证业务与技术的和谐发展,是考验架构是否足够灵活的指标之一,本节主要说明几点。

@[TOC]

前端加速优化

首先基于浏览器端应用或者移动端应用,随着请求的不断增加,偶尔会看到Web服务出现性能瓶颈导致请求变慢或者失败,除去服务器本身的配置低外,更有可能由于架构设计或分离的原因,大量的Web并发请求被堵塞或者变慢,原因无非是服务器的CPU、磁盘、IO、带宽竞争激烈,导致相互影响,这时候我们就需要对架构进行前后端分解,合理配置或转发请求。

如果是前端的服务请求来不及处理或者有瓶颈,可以将图片、Js、 CSS、 HTML及应用服务相关的静态资源文件存储通过Nginx本地代理或者对象存储服务来进行物理加速,使用不同的域名来转发请求,并通过CDN将静态资源分布式缓存在各个节点实现“就近访问”,主动或被动刷新CDN的缓存来加速前端服务。

如果是后端的动态请求压力过大或者有热点服务,可以把无状态的后端的服务再进一步水平扩展满足业务分担,有状态需要判断是否能通过垂直扩容来服务,否则只能进行代码、架构设计或者业务规划的调整来优化。

一般而言,通过将动态请求、静态请求的访问分离(“动静分离”),能有效解决服务器在CPU、磁盘IO、带宽方面的访问压力。当然,这需要在架构设计时采用一些方法来进行调整。

水平扩展

上面提到垂直扩容能解决部分的问题,但由于业务和流量的快速增长及垂直资源有限,不同的应用场景需要依赖不同的策略分流,比如长连接的应用会依赖于4层的网络连接,互联网应用通常采用7层的模式来完成,甚至在游戏场景中,依赖UDP进行通信。

为了更多地分担服务器的压力和保证业务的高可用,负载均衡技术通常是这个阶段解决问题的一个方法,通过增加多台后端服务器就可以实现分流的功能,分流设计也面临很多原则与技巧,比如分流的路径、权重等。负戴均衡承担的角色也决定了后端的应用架构,比如无状态化设计才能实现水平扩展,另外还要考虑业务是否有亲缘性,同时在后端服务出现异常的情况下, 自动进行健康检查,异常的服务能及时进行下线操作,快速失败。

数据库及缓存优化

数据库和缓存配合使用是解决后端结构化数据与非结构化问题的有效手段,根据不同的场景,要明白哪种数据使用结构化数据合适,哪种数据使用非结构化数据更合适,以及哪种方式在保证性能较好的情况下成本又可以接受。

同时,如何在数据库和缓存之间进行过渡也是需要考虑的,比如数据在更新的时候,如何保证缓存的一致性,如何保证热点数据一直被访问,提高缓存的命中率等。另外,当大量用户访问不存在的数据时,也有可能导致后端的压力非常大,甚至有可能造成雪崩效应。

每种服务独立承担对应的功能,各司其职,并且根据应用的特性区别提供不同的服务能力,比如应用服务器提供用户的接入服务,数据库服务专门承担结构化数据的存储,缓存承担或非结构化数据(KV键值对)的存储等,如果要提供搜索的功能,还需将数据进行分词、索引、检索等,不同服务器根据业务的功用需求来提供对应的服务。


在这个阶段,除了必须保证满足业务的功能型需求,还要更多考虑非功能性需求。比如,通过前端负载均衡提供业务分流的能力,根据用户的特征进行不同的流量转发;数据库提供主备的能力,两者之间通过数据同步进行数据备份,当主数据库发生故障后,应用可以自动切换到备份的服务器来为用户提供服务;在用户体验方面,可能会引入缓存、CDN等基础服务来提供性能加速。

架构演化发展历程:

  1. 初创期架构
  2. 快速成长期架构
  3. 分布式服务架构

参考:

  1. 云原生应用架构实践 (网易云基础服务架构团队 著)