Chinaunix

标题: 从前端走向幕后:如何构建大型高并发网站架构?(获奖名单已公布-2014-9-12) [打印本页]

作者: action08    时间: 2014-08-05 17:57
本帖最后由 action08 于 2014-08-11 22:26 编辑

1.我们常用的系统架构有三种,第一种是linux+Apache+PHP+MySQL、第二种是Linux+Apache+Java(WebSphere)+Oracle、第三种是Windows Server+IIS+C#/ASP.NET+数据库,请举例说明这三种架构对应的网站有哪些?
目前对lamp相对熟悉一下,也有很多中小型网站,例如discuz, wordpress,开源的太多了
有很多大型商业用户,选择java+oracle平台,了解有限。呵呵



2.或许在平时,我们感觉不到数据库的死锁问题,但是当成千上万人同时访问网站,在高并发的情况下发生的概率会非常高,因此很多网站在数据库集群和高并发方面下足了功夫。而目前主流的数据库有MySQL和Oracle,如何利用数据库服务器在主从服务器之间保持同步,从而分散数据库压力?
先纠正一下,如果是在说死锁,当数据库系统有业务导致死锁出现,那么成千上万人的情况下,马上就会瘫掉——旧业务死锁循环,新业务还海量的上来,很快就堆掉。
如果是在说锁的高并发引起的性能瓶颈,可以做一些规避或优化吧
1,关于集群,有直接写死在程序逻辑的,也有用lvs做负载均衡的,
2,都是将写请求分散到后台多个服务器上,就少不了数据彼此同步了


3.目前全球超过70%以上的互联网流量是通过CDN网络分发,各大视频网站也相继涉足云**领域。如何根据自身场景去设计一个CDN架构,或者如何选择以一个适合自己CDN服务提供商?在选型过程中需要考虑哪些重要因素?
不熟悉。


4.大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有Squid、memcahe、e-Accelerator,请谈谈您对它们的理解。
对于一套流程而言,这三个缓存处于不同的步骤层次
squid缓存代理http缓存数据,加速访问
memcache缓存业务结果,当然也需要php程序逻辑设计上支持才ok,
e-Accelerator 代码加速优化器,使得php编译开销几乎消除

作者: action08    时间: 2014-08-05 17:57
1.我们常用的系统架构有三种,第一种是linux+Apache+PHP+MySQL、第二种是Linux+Apache+Java(WebSphere)+Oracle、第三种是Windows Server+IIS+C#/ASP.NET+数据库,请举例说明这三种架构对应的网站有哪些?

2.或许在平时,我们感觉不到数据库的死锁问题,但是当成千上万人同时访问网站,在高并发的情况下发生的概率会非常高,因此很多网站在数据库集群和高并发方面下足了功夫。而目前主流的数据库有MySQL和Oracle,如何利用数据库服务器在主从服务器之间保持同步,从而分散数据库压力?

3.目前全球超过70%以上的互联网流量是通过CDN网络分发,各大视频网站也相继涉足云**领域。如何根据自身场景去设计一个CDN架构,或者如何选择以一个适合自己CDN服务提供商?在选型过程中需要考虑哪些重要因素?

4.大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有Squid、memcahe、e-Accelerator,请谈谈您对它们的理解。
作者: qingduo04    时间: 2014-08-05 19:29
路过支持!!!
作者: qingduo04    时间: 2014-08-05 22:03
memcahe,印象中还有其他项目根据这个给客户写了个专利
作者: chenyx    时间: 2014-08-05 22:40
1.我们常用的系统架构有三种,第一种是linux+Apache+PHP+MySQL、第二种是Linux+Apache+Java(WebSphere)+Oracle、第三种是Windows Server+IIS+C#/ASP.NET+数据库,请举例说明这三种架构对应的网站有哪些?

第一种是很流行的LAMP(LNMP)架构,Linux假设网站的首选架构,很多网站也是这个架构,论坛,wordpress,CMS系统等等,太多了。
第二种目前没接触过,不过Oracle都是高大上的企业专用,应该是J2EE之类的架构吧。
第三种是windows下的网站典型架构,见过一些学校的选课系统用的就是这个架构。


2.或许在平时,我们感觉不到数据库的死锁问题,但是当成千上万人同时访问网站,在高并发的情况下发生的概率会非常高,因此很多网站在数据库集群和高并发方面下足了功夫。而目前主流的数据库有MySQL和Oracle,如何利用数据库服务器在主从服务器之间保持同步,从而分散数据库压力?

目前主流的数据库架构应该是读写分离吧,比如mysql的主从架构。

3.目前全球超过70%以上的互联网流量是通过CDN网络分发,各大视频网站也相继涉足云**领域。如何根据自身场景去设计一个CDN架构,或者如何选择以一个适合自己CDN服务提供商?在选型过程中需要考虑哪些重要因素?

这个目前没有接触。
CDN当然是选择Node节点多的提供商最好了,节点越多,距离客户的距离越短,响应速度也快。

4.大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有Squid、memcahe、e-Accelerator,请谈谈您对它们的理解。

squid主要做前端缓存,与squid相同的还有nginx,haproxy等等
memcahe貌似做session的共享存储比较好
e-Accelerator应该是php的加速工具。
作者: wenhq    时间: 2014-08-05 23:43
不错,支持。。
aha

作者: forgaoqiang    时间: 2014-08-06 00:02
本帖最后由 forgaoqiang 于 2014-08-22 02:07 编辑

首先是为什么大多数企业更倾向于在Linux搭建Web服务器,其实从博客园迁移到 阿里云的IIS后遇到的各种困难就能明白,很多大型的站点自身有很强的技术实力,而且对并发、系统要求很高,IIS就会出现一些问题,但是又没有源码,无法具体分析问题,就算找到问题也无法直接修改,因此有技术实力的厂家更倾向于开放的Linux和Apache/Ngnix也没有什么奇怪的了。


1.我们常用的系统架构有三种,第一种是linux+Apache+PHP+MySQL、第二种是Linux+Apache+Java(WebSphere)+Oracle、第三种是Windows Server+IIS+C#/ASP.NET+数据库,请举例说明这三种架构对应的网站有哪些?
①第一种经典的LAMP模式,应该是目前采用最多的系统架构(当然A很有可能是Nginx的N),据我所知百度贴吧这样的亿万级别帖子量的系统也是这个架构的,比较适合UCG这样的应用,这种应用场景往往变化较大,经常发生改动,数据库MySQL就比较适合。
②LAJO(姑且这么叫吧)这个比较适合企业内部业务系统使用,比如一些电商、内部办公系统,CRM、ERP、SCM等等。
③Windows下面的架构,这个比较奇葩,据我所知,Dell的官方站点就是用这个开发的,还有Vmware的云API也是使用这个开发的,所以比较有意思。

2.或许在平时,我们感觉不到数据库的死锁问题,但是当成千上万人同时访问网站,在高并发的情况下发生的概率会非常高,因此很多网站在数据库集群和高并发方面下足了功夫。而目前主流的数据库有MySQL和Oracle,如何利用数据库服务器在主从服务器之间保持同步,从而分散数据库压力?
一旦数据库访问过多,就很容易发生数据库出现死锁进而导致数据库锁死不能对外提供服务,分散数据库压力可以从多个方面实现:
①读写分离,主从复制,应对一般流量的情况
②表拆解、分区,一旦性能跟不上或者表结构或数据过于庞大,进行拆分
③分布式数据库,保持数据库之间的同步,必要时采用内存数据表等高性能方式


3.目前全球超过70%以上的互联网流量是通过CDN网络分发,各大视频网站也相继涉足云**领域。如何根据自身场景去设计一个CDN架构,或者如何选择以一个适合自己CDN服务提供商?在选型过程中需要考虑哪些重要因素?
CDN是大型网站分发静态资源(比如JS、CSS、图片等媒体资源)必须的服务。考虑CDN的时候就要考虑CDN厂家的节点分布情况、价格费用以及技术支持情况。


4.大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有Squid、memcahe、e-Accelerator,请谈谈您对它们的理解。
大型网站多采用缓存服务器集群,原因很简单,大部分的用户请求都无需计算和数据库查询,特别是电商等领域,配合CDN效果显著。业内采用反向代理实现数据的缓存,比较常用的有LVS、Memcache、redis、e-accelerator等,Squid视乎不再那么常用。它们能够将用户请求的内容缓存下来,有些使用磁盘作为缓存用、有些直接使用内存,配合HTTP中的头部字段,减少对后端系统的压力。

下面是个人读书《大型网站技术构架》中关于网站扩展性的读书笔记:
  1. 网站的伸缩性结构

  2. 1、网站的伸缩性设计可以分成两类
  3. ①根据功能进行物理分离实现伸缩
  4. 使用新增服务器处理某些特定服务,可以在纵向分离(将业务处理流程上的不同部分分离部署),横向分离(不同的业务模块分离部署,横向分离粒度可以很小,甚至一个关键页面部署一个独立服务)
  5. ②单一功能通过集群实现伸缩
  6. 相同服务部署在多台服务器构成一个集群整体对外提供服务

  7. 2、应用服务器集群的伸缩性设计
  8. ①HTTP重定向
  9. 这种情况下HTTP 302响应码并不常用,性能差且有可能被搜索引擎判断为作弊
  10. ②DNS域名解析负载均衡
  11. 通过DNS将请求转发到最近的服务器上
  12. ③反向代理负载均衡
  13. 反向代理服务器转发请求在HTTP协议层面,因此也叫做 应用层负载均衡
  14. ④IP负载均衡
  15. 负载均衡器接受请求后自己根据负载均衡算法计算后得到真实的Web服务器地址后修改目标IP地址,在内核进程中完成数据分发,比反向代理的负载均衡性能好很多
  16. ⑤数据链路层负载均衡
  17. 在通讯协议的数据链路层修改MAC地址进行负载均衡,这种传输方式也叫做 三角传输模式 ,是大型网站常采用的技术。在Linux平台上最好的数据链路层均衡开源产品是LVS(Linux Virtual Server)。

  18. 3、负载均衡算法
  19. ①RR(Round Robin)
  20. 轮询,请求一次分发到每台应用服务器,每台服务器处理的请求数相同
  21. ②WRR(Weighted Round Robin)
  22. 根军硬件性能,在轮询的基础上,按照配置权重将请求分配
  23. ③随机(Random)
  24. 简单实用,均衡好,可以采用加权随机算法
  25. ④Least Connections
  26. 最少连接,记录每个服务器当前处理的请求数,分发到请求数最少的服务器上。
  27. ⑤源地址散列(Source Hashing)
  28. 根据源IP进行Hash算法,可以实现会话粘滞

  29. 4、分布式缓存集群的伸缩性设计
  30. 分布式缓存服务器集群中不同的服务器缓存的数据也不相同,缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须先找到缓存有需要数据的服务器,然后才能访问。

  31. 5、Memcached的模型
  32. 程序通过Memcached客户端访问Memcached服务器集群,Memcached客户端由一组API,Memcached服务器路由算法、Memcached服务器集群列表及通讯模块构成。
  33. 对于服务器集群的管理,路由算法至关重要。和负载均衡算法一样,决定着究竟该访问集群中的哪一台服务器。
  34. ①简单路由算法
  35. 余数Hash,用服务器数目除以缓存数据KEY的Hash值,余数为服务器列表下标编号。本身均衡性很好,但是扩容的时候就会出现缓存不命中,余数的时候分配到了并没缓存的服务器上。随着服务器集群规模的增大,这个比例成线性上升。当100台的时候加入一台新的服务器的时候,不能命中率高达 99%(N/(N+1))。当大部分被缓存了的数据因为服务器扩容而不能正确读取时,这些数据的压力就落到了数据库的身上。
  36. 解决方法就是在访问量较少的时候扩容缓存服务器集群,这时候对数据库的负载冲级最小。

  37. ②分布式缓存一致性Hash算法
  38. 通过一致性Hash环的数据结构实现KEY到缓存服务器的Hash映射。
  39. 算法过程:
  40. 先构造一个长度为0~2^32的整数环(这个环称作一致性Hash环),根据节点名称的Hash值(分布范围同样为0~2^32)将缓存服务器节点放置在这个Hash环上。根据需要缓存的数据的KEY计算得到Hash值(范围仍然是0~2^32),然后在Hash环上顺时针查找距离这个KEY的Hash值最近的缓存服务器节点,完成KEY到服务器的Hash映射查找。

  41. 这样的话,新添加的服务器只影响整个环中的一小段,原来的KEY大部分还能继续计算到原来的节点上。具体应用中,这个长度为2^32的一致性Hash环通常使用二叉树实现,Hash查找过程实际上是在二叉树中查找不小于查找树的最小数值。

  42. 这样有个问题,新加入的节点因为占用了换上的一小段距离,导致原来的节点占用更长的距离,会处理更多的负载,这不是很合理。解决方式是使用虚拟化技术:新加入物理服务器节点时,将一组虚拟节点加入环中,如果虚拟节点的数目足够多,这样就可以更加均匀的分布在环上,更好的承担压力,经验算法是一个服务器虚拟150个节点。

  43. 6、数据存储服务器的伸缩性设计
  44. 市场上的关系数据都支持数据复制功能,使用这个功能可以对数据进行简单的伸缩。业务分割模式可以用在数据库,不同业务数据表部署在不同的数据库集群上,这就是:数据分库。
  45. 即使进行了分库和主从复制,对于一些数据量巨大的表,还需要进行分片,将一个表拆分分别存储在多个数据库中。数据分片的分布式关系数据库主要有开源的Amoeba。

  46. Cobar数据库根据SQL和分库规则分解SQL,分发到MySQL集群不同的数据库实例上执行,由于Cobar路由后只能在单一数据库实例上处理查询请求,因此无法执行跨库的JOIN操作,更不能执行跨库的事务处理。

  47. NoSQL数据库产品都放弃了关系数据库量大重要基础:以关系代数为基础的结构化查询语言(SQL)和事务一致性(ACID)。而强化其他一些大型网站更关注的特性:高可用性和可伸缩性。


  48. 随需应变:网站的可扩展结构

  49. 1、国内某大型企业经常对同行的产品进行微创新,然后退出自己的产品,系统扩展性实际可以在设计层面的 开闭原则(对扩展开放,对修改关闭)。

  50. 2、度量一个开发框架、设计模式、编程语言优劣的重要尺度就是衡量它是不是让软件开发过程和软件产品更加低耦合。

  51. 3、事件驱动架构
  52. 事件驱动架构(Event Driven Architecture):通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助时间消息的通讯完成模块间合作,典型的EDA结构就是操作系统中常见的生产者消费模式,最常用的是分布式消息队列。

  53. 4、分布式消息队列
  54. 队列是一种先进先出的数据结构,分布式消息队列可以看作将这种数据结构部署到独立的服务器上,应用程序可以通过远程访问接口使用分布式消息队列,进行消息存取操作,进而实现分布式的异步调用

  55. 5、分布式服务框架设计
  56. 大型网站需要的是更简单高效的分布式服务框架架构建其SOA(Service Oriented Architecture)。服务消费者程序通过服务器接口使用服务,而服务接口通过代理加载具体服务,具体服务可以是本地的代码模块,也可以是远程的服务,因此对应用较少侵入:应用程序只需要调用服务接口,服务框架根据配置自动调用本地或远程实现。

  57. 6、可扩展的数据结构
  58. 无需修改表结构就可以新增字段,许多NoSQL数据库采用ColumnFamily(列族)设计,最早是在Google的Bigtable中使用,这是一种面向列族的稀疏矩阵存储格式。

  59. 7、开放平台建设网站生态圈
  60. 根据长尾效应,这些增值服务的数量越是庞大,种类越是繁多,盈利也就越多。同样,一个网站自己那个女够开发增值服务也是有限的。
复制代码

作者: ylky_2000    时间: 2014-08-06 08:10
本帖最后由 ylky_2000 于 2014-08-14 09:44 编辑

2014-08-06
必须要顶,,谢谢。
2014-08-14

1.我们常用的系统架构有三种,第一种是linux+Apache+PHP+MySQL、第二种是Linux+Apache+Java(WebSphere)+Oracle、第三种是Windows Server+IIS+C#/ASP.NET+数据库,请举例说明这三种架构对应的网站有哪些?
    第一种:大部分小型论坛
    第二种:中型电商网站
    第三种:微软的官方网站,刚测试了下如下(Server: Microsoft-IIS/8.0、X-AspNet-Version: 2.0.50727、数据库,microsoft sql 版本2012 )
2.或许在平时,我们感觉不到数据库的死锁问题,但是当成千上万人同时访问网站,在高并发的情况下发生的概率会非常高,因此很多网站在数据库集群和高并发方面下足了功夫。而目前主流的数据库有MySQL和Oracle,如何利用数据库服务器在主从服务器之间保持同步,从而分散数据库压力?
   在主从同步的前提下
   方法1:读写分离
   方法2:拆库
   方法3:优化索引
   方法4:充分利用视图
   方法5:固态闪存
3.目前全球超过70%以上的互联网流量是通过CDN网络分发,各大视频网站也相继涉足云**领域。如何根据自身场景去设计一个CDN架构,或者如何选择以一个适合自己CDN服务提供商?在选型过程中需要考虑哪些重要因素?
    参考因数1:实际案例情况
    参考因数2:跨运营商资源情况
    参考因数3:运维服务情况
    参考因数4:根据我们网站的访问流浪情况,报价情况,即所谓的性价比。
    参考因数5:流量分析报表
4.大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有Squid、memcahe、e-Accelerator,请谈谈您对它们的理解。
squid:有正向和反向代理两种,一般我们说的代理缓存加速是说的是反向代理。
可以将squid理解为前端缓存,memcache则为后端缓存。squid介于web server和客户端之间。memcache则介于web server和database之间。
squid主要是缓存整个页面文件。而memcache用来缓存数据。现在可以申请第三方缓存解决方案,也就是CDN,他们做的其实就是squid服务。
e-accelerator:是一个php加速器,优化和动态内容缓存,提高了php脚本的缓存性能,对服务器的开销几乎完全消除。能加快php脚本的执行效率,效率能提高1-10倍;
作者: craaazy123    时间: 2014-08-06 09:50
我可不可说我们用的架构是nginx+tomcat+rabbitmq+mongodb?
作者: cryboy2001    时间: 2014-08-06 12:10
相继涉足云**领域

我就想不出**是什么字啊,还是关键敏感字。

填什么好呢?
作者: wander__漫游世界    时间: 2014-08-06 16:56
难道没有window  + apache + java  ,学校学的不都是这个吗
估计是没什么用处,才这样用,可怜我在linux社区发windows 的内容
作者: chenyx    时间: 2014-08-06 20:16
craaazy123 发表于 2014-08-06 09:50
我可不可说我们用的架构是nginx+tomcat+rabbitmq+mongodb?

感觉高大上的架构,mongodb貌似是Nosql吧
作者: chenyx    时间: 2014-08-06 20:18
wander__漫游世界 发表于 2014-08-06 16:56
难道没有window  + apache + java  ,学校学的不都是这个吗
估计是没什么用处,才这样用,可怜我在linux社 ...

可能是学校里面精通Linux的人才不多。
windows下运转apache是没有问题的,以前我也这么用过。后来访问量上来之后,apache会死机,无奈才转到Linux下运行apache
作者: craaazy123    时间: 2014-08-06 21:39
回复 13# chenyx

恩 比较火的nosql数据库


   
作者: chenyx    时间: 2014-08-06 21:49
前一段时间Cu有过一次MongoDb的活动,顺便了解下。
作者: wander__漫游世界    时间: 2014-08-07 16:08
回复 14# chenyx


    是啊,学校只教简单的技术。不教有用的技术。
作者: chenyx    时间: 2014-08-07 22:42
wander__漫游世界 发表于 2014-08-07 16:08
回复 14# chenyx

这个与体制有关,我们的教育太功利化了
作者: q1208c    时间: 2014-08-08 08:04
我就进来看看就好.
作者: 睿智2012    时间: 2014-08-08 11:11
为什么没人说到lvs,f5呢,这才是真正的集群。
作者: chenyx    时间: 2014-08-08 11:27
F5太贵,高大上的企业才能用得起。
Lvs对网络要求高,在Internet下应用不了,另外,不支持7层是硬伤
作者: q1208c    时间: 2014-08-08 11:41
回复 20# 睿智2012

这两样东西虽然跟集群有关, 但却不是集群本身的内容. 而且, 光有它们俩, 啥也干不了.
   
作者: q1208c    时间: 2014-08-08 11:44
回复 21# chenyx

LVS 虽然不支持7层, 但也没有必要支持7层. 专心做好一件事, 才是 UNIX 的 本质. 那些功能越来越多, 越来越花的东东, 已经走远了.

haproxy 在 4层和7层都有不错的表现, 如果 配合 LVS, 可以完成大部分的工作了.

F5 不是贵, 是很贵, 当然, 贵也有贵的道理, 虽然我从来不用它.


   
作者: chenyx    时间: 2014-08-08 11:53
回复 23# q1208c


    确实,能够精确完成规定任务是Unix的传统。
作者: wander__漫游世界    时间: 2014-08-08 14:19
回复 18# chenyx


    还是开源的好,大家相互学习交流
作者: yunas    时间: 2014-08-09 23:14
啊!标题是个高大上的主题,讨论的话题够广。
作者: GB_juno    时间: 2014-08-10 13:20
1.我们常用的系统架构有三种,第一种是linux+Apache+PHP+MySQL、第二种是Linux+Apache+Java(WebSphere)+Oracle、第三种是Windows Server+IIS+C#/ASP.NET+数据库,请举例说明这三种架构对应的网站有哪些?
第一种是以前很流行的架构,即使是最开始的fackebook都是类似这种架构,现在也是建小站的模式。第二种是很正式的企业应用系统,接触到的有BOSS,ERP等。第三种只是听闻,未接触过。

2.或许在平时,我们感觉不到数据库的死锁问题,但是当成千上万人同时访问网站,在高并发的情况下发生的概率会非常高,因此很多网站在数据库集群和高并发方面下足了功夫。而目前主流的数据库有MySQL和Oracle,如何利用数据库服务器在主从服务器之间保持同步,从而分散数据库压力?
拆库拆表,水平扩展。
读写分离,高效利用。
最近比较牛B的内存计算..

3.目前全球超过70%以上的互联网流量是通过CDN网络分发,各大视频网站也相继涉足云**领域。如何根据自身场景去设计一个CDN架构,或者如何选择以一个适合自己CDN服务提供商?在选型过程中需要考虑哪些重要因素?
网络运营商(如果是app的话移动和联通的cdn是需要考虑的),服务商的实力(归根到底是服务器数量和带宽),价格性价比

4.大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有Squid、memcahe、e-Accelerator,请谈谈您对它们的理解。
缓存作用,加速访问,极可能避免执行程序和访问数据库


作者: cryboy2001    时间: 2014-08-12 08:35
现在的大流量网站都是要做应用拆分与架构分层

客户端------CDN(多地)-------负载均衡(lvs,keepalived)------web应用(apache+php)-------后台数据库(mysql)分布式文件系统(mogileFS Lustre)

以上是一种比较成熟的高可用高并发网站架构
作者: rdcwayx    时间: 2014-08-12 13:48
webspere 的广告贴吗? 建议将webspere替换成: middleware ,这个包括webspere, weblogic,tomcat,jboss, glassfish, etc.
作者: lsstarboy    时间: 2014-08-12 16:52
本帖最后由 lsstarboy 于 2014-08-12 16:55 编辑

1.我们常用的系统架构有三种,第一种是linux+Apache+PHP+MySQL、第二种是Linux+Apache+Java(WebSphere)+Oracle、第三种是Windows Server+IIS+C#/ASP.NET+数据库,请举例说明这三种架构对应的网站有哪些?

第一种的网站非常多;第二种只在企业见过,主要是erp之类的;但是我现在接触的两个大的系统,却是第三种:一个是世界大学城,www.worlduc.com,前端用的是F5,数据库是Oracle,用户数上百万,文章数过亿了;另一个是山东省的暑期教师培训网站,www.qlteacher.com,也是IIS的,最高在线人数超过15W,每天的文章数就上百万,第一年培训的时候,用户数过万就跑不动了,后来调整的很不错了。第二年开始,用的域名进行均衡,后来好像有所改进。


4.大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有Squid、memcahe、e-Accelerator,请谈谈您对它们的理解。


squid,现在很多时候用nginx,trafficeserver也是一个不错的选择,性能要比squid高不少,是第7层的缓存,直接缓存网页,这个缓存对网页的响应速度和呑吐量最明显,也能提高一些高并发量,但是不能彻底解决超高并发量的问题,超高并发量要靠集群来解决。

memcache一般用来做两件事:一个是程序产生的临时数据,把复杂的运算过程暂存一下;另一个就是用在不同服务器之间传送数据,比如session信息等,用来支撑负载均衡。

e-Accelerator和APC,Xcache等一起,把php提前“编译”,节省了php“编译”的时间,可以明显提高php的运行性能,特别是复杂的、文件包含较多的应用,性能提高最明显,比如drupal之类,同时,这几个php加速系统,也提供了类似memcache的功能,可以把一些中间临时数据放到内存中,但是由于php的进程工作模式,这种方式比较浪费内存,但是性能还是比较好的。

另外大多数提网站系统,都有自己的缓存方式,比如discuz,smarty,会把模板、配置等信息进行相应的cache,每次访问的时候,不需要从头开始提取数据,而是直接从cache文件夹中读取,这也能大大提高响应的速度。

其次还有文件系统级的缓存,比如ZFS本身就有两级缓存,可以用内存来做ARC,内存越大效果越明显;更为可贵的是zfs还可以用SSD来做二级ARC,这对下载和静态类网站系统非常有效,对数据库的性能提升也很大。


作者: sunyueyin    时间: 2014-08-15 15:53
e ,小白路过
作者: solohac    时间: 2014-08-16 14:44
1.我们常用的系统架构有三种,第一种是linux+Apache+PHP+MySQL、第二种是Linux+Apache+Java(WebSphere)+Oracle、第三种是Windows Server+IIS+C#/ASP.NET+数据库,请举例说明这三种架构对应的网站有哪些?

第一种:LAMP LNMP平易近人,很多个人网站、公司网站、中小网站都用的这个。
第二种:电信类运营商有些系统是用的这个,小玩家玩不起,方案太贵
第三种:微软自家用的最多,周边也有小网站使用,但是并发似乎都不太大,都是单台机跑个公司网站


2.或许在平时,我们感觉不到数据库的死锁问题,但是当成千上万人同时访问网站,在高并发的情况下发生的概率会非常高,因此很多网站在数据库集群和高并发方面下足了功夫。而目前主流的数据库有MySQL和Oracle,如何利用数据库服务器在主从服务器之间保持同步,从而分散数据库压力?

数据库接触得少,主要用过的还是读写分离,或者再业务层优化,把一些数据缓存出来。


3.目前全球超过70%以上的互联网流量是通过CDN网络分发,各大视频网站也相继涉足云**领域。如何根据自身场景去设计一个CDN架构,或者如何选择以一个适合自己CDN服务提供商?在选型过程中需要考虑哪些重要因素?

目前就在做着这块。
(1)选择CDN服务商:
一般都有试用期,选节假日(访问量大),对CDN服务商进行试用,检测效果;
查看CDN服务商的网络出口、线路有哪些;
有些CDN是有政策影响的,这个必须了解,如音像、版权;
性价比计算,选择买带宽还是买流量;据我比较,买流量是相对比较划算的
(2)自建CDN
机房选择:这个机房会不会经常被打?有没涉huang(之前一个机房涉huang被关了)
线路选择:根据以往用户线路的分布选择;比如只有很少教育网用户,那就不要选择教育网线路了
机器选择:一手机器还是二手机器,价格差很多
技术选择:squid、nginx、varnish 的特性;
DNS:CDN机器宕机后,DNS有缓存,可能会有部分用户访问不到。如果有条件,可以一个机房放多台,多台CDN做负载均衡。但是这样成本又上去了。所以目前我也没解决。
性价比:带宽的采购很重要,不同机房、线路、销售,价格会差几千每G都有的。自建情况下,买带宽比买流量划算。


4.大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有Squid、memcahe、e-Accelerator,请谈谈您对它们的理解。

squid做前端缓存,squid的特点是比较稳定,虽然不支持多核,但是性能似乎很不错。
memcache做后端数据缓存,
e-Accelerator php相关的,没用过

作者: fffy2366    时间: 2014-08-19 00:35
喜欢lnmp+redis的组合
作者: sxcong    时间: 2014-09-02 09:09
1 千万级的网站,这三种方法都算做应用层,最底层应该是Linux的LVS。然后,上层是nginx做前端,memcached/redis等内存数据库,squid等缓存层。然后,在这些之后才是MySQL等数据持久层。直接上来就PHP+MySql或Oracle,简单是找死,一万用户都很难,还敢说千万。
2 前端由上述内存,缓冲等架构实现,数据库一般读的时候多,写的时候少。这样主从相对简化了很多,可以利用数据库本身机制,也可以参考hadoop。理论上讲,访问量越大,NoSql越有优势。
3 CDN大多是租用了,能自己做CDN的话,国内多说也就几十家。坛子上估计最多几十人而已。业外就不多说了。
4 到了这里你才说缓存分层,你应该把这条放在首位。

作者: pipihappy8888    时间: 2014-09-11 11:59
回答得很不错!回复 30# lsstarboy


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2