《大型网站技术架构》学习笔记

本文探讨大型网站在面对高并发、资源有限及业务扩展时的技术挑战,包括合理确定线程数、保障线程安全、服务分级与规范、处理分布式系统CAP问题、数据备份策略、存储服务失效转移机制、负载均衡技术和算法、事件驱动架构以及高可用缓存服务的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大型网站不是一蹴而就,各大型网站正在使用的技术都是为了解决业务扩展过程中遇到的各种各样的问题,因此很难从一开始就设计好一个适应各种情况的大型网站。而且网站创立初期大部分情况资源有限,一切以业务为先,技术是为业务服务的。

并发线程数

大型网站用户并发数较高,同时现在的CPU核数也越来越多。为了更好利用硬件资源以及满足业务的需要,使用多线程势在必行,因为系统资源有限,以及线程之间调度也需要资源,因此线程数也不是越大越好。
那么如何确定业务的最大线程数,有以下几个简单的原则供参考:

  • CPU核数越多,线程数越大
  • IO(网络IO,磁盘IO)等待时间越长,线程数越大

线程安全

在多线程下如何保障安全性,有以下几个简单的处理办法

  • 使用无状态的对象(没有非静态的属性)
  • 使用局部变量
  • 使用锁(锁会降低处理速度,需要谨慎使用)

高可用服务基本规范

  • 将业务按照重要程度分级分配资源,即:核心服务使用较多和较好的硬件资源
  • 设置超时时间。以免外部业务响应时间过长而压垮自身业务
  • 适当进行异步调用。将不是很重要的异步调用可以加快响应速度
  • 服务降级。在服务器资源紧张时直接拒绝低优先级的请求,必要时甚至可以随机拒绝一部分的核心请求
  • 幂等性:系统可以接受重复的请求而不会造成数据异常

CAP原理

分布式系统的consistency(一致性),availablity(可用性),partitiontolerance( 分区容错性),三者不可兼得。

对于大型网站来说,可用性要求是很高的,同时大型应用总会需要扩展,因此分区容错性肯定是不能牺牲的,大多数时候都是牺牲一致性来满足可用性和分区容错性。一致性大致有以下几种:

  • 强一致性。各集群数据完全一致,有时候会牺牲可用性采用单点数据,一般只有在非常重要的数据上才采用
  • 用户一致性。各集群数据不一致,但是访问时,通过纠错和验证返回一致的数据(如:本地获取不到用户数据时,访问其他的集群确认数据)
  • 最终一致。用户访问数据短时间不一致。但是通过自我恢复,后台同步等操作完成最终一致。

数据备份

冷备

冷备是指隔一段时间就将所有数据备份一次的操作,成本低,技术难度低。但同时宕机时间到上一次备份时间的数据会丢失,同时恢复数据的时候服务是不可用的。因此一般只用来做最后的保底手段

热备

热备是指实时备份数据,每当有数据变动时,都会同步到备用的数据服务。依照方式的不同,热备又分为同步热备和异步热备。

  • 异步热备数据服务有主从之分,主服务收到数据变更时,本地入库并且异步将数据发送到备用服务器
  • 同步热备是指业务发起数据变更的时候,并发调用所有数据服务。从效率上来说两种方式性能较为接近
存储服务失效转移

线上故障总是存在的,因此必须要有失效转移机制,
1.失效确认。错误发生时,首先要确认服务器是否真的宕机了。
2.访问转移。在宕机确认后,将宕机服务器关闭不再对外进行服务,将请求转移到备用服务器上
3.数据恢复。并不是说转移后就大功告成了,我们必须还要对宕机服务进行恢复或者更换,将服务数量恢复到正常水平。否则,每次宕机就减少一台服务,总有用完的那天。

负载均衡

负载均衡是网站必备的基础技术手段之一。不但可以实现网站的伸缩性,还可以改善网站的可用性。依照技术的不同,常用的负载均衡技术不外乎一下几种:

http重定向均衡

根据用户的请求计算出真实的业务服务器地址,返回重定向给浏览器,浏览器再次请求真实的服务地址。简单方便,但是用户每次都要请求两次,同时重定向服务器容易成为瓶颈,而且重定向码还容易被搜索引擎判断为作弊降低SEO权重。

DNS域名解析负载均衡

在DNS服务器中配置多个ip地址,用户请求DNS服务器获取到真实ip地址再进行请求。好处是将负载均衡的工作交给DNS,不需要网站运维来维护负载均衡,同时DNS会基于地理位置解析到最近的服务器,可以改善用户访问速度。但有一个较大的缺陷,DNS分为多级服务器每级都有自己的缓存,当业务服务器需要变更时,需要很长的时间才能生效,这是难以忍受的。

但不是说DNS负载均衡就没有用武之地了。

没有加一个虚拟层解决不了的问题 - 鲁迅

负载均衡服务器具有很少变动的特性,我们可以将DNS域名解析得到的地址配成自己的负载均衡地址,再在内部进行负载均衡,从而利用DNS做负载均衡服务器的负载均衡。

反向代理负载均衡

很常见的负载均衡方式,这个大家应该都很熟了。反向代理服务器接受到请求后,将请求转发给内网的某台业务服务器,再将业务服务器的返回返回给请求方

IP负载均衡

负载均衡服务器将请求的目标ip地址修改成内网业务服务器ip,收到响应后将源ip再修改成自身的ip地址返回给请求方。缺点是所有数据都要经过负载均衡服务器,系统将受制于负载均衡服务器的网络带宽

数据链路层负载均衡

又称三角传输模式,通过修改目标mac地址,将请求转发给业务服务器,业务服务器直接响应给请求方。

负载均衡算法

1.轮询。这个不多说
2.加权轮询。一般是根据机器性能做权重,性能好的权重高,能分配到更多的请求
3.随机。简单粗暴
4.最少连接。相当于选择最空闲的机器进行分配
5.散列。根据来源IP进行Hash计算,得到应用服务器,同一个IP总是请求到同一台服务器。

事件驱动

待补充…

高可用缓存服务

待补充…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值