杨建:网站加速--系统架构篇

news/2024/5/9 19:24:26/文章来源:https://blog.csdn.net/lcj8/article/details/3987581

 --提升性能的同时为你节约10倍以上成本
From: http://blog.sina.com.cn/iyangjian

一,系统部署(高并发,可扩展)
二,负载均衡LVS(高可用,低成本)
三,IDC分布,DNS解析(快速)
-----------------------------------------------------------------------------------------

一,系统部署(高并发,可扩展)

本来想画在手稿上然后扫描上去的,貌似方法太土,在朋友的帮助下费了n个小时用Visio画了个,感觉很好看 ^-^ 。这一篇将主要围绕这个图来讲述。



首先从数据源说起,所谓狡兔三窟,我们数据源也是按三路设计,以保证IDC内部和不同IDC之间实现灾备。源头转发机A,B,C拥有往集群中任何一台服务器同步数据的权限,所以他们三个有一个活着,数据就可以同步更新,而且可以自动切换。从源头转发机到其他各IDC的数据都是双路的,然后每个IDC的前两台服务器具备转发功能,往IDC内部其他服务器分发数据,同一IDC内部的主备转发机可以自动切换。这样就实现了数据同步更新的高可用性。

介绍下这个集群里的角色,备机A来自行情系统,兼任源头转发的异地备份。系统内的另外两个备机属于轻负荷服务器,80端口空出来,必要时候只要一启动,就会立即自动加入到LVS后面服役。除了A以外所有具备转发功能的机器同时也是集群内的普通成员,需要提访问供服务的。各IDC的LVS本身也是有主备的,可以实现自动切换。

整个系统增减服务器非常方便,用户根本感觉不到,备机的启用更快,也就3~5秒,具备很好的扩展性。

我们的数据从源头上就是使用我编写的myzip压缩好了的,后缀名用"*.mz" ,比如 a.js.mz ,一直到用户的浏览器端才解压。数据传输量小,速度快。源头转发机上同时运行一个checkchange的程序,确保内容实际更新过的文件才往其他IDC转发,这样能有效的减少传输文件数量,以达到更快的更新速度。

另外,跨IDC系统部署,很重要的一点是,内网连通,路由选择,这影响数据传输速度的关键。北京的各机房间一般都有比较好的专线连通,只需要把路由打通就ok了。跨IDC的,一般都使用vpn来做内网传输,有条件的使用专线,这个比较昂贵,省着点用。另外跨网通,电信,和移动机房的一般都从双线机房路由,或者说,从到不同信息服务商连通性都比较好的机房路由。总之跨IDC数据传输,要做到各IDC之间的传输速度心中有数。

最后,请稍微注意下系统的安全性,包括数据传输的安全性,和网络安全性,避免遭受攻击。


二,负载均衡LVS(高可用,低成本)

LVS 有三种模式,NAT,TUN,DR,其中DR是最高效的,下面我将主要介绍DR的应用。更多LVS资料参见 LVS项目中文文档 目前我们公司的LVS应用规模在国内应该至少可以排前三,更多技术细节请咨询我们的LVS大牛xiaodong2.

下面是DR单臂模式的系统结构图:


下面引用一下官网的介绍: 在VS/DR 中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。

我在财经时要使用LVS的初衷只是为了解决负载的均衡性,因为DNA轮询各前端服务器上连接数有不小的差距,那时候我们老大阿图对于这个项目给予了很大支持,还亲自组织过几次会议。话说恰巧yingyuan做了个新技术讲座,我从中发现LVS/DR后想让它帮忙修改负载均衡算法,后来部署上以后发现,不用修改,均衡的很,再后来xiaodong2接手后对性能和稳定性做了很大的提升,我们使用两年来没出过问题。另外lvs还额外带来了两个好处,高可用性,和可伸缩性。是可以随时把lvs后面的一台服务器下掉,扛走,用户是不知道的。服务器坏了也不用着急修,也不用修改DNS(另外DNS的层层cache影响不是一时半会就能消除的)。新增加一台服务器也是同理,最绝的就是备机的启用可以用秒来衡量(这些F5都能实现,代价不菲)。财经应用对公司内lvs的项目推动有不可磨灭的贡献 ,xiaodong2也这么说地 :) 。


三,IDC分布,DNS解析(快速)


这里思路跟CDN是一致的,尽量减少主干线路上的拥塞,让用户就近访问,以达到最快的数据传输速率。
我们要做的就是了解自己应用的用户分布情况,然后再结合现有资源以及各地网络出口特征,信息服务商的特征来部署我们的服务。

1,各省市网络用户分布依次排名(数据来自cnnic2007年的统计):
广东 13.4%
山东 8.2%
江苏 7.5
浙江
四川
河北
河南
福建
上海
辽宁
北京
湖南
山西
黑龙江

2,运营商的网络分布特点:
网通:以北京为超核心的放射性结构。山东应该是网通最大的用户,但它的网络存在瓶颈,会有丢包,造成外面访问它慢,它访问别人也慢。对此我们没有必要浪费珍贵的主干带宽,在济南布个点,同步一份数据过去就,让他们在自己省内访问,访问速度会立刻提升n倍。

电信:以几大省市为核心的环状结构,省市内部也是大环套小环。其中以广东用户最多,必须要部点的地方。记得很久以前我拿到一份数据说,上海人访问本IDC的数据,不如访问广东的速度快,不晓得现在是否还存在这种情况。电信有7个主要核心,分布在广州,上海,江苏,西安,成都,武汉,北京。

教育网:以国内主要的八个结点为核心。这八个结点分布在北京,西安,成都,广州,武汉,南京,上海,和沈阳。

3,DNS解析时候需要权衡的:
现在了解了这些信息,那我们开始讨论如何部署我们的服务。要考虑两个问题:一,要部署在哪几个IDC。二,每个IDC部署的服务器数量。三,DNS如何按区域划片。

要部署在哪几个IDC ?
其实这里还涉及到规模化应用的好处,一个小应用就部署了N多个IDC显然不划算。如果我的应用上了规模,我可以在每个省都部署上,那样用户体验将非常好,而且规模化以后会有专业人员对应用进行优化。所以公司里有动态池,和静态池这样的公用平台是好事(也许将来还会有我的js池)。如果我们的服务还没有上升到公司级别的规模,那就得考虑下取舍。

网通:东北三省,可以在沈阳和哈尔滨选择一个部署,有条件可以都部署。沈阳到北京的速率比哈尔滨到北京的速率快一倍,而哈尔滨到沈阳的速率,还不如到北京的快。北京,如果只让我在网通部署一个点的话,毫无疑问我会选择北京,其他所有结点到它的速率都比较快,但是北京的带宽比较昂贵。天津,这个点重要性仅次于北京,可以辐射河北,河南,江苏,离北京也比较近,价钱便宜。太原,可以辐射到西北一带。山东,前面已经说过,最好要部署的。

电信:那七个核心结点上部署了,速度就有保证。具体覆盖范围。广州覆盖周边几省,上海覆盖本地,江浙一带。武汉覆盖华中一带,西安可以覆盖西北5省,成都覆盖西南5省。

每个IDC部署的服务器数量?
这要根据具体应用来决定。比如财经用户网通,电信比例:3:4 而体育是 1:2 。教育网用户一般占1/30左右。这里还不能单纯考虑用户分布,还要考虑IDC内部灾备和IDC间灾备,是要有个取舍的。拿咱们的某个具体项目来说,教育网,够不上一台服务器,但是不得不部,因为它访问外界实在太慢了,我就住在学校里,也为了方便自己。我把北京作为主要结点部署了3台,天津,其实一台就够了,山东一台有点多。但是考虑到北京IDC一旦倒了,实力相当的IDC可以灾备,同时考虑到,天津,和山东只有一台,idc内部,都无法实现灾自动切换。所以,我选择天津两台,山东不部署,以性能换安全。

DNS如何按区域划片?
原则,就近分片,以达到最快传输速率。其次,考虑到各IDC间快速切换比较容易,DNS解析文件要写的简洁一些。另外,DNS解析有有个缺陷,每个单独域名里写在最前面的那个ip,它被轮询到的概率要比同组的服务器高10%,而且随着同组服务器的增多,这个差距会变大。所以最解析时候,每个IDC我都把硬件性能最好的服务器ip放在最前面。

另外:
做系统架构不提数据库,有点过不去。这块问题可以请教我们的DBA大牛zongwen同学。数据库是我将来一年的学习重点,争取一年后在DB方面能达到我们DBA六层功力。

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

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

相关文章

杨建:网站加速--实例分析篇

--提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian一,自选股分析二,NBA比赛分析三,播客分析四,开心网分析--------------------------------------------------------------------------------------…

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么…

使用ImageMagick为你的网站减重

Images as a percentage of page weight for the Alexa top 10 global web sites 图片在网站所占的比重越来越重。更好的优化图片可以提高网站速度。减少宽带流量。 1.对用户上传图片进行缩放 对于用户自己上传的图片不能简单的 用css限制大小,因为这样每次加载图…

使用ImageMagick为你的网站减重(2)

以前写过一篇博客《使用ImageMagick为你的网站减重》,涉及到的手段是: 在服务器端把图片缩放到合适的尺寸,避免在前端用css缩放图片。用imagemagick的strip功能移出图片里的EXIF等多余信息。压缩JPEG图片的质量,减少图片体积。 Lo…

大型网站系统架构演化之路

前言 一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技…

丑事网是史上SEO最差的网站

做过网站的人一定都知道SEO,即搜索引擎最佳化(Search Engine Optimization),又称为搜索引擎优化,其主要工作是通过了解各类搜索引擎如何抓取互联网页面、如何进行索引以及如何确定其对某一特定关键词的搜索结果排名等技…

大型电子商务网站架构之--分布式可扩展数据库架构

近几年分布式成为热门的话题,也成为大型系统必备良药,而在数据库方面应用更加广泛。通过采用普通廉价的设备构建出高可用性和高扩展的集群目的。从而摆脱了大型设备的依赖,一个好的分布式数据库架构可以比较方便达到高可用性有可以达到向外扩…

网站的高性能架构

网站性能是客观的指标,可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时间。如下列出了系统常用的操作响应时间表. 操作 响应时…

用VSTS进行网站压力测试

VSTS提供了一个丰富、强大的工具平台,融合了软件开发领域的各个角色,涵盖软件开发生命周期的各个阶段,包括设计,开发,测试,管理,而这一整套构件的融会贯通,让它可以有效地改善软件开…

小白建站教程 腾讯云快速建站教程

相信不少的小伙伴都希望能有一个自己的网站,但是对于不会编程或者只有一点点技术的人来说自己搭建服务器、弄环境、写程序有点太困难了,有没有一种能让小白也能快速搭建自己网站的方法呢?今天就来给大家分享一下如何在腾讯云(阿里…

网站是用mssql好还是mysql_mssql和mysql哪个好

MySQL和MSSQL各有各的优缺点,要根据项目实际情况来选择。MySQL是免费的数据库适合应用在小中型网站上,MSSQL是收费的商用数据库一般用在大型网站上。 MySQL与MSSQL哪个好 MySQL可以说是MSSQL的简化版本。理念相同,但MySQL的实现比MSSQL的需求…

搭载Ubuntu18.04的服务器的ASP.Net Core的搭建以及使用VS2017上传网站的学习

要在远程服务器Ubuntu18.04上运行ASP.Net,第一步需要搭建运行环境 主要参考:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial#ubuntu 首先安装源 wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-p…

网站遇到Bytespider爬虫该怎么办?

早上打开网站,发现超级卡,以为是网速原因,调试了路由器无济于事,都说重启大法好,重启那就重启web服务试试,可惜依旧没用,不过重启的时候发现CPU彪到99,我还以为是被谁Doos了。 发现…

如何防止网站被侵入,如何防止网站被挂马,如何防止网站被入侵?

一:挂马预防措施: 1、建议用户通过ftp来上传、维护网页,尽量不安装asp的上传程序。 2、对asp上传程序的调用一定要进行身份认证,并只允许信任的人使用上传程序。这其中包括各种新闻发布、商城及论坛程 序,只要可以上传…

android学习笔记15--------------获取网站html

转载注明出处:袁方的技术博客 http://blog.csdn.net/yf210yfimport java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL;import junit.f…

电脑网站中有哪些有趣却不出众的小众网站呢

我们在使用电脑的时候会发现不少有趣的电脑网站,这些网站的名声并不出众,但是这些小众的网站却有很多有趣的故事和图片。我们在这些小众的网站上还可以看到一些世界上发生的一些有趣的、奇异的小故事,还有一张张美丽的图片在网站上展示出来。…

给网站添加“开放搜索描述“以适配浏览器的“站点搜索“

背景 要在一个常用网站搜索,想必大部分人会这样: 访问这个网站的的主页或者任意一个带搜索框的页面聚焦输入框,输入关键词并Enter 而如果一个网站适配了浏览器的"站点搜索"(site search)特性,…

Android开发时,那些相见恨晚的工具或网站!

本文来我在知乎话题Android开发时你遇到过什么相见恨晚的工具或网站?下的回答! 在实际Android开发过程确实会有很多相见恨晚的工具或网站出现,下面是我自己的一些分享。 1、源码网站 https://github.com/googlesamples Android系统每次推出一…

用织梦创建本地网站通过Tomcat成功部署到Linux服务器详细教程(Ubuntu16.04)

用织梦创建本地网站成功部署到Linux服务器全过程详细教程(Ubuntu16.04) 织梦创建本地网站成功部署到Linux服务器详细教程(Ubuntu16.04) 本教程旨在帮助那些建网站小白如何从头搭建起本地网站并且最终上传到自己或公司的服务器上…

显示网站Alexa世界排名的代码

作者:佚名 转贴自: 苹果理想3dapple Alexa世界排名众多站长已经不会陌生了,今年将它炒的非常厉害,众多网站不论是拉广告还是做宣传都会以Alexa世界排名作为依据。因此,在这里西部E网(weste.net&#xf…