惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
Latest news
Latest news
T
The Blog of Author Tim Ferriss
D
DataBreaches.Net
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Security Latest
Security Latest
宝玉的分享
宝玉的分享
S
Schneier on Security
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cisco Talos Blog
Cisco Talos Blog
MyScale Blog
MyScale Blog
B
Blog RSS Feed
N
Netflix TechBlog - Medium
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 热门话题
Apple Machine Learning Research
Apple Machine Learning Research
T
Tenable Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
Google DeepMind News
Google DeepMind News
Hacker News: Ask HN
Hacker News: Ask HN
Schneier on Security
Schneier on Security
博客园 - Franky
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Secure Thoughts
T
Threat Research - Cisco Blogs
D
Docker
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
V
Vulnerabilities – Threatpost
F
Fortinet All Blogs
罗磊的独立博客
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
SecWiki News
SecWiki News
A
Arctic Wolf
小众软件
小众软件
T
Troy Hunt's Blog
博客园 - 三生石上(FineUI控件)
Know Your Adversary
Know Your Adversary

博客园 - 外科手术医生

Spring-AI开发之旅 MACD秒解 历史的车轮 添加pdf的目录 spring ai提示词 纳瓦尔宝典-总结内容 小龙虾的skills哪里找? JMeter压测使用 Git仓库ssh不同环境配置 成功没有奇迹,只有积累----Bruce Lee 为什么要⽤ Foundry git命令下,mac环境下载依赖相关报错问题解决方案 数据分析/数据挖掘/机器学习---- 必读书目(转) 简单高效的语言 OSI模型-一图胜千言 dubbo分布式系统 JVM解剖 线程池 集合类 concurrent之CAS concurrent之volatile 责任链设计模式 Junit框架分析 线程详解 计划自己的时间
架构师之路
外科手术医生 · 2021-03-16 · via 博客园 - 外科手术医生

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

架构技术方案描述方法

  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密集型:可以多启动线程提高系统的吞吐量

发布质量保障

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

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

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

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