【转】高扩展性网站的50条原则

news/2024/5/19 14:57:56/文章来源:https://blog.csdn.net/weixin_34110749/article/details/93494352

 

《高扩展性网站的50条原则》,利用一天半的时间快速浏览总结的电子书,对网站的建设有一个原则性的把握,书中提到的大部分原则现在已成为互联网行业的共识,但并不妨碍我们重新整理分类,从全局层面把控高扩展性网站的建设思路,文中的每一条尽管高度凝练,但都值得细细品味。完成于2015年6月11日11:02:19。
(一)化简方程
  1. 不要过度设计:基于成本的考虑,只设计能满足要求的系统即可,过于理想化的设计不利于系统的维护与成本控制;
  2. 设计时考虑扩展性:设计20倍的容量,实现3倍的容量,部署1.5倍的容量,即所谓的D-I-D方法;
  3. 在设计复杂系统时将方案的设计、范围和实施一简再简,在精简过程中可以参考2-8原则,优先最主要,最核心的实现;
  4. 减少页面的DNS查找:
  5. 通过减少与合并等机制,尽可能减少页面上的对象,降低请求资源的次数;
  6. 使用同一品牌的网络设备,减少不同品牌的网络设备间带来的扩展性问题;
总结:
(二)分布工作
  1. 横向复制:复制服务或数据库来分散事务负载,X轴原则;
  2. 纵向拆分:根据动词或名词,拆分服务和数据
  3. 拆分相近的东西:利用某些主题的属性进行查分,如利用客户的ID、所在地等进行拆分;
总结:
(三)横向扩展设计
  1. 设计横向扩展方案;
  2. 采用经济型系统,包括服务器及其他硬件,节约成本;
  3. 横向扩展数据中心:设计具有三个或更多实时数据中心的系统,分散数据,分散事务负载;
  4. 利用云计算进行设计,面对突发的扩展,利用自建或第三方的云技术可以帮助快速环境准备;
总结:
(四)使用正确的工具
  1. 合理选择数据存储:尤其是对于RDBMS的选择,看是否有事务要求,如果只是简单存储,考虑文件系统或缓存等;
  2. 谨慎使用防火墙;
  3. 利用监控工具收集并分析系统日志文件
总结:
(五)不要重复工作
  1. 不要立即检查刚做过的工作,即不要立即读刚写入大数据,因为这种写出错的概率微乎其微;
  2. 避免使用重定向,如果必须使用,优先考虑服务器配置;
  3. 放松时序约束,数据的分布总会给状态带来短暂的不一致,强行约束时序会使系统处理缓慢;
总结:
(六)积极利用缓存
  1. 大用户流程使用CDN;
  2. 使用HTTP头中的Expires、Cache-Control、Last-Modified等过期设置,包括对Web服务器对应HTTP头信息的设置;
  3. 缓存Ajax调用;
  4. 应用页面缓存,在web服务器前加上页面静态内容缓存;
  5. 应用缓存使用;
  6. 在数据库和应用层之间加入对象缓存,如memcached;
  7. 将对象缓存独立成单独的层为上层提供服务;
总结:
(七)从错误中吸取教训
  1. 从偶尔错误事件及失败中总结学习;
  2. 不要依靠QA发现错误,更多的从控制编程角度控制;
  3. 没有回退共的设计是失败的设计;
  4. 讨论失败并从中吸取教训;
总结:
(八)数据库原则
  1. 在设计数据模型时,考虑实体间较复杂的关系,为将来的数据库分割或其他处理做好准备;
  2. 使用类型正确的数据库锁,如隐式锁、显式锁、行锁、页锁、范围锁、表锁、数据库锁;
  3. 不要使用多阶段提交协议处理存储或事务,因为其是阻断性提议,对数据库的锁定要求更强;
  4. 避免使用select for update ,因为该语句查询到的行都会被锁住;
  5. 不要使用select * 选择所有数据列,使用select或insert的时候都制定列名;
总结:
(九)容错设计与故障设计
  1. 采用隔离故障的泳道,通过将服务拆分或将大数据量的表按属性划分进行隔离,减少隔离域之间的同步调用及数据共享;
  2. 避免单点故障,采用master/master的模式,通过负载均衡器均衡跨服务的流量;
  3. 避免系统串联,如果要串联,也要将单个系统和核心环节的系统设置成集群模式;
  4. 对于有风险或共享的服务,需要创建一种结果做到启用或禁用(可通过配置文件、数据库、启动参数、同步命令、文件标记等方式)
总结:
(十)避免状态或分发状态
  1. 避免状态:努力实现无状态,通过合理的设计选择;
  2. 分发状态:尽量在浏览器端维护会话,保持在cookie中;
  3. 分发状态:利用分布式缓存存放状态,通过缓存数据提高存取速度,需要考虑支持持久化的缓存服务选择或利用数据库进行持久化
总结:
(十一)异步通信和消息总线
  1. 尽可能使用异步通信保证每个服务和层都是独立的,即使一定要用同步服务,需要设置服务超时时间;使用异步通讯的常见四种情况:(调用外部API或第三方方法;调用长时间运行的进程;调用容易出错和频繁更改的方法;调用无时间约束或业务连续性约束的系统或服务);
  2. 确保消息总线能够扩展:通过服务按不同类型或不同处理方式进行拆分;
  3. 避免让消息总线过于拥挤,不要发布所有消息,减少低价值高成本的流程,对低价值/低成本和高价值/高成本的流量进行采样;
总结:
(十二)其他原则
  1. 慎用第三方解决方案扩展;
  2. 从成本角度合理使用存储,对于不同价值的数据采用不同的存储策略;
  3. 删除数据库事务处理过程中的业务逻辑处理,让数据库只做数据事务处理方面的共走,与业务逻辑无相关;
  4. 设计能够监控的应用,在设计阶段就要考虑监控,做到从业务的角度监控而不仅仅是CPU、内存、网络等纯技术监控;
  5. 团队中的技术能力要能胜任对系统、组件、服务等相关能力的需要,做到自助可控;
总结:

转载于:https://www.cnblogs.com/yanghj010/p/9629964.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_760363.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

秒杀网站系统设计详解

2019独角兽企业重金招聘Python工程师标准>>> 最近总有一些朋友问高并发问题,后来就想自己把一个秒杀系统作为例子详细分解一下,也是一个学习过程。 首先假设场景,预计该活动可能有1万人参加,那最大并发数为1万。 主要面…

办公资源:你曾错过的PPT视频教程网站

身边有好多小哥哥,姐说不会制作PPT模板,怎么办呀?我想说不会就学嘛!可有人问了想学又不知道从哪里开始着手。诶呀!真是令人脑壳疼的问题。其实现在网络发展这么快了,网上随便搜索就会有很多PPT制作教学的课…

在 Windows 的 IIS 上部署 .net core 网站

参考: .net core 2.0学习笔记(二):部署到Windows和Liunx系统 - ZuQing - 博客园 使用 IIS 在 Windows 上托管 ASP.NET Core | Microsoft Learn 在 Visual Studio 2017 远程 IIS 计算机上的远程调试 ASP.NET Core 一、安装 SDK…

第一个在 Linux 下的 .net core 2.1 网站 ( Jexus )

制作最简单的 .net core Web应用程序 本文的主要目标是部署, 所以就不多在 Web 应用程序上赘述了, 如下图: 1. 用 VS 2017 创建 ASP.NET Core Web 应用程序项目 HelloCore: 2. 项目上右键生成, 再右键发布&#xff1a…

.net core 网站如何附加到进程 ?

.net core也用了一段时间了, 总觉得网站调试不方便, 直接 F5 运行不稳定,有时在网站输入验证码VS就直接退出了调试。于是改为附加进程,发布到 IIS 再来附加 dotnet 进程, 应用池名称都对上了, 打的断点还是…

.net core 网站 Linux 下部署 ( Docker )

参考:ASP.NET Core Docker部署 有改动。 一、docker 安装 见: https://blog.csdn.net/yenange/article/details/81703221 二、查找 dotnet 的镜像,拉取 https://hub.docker.com/ 下搜索 dotnet , 可以看到: 复制拉取…

大型网站HTTPS部署实践点拨

一、HTTPS简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的HTTP通道,简单讲是HTTP的安全版。HTTP协议传输的数据是未加密的明文,因此使用HTTP协议传输隐私信息非常不安全。为了保证隐私数据能加密传…

IIS10(WinServer2019自带)如何限制网站的流量带宽

网站多了,某个网站极大的下载带宽会挤压其它网站,导致其它网站访问困难。 所以,限制某个网站的带宽还是非常有必要的。 一、选中网站,点击右侧栏的“限制” 二、 弹出框中打上勾,并输入合适的数值。 实测&#xff…

大型网站架构之分布式消息队列(转)

以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。 本次分享大纲 消息队列概述消息队列应用场景消息中间件示例JMS消息服务常用消息队列参考(推荐&am…

在线更新dede程序后 网站出现错误 DedeCMS Error:Tag disabled:php more...!

dedecms出现DedeCMS Error:Tag disabled:php原因解决 ------------------------------------------------------- dede做了一个小网站,近两个月连续被 别人 非法侵入 90sec.php \mybak.php ; 于是想着更新下dede程序到最新的版本 ,谁知道在…

转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程

使用vue全家桶制作博客网站 前面的话 笔者在做一个完整的博客上线项目,包括前台、后台、后端接口和服务器配置。本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue、vue-router、vuex、vue SSR)开发的一套博客前台页…

关于网站恶意注册会员

2019独角兽企业重金招聘Python工程师标准>>> 网站发生恶意注册会员,有图形验证码 ,和短信验证码 但是还是有大量恶意注册: session 和 cookie都是可以随便伪造的。 验证码有打码平台。 短信验证有短信验证平台。 IP限制有虚拟拨号…

好的学习网站,设计类、网站类、编程类

http://t.cn/zHBCVrj好的学习网站,包括信息化办公、平面设计、室内设计、机械设计、影视动画、网页设计、会计课程 一步步教你利用Discuz X2.5建设论坛视频教程(174集)_第1页_51CTO下载专题_IT技术资料免费下载 http://down.51cto.com/zt/4187/1 主要教授图像与交…

熊猫学猿--第三竹建站发财

熊猫想有个自己的房子,熊猫好想发财,熊猫认认真真写学习笔记,让更多的熊猫跟着发财。那我们开始建站吧 首先我们需要下载一个开源的框架Thinkcmf,然后安装,成功运行之后今天的课程也就结束了。 下载地址:ht…

Win7怎么用IIS发布网站系统 部署项目

项目程序怎么发布到IIS上呢,如何用Win7上IIS部署网站呢。网站系统做好后,需要在服务器上发布部署。今天和朋友们说说怎样将网站项目在Win7的IIS上发布部署 ^_^ 工具: Windows 7 IIS 7 或以上版本 Visual Studio 2010 (或其他VS开发…

大型网站 技术架构演进与性能优化

2019独角兽企业重金招聘Python工程师标准>>> 分布式改造 无线时代下的架构演进 平台化演进:大中台小前台 应用程序优化:代码级优化 链路优化: 大秒系统 高可用-稳定性建设思路 高可用 -高可用体系化建设 转载于:https://my.oschina.net/swearyd7/blog/3017196

Beyond Compare文件对比工具中文网站来啦

Beyond Compare是一款专业级文件对比工具,使用它可以很方便地对比出两个文件夹或者文件的不同之处,相差的每一个字节用颜色加以表示,查看方便。软件内置文件浏览器,方便您对文件、文件夹、表格、注册表、FTP网站等之间的差异进行对…

IntelliJ IDEA 本地代码提交不到github网站上:github与本地不同步,虽然本地显示提交,但是github网站上看不到

IntelliJ IDEA使用教程 (总目录篇) 以前,使用github(git)结合 IntelliJ IDEA ,可以把自己本地的测试代码,使用github网站,添加到版本管理。 这样就可以很好的管理自己的测试代码。 …

织梦网站地图更新自由列表html,织梦发布文章后自动更新网站地图方法

百度或者谷歌站长工具里面,都有提交网站的功能,虽然是提交XML地图,不过HTML的网站地图仍然不能忽视它的重要性。织梦DedeCMS可以通过单页面或者插件的方法生成HTML的网站地图,系统也自带了HTML的地图,不过自带的地图只…

大流量网站的底层系统架构分析

动态应用,是相对于网站静态内容而言, 是指以c/c、php、Java、perl、.net等 服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通 常与数据库系统、缓存系统、分布式存储系统等密不可分。 大型动态应用…