[服务器架构及memcached部署中一致性Hash的应用]

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

©2005Autodesk1网站服务器架构&分布式存储memcached提纲1.硬件架构服务器划分带宽的计算2.网站架构的演变过程3.软件架构Web服务器集群负载均衡分布式缓存CDN内容分发系统数据库集群NoSql-key-value存储2服务器划分对于访问量大的网站而言,将网站的各个部分拆分分别部署到不同服务器上是很有必要的。例如将图片和web站点分开一般而言,在网站的整个服务器部署上分为如下几种类型:文件服务器:一般存储系统的相关图片和文件,给各个子系统提供统一的文件调用代理服务器:一般使用linux+Nginx作为反向代理web服务器:.net中最常用的Web服务器IIS,Mono中一般使用Nginx应用服务器:负责系统中各个业务逻辑的提供,比如用户中心,结算中心,支付中心等缓存服务器:提供MemCached缓存服务数据库服务器:负责网站数据的提供,一般为Sqlserver,mysql,oracle等3带宽的计算假设网站每天要承受100万pv的访问量,计算带宽要涉及到两个指标(峰值流量和页面平均大小),带宽单位为bps(bit/s)。1、假设峰值流量为平均流量的5倍;2、假设每次访问的平均页面大小为100KB左右。1B=8b---------------------1B/s=8b/s(1Bps=8bps)1KB=1024B-------------1KB/s=1024B/s1MB=1024KB------------1Mps=1024KB/s100万pv访问量一天平均分布,折合每秒大约访问12次,页面大小为字节(Byte),总共访问页面大小就是12*100KB=1200KB,1Byte=8bit,则1200KB=9600Kb,9600Kb/1024大约9Mb/s(9Mbps),我们网站在峰值流量时一定要保持正常访问,则真实带宽应该在9M*5=45Mbps左右。4网站架构的演变过程之一5公司刚刚起步,业务量不大,往往可能在某个虚拟主机空间商租用一个虚拟主机和一个数据库就搭建了一个最基本的网站网站架构的演变过程之二增加缓存随着业务量增加,用户的访问越来越多,网站经常性的打不开,慢,甚至出现数据库链接达到最大限制数,这个时候需要针对网站做一些优化策略:•减少Http请求,压缩css,js,图片的大小将MicrosoftAjaxMinifier集成到VS2010对JS,CSS进行编译时压缩•增加页面缓存和增加数据缓存处理•cnblogs上的缓存全解析•自购服务器进行IDC托管自购服务器能够提升硬件的档次以及带宽可以自由控制,一般都是独享带宽,相比共享带宽来说能够支撑更多的访问量6网站架构的演变过程之三增加web服务器当系统访问量的再度增加,webserver机器的压力在高峰会上升到比较高,这个时候开始考虑增加一台WebServer,但是增加一台WebServer的时候意味着要在两台的服务器上分别建立相同的站点,那么就会出现如下问题:如何让访问分配到这两台机器上?Nginx如何保持状态信息的同步,例如用户session等?如何保持数据缓存信息的同步?如何让上传文件这些类似的功能继续正常?7网站架构的演变过程之四分库,分表,分布式缓存通过增加web服务器享受了一段快速访问的幸福后,发现系统又开始变慢了,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢,这下怎么办呢?分库分表Memcache,Redis分布式缓存8垂直分区userblogApp通用框架IdeasRealizedwithADN水平分区user33%user33%App通用框架user34%blogblogblog水平分区程序改进水平分区VS垂直分区水平垂直存储依赖可跨越DB可跨越物理机器可跨越表空间,不同的物理属性不能跨DB存储存储方式分布式集中式扩展性ScaleOut(横向扩展,增加便宜设备)ScaleUp(升级设备)可用性无单点存在单点(DB数据本身)价格低廉适中,甚至昂贵应用场景web2.0网站多数传统应用架构演变过程之五Web园或增加更多WebServer•在做完分库分表这些工作后,数据库上的压力已经降到比较低了,这个时候可能到了下一个瓶颈,查看windows的性能计数器发现有大量的阻塞请求,于是可以做Web园或者添加一些webserver服务器。在这个添加webserver服务器的过程,有可能会出现如下几个问题:•一台Nginx服务器的软负载已经无法承担巨大的web访问量了,可以用硬件负载解决F5或应用从逻辑上做一定的分类,然后分散到不同的软负载集群中•原有的一些状态信息同步、文件共享等方案可能会出现瓶颈,需要进行改进,也许这个时候会根据情况编写符合网站业务需求的分布式文件系统等;•在做完这些工作后,开始进入一个看似完美的无限伸缩的时代,当网站流量增加时,应对的解决方案就是不断的添加webserver。架构演变之六读写分离和廉价存储方案通过增加web服务器享受了一段快速访问的幸福后,发现系统又开始变慢了,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢,这下怎么办呢,读写分离,订阅和发布8廉价存储方案Nosql•NoSQL=NotOnlySQL指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。•NoSql数据库大量应用于微博系统等事务性不强的系统•BigTable•MongoDB•架构演变之七进入大型分布式应用时代和廉价服务器群梦想时代•经过上面这个漫长而痛苦的过程,终于再度迎来了完美的时代,不断的增加webserver就可以支撑越来越高的访问量了,但是原来部署在webserver上的那个web应用已经非常庞大了,当多个团队都开始对其进行改动时,相当的不方便,复用性也相当糟糕,基本上每个团队都做了或多或少重复的事情,而且部署和维护也是相当的麻烦,因为庞大的应用包在N台机器上复制、启动都需要耗费不少的时间,出问题的时候也不是很好查,另外一个更糟糕的状况是很有可能会出现某个应用上的bug就导致了全站都不可用,还有其他的像调优不好操作(因为机器上部署的应用什么都要做,根本就无法进行针对性的调优)等因素,根据这样的分析,开始痛下决心,将系统根据职责进行拆分,于是一个大型的分布式应用就诞生了,通常,这个步骤需要耗费相当长的时间,因为会碰到很多的挑战:1、拆成分布式后需要提供一个高性能、稳定的通信框架,并且需要支持多种不同的通信和远程调用方式;2、将一个庞大的应用拆分需要耗费很长的时间,需要进行业务的整理和系统依赖关系的控制等;3、如何运维(依赖管理、运行状况管理、错误追踪、调优、监控和报警等)好这个庞大的分布式应用。经过这一步,差不多系统的架构进入相对稳定的阶段,同时也能开始采用大量的廉价机器来支撑着巨大的访问量和数据量,结合这套架构以及这么多次演变过程吸取的经验来采用其他各种各样的方法来支撑着越来越高的访问量。©2005Autodesk17IdeasRealizedwithADNNginx负载均衡CDN内容分发系统Memcached部署技巧Nginx是什么?•Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过四年多了。Igor将源代码以类BSD许可证的形式发布。自Nginx发布四年来,Nginx已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。新近发现Nginx技术在国内日趋火热,越来越多的网站开始部署Nginx。squid•Nginx中文WikiIdeasRealizedwithADNNginx的安装•Windows下的实践:•••Linux下才是真正的利器•张晏的技术博客IdeasRealizedwithADNNginx在Ubuntu下的安装配置•1.利用命令sudoapt-getinstallnginxUbuntu安装之后的文件结构大致为:所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下程序文件在/usr/sbin/nginx日志放在了/var/log/nginx中并已经在/etc/init.d/下创建了启动脚本nginx默认的虚拟主机的目录设置在了/var/(有的版本默认的虚拟主机的目录设置在了/var/请参考/etc/nginx/sites-available里的配置)•2.启动nginxsudo/etc/init.d/nginxstart•然后就可以访问了,,一切正常!如果不能访问,先不要继续,看看是什么原因,解决之后再继续。(安装完后如出现403错误,那可能是nginx配置文件里的网站路径不正确)Nginx在Ubuntu下的安装•3.配置Nginx.conf文件实现负载均衡•Vim/etc/nginx/nginx.conf打开配置文件,在http{}中配置如下信息:•upstreamtestsite{server127.0.0.1:9090down;server127.0.0.1:8080weight=2;server127.0.0.1:6060;weight=1;server127.0.0.1:7070backup;•}•server{listen9988;server_name127.0.0.1;Nginx在Ubuntu下的安装配置•location/•{•include/usr/local/nginx/conf/proxy.conf;proxy_pass•}•}•配置文件正确性验证•Sudo/usr/local/nginx/sbin/nginx-t如果屏幕显示以下两行信息,说明配置文件正确:theconfigurationfile/usr/local/webserver/nginx/conf/nginx.confsyntaxisoktheconfigurationfile/usr/local/webserver/nginx/conf/nginx.confwastestedsuccessfully•配置完毕以后执行sudo/etc/init.d/nginx-sreload(force_reload)进行nginx的平滑重启使配置生效Nginx在Ubuntu下的安装配置•这样,nginx就会在启动之后开始侦听本地IP(127.0.0.1)的9988端口请求,当用户访问时nginx会将其请求转向到testsite中所指定的两个iis站点,并将执行的结果转发给客户端。我们刷新两次会看到第一次返回的是站点1的页面,那么第二次就会是站点2的页面,这样就达到了负责均衡的效果。•实现多台服务器之间状态共享和数据共享•1、使用分布式缓存,不需将所有状态存入缓存服务器•2、ip_hash•4、upstream_hashCDN内容分发网络•CD

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功