大型网站技术架构

news/2024/5/13 13:02:13/文章来源:https://blog.csdn.net/huaweitman/article/details/46387599

最近我在阅读 2 本关于大型网站架构的书:《大型网站技术架构——核心原理与案例分析》李智慧、《大型网站系统与 Java 中间件实践》曾宪杰。

  我期望从这些书中学习到大型网站是如何做架构的,这个过程会遇到什么问题。当看完这 2 本书后,我总结出两个大问题:

  1. 网站技术架构为什么会演进?换个说法就是为什么网站会变大?

  2. 演进的过程会遇到什么问题?或者说为了演进,会遇到什么问题?

  网站技术架构为什么会演进

  我个人总结出来我们的技术架构演进的两种驱动力,驱动着我们为什么演进网站的技术架构:

  1. 内在驱动力:我们期望把当前的业务做得更好,开发更多新业务

  2. 外在驱动力:用户量的上升、用户种类的多样化

  这两种驱动力不是独立的,更多时候是并行的。我想淘宝就是两种驱动力并行驱动的结果。

  演进的原因很简单。但是在什么时机我们就应该演进网站的技术架构了,以及如何演进?面对这些问题,说实话,我没有任何经验,再说现实中每家企业当时都面临的问题都不一样,所以,我很难从经验中总结出什么是演进的时机。

  但是我可以从另一个角度切入这个问题:研究网站内外结构,找到这些结构可能出现的问题点,知道或者预见到问题点了,你当然就知道应该怎么演进了。类似于你了解了 PC 机的结构,你也就知道什么时候要加内存了,什么时候要加硬盘了。

  那么我们先看看网站的外部结构:

  外部结构中,我们可以看由以下几个部分构成:

  U:代表用户群。当用户群变了,我们的网站如何演进?用户群的分析,我目前能知道的维度有:数量,种类,地理位置(区域)。

  N:代表网络环境。网络环境在每个地区都不同。你可以想像我们为什么需要 CDN。当我们期望每个区域的用户都能得到好的体验,我们的网站如何演进?

  S:代表安全。就是我们要安全到什么程度?这与网站当前所处阶段及你网站的性质有关。

  C:代表我们的网站。属于内部结构

  网站的内部结构:

  内部结构的组成:

  A:应用服务。

  D:数据服务

  总结下来就是我们在考虑网站是否应该演进了或者如何演进时,这些组成部分为我们提供了考虑问题的基准。

  那么我们为什么不一开始就把网站设计成“大型”的。李智慧在后记里写到:“不要企图去设计一个大型网站”,“原因是互联网发展运行有其自己的规律,短暂的互联网历史已经一再证明这种企图行不通”。还说了:“大型网站不是设计出来的,而是逐步演化出来的”。对于最后这句话,我需要提醒下:“不是设计出来的”并不代表“随意设计”。

  对于“大型网站的设计”,我个人的看法是现在我们的有“云”了,计算是可以买的,只要我们的设计能适应“云”,我是不是就可以一开始就设计大型网站了?

  演进的过程会遇到什么问题

  - 最初

  从一个小网站说起。一台服务器也就足够了。

  - 数据服务与应用服务分离

  越来越多的用户代表着越来越多的数据,一台服务器已经满足不了。我们将数据服务和应用服务分离,给应用服务器配置更好的 CPU,内存。而给数据服务器配置更好更大的硬盘。

  - 使用缓存

  因为 80% 的业务访问都集中在 20% 的数据上,如果我们能将这部分数据缓存下来,性能一下子就上来了。而缓存又分为两种:本地缓存和远程分布式缓存。具体使用哪种?还是两种都用,我目前不知道。

  这里有一个问题,书没有提到:应该缓存哪些数据?应该有一些原则的吧。

  - 使用服务器集群

  当这台服务器的处理能力达到上限时,它就会成为瓶颈。虽然你是可以通过购买更强大的硬件,但总会有上限。这时,我们就需要服务器的集群。这时,就必须加个新东西:负载均衡调度服务器。

  但是,使用服务器集群时,需要考虑一个问题:Session 的管理问题。Session 的管理有以下几种方式:

  Session Sticky:打个比方就是如果我们每次吃饭都要保证我们用的是自己的碗筷,而只要我们在一家饭店里存着我们的碗筷,只要我们每次去这家饭店吃饭就好了。

  这种方式的问题:

  1. 一台服务器重启,上面的 session 都没了

  2. 负载均衡器成了有状态的机器,要实现容灾会有麻烦

  Session 复制:就像我们在所有的饭店里都存一份自己的碗筷。不适合做大规模集群,适合机器不多的情况

  这种方案的问题:

  1. 应用服务器间带宽问题

  2. 大量用户在线时,占用内存过多

  基于 Cookie:类似于每次吃饭都把自己的碗筷带上

  这种方案的问题:

  1. Cookie 的长度限制

  2. 安全性

  3. 数据中心外部带宽的消耗

  4. 性能影响,服务器处理每次的请求的内容又多了

  Session 服务器:同样可以是集群的。这种方式适用于 session 数量及 web 服务器数量大的情况

  这种方案需要考虑的是:

  1. 保证 session 服务器的可用性

  2. 我们在写应用时需要做调整,我目前不知道应用服务器能否将这部分逻辑透明化

  - 数据库读写分离

  数据库的一部分读(未缓存、缓存过期)及所有的写操作都还需要经过数据库。当用户量达到一定量,数据库将会成为瓶颈。这边我们使用数据库提供的热备功能,将所有的读操作引入 slave 服务器。注意:读写分离解决的是读压力大的问题。

  因为数据库的读写分离了,所以,我们的应用程序也得做相应的变化。我们实现一个数据访问模块使上层写代码的人不知道读写分离的存在。这里,我很想知道如果我使用 ORM 模型时,如何实现读写的分离?

  数据库读写分离会遇到如下问题:

  1. 数据复制问题: 考虑时延、数据库的支持、复制条件支持。不要忘了,分机房后,这个更是问题。
  2. 应用对于数据源的路由问题

  - 使用反向代理和 CDN 加速网站响应

  使用 CDN 可以很好的解决不同的地区的访问速度问题,反向代理则在服务器机房中缓存用户资源:

  - 使用分布式文件系统

  - 数据库专库专用:数据垂直拆分。

  这样可以解决部分数据写的问题

  垂直拆分数据库时,会遇到的问题:

  1. 跨业务的事务
  2. 应用的配置项多了

  关于事务的问题,有两种办法:

  1. 使用分布式事务
  2. 去掉事务或不追求强事务

  - 某个业务的数据表的数据量或者更新量达到了单个数据库的瓶颈:数据水平拆分

  将同一个表的数据拆分到两个数据库中

  数据水平拆分会遇到的问题:

  1. SQL 的路由问题,需要知道某个 User 在哪个数据库上。
  2. 主键的策略会有不同。
  3. 查询时的性能问题,如分页问题

 

  • 使用搜索引擎:解决数据查询问题
  • 部分场景可使用 NoSQL 提高性能
  • 开发数据统一访问模块:解决上层应用开发的数据源问题

  - 业务拆分及应用拆分

  网站的业务日益复杂,建立一个独立的大型应用来完成这所有的业务变得不实际。从管理角度来,也不方便管理。然而,业务的拆分很难找到一种通用的模式,这是一个企业管理问题和技术问题的混合问题。同时和每个企业的具体情况有关。

  但是从这两本书来看,最终架构都走向服务化,也就是 SOA。而如何实现 SOA,是另一个很大的话题,不是本篇文章的范畴。

  我从程立 08 年的演讲中截个图来说明 SOA 后的架构大概是怎样的:

  - 非功能性问题

     – 安全性问题、监控问题

  – 发布问题:新的架构意味着新的发布方式

  – 分机房

 – 这两本书都没有说分机房的问题。我没有经验,可是也可以猜到如果要分机房了,所有上面的问题都可能要重新考虑。

  – 组织架构的变化 

  我们的技术架构的变化,势必会引起我们的组织架构的变化,反之亦然。

  这部分看似不应该由我们来管,但是,我觉得,我们技术人员也要参与一部分的组织架构的设计。举个例子,组织架构的设计会涉及绩效,而绩效有时很像一个国家的法律。如果一个国家的法律不健全,会发生什么?你懂的。

  同时,我们还必须考虑人员对新架构的学习成本。

  这部分我目前在看相关的书籍,还没有一个系统的认识。

  总结:

  - 关于演进的顺序

  在现实中,技术架构的演进不一定就是按文章从头到尾这样列下来的,所以,要视具体情况来下决定。

  - 关于传统演进与现代有“云”环境下的演进

  很可惜,只有李智慧谈到云,而且只点了一下——“现在越来越多人的网站从建立之初就是搭建在大型网站提供的云计算服务基础之上,所需的一切资源:计算、存储、网络都可以按需购买线性伸缩,不需要自己一点一点地拼凑各种资源,综合使用各种技术方案逐步去完善自己的网站架构”。

  因为我用“云”的时间也不长,还不能总结出有云架构与传统的无云架构在演进的时候有什么不同。

  说回传统的架构演进,我自己总结和思考的结果是:

  在对网站进行架构调整时,可以从两大的维度考虑:数据服务和应用服务。而这个调整的过程中,需要分清当前哪个点是瓶颈,需要知道哪个点优化的优先级最高。同时,最重要的一点:我们虽然作为技术人员,也应该去学习业务知识,这样我们在考虑问题时分清哪些是业务问题,哪些是技术问题,分清后才能对症下药。你要知道有些问题用技术手段并不比用业务手段更有效。12306 的分时卖票就是一个典型例子。

  以上总结及思考有不对,欢迎斧正。非常感谢。

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

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

相关文章

云服务器 ECS 搭建WordPress网站:安装 WordPress

云服务器 ECS 搭建WordPress网站:安装 WordPress 安装 WordPress请先下载最新版的 WordPress,网址: https://cn.wordpress.org/ 。也可直接到阿里云市场选择WordPress镜像完成一键部署 操作步骤 1.将下载的安装包解压缩。 2.打开 Xshell&…

我的网站搭建 (第九天) 博客统计排行

2019独角兽企业重金招聘Python工程师标准>>> 在阅读计数功能之后,就可以可根据每篇博客的阅读量来对博客进行热门统计排行了,如阅读周榜,月榜,总榜。基本上只要实现其中一个,其他两个也能照着做出来&#x…

网站服务器去掉小尾巴,新浪微博来自360浏览器怎么取消 更改网页版小尾巴方法...

当大家使用电脑登录新浪微博发微博时,会发现微博下方会有来自360安全浏览器的文字,看上去很坑爹有木有!其实这也算是微博的小尾巴,去掉的方法并不是在微博里设置,而是在大家使用360浏览器上进行更改,小编将…

VS“新建网站”与“新建Asp.Net Web 应用程序”的区别

今天新建网站的时候,发现,原来新建网站有两种方法。 1.原来一直用的是直接新建---网站 然后添加后解决方案的项目名称是路径的名称 2.还有一种是新建--项目,然后选web--新建asp.net.web 项目名称是: 新建网站与新建Asp.Net Web 应…

怎样拥有一个网站?从“域名注册”到“网站成功运行”全程概况总结!

根据个人多年建站经验,总结出从“域名注册”到“网站成功运行”的建站说明,供广大朋友学习,希望大家少走弯路! 大概步骤如下: 1.注册域名; 2.开通网站主机(空间); 3.…

VS发布网站时,报错提示:“未能将文件xxx复制到xxx,未能找到文件xx”三种解决方案!

发布网站时候大家可能会遇到这样的情况,就是报错提示说:“未能将文件xxx复制到xxx,未能找到文件xx”,这个问题一般来说有三种解决方案,个人倾向第三种,如图: 解决方案如下: 方案一、…

ASP.NET网站页面加载及运行效率等多方面实战优化

网站加载内容较多,图片、Flash等文件较大、请求次数较多、页面不具有缓存性等等都会影响网站的页面加载速度和运行效率。之前做过很多网站,但是基本上都没有进行过优化,比如运用缓存等技术。最近有一个网站加载内容比较多,例如图片…

2015年个人收获-成果、经验分享(项目经理、集成资质、网站开发、服务器等)

2015年,对我来说是忙碌的一年,是幸运的一年,是收获的一年。 一、坚持写CSDN博客,将技术和遇到的问题分享给大家! 坚持写博客其目的主要有两个,一是为了自己积累知识和锻炼,而是为了和大家分享…

浏览器模式调整-网站显示问题根本解决方案(Winform和CMD程序解决)

相信大家上一些网站经常遇到网站错乱和控件显示不全的问题,那是因为很多网站对浏览器的兼容性比较差,特别是一些网上银行(中、农、工、商银行等)、公共服务网站(社保、公积金等政府网站)等,虽然…

仿“唯品会”钓鱼网站分析

引言: 昨天晚上,一个朋友找我说自己被骗了,了解到原来是打开了钓鱼网站输入了自己信息和银行卡信息,虽然到最后一步发现了猫腻,但是信息已经泄露出去了,据说是唯品会的卖家给她发的信息,说之前买…

asp.net政府企业网站前台+后台源码

最近几年比较流行这样的政府网站,一般以红色和蓝色为主,这里先展示红色的,包括前台和后台源码,后台可以增删改查前台发布的文章,管理用户,管理幻灯片,设置信息和超级链接等等,一般的…

CDN加速会影响网站排名吗?

网络环境复杂多变,为了满足业务快速发展的需要,许多企业会使用蔚可云CDN给网站、app加速,加快网站访问速度,提升用户体验。由于CDN会将网站内容分发至各个边缘节点,还会隐藏源站IP,CDN加速会不会影响网站排…

使用ThinkPHP框架快速搭建网站

使用ThinkPHP框架快速搭建网站这一周一直忙于做实验室的网站,基本功能算是完成了。比较有收获的是大概了解了ThinkPHP框架。写一些东西留作纪念吧。如果对于同样是Web方面新手的你有一丝丝帮助,那就更好了挖。 以前用PHP做过一个很蹩脚的网站&#xff0c…

如何一个人打造日PV百万的网站架构——SDCC 2013讲师曹力专访

编者按:CSDN年度技术盛宴SDCC 2013中国软件开发者大会将于2013年8月30-31日在北京新云南皇冠假日酒店举行。软件研发频道将采访一些与会讲师,谈谈他们将在会上分享的内容(报名参会)。 本期我们采访的讲师是糗事百科前联合创始人、…

电商网站,性能优化

电商网站,性能优化 问题: 1)当大型网站系统>10万人 一个小时内,会跟数据库交互10万次(国内有京东,淘宝),这就会出现数据库瓶颈,每个数据库最大连接数(socket&#xf…

java下的大型网站对图片的下载,存放,及压缩管理

大型网站对图片的下载,存放,及压缩管理 构建保存图片的路径: 1 String pathdir "/images/product/" productTypeId "/" productId "/prototype";//构建文件保存的目录 为什么要有那么多个目录,因…

网站制作的切图技巧

一般的网站制作步骤大体上为:设计效果图–》切图制作静态html模板–》嵌套至CMS,其中,切图虽然是很简单的一个步骤,但其中也有很多技巧,以下是我个人总结出来的几点。 总体上,把握一个原则,能用…

计算机组成原理与jsp总分,基于JSP的计算机组成原理教学网站的设计与开发

随着互联网技术不断的发展和成熟,开展远程教学,开发整体教学系统成为计算机发展的一个全新课题。这种方式打破了时间、空间的限制,有效地实现了教学资源和教学方法的共享、教学过程的交互性、教学内容快速的更新、教学媒体的充分利用。介绍了该教学系统的设计意图及工作原理,论…

Centos6.0下安装mono 4.0和Jexus 5.6.4,并配置运行网站

很多朋友想要在Linux下部署asp.net的网站,但是又苦于不懂配置环境。今天,我在这里给大家讲解一下如何在Centos 7.0下安装最新版的mono 4.0.0 Jexus 5.6.4,并配置运行网站。 首先用ssh连接linux机器,登录root账号。在这里直接用我…

oracle10g 是rac,dbca建库-RAC安装完成 - Oracle10.2.0.4-RAC两节点集群环境搭建_数据库技术_Linux公社-Linux系统门户网站...

Oracle用户下,dbca启动界面,来创建数据库实例:选择节点:配置ORACLE_SID选择ASM存储(ASM磁盘之前已经创建)换成pfile这里提示没有监听,选Yes,会自动配置监听/oracle/product/10.2.0/crs_1/log/dbcc1/crsd/crsd.log日志信…