大型网站架构之架构演变


处于这个互联网开发时代,作为一名软件工程师,我们经常会听到大型网站架构这个字眼,那到底什么是大型网站呢,这样的网站又是一种什么样的架构设计呢?今天我们就开始谈谈大型网站架构设计系列,首先我们今天讲讲大型网站架构设计是如何演变的,跟着我一起出发吧。

一、大型网站系统的特点

  • 高并发,大流量:需要面对高并发用户,大流量访问;

  • 高可用:系统24小时不间断的提供服务;

  • 海量数据:需要存储、管理海量的数据,需要使用大量的服务器;

  • 用户分布广泛,网络情况复杂:很多大型网站都是为全球用户服务,用户的分布范围广泛,各地网络情况差异大;

  • 安全环境恶劣:互联网的开放性,导致网站更容易受黑客的攻击;

  • 需求快速变更,发布频繁:相比传统软件,互联网产品为了快速适应市场,满足用户的需求,产品发布的频率是极高的;

  • 渐进式发展:与传统行业软件不同,互联网产品不是事先就规划好了整个产品的全部功能,几乎每个大型互联网网站都是从一个小网站,慢慢根据市场和用户的改变而慢慢渐进发展成大型网站的;

二、大型网站架构发展历程

大型网站的技术挑战主要来自三个方面:庞大的用户体系高并发的访问以及海量数据的存储管理。基于这三点,我们就来看看,整个架构设计方面是如何演变的。

初始阶段:这个阶段一般网站用户量也不多,访问量都不大,数据量也不多,因此一般一台服务器就能搞定,应用程序,数据库和文件都可以部署在一台服务器上,架构图如下:

应用服务和数据服务分离阶段:随着用户数量的增加,越来越多的用户访问导致性能越来越差,数据也越来越多导致存储空间不足,此时我们就需要考虑将应用和数据分离,此时网站需要3台服务器:应用服务器+数据库服务器+文件服务器,架构设计如下图:

使用缓存改善性能阶段:随着数据库压力越来越大,我们需要考虑从数据上优化性能,大家都知道80%的业务访问集中在20%的数据上,既然大部分业务集中访问这少部分数据,那为何我们不考虑把这部分数据缓存在内存中呢,不就可以减小对数据库访问的压力了嘛;

缓存又分为2种,一种是本地缓存(本地缓存是基于内存的,因此数据量有限,但是访问速度快),另一种是远程缓存(一些中间件缓存服务器例如redis,这部分数据理论上不限容量,而且可以做成集群模式)。


应用服务器集群优化网站并发能力阶段:当用户越来越多时,对网站的访问量也越来越多,应用服务器处理请求越来越慢,此时我们可以考虑将应用服务器做成集群模式部署,再通过负载均衡调度器,将用户的请求分发给集群上不同的应用服务器。

数据库读写分离阶段:网站在使用了缓存之后,使部分数据可以不通过数据库就能完成,但是对于数据库的修改操作,还是需要访问数据库的,这个时候,数据库的负载压力过高,能为网站的性能瓶颈,此时我们就要考虑数据库的读写分离了,数据库的读写分离是建立在主从热备的基础上的,基本目前大多数主流数据库都支持主从热备,通过配置两台或者多台数据库的主从关系(1主1从,1主多从,多主多从),实现数据的读(从库)写(主库)分离,主库主动将数据同步到从库。

向代理和CDN加速网站响应阶段:为了加快网站的访问速度,我们主要考虑的手段为CDN和反向代理,CDN是部署在网络提供商的机房,用户在访问时,可以从距离自己最近的网络提供商机房获取数据;反向代理是部署在网站自己的中心机房,当用户请求到达机房时,优先访问的服务器是反向代理服务器,如果反向代理中缓存了用户请求的资源,那么就直接返回给用户,加快了响应的速度,也减轻了后端负载的压力。

分布式文件系统和分布式数据库系统阶段:当读写分离之后如果还不能满足网站的需求,那就只能考虑最后的手段了:分布式数据库,网站常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理机上。

NoSQL和搜索引擎阶段:随着网站业务越来越复杂,对数据的检索和存储的需求也越来越复杂,网站需要采用一些非关系型数据库(NoSQL)和非数据库查询(搜索引擎)技术。

业务拆分阶段:分而治之思想,将整个网站业务划分为不同的产品线,根据不同的产品线划分将网站拆成不同的应用,每个应用独立部署维护如一个电商网站可以分为:首页,订单,商品,活动,优惠卷,个人中心,购物车等等多个应用,应用之间可以通过消息队列来传递数据。

分布式服务阶段:随着业务复杂度提升,我们会发现很多系统之间有着共同的业务,我们可以把这部分业务抽取出来,做成一个共通的基础服务。

三、网站架构设计的误区

  • 一味追求大公司的解决方案:大公司的架构和成功案例当然值得借鉴,但是不能盲从;

  • 为了技术而技术:技术是为业务而存在的,在技术选型和架构设计中一定要结合具体业务,脱离业务的架构毫无意义;

  • 企图用技术解决所有问题:技术是用来解决业务问题的,而业务本身的问题,是可以通过业务去解决,而没有必要企图用技术是解决;

四、总结

设计网站架构时一定要从小开始,架构随业务演变而演变,切记不要在业务还是0的时候去追求1的架构设计,那样的架构只会舍本逐末,得不偿失;

文章转载自:Justin谈开发!

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大型网站架构演化 大型网站软件系统的特点 大型网站架构演化发展历程 初始阶段 应用服务和数据服务分离 使用缓存改善网站性能 缓存类型 本地缓存 分布式缓存 缓存产品 redis 业界主流 memcached 解决问题 数据库访问 使用应用服务器集群改善网站的并发处理能力 问题: 负载均衡情况下session状态的保持? 解决方案: 基于DNS的负载均衡 反向代理 ngix JK2 数据库的读写分离 问题: 读库与写库的数据同步 解决方案: 不同的数据库都有自己的数据库的主从复制功能 使用反向代理与CDN加速网站响应 反向代理产品 ngix 使用分布式文件系统和分布式数据库系统 使用no-sql和搜索引擎 站内搜索 lucene nutch 分词器 no-sql库 mongodb hadoop 业务拆分 web service restful 分布式服务 大型网站架构演化的价值观 核心价值:随网站所需灵活应对 驱动力量:网站的业务发展 网站架构设计误区 一味追随大公司的解决方案 为技术而技术 企图用技术解决一切问题 大型网站架构模式 架构模式 分层 分割 分布式 分布式应用和服务 分布式静态资源 分布式数据和存储 分布式计算 集群 缓存 CDN 反向代理 本地缓存 分布式缓存 异步 冗佘 冷备份 主从分离,实时同步实现热备份 灾备数据中心 自动化 发布过程自动化 ant maven. 自动化代码管理 svn cvs github 自动化测试 loadrunner hudson. 自动化安全测试 自动化部署 自动化报警 自动化失效转移 自动化失效恢复 自动化降级 自动化分配资源 安全 密码和手机校验码 数据库中的密码加密后存 -> 不可ni -> md5 加密 子主题 1 验证码 防止机器登录 对于攻击网站的XSS攻击,SQL注入,进行编码转换 对垃圾信息,敏感信息进行过滤 对交易转账等重要操作根据交易模式和交易信息进行风险控制 Sina微博的应用 大型网站架构要素 性能 可用性 伸缩性 扩展性 安全性 瞬时响应:网站的高性能架构 网站的性能测试 不同的视角 用户的视角 开发人员的视角 运维人员的视角 性能测试指标 响应时间 并发数 吞吐量 性能测试方法 性能测试 负载测试 压力测试 稳定性测试 web 前端性能优化 浏览器优化 减少http请求 使用浏览器缓存 启用压缩 css上,js下 减少cookie传输, 静态资源使用独立域名访问 CDN加速 反向代理 应用服务器性能优化 分布式缓存 缓存的原理 合理使用缓存 频繁修改的数据 没有热点的访问 数据不一致和脏读 缓存可用性 缓存预热 缓存穿透 缓存架构 jboss cache为代表的需要更新同步的分布式级缓存 以memcached为代表的不互相通信的分布式缓存 异步操作 使用集群 代码优化 多线程 资源复用 单例 对象池 数据结构 垃圾回收 存储性能优化 固态硬盘 RAID与HDFS 万无一失:网站的高可用性 高可性的度量与考核 度量 考核 高可用的网站架构 高可用的应用 高可用的服务 高可用的数据 CAP原理 数据备份 失效转移 高可用网站的软件质量保证 网站发布 自动化测试 预发布验证 代码控制 自动化发布 灰度发布 网站运行临控 临控数据采集 临控管理 永无止境:网站的可伸缩性 网站架构的伸缩性设计 不同功能进行物理分离实现伸缩 单一功能通过集群规模实现伸缩 应用服务器集群的伸缩性设计 http重定向负载均衡 DNS域名解析负载均衡 反向代理负载均衡 ip负载均衡 数据链路层负载均衡 负载均衡算法 分布式缓存集群的伸缩性设计 memcached分布式缓存集群的访问模型 memcached分布式缓存集群的伸缩性挑战 分布式缓存的一致性hash算法 数据存储服务器集群的伸缩性设计 关系数据库集群的伸缩性设计 nosql数据库的伸缩性设计 随需应变:网站的可扩展性 构建可扩展的网站架构 利用分布式消息队列降低系统耦合性 事件驱动架构 分布式消息队列 利用分布式服务打造可复用的业务平台 web service与企业级分布式服务 大型网站分布式服务的需求与特点 分布式服务框架设计 可扩展的数据结构 利用开放平台建设网站生态圈 固若金汤:网站的安全架构 网站应用攻击与防御 XSS攻击 反射型 持久型 防御方法 消毒 httponly 注入攻击 SQL注入攻击 攻击前提 获取数据库结构的方法 防御方法 消毒 参数绑定 OS注入攻击 CSRF攻击 防御方法 表单token 验证码 referer check 1. 网络流量统计 2. 防盗链 error code html注释 文件上传 web应用防火墙 modsecurity NEC的 siteshell 网站安全漏洞扫描 信息加密技术及密钥安全管理 案例: CSDN 信息加密技术分类 单项散列加密 对称加密 非对称加密 密钥安全管理 将密钥和算法放在一个独立的服务器上,对外提供加密和解密服务 密钥放在独立服务器中,算法放在应用程序中。 信息过滤与反垃圾 文本匹配_敏感词过滤 正则表达式 trie树 双数组trie树 多级Hash表 信息降噪 分类算法_内容识别 黑名单 电子商务风险控制 风险 账户风险 买家风险 卖家风险 交易风险 风控 人工 自动 规则引擎 统计模型 案例 网购秒杀系统架构 网购秒杀系统架构

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值