• 架构师之路


    机械制图的时候,通常使用三视图来描述一个机械零件,从正式,侧视,俯视三个角度对一个零件绘图,从而全面描述一个零件的结构

    架构技术方案描述方法

    1. 从演化,模式,要素描述
    2. 性能,可用性,伸缩性,扩展性,安全,这5个要素方法详细描述网站结构核型原理,重要的负载均衡,异步处理,分布式缓存会从不同章节从多角度进行描述
    3. 通过几个具体案例再一次从整体和局部描述网站架构方法
    4. 从架构师做事的角度回顾网站技术架构

     

    大型网站系统特点

    高并发,大流量:淘宝2012年双11,当天活动一天交易额超过191亿,活动开始第一分钟独立访问用户达1000w

    高可用:系统7*24小时不间断服务

    海量数据:需要存储,管理海量数据,需要大量服务器,facebook每周上传照片数目接近10亿

     

    大型网站架构演化发展历程

    大型网站都是从小型网站发展而来,网站架构也是一样,是从小型网站架构逐步演化而来

    初始阶段网站架构

    应用程序,数据库,文件等所有的资源在一台服务器上

    缺点:如果使用一个带宽,文件上传,下载就会影响应用程序的业务功能

    应用服务和数据服务分离

    应用服务器:需要处理大量的业务逻辑,因此需要更快更强大的cpu

    数据库服务器:需要快速磁盘检索和数据缓存,需要更快的硬盘和更大的内存

    文件服务:需要存储大量用户上传的问题,需要更大的硬盘

     

    ps:网站访问的特点和现实世界财富一样,遵循二八定律,80%的业务访问几乎在20%的数据上。

     

    业务渐进式发展问题

    单机性能问题:如果用户量大,数据库压力就大,就会导致访问延迟,影响整个网站的性能

    处理方法:

    既然大部分的业务访问集中在一小部分数据上,那么如果把这一小部分的数据缓存在内存中,是不是能减少数据库的压力,使用缓存,网站使用的缓存可用分两种,缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存,相比访问速度本地内存会快一点,但是应用程序内存有限,缓存数据有限,就会出现和应用程序争内存的情况,远程部署分布式缓存服务器,可用使用集群式,部署大内存的服务器作为专门的缓存服务器,可用在理论上做到不受内存容量现在的缓存服务

     

    数据库性能问题

    网站在使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中,缓存过期)和全部的写操作需要访问数据,在网站用户达到一定规模后,数据库因为负载压力过高而又成为网站的瓶颈

    绝大部分数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新,缺点就是跨库是不能多表关联查询的,同步到另一台数据库服务器上,利用数据的这一功能,实现数据库读写分离,从而改善数据负载压力

     

    服务器性能问题

    数据访问的压力,可以得到有效环节,但是单一应用服务器内购处理的请求连接有限,网站高峰期,应用服务器成为整个网站的瓶颈

    处理方法:使用集群,是网站解决高并发,海量数据问题的常用手段,可以通过增加一台服务的方式改善负载压力

     

    网络问题

    随着网站,业务发展,用户规模扩大,不同地区用户访问网站的速度差别叶很大,为了提高用户体验,留住用户,网站需要加速访问

    处理办法:使用CDN和反向代理,基本原理都是缓存,区别是CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据,而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户

     

    大型网站数据性能问题

    1.随着网站的业务的发展,依然还不能满足需求,这时需要使用分布式数据库,文件系统也一样,使用分布式文件系统,对于数据存储和检索的需求也越来越复杂,网站需要使用一些非关系型数据库,入mongodb和搜索引擎

    2.业务拆分,对于日益复杂的业务场景,通过使用分而治之的手段使整个网站业务分成不同的产品线,如大型的购物交易网站,就会将首页、商铺、订单、买家、卖家等拆分程不同的产品线,分归不同的业务团队负责

    3.具体到技术上,也会根据产品线划分,将一个网站拆分成不同的应用,每个应用独立部署维护,应用之间可以通过一个超链接建立关系,也可以通过消息队列进行数据分发,最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统

    4.一个应用系统都需要许多相同的业务操作,比如用户关联,商品关联等,我们可以将这些共用的业务提取出来独立部署,由这些可复用的业务连接数据库,提供共用的业务服务,而应用系统只需要关联用户界面,通过分布式服务调用共用业务服务完成具体业务操作

     

    架构演变的价值观

    网站的价值在于它能为用户提供什么价值,在网站能做什么,小网站最需要做的就是为用户提供好的服务来创建价值,得到用户的认可,活下去,野蛮生长

    了解业务的用户真实需求,比如12306,在几亿中国人一票难求的情况以窗口售票模式在网上售票(凌点开始出售几天后的车票),12306,重构的并不是技术架构,而是它的业务架构,调整业务需求,换一种方式卖票,而不是去搞促销秒杀的噱头方式的游戏,后来12306确实往业务调整的方向走,引入排队模式,整点售票改成分时段售票

     

    大型网站架构模式

    模式的定义:每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心,这样,你就能一次又一次地使用该方案而不必做重复工作

    应用服务器性能优化

    优化手段主要有缓存,集群,异步等

    分布式缓存

    网站性能优化,优先考虑缓存

    缓存的基本原理:将数据存储在相对较高访问速度的存储介质中,被缓存的数据无需重复计算即可直接使用,可以起到减少计算时间

    缓存的本质是一个内存hash表,数据缓存一对key,value形式存储在内存的HASH表中,hash表数据读写的时间复杂度为O

    异步操作

    对于高并发的情况下,对于数据库压力过大的情况,可以使用消息中间件,进行流量削峰

    集群

    使用负载均和技术,为应用构建一个由多台服务器组成的服务器集群

    代码优化:

    多线程

     从资源利用角度,使用多线程的原因,主要有两个IO阻塞和多CPU

     启动线程数=(任务执行时间/(任务执行时间-IO等待时间))* CPU内核数

     最佳启动线程数和CPU内核数量成正比,和IO阻塞时间成反比

      计算型:线程数最多不超过CPU内核数

      IO密集型:可以多启动线程提高系统的吞吐量

     

    发布质量保障

    测试:新功能的测试,及特殊情况,需要回归全链路测试,代码单元测试

    业务模拟操作:在预发环境进行测试

    网站运行监控,及数据采集:查看用户日志,服务器日志,服务器性能指标查看,关键的接口进行性能监控:响应时间,还有告警方案

    对于新的功能,用户激增,需要自动优雅降级

    Unkonw Unkonw(你不知道一样东西,你也会不知道自己不知道这样东西)
  • 相关阅读:
    各种视角了解数组Array以及案例展示
    js基础面试高频面点2:Javascript中undefined和not defined有什么区别,和null又有什么联系?
    一些好用的Linux命令工具
    Linux实用命令工具-dtrx根据需要自动解压
    J2EE--Hibernate基础笔记
    mysql用户与权限管理笔记
    找出字符串中出现频率最少的字符,并将其去除
    Linux常用命令--文件(夹)查找之find命令
    J2EE--Struts2基础开发笔记
    Java多线程基础知识总结笔记
  • 原文地址:https://www.cnblogs.com/2014-1130/p/14545297.html
Copyright © 2020-2023  润新知