妄谈大型网站技术架构

news/2024/5/8 14:39:52/文章来源:https://blog.csdn.net/Cloudox_/article/details/70225553

网络架构这个问题,我认为不是一个后台、架构师等等才需要考虑的问题,不管是前端也好,移动端也好,都应该多考虑考虑这个层面的问题,包括之后公司对你的要求也是这样的,不是说你会写业务会写功能就很ok,而是要求你有更大、更深的一些看法。

演化历程

先说一说每个做web的同学都应该了解一下的网站发展演化的历程。这个历程是怎么样的呢?

首先,在刀耕火种的原始时代,web是最简单的应用、数据库、文件全部都在一台服务器上,比如用php开发后台,用mysql做数据库,都在一个机器里面,这是最原始的阶段。

随着业务的发展,就会产生一些新的需求,比如性能的问题。最开始的一个解决手段是把服务和数据分离,直白地说就是分为应用服务器、文件服务器、数据库服务器之类的。你读的时候不同服务器之间是有数据的传输的。这时你的应用服务器可能CPU性能比较好,而数据库服务器可能IO比较快,它们就会有这个区别。

再往后就会使用缓存来改善性能,缓存分为本地缓存、分布式缓存等。然后是集群,解决高并发。还有主从数据库读写分离,如果你读操作比较多,可能会有很多从服务器提供给你去读,写的时候就保证只写一个主服务器,写之后有一个同步的策略,保证其他从服务器的数据一致性,这样读操作就可以分担给多个从服务器,主服务器压力就比较下。

然后是代理,CDN和反向代理,主要也是用来做缓存的。CDN叫内容分发网络,就是当你请求的时候从离你最近的服务器去请求,比如大公司可能部署了很多地区服务器,有的在武汉,有的在北京,我在武汉请求的时候,可能请求的是武汉的服务器,离它比较近,反应可能也比较快。反向代理是实现CDN的一种技术。

后来就开始使用NoSQL,比如MongoDB,之前也讲过,一种非结构化的数据库。

当你技术发展到一定程度之后,如果还是不能满足,那可以尝试把业务拆分,不要认为技术可以解决一切,有时候把业务拆分一下也可以解决你的问题。

误区

在考虑架构时有一些误区是我们要避免的。

一个是不要在一开始就盲目地追随大公司的技术方案,比如腾讯怎么做的呀,淘宝怎么做的呀。有时候小公司有小公司自身适合的方案,我们实验室也有一些适合实验室的,比如有一些框架大公司不用的但是因为比较快我们也会用,不要去老是想着大公司是怎么做的。

再就是不要为了技术而技术,当然对我们来说,很多时候就是想学习新技术,但在公司中真的有时候不一定最新的最火的就是最好的最适合你的,还是要根据需求来看。

最后,不要想着技术可以解决所有问题,有时候一个问题你要从技术层面来解决可能要费九牛二虎之力,但可能业务上稍微折中一点,换一种方式,也可以解决这个问题,而技术就可以省很大的力气,这样可能效果会更好。

指标

我们的标题是大型网站技术架构,那什么样的架构才是好的网站架构呢?我们从下面几个方面来考量它:

  • 性能。性能是我们平常说的最多的,最直白的来说就是响应速度。
  • 可用性。可用性是什么?比如说保证一周七天24小时都是可用的,我们经常听到一些大公司说他们的服务可用性达到几个9,比如五个9,就是99.999%的时间都是可用的,不会出现服务器挂了的情况。
  • 伸缩性。当量变大的时候,你可能需要扩展服务器,这时候你可以在不影响原有服务,不暂停服务的情况下去加,这样伸缩性就比较好, 如果你要新加一个服务器还要把服务给停掉,这时候就说明你的伸缩性很差。
  • 扩展性。扩展性就是在你需求增加了的时候,好不好扩展,如果代码设计的很差,那每次加了新需求要变动的就会很大。
  • 安全性。安全性很好理解,网络安全嘛。

性能

先说性能这个指标,性能可以分前端的性能优化和后台的性能优化。

前端比如说减少HTTP请求的次数;使用浏览器缓存;启用压缩;CSS放在页面最上面,JS放在最下面;减少Cookie;使用CDN缓存加速;反向代理。

后台的话比如多线程、把操作做成异步的、资源复用、优化数据结构、垃圾回收机制等等。

我们完成一个功能以后,后面你再去看一下,有很多地方都是可以优化的,这个时候才是帮你更上一层楼的地方。第一步肯定是先从一个什么都不会的人到能把功能搭出来,第二步就是能不能把你自己做过的功能的性能再优化一下,这就是你更出彩的一个亮点。

高可用性

高可用性有哪些指标呢?我们一个一个看。

首先是数据,数据要持久,可以持久的保存在这里,对用户来说是长时间可访问的,如果做了主从读写分离,或者集群、分布式,那对每个数据库服务器之间的数据是要有策略来保持它一致的,不能说已经写了刷新了主服务器的数据了,读从服务器的时候还是原来的数据,那这时候其实读到的数据就是错误的。

当做分布式、集群的时候,我会有很多台服务器,那这时候某一台服务器断电、挂掉,总之这一台服务器跪了,根据负载均衡,你之前有些请求会被分到这一台服务器上,那你就需要一种检测方式来检测所有的服务器当前是不是运转良好的,比如用心跳检测

要保障可用性很重要的一个点就是要做好测试,这个测试很多时候不是一批人在那点来点去,而是做成自动化测试,由机器来做这个事情。比如你做一轮测试操作,机器会自动生成对应的测试代码,那之后有新功能变化的时候,每一次都去跑一遍这个测试代码,它会自动去对你这个东西测试。

当我们发布新系统的时候,可以不直接就发布到正式服务器上去,而是先发布到一个验证服务器上去,在这个上面去看它运行有没有问题,跟我们用的测试库有点相似,如果出了问题就去处理,这就叫预发布验证

还有一个叫做灰度发布的,灰度就是说,你在增加新的功能的时候,不是一下子给所有的用户都可以访问到这个新功能,而是先进行小范围用户的测试,只开放给部分的用户,但是对于用户来说是没有感知的,给哪部分用户是随机的,或者采用什么策略来挑选,而用户之间不知道你比我多一个功能,通过这一小部分用户就可以检查这个功能是不是有什么问题,当确定没问题之后就可以全部开放出去了。

使用git、svn来做代码控制,方便你出了问题进行回滚。

高伸缩性

伸缩性,我们刚刚说了,就是你加服务器时可以不用停服务,做到很方便的扩容。比如我有很多个服务器,那我肯定是要做一个负载均衡的,什么叫负载均衡呢?我加服务器时为了缓解并发量等问题,那我就要保证有一种策略让它可以各个服务器得到的访问量是比较均衡的,这就是负载均衡。

均衡有很多种策略,比如轮询、加权轮询(就是轮询的时候着重偏向于一些服务器,比如它们的性能好一些)、随机、最少连接(将请求给当前连接数最少的服务器)、源地址散列。

负载均衡可以在很多方面去做,比如HTTP重定向负载均衡、DNS域名解析负载均衡、反向代理负载均衡、IP负载均衡、数据链路层负载均衡等等。

对于数据库来说,要满足伸缩性可以做主从读写分离,上面也说过。还有分库、表分片。主要要保证数据的完整性和一致性。

可扩展性

可扩展性是当我们加需求的时候保证代码比较好“加”,那很重要的一点就是你的耦合性要低,每个层面做每个层面的事情,否则你要改点东西就会很怕影响到别的问题。

数据库用NoSQL也会更方便扩展。

此外,可以利用开放平台建设生态圈。这里就不单单是指业务上要实现新的需求,扩展性不一定是我们自己做的,可能是别人来做,让我们的服务扩散的更大。直白地说就是腾讯、微博、微信、豆瓣等等都在提供的开放API和接口,让你去使用它们的服务。这其实都是在帮他们扩展他们的生态圈,但其实也是帮我们更快的获得一些流量,互惠互利。

实例

讲了这么多,我们来看一个实例——新浪微博。

新浪微博有一个点比较有意思,想要分享一下。在以前,比如一个明星发了微博,可能他的关注量很大,那他的所有关注者都要接收这一条消息,那就可能要给大量的用户推送,怎么做呢?因为量很大,所以一定会有问题的。微博以前的做法是“同步推”,当有新微博后,立马推送到所有关注者的消息列表中,这样就会很慢,甚至超出服务器处理能力。

后来微博就改成了“异步推拉结合”的方式,首先发了微博后,这个任务给到任务处理的消息队列就返回,发的服务就不管了,消息队列就给所有正在刷微博的关注了的用户推这个消息,没有在线的用户先不管他。没有在线的用户后来上线后,会刷新消息列表,会去拉取新的微博,这时候才从最近的代理服务器获取这个新的消息,这样就可以大大的缓解它需要实时推送的量。

还有一些访问量很大的热门微博,如果你全部都在主服务器做访问,那压力肯定很大,所以,我们刷到的微博基本都不是新浪微博主服务器的内容,都是从缓存服务器上得到的,比如武汉有一个缓存服务器,我们就是从这里得到的,都不是说真正意义上最新的数据。

微博会建很多数据中心,让用户就近访问,也用来做容灾备份。此外微博也做了很多别的工作,我们就不细讲了。

问题探讨

这里提一组开放性的问题供大家探讨,是关于微信抢红包的。我们都知道抢红包的金额是随机的,那这个随机数额怎么分?此外,什么时候分?对于特殊时间的高并发抢红包需求,怎么处理这个高并发?抢红包的数据又怎么存储?

参考书目:《大型网站技术架构:核心原理与案例分析》


版权所有:http://blog.csdn.net/cloudox_

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

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

相关文章

各种大型网站技术架构

引言近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图&#…

网站单点登录实现

单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用不同的单点登录实现方案来满足需求。我将以我所遇到的…

不知道这些网站还当什么程序员啊!

今天我就来总结一些程序员必备的网站,囊括开源项目、解决bug、技术分享、一线资源和自我提升的网站,希望能对广大程序猿有所帮助,赶紧给我收藏起来,下次刷不到了可别说我没提醒你。 我们首先来看一下国内比较流行的程序员社区&am…

关于前端spa项目seo优化改造方案(预渲染,ssr,nuxt比较)

目前的的前端项目为基于vuecli3搭建的spa项目,由于需求提出需要对首页,部分内容页面做seo优化,涉及到前端项目的框架和部分页面的改造。 目录 SEO简介关于收录关于链接 一、预渲染二、ssr服务端渲染三、nuxt SEO简介 SEO(Search…

spa应用seo优化方案(arm服务器)

最近公司需要对网页进行seo优化,奈何项目为vue的spa应用,没那么方便改造,所以记录一下优化经历 目录 一、非SSR项目进行seo优化有以下五种方案:二、文件编写三、arm环境中nodejs环境搭建四、arm环境下安装谷歌或火狐浏览器五、ng…

ASP.NET网站版本自动更新程序及代码[转]

1、自动更新程序主要负责从服务器中获取相应的更新文件,并且把这些文件下载到本地,替换现有的文件。达到修复Bug,更新功能的目的。用户手工点击更新按钮启动更新程序。已测试。2、环境VS2008,采用C#.NET和ASP.NET实现。3、服务器&…

WebApi托管静态网站(Owin 自托管静态网站)

我们在使用WebApi对外提供简单Api的时候,有时候往往需要同步提供一些简单的静态页面给用户,例如OAuth认证服务,提供一个授权界面等。如果我们单独架设网站,将会导致调用我们自己的接口出现跨域访问,出现IE8及以下浏览器…

那些网站够安全吗?

近日, CSDN 社区网站数据库泄露 ,近 600 万用户真实账号密码外泄。该事件横扫整个中文互联网,并且随后又爆出 多玩游戏 800 万用户资料被泄露 ,另有传言人人网、开心网、天涯社区、世纪佳缘、百合网等社区都有可能成为黑客下一个目…

5个在线的网站测试和验证工具

网站上线前的测试和验证是非常重要的一个环节,验证的意思是检查网站的页面和其他数据是否符合标准规范,设计规范的网站在各种浏览器上表现会一致而且良好。 为了帮助你执行这些测试和验证,今天我们列表了5个在线的工具。 Pingdom Tools Ping…

使用GitHub建立个人网站

使用GitHub建立个人网站 1 Git简介 2 为什么使用Github Pages 3 创建Github Pages 3.1 安装git工具. 3.2 两种pages模式 3.3 创建步骤 3.4 常用命令 4 使用Jekyll搭建博客 4.1 什么是jekyll 4.2 jekyll本地环境搭建 4.3 jekyll目录结构 4.4 Jekyll-Bootstrap创建博客 4.5 Je…

cnzz统计网站

cnzz是由国际著名风险投资商IDG投资的网络技术服务公司,是中国互联网目前最有影响力 CNZZ网站首页的免费流量统计技术服务提供商,专注于为互联网各类站点提供专业、权威、独立的第三方数据统计分析。同时,CNZZ拥有全球领先的互联网数据采集、…

网站防止攻击

1、什么是XSS XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击&#…

如何防止你的网站被攻击?

避免网站被攻击,其实是可以提前预防的,那么要如何预防呢? 1、关闭不必要的端口和服务 2、安装杀毒软件或者是防火墙来抵御攻击。 3、定期修改账户密码,尽量设置的复杂些,不要使用弱密码。 4、日常维护的时候要注意&…

网站前端开发--css篇

Ⅰ 全局:global.css 全局样式为全站公用,为页面样式基础,页面中必须包含。 结构:layout.css 页面结构类型复杂,并且公用类型较多时使用。多用在首页级页面和产品类页面中。 私有:style.css 独立页面所使用的…

scrapy爬取途牛网站旅游数据

描述:采取了scrapy框架对途牛网旅游数据进行了爬取,刚开始练手,所以只爬了四个字段用作测试,分别是景点名称、景点位置、景点开放时间、景点描述,爬取结果存的是json格式。 部分数据: 部分代码&#xf…

网站数据统计分析之一:日志收集原理及其实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计 和 腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascript的。本文将简要分析这种数据收集的原理&#…

WordPress建站后必做的几项优化

欢迎大家访问我的个人博客网站:风挽青个人博客 1、修改上传文件大小限制 wordpress上传文件一般都有限制,通常为2M,在一些情况下会不够用,所以自然是提升它的上传文件限制大小。 找到php.ini文件,然后修改其中的几个…

实现基于LNMP的电子商务网站

一、环境准备 yum安装mariadb、 mariadb-mysql、php-fpm、Nginx 并开启服务 二、 1、下载开源的购物商城软件包,解压到/data/test文件夹下,可自定义 unzip 2、修改用户和属组为nobody chown nobody . chgrp -R nobody . 三、 1、修改Nginx配…

SEOmoz开放Open Site Explorer工具API

SEOmoz是SEO行业知名站点,上周SEOmoz推出了外链分析工具Open Site Explorer。今天很高兴告诉大家,Open Site Explorer开始免费开放API了。 英文过得去的可以看原文的介绍:Launching the SEOmoz Free API and Enough Power to Build Open Site…

商机无限!在政府门户网站升级改造中掘金

作者: 王凤霞 2007-10-31 内容导航: 政府网站升级改造高潮已经全... 第1页: 政府网站升级改造高潮已经全面到来 第2页: 政府门户网站升级改造中商机无限 第3页: 政府门户网站升级改造的新特点 第4页: …