主要内容:
- 大型网站架构模式
网站架构模式
什么是模式呢?想象下软件设计模式,是经过反复使用实践、编程设计经验的总结。而网站架构模式,是为了解决大型网站面临的高并发访问、海量数据存储等一系列问题与挑战,大型互联网公司在实践中提出了许多解决方案,而这些解决方案又被更多网站反复实践,从而逐渐形成大型网站架构模式。通过学习架构模式,可以掌握网站架构的一般思路和解决方案,指导以后的架构设计。
分层
分层是最常见的架构模式,系统横向维度切分成几个部分,每个部分独立负责比较单一的职责;各层之间通过依赖和接口调用进行关联。
一般将网站分为应用层、服务层和数据层,具体结构如图所示。
- 应用层:负责具体业务逻辑和视图展示;
- 服务层:负责为应用层提供服务支持;
- 数据层:提供数据存储、访问和检索服务;
分层架构模式的好处和问题如下:
- 好处:将一个庞大系统分成不同的部分,便于分工合作和维护;各层之间保持一定独立性,维持调用接口不变,各层可以根据具体需求内部进行演化而其他层次不需要进行相关调整。
- 问题:必须合理划分各个层次和规划接口;同时在开发过程中,严格遵守层次约束,禁止跨层次调度(例如应用层跨过服务层直接调用数据层)和禁止逆向调度(例如数据层逆向调用服务层接口)。
分割
分层是横向切分软件,而分割是纵向切分软件,根据业务分割。大型网站业务更复杂,所需的服务种类和需要处理的数据种类也增多,需要根据不同的功能对服务进行分割,将其包装成高内聚低耦合的模块单元。
- 好处:模块化助于维护和开发;便于不同模块的分布式部署,提高网站的扩展性。
分布式
分成和分割架构模式的主要目的是为了切分后的模块便于分布式部署,分布式将不同模块部署在不同的服务器上。
常见的分布式方案主要有:
- 分布式应用和服务:将分层和分割后的应用和服务模块分布式部署。
- 分布式静态资源:网站的静态资源如CSS、Logo、JS等资源独立部署,并采用独立的域名。
- 分布式数据库:传统关系型数据库分布式部署和使用NoSQL产品。
- 分布式计算:Hadoop和MapReduce分布式计算框架,其特点是移动计算而不是移动数据。
- 支持云存储的分布式文件系统等。
分布式架构模式的好处和问题如下:
- 好处:分布式意味着有更多的服务器来完成同样的功能,提高网站并发能力和处理的数据量,能够为更多的用户提供服务。
- 问题:服务调用需要经过网络,因此降低了网站的性能;保持数据一致性和分布式事务较为困难;某一台服务器的宕机造成某服务的不可用,会对应用的正常业务流程造成影响,降低应用的可用性;开发维护较为困难。
集群
使用分布式可以将分层和分割后的模块进行独立部署,但对于用户集中访问的模块,需要对服务器集群化。即多台服务器部署相同应用构成一个集群,通过负载均衡向外提供服务。
集群架构模式的好处主要有:
- 集群有更多服务器提供相同服务,因此具有更高的并发性。
- 当某台服务器发生故障宕机时,通过负载均衡或失效转移机制由集群中的其他服务器完成服务,服务器的故障不会影响用户正常使用服务,提高系统的高可用性。
缓存
缓存是改善网站性能的第一手段。
使用缓存有两个前提条件,数据访问符合二八定律,即80%的业务访问集中在20%的数据上,这些数据应该放入缓存中;数据有一定时效性,否则因为数据的失效造成脏读,影响数据的一致性。
大型网站架构设计许多方面都用到了缓存设计,下面列举几个缓存设计。
- CDN:翻译成内容分发网络,将网站的一些静态资源部署在网络服务商中,用户的网络请求会先到达最近的网络服务商,将资源以最快速度返回给用户。
- 反向代理:部署在网站的前端,当用户请求到达网站中心服务器时,首先通过反向代理服务器,如果资源缓存在反向代理服务器,直接将结果返回给用户;否则通过反向代理请求资源再将资源返回。
- 本地缓存:应用服务器缓存热点数据,用户请求资源应用服务器可以直接访问内存返回结果。
- 分布式缓存:本地缓存受应用服务器内存的限制,分布式缓存部署在专门的分布式缓存集群中,通过网络通信完成数据的缓存。
缓存架构模式的好处主要有:
- 加快数据访问速度。
- 减轻数据库和应用服务器的负载压力。
异步
典型的生产者消费者模式。单一服务器内部可以使用多线程共享内存实现异步,线程A将处理结果写入到队列,后面的线程从共享队列中读取数据进行存储;集群服务器时,多个服务器通过分布式消息队列实现异步。
异步架构模式的好处主要有:
- 加快网站响应速度。处理请求后马上返回,不需要等到处理结果返回,减少服务器响应延迟。
- 可扩展性:生产者消费者不是直接调用的,通过媒介例如消息队列进行交互,因此只要保持消息队列的数据结构保持不变,生产者和消费者可以迭代而不互相影响,增强了可扩展性
- 提高可用性:当生产者服务器发生故障时,数据已在消息队列中存储,消费者服务器从消息队列中取数据并进行处理,对系统整体不造成影响。
- 减轻负载压力:当用户访问量突然剧增时,可以将增加的访问请求放入消息队列中,等待消费者依次处理,减轻服务器的负载压力。
因为异步方式一般会采取消息队列,因此需要考虑消息丢失、失败重传等问题,同时必然带来堆栈调用等开销,影响吞吐量,会对用户体验造成影响。
冗余
为了保证大型网站高可用的特性,网站需要不间断提供服务,但服务器可能会出现宕机的情况,需要保证服务器宕机网站依然可以继续提供服务。这时候就需要一定程度的冗余,冗余备份数据。物理备份方式主要分为冷备份和热备份。
- 冷备份:发生在数据库已经关闭的情况下,定期备份数据,存档保存。
- 热备份:数据库运行状态下,采取日志归档的方式进行的备份。
| 备份方式 | 冷备份 | 热备份|
| -------------- |-------------|
| 优点|快速备份和恢复;低维护高安全;恢复到某时间点方便|数据库运行状态进行备份;表级或用户级别备份数据;秒级恢复|
| 缺点|数据库必须关闭;只提供到某一时间点的恢复;不能按用户或表恢复;受磁盘空间限制|操作不允许出错,否则不能恢复;高成本维护|
自动化
自动化是网站的理想目标,不需要人工干预网站也可以正常运行,主要集中在运维方面。
- 自动化发布。
- 代码自动化管理:代码版本控制、代码分支创建合并等过程自动化。
- 自动化测试:代码开发完成提交测试时,自动将代码部署到测试环境,启动测试用例测试,并反馈测试结果。
- 自动化安全检测:安全检测工具对代码进行静态扫描及部署到安全检测环境进行安全检测。
- 自动化部署:工程自动部署到线上生产环境。
- 对线上生产环境进行自动化监控,对服务器进行心跳检测,并监测网站各项性能指标和关键数据指标。如果发现异常或超过预期阈值,进行自动化报警,向相关人员发送报警信息。检测到故障时会自动化失效转移。故障解决后,系统会进行自动化失效恢复,重新启动服务,并同步数据保证数据的一致性。
- 网站遇到访问高峰期时,超出网站最大处理能力时对服务进行自动化降级,拒绝部分请求或关闭不重要的服务;必要时还需要自动化分配资源,将空闲资源分配给重要服务器。
安全
- 通过密码和手机校验码进行身份验证,例如使用md5加密密码。
- 登录、交易等操作需要对网络通信进行加密,以及敏感信息进行加密处理。
- 使用验证码识别,防止机器人程序滥用资源攻击网站。
- 对于常见攻击网站的XSS攻击、SQL注入、编码转换等进行安全处理。
- 过滤垃圾信息和敏感信息。
- 对交易、转账等重要信息根据交易信息和交易模式进行风险控制。
思维导图
参考文章
《大型网站技术架构:核心原理与案例分析》
网友评论