《大型网站技术架构》读书笔记
2023-12-27 15:02:30 40 举报
AI智能生成
《大型网站技术架构》笔记
作者其他创作
大纲/内容
初始架构
一台服务器
应用、DB、文件都在一块
经典的LAMP模式
子主题
子主题
应用服务和数据分离
问题:性能变差、数据存储空间不够
3台服务器
应用服务器
需要处理大量业务逻辑,这需要更强的CPU;
数据服务器
需要快速磁盘检索和数据缓存,这需要更快的硬盘和更大的内存;
文件服务器
需要存储用户上传的文件,需要更大的硬盘;
<p class="p1">使用缓存改善网站性能</p>
问题:<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">访问量持续增长,web性能再次变差;响应速度变慢 </span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">2-8定律:web的访问规律:80%业务访问集中在20%的数据上;</span>
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">增加应用服务器本地缓存,这个最直接,也最简单</span>
增加远程分布式缓存集群:当本地的内存不足以放下需要的缓存的数据时,就只能通过分布式
使用类似于memcached之类的开源缓存产品。redis缓存更多的数据
应用服务器集群化
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">随着网站的成长,单一应用服务器成为网站瓶颈;</span>
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">应用服务器集群化提高网站并发处理能力</span>
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">做成集群的关键是增加负载均衡服务器来调度应用集群</span>
数据库读写分离
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">问题:当增加缓存之后,随着访问量的持续增长,<br>数据库再次出现问题:数据库负载压力过高 </span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">数据库读写分离 </span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;"><span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">利用数据库主从热备功能,实现读写分离;</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;"><span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">读写分离的细节这篇文章讲的很清楚了,就不多说,有需要的请参考</span>
使用反向代理和CDN
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">问题:网站做大,全国甚至全球各区域的访问量都来了,但是各区域的访问速度差别巨大; </span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">解决方案:使用反向代理和CDN </span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">
<p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">CDN和反向代理基本原理都是缓存,CDN部署在网络提供商的机房,<br>用户请求最近的节点访问;而反向代理则部署在网站的中心机房;</p><div><br></div>
使用分布式FS和分布式DBS
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">问题:应用集群如果将session管理做好,或做成无状态的应用集群,可达到线性伸缩;<br>而数据库的压力却不是很好解决; </span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">解决方案:使用分布式数据库拆分,可使用的方法有:</span>
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">单表拆分:将不同的表放到不同的库中,从而降低单个数据库的结点的负载;<br>这样带来的问题就是不同库中的表无法做join操作; </span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">
<p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">另一种方法就是按业务拆分,将属于同一业务的表划分到一个库中,<br>从而有效降低数据库负载,同时在业务逻辑实现上不至于过于复杂;</p><div><br></div>
使用NOSQL和搜索引擎
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">问题:出现海量数据存储和检索的需求</span>
<p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">解决方案:使用NoSQl产品分布式部署来支持海量数据的查询和存储;</p>
业务切分
<p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">按照业务来划分子系统,按产品线划分系统,通过分布式服务来协同工作;</p>
<span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">系统发展到最后都是一个拆分的过程,也不会像三国一样合就必分,系统职能越来越单一化。</span><br style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;"><span style="color: rgb(0, 0, 0); font-family: Rosario, "Xin Gothic", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", Arial, sans-serif-webkit-body; font-size: 14px;">这也回到了面向对象编程的五项基本原则的单一职责的原则。</span>
0 条评论
下一页