大型网站软件系统的特点
高并发,大流量
高可用
海量数据
用户分布广泛,网络情况复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展

1,大型网站架构的演化
    1,初始阶段的网站架构
        一台服务器 应用程序,数据库,文件服务放到一台服务器上(php/java/mysql)


    2,应用服务和数据服务分离
        三台服务器 更高的应用服务器一台,更快的硬盘和更大的内存的数据库服务器一台,更大的磁盘

文件服务器一台
    3,使用缓存改善网站性能
        分为本地缓存(更快但是争用内存)和远程分布式缓存
        六台服务器 更高的应用服务器一台,三台远程分布式缓存,更快的硬盘和更大的内存的数据库服务器一台,更大的磁盘文件服务器一台


        缓存问题:
            缓存穿透--->查询缓存没有的数据 //返回空数据,给空数据设置失效时间
            缓存击穿--->数据失效 // 设置热点数据永远不过期
            缓存雪崩--->缓存宕机或同一时间失效 // 缓存集群+设置不同(随机)失效时间
    4,使用应用服务器集群改善网站的并发处理能力
        增加应用服务器,使用负载均衡调度服务器(nginx)/此时只连接了一台数据库


    5,数据库读写分离(虽然用了缓存,但是业务数据最终还是要落到关系型数据库/由业务决定)
        主从热备,配置两台数据库的主从关系(怎么配置?读写访问数据库,多数据源配置)
        写主读从


    6,使用反向代理和CDN加速网站响应
        cdn(离用户最近的机房)和反向代理服务器(网站中心机房)都缓存着用户请求的资源(前端服务资源)


    7,使用分布式文件系统和分布式数据库系统(网站数据库拆分的最后手段,表单规模非常庞大的时候才使用)
        业务分库,将不同业务的数据库部署在不同的物理服务器上


    8,使用NOSQL和搜索引擎(数据存储的检索的需求越来越复杂)
        对可伸缩的分布式特性具有更好的支持


    9,业务拆分
        拆分产品线
        技术上将网站拆分成不同的应用,每个应用独立部署
        1,页面链接访问不同应用地址
        2,数据交互,通过接口调用(同步)或者消息队列(异步)分发
        3,通过访问同一个数据存储系统来构成一个关联的完整系统


    10,分布式服务
        服务拆分后服务的连接变大,会出现数据库(连接数不够)服务拒绝
        抽离公共服务,提供给业务服务


    11,其他
        跨数据中心的实时数据同步

云计算平台
        将计算/存储/网络作为一种基础资源出售
    云服务
        提供线上服务,方便业务使用

网站架构设计误区
        一味追随大公司的解决方案
        为了技术而技术
        企图用技术解决所有问题
            有时候要修改的是业务架构而不是技术架构
            控制并发访问的量

2,大型网站架构模式(目标:高性能/高可用/易伸缩/可扩展/安全)
    1,分层(无论网站规模大小)(横向)
        应用层(终端)/服务层/数据层
            禁止跨层次调用和逆向调用
            三层结构分别部署到不同的服务器上
            单服务多端口
    2,分割(纵向)
        将不同功能和服务分割开
        购物->酒店/小商品/->首页/导航
    3,分布式(服务器变多)
        问题:
            跨服务调用(io)
            宕机概率增加
            数据一致性问题
            依赖复杂,开发管理困难
        常用的解决方案:
            分布式应用和服务
            分布式静态资源
                动静分离
            分布式数据和存储
                nosal几乎都是分布式的
            分布式计算
                hadoop/mapreduce,将计算程序发布到数据所在位置以加速计算和分布式计算
            分布式配置
            分布式锁
            分布式文件系统
    集群(至少两台,高可用至少三台)
    缓存
        CDN 缓存静态资源
        反向代理 返回前端资源
        本地缓存
        分布式缓存(专门的分布式缓存集群)
    异步(典型的生产者消费者模式)
        单机使用多线程共享内存队列
        多个服务器集群通过分布式消息队列实现异步
        特性
            提高系统可用性
            加快网站响应速度
            消除并发访问高峰
    冗余
        服务器冗余(集群)
        数据库冗余(冷备存档)
        主从实时同步热备
    自动化(目前主要集中在发布运维方面)
        自动化发布过程(Jenkins)
        自动化代码管理,代码版本管理,代码分支创建合并自动化
        自动化测试
        自动化安全检测
        自动化部署
        自动化监控
        自动化报警
        自动化失效转移
        自动化失效恢复
        自动化降级
        自动化分配资源
    安全
        网络通信加密
        数据加密
        xss攻击
        sql注入
        编码转换
        垃圾数据/敏感信息进行过滤
        交易类对交易模式和交易信息进行风控

模式受其使用场景限制,用好在于对问题和需求是否真正理解与把握

3,大型网站核心架构要素
    性能
        浏览器
            浏览器缓存
            页面压缩
            合理布局页面
            减少cookie传输
            cdn
        应用端
            本地缓存/分布式缓存
            异步请求
            集群
        代码层
            多线程
            改善内存管理
        数据库服务器端
            索引
            缓存
            sql优化
        nosql
            优化数据模型
            存储结构
            伸缩特性
    可用性
        应用服务器
            不可以将用户的请求会话信息保存到某一台服务器
        存储服务器
            实时备份
        开发过程
            预发布验证
            自动化测试
            自动化发布
            灰度发布
    伸缩性
        集群
        数据库集群
    扩展性
        快速响应需求变化
        异步(生产者消费者模式)
        第三方开发者/提供开发者平台
    安全性
        应对各种现存和潜在的各种攻击手段,需要有可靠的应对策略

4,瞬间响应:网站的高性能架构
    网站性能测试
        前端架构优化手段
            优化html样式/利用浏览器的并发和异步特性/调整浏览器缓存策略/使用cdn/反向代理
    性能测试指标


        响应时间
            请求一万次,响应时间之和除以一万
        并发数
            同时提交请求的用户数目
            测试并发用户,两次请求之间加入一个随机时间(思考时间)
        吞吐量
            单位时间内系统处理的请求数量
            tps 每秒事务数 
            hps 每秒http请求数
            qps 每秒查询数
        性能计数器
            系统负载 正在被cpu执行和等待被cpu执行
            对象与线程数
            内存使用
            cpu使用
            磁盘
            网络I/O
    性能测试方法
        性能测试
        负载测试
        压力测试
        稳定性测试
    性能测试报告
    性能优化策略
        性能分析
            检查请求处理的各个环节的日志
            分析原因:内存/磁盘/网络/cpu/代码问题/架构设计/系统资源不足
        性能优化
            web前端性能优化
                浏览器访问优化
                    1,减少http请求,同个页面相同服务请求尽量少
                    2,使用浏览器缓存
                        设置http请求头Cache-Control和Expires
                        更新文件名,更新html引用
                        浏览器缓存策略的网站更新静态资源时,应该一个文件一个文件更新
                    3,启用压缩
                    4,css放在页面最上面,js放在页面最下面
                    5,减少Cookie传输
                CDN加速
                    缓存静态资源 图片/文件/css/脚本/静态页面
                反向代理(nginx)
                    缓存静态资源或动态内容
            应用服务器性能优化
                优化手段:
                    缓存
                        缓存基本原理
                         hashcode
                        合理使用缓存
                            不缓存频繁修改的数据
                            缓存热点数据
                            产生数据不一致和脏读(读写一致性问题)
                            缓存可用性
                                缓存雪崩 ---> 分布式缓存集群
                            缓存预热
                                启动时加载数据库中全部数据到缓存
                            缓存穿透
                                不存在的value值也缓存起来
                            分布式缓存架构
                                memcached 集群服务器之间不通信/高性能网络基于libevent/内存管理
                    异步
                        不能立即成功(中间状态)
                    使用集群
                        反向代理
                    代码优化
                        多线程
                            启动线程数 执行时间 / (任务执行时间-IO等待时间) * CPU内核数
                            计算型任务线程数不超过CPU内核数
                            多线程问题
                                将对象设计为无状态对象 贫血模型对象无状态 不良设计
                                使用局部对象 方法内部创建对象 不要将对象传递给其他线程
                                并发访问资源时使用锁
                            资源复用
                                单例 声明bean,获取bean
                                对象池 对象创建后放到连接池,用完归还
                            数据结构
                                Hash散列算法Time33
                                    hash(i) = hash(i-1) * 33 + str[i]
                                    str ---> md5 ---> hash ---> hashcode
                            垃圾回收
                                堆控件存储对象信息
                                    yong(eden(满了复制到from触发young gc)/from(eden满了复制到eden和to)/to(eden满了复制到eden和from))
                                    超过设置的阈值复制到old
                                    old(满了触发full gc)

存储服务器性能优化
                关系型数据库 b+树
                nosql lsm树
                raid
                hdfs
                    namenode 管理服务节点(名称服务)
                    datanode 存储数据节点 写入是集群复制 保证高可用

需要业务的支撑和驱动

5,网站的高可用架构
    网站可用性
        网站年度可用性指标 = (1-网站不可用时间/年度总时间) * 100%
    高可用的服务
        负载均衡
        session管理
            session复制 不推荐
            session绑定(ip指定) 不推荐
            cookie记录session 不推荐
            session服务器 推荐
        分级管理
            服务器优先部署高服务
            物理机部署地域分离(虚拟机/物理机/数据中心)
        超时设置
            超时重试3次或调用其他相同服务
        异步调用
            邮件异步发送
        服务降级
            拒绝服务和关闭服务
        幂等性设计
            使用版本号
    高可用的数据
        分布式缓存服务器集群
        应用服务器集群共用同一个分布式缓存服务器
        cap原理
            c:数据一致性,所有应用程序都得到相同的数据
            a:数据可用性,任何时候应用程序都可以读写访问
            p:分区耐受性,跨网络分区线性伸缩
        数据备份
            冷备
            异步热备
                写主存储服务器后(立即返回响应)异步写备存储服务器
            同步热备
                同时写多台存储服务器
            关系型数据库热备
                master-slave同步机制
                    读写分离
        失效转移
            失效确认
                心跳检测
                应用程序失败报告
            访问转移
            数据恢复
    高可用网站的软件质量保证
        网站发布
            关闭一小部分的负载均衡服务,替换完开启后替换其他的
        自动化测试
            selenium
        预发布验证(uat(预验证)/冒烟(内测))
            第三方服务
        代码控制
            主干开发/分支发布
            分支开发/主干发布(主要使用)
        自动化发布
            火车发布模型
        灰度发布
            部分服务器集群部署
            abtest
        网站监控
            监控数据采集
                用户行为日志收集
                    服务端日志收集
                    客户端浏览器的日志收集
                服务器性能监控
                    ganglia
                运行数据报告
                    缓存命中数/平均响应时间/待处理任务
            监控管理
                系统报警
                失效转移
                自动优雅降级

6,网站的伸缩性架构
    网站架构的伸缩性设计
        不同功能进行物理分离实现伸缩
            纵向分离部署,横向分离业务
        单一功能通过集群规模实现伸缩
    应用服务器集群的伸缩性设计
        http重定向负载均衡(不多见)
        dns域名解析负载均衡(dns解析到负载均衡服务器)
        反向代理负载均衡(性能问题)
        ip负载均衡(受限于负载均衡服务器)
        数据链路层负载均衡(三角模式(直接路由方式)/LVS)
        负载均衡算法
            轮询(round robin, RR)
            加权轮询(高性能服务器更多请求)
            随机
            最少连接
            源地址散列
    分布式缓存集群的伸缩性设计
        memecached分布式缓存集群
        余数hash在加入新服务器会无法命中缓存(预热)
        分布式缓存的一致性hash算法(负载不均衡)
        一致性hash算法加虚拟层(150个虚拟节点)
    数据存储服务器集群的伸缩设计
        关系型数据库集群的伸缩设计
            数据集主从模式(读写分离)
            分库分表(一个表拆分开存储到多个数据库中)
                Amoeba/Cobar(代理策略)
                (无法跨库join,不能跨库事务处理)
                避免事务/事务补偿机制/分解数据访问逻辑(避免join)
                GreenPlum(可以join,但是延时大,适合数据仓库非实时业务)
        nosql数据库的伸缩性设计
            关系数据库海量数据处理能力不足,设计约束
            放弃关系型结构化查询和事务一致性
            高可用和可伸缩性
            hbase(Hmaster->HRegionServer->HRegion->HFile/hdfs)

7,网站的可扩展架构
    扩展性(系统设计)/伸缩性(加机器)
    构建可扩展的网站架构
        拆分系统模块
    利用分布式消息队列降低系统耦合性
        事件驱动架构
            生产者消费者模式
            消息发布订阅(kafka)
        分布式消息队列
            伸缩性
            可用性
            mysql也能做(消费者要定时去取)
        利用分布式服务打造可复用的业务平台
            模块拆分独立部署
                纵拆
                    大应用拆分为多个小应用
                横拆
                    拆分复用业务,独立部署


            大型网站分布式服务的需求与特点
                负载均衡
                失效转移
                高效的远程通信
                整合异构系统
                对应用最少侵入
                版本管理
                实时监控
            分布式服务框架设计
                thrift
                dubbo
                    远程调用
            可扩展的数据结构
                nosql(先指定名字,无需指定字段,写入时再指定)
            利用开放平台建设网站生态圈
                只有用户得到了他们想要的价值,他们才愿意使用网站的服务,网站的存在才有意义
                开放平台架构原理
                    第三方应用 ---> open api/协议转换/安全/审计(日志/计费)/路由/流程(统一接口调用(外观模式)) ---> 网站内部服务

8,网站的安全架构
    xss攻击(跨站点脚本攻击)
        消毒(html危险字符转义)
    注入攻击
        消毒
        参数绑定
    csrf(跨站点请求伪造)
        表单token
        验证码
        referer域中记录着请求来源
    其他攻击和漏洞
        error code
        html注释
        文件上传(限制文件上传类型/修改文件名/使用专门存储)
        路径遍历(独立部署前端资源,使用独立域名/不使用静态url,动态参数不包含文件路径信息)
    web应用防火墙
        ModSecurity/SiteShell
    网站安全漏洞扫描
        安全漏洞扫描平台(模拟黑客攻击)
    信息加密技术及密钥安全管理
        单向散列加密(md5/sha)加密后入库,再次登录后加密对比数据库
        对称加密(des/rc)token加密
        非对称加密(rsa) 公钥加密只有私钥能解开/私钥加密的信息只有用公钥才能解开
        密钥安全管理(密钥和算法放到独立服务器(不推荐)/加解密算法放到应用心态,密钥放到独立服务器/密钥分开加密后保存到不同存储介质中)
    信息过滤与反垃圾
        文本匹配(敏感词/降噪) Trie树/双数组+trie树 hash浪费内存
        分类算法(贝叶斯分类算法)
        黑名单(hash表/布隆过滤器 通过一个二进制列表和一组随机数映射函数实现)
    电子商务风控
        风险(账户风险/买家风险/卖家风险/交易风险)
        风控(规则引擎和统计模型)

11,海量分布式存储系统Doris的高可用架构设计分析
    分布式存储系统的高可用架构
        应用程序服务器
        数据存储服务器
        管理中心服务器
    不同故障情况下的高可用解决方案
        分布式存储系统的故障分类
            瞬时故障(断网/内存垃圾回收/线程繁忙)
                重试机制
            临时故障(交换机宕机/网卡松动/系统升级/停机维护/内存损坏/cpu过热)
                写入临时存储服务器
            永久故障(硬盘损坏,数据丢失)
                集群复制

12,网站秒杀系统架构设计案例分析
    1,秒杀系统独立部署
    2,秒杀商品页面静态化
    3,租借秒杀活动网络带宽
    4,动态生成随机下单页面url
    秒杀系统架构设计
        控制秒杀商品页面购买按钮的点亮
            使用脚本控制,秒杀开始生产新的js文件并被用户加载
        如何只允许第一个提交的订单被发送到订单子系统
            只有少数用户能进入下单页面,检查全局提交订单数目

13,大型网站典型故障案例分析
    写日志也会引发故障
        应用程序和第三方日志配置要分别配置
        日志输出级别至少为warn
        需要关闭第三方组件不恰当日志
    高并发访问数据库引发的故障
        首页不应该访问数据库,从缓存或者搜索引擎服务器获取
    高并发情况下锁引发的故障
        使用锁操作要谨慎
    缓存引发的故障
        缓存不能随便关闭,否则会出现缓存雪崩,网站瘫痪
    应用启动不同步引发的故障
        应用准备好再启动前端请求
    大文件读写独占磁盘引发的故障
        存储的使用需要根据不同文件类型和用途进行管理
    滥用生产环境引发的故障
        访问线上生产环境要规范,不小心会导致重大事故
        线上数据库执行脚本要规范
    不规范的流程引发的故障
        代码提交前使用diff命令进行代码比较,确认没有提交不该提交的代码
        加强code review
    不好的编程习惯引发的故障
        输入的对象要判空
        调用方法时对象不能为null
        必要时构造空对象

大型网站技术架构学习相关推荐

  1. 小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

    十年间,负载均衡的前沿技术层出不穷,令用户眼花缭乱.经常在技术网站.文档中出现的"四层负载均衡"."七层负载均衡"字眼有什么含义?有什么区别?对客户网络有哪些不 ...

  2. 《大型网站技术架构》学习笔记八:固若金汤之网站的安全性架构

    一.网站应用攻击与防御 二.信息加密技术与密钥安全 三.信息过滤与反垃圾 四.电子商务风险控制 五.学习总结 转眼之间,<大型网站技术架构>的读书笔记到此就结束了.最近时间非常紧,因此本篇 ...

  3. 《大型网站技术架构》《K8S进阶实战》等书籍!送45本!读完工资多个0!

    学习如逆水行舟,不进则退.所以又来给各位读者送书了,这次送45本技术书,内容涉及深度学习.Python.Dubbo.Flutter等. 感谢本次活动的赞助商『电子工业出版社博文视点』 另外!急于购书的 ...

  4. 大型网站技术架构:摘要与读书笔记

    花了几个晚上看完了<大型网站技术架构>(https://book.douban.com/subject/25723064/)这本书,个人感觉这本书的广度还行,深度还有些欠缺(毕竟只有200 ...

  5. 《大型网站技术架构》读书笔记之八:固若金汤之网站的安全性架构

    一.网站应用攻击与防御 二.信息加密技术与密钥安全 三.信息过滤与反垃圾 四.电子商务风险控制 五.学习总结 转眼之间,<大型网站技术架构>的读书笔记到此就结束了.最近时间非常紧,因此本篇 ...

  6. 《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构

    首先,所谓网站的伸缩性,指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力.在整个互联网行业的发展渐进演化中,最重要的技术就是服务器集群,通过不断地向集群中 ...

  7. 《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

    来源:http://www.cnblogs.com/edisonchou/p/3809839.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...

  8. Web高级征程:《大型网站技术架构》读书笔记系列

    来源:http://www.cnblogs.com/edisonchou/p/3773828.html 一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术 ...

  9. 《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构

    来源:http://www.cnblogs.com/edisonchou/p/3862389.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...

最新文章

  1. HTML5 placeholder在低版本浏览器的解决方法
  2. python编写一个程序、实现文件的复制_写个python 脚本实现文件的递归拷贝
  3. 三个分级基金(银华100、申万深成、国联双禧)对比图(zz from Fund@newsmth)
  4. 关于iframe的contentDocument和contentWindow
  5. python实验结论怎么写_Python实验课:Python元组数据及其运算
  6. (Object detection)目标检测从入门到精通——第五部分YOLO 算法
  7. matlab生成不重复的随机数_怎么生成不重复随机数——《超级处理器》应用
  8. 什么是bigdata
  9. VMworld 2016 US带来了哪些惊喜?
  10. canvas节点无法导出图片_开源小程序,练手必备,仿“美图秀秀”处理图片。
  11. python小项目(-)图片转字符画
  12. 阿里云 ECS Ubuntu 14.04 无法访问之磁盘 IO 跑满问题排查
  13. 3DGIS地理信息系统设计方案
  14. 如何在 R 中进行 Fisher 精确检验
  15. linux驱动开发篇Linaro(arm交叉编译器的下载与安装)
  16. 实现线程的三种方式KLT/ULT/LWP
  17. MySQL千万级数据处理
  18. 帝国时代III亚洲王朝序列号自动输入器
  19. 【LaTeX应用】画图,上面一个图形,下面两个图形,竖直方向居中
  20. python正则爬取微信阅读总榜单写入csv

热门文章

  1. 微信朋友圈封禁利诱分享,没了裂变用户拉新还能怎么做?
  2. 抖音xgorgon0408分析记录
  3. win10系统克隆到新硬盘,如何克隆系统到新硬盘
  4. Python-docx-操作word文档实战
  5. MySQL6_表的增删改查CURD
  6. WebSocket 简单的聊天 pc与移动端通信
  7. 以大数据驱动辽宁制造业转型
  8. 40年来首次,疼痛研究国际协会修订了疼痛的定义
  9. win10ltsc安装后重启提示bitlocker有问题怎么办_U盘损坏五种常见问题的修复方式...
  10. 思科路由器静态路由的配置