简单说,分布式是以缩短单个任务的执行时间来提高效率的,而集群则是经过提升单位时间内执行的任务数来提高效率。css
集群主要分为:高可用集群(High Availability Cluster),负载均衡集群(Load Balance Cluster,nginx便可实现),科学计算集群(High Performance Computing Cluster)。html
分布式是指将不一样的业务分布在不一样的地方;而集群指的是将几台服务器集中在一块儿,实现同一业务。分布式中的每个节点,均可以作集群。 而集群并不必定就是分布式的。mysql
以前在网上看到一篇关于大型网站演化的博客。http://www.cnblogs.com/leefreeman/p/3993449.htmlnginx
每一个大型网站都会有不一样的架构模式,而架构内容也就是在处理均衡负载,缓存,数据库,文件系统等,只是在不一样的环境下,不一样的条件下,架构的模型不同,目的旨在提升网站的性能。git
最初的架构只有应用程序,数据库,文件服务。github
到后来,分布式服务、集群架设。redis
在上一篇,《Nginx反向代理实现均衡负载》讨论过过的nginx现实均衡负载方案,这里选择另外一种HAProxy+Keepalived双机高可用均衡负载方案。
HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤为适用于高负载且须要持久链接或7层处理机制的web站点。
不管是Haproxy仍是Keepalived甚至是上游服务器均提升生产力并加强可用性,也就是以下架构中Haproxy,Keepalived,Httpd服务器任意宕机一台服务仍是能够正常运行的。
HAProxy的优势:
一、HAProxy是支持虚拟主机的,能够工做在四、7层(支持多网段);
二、可以补充Nginx的一些缺点好比Session的保持,Cookie的引导等工做;
三、支持url检测后端的服务器;
四、自己仅仅就只是一款负载均衡软件;单纯从效率上来说HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
五、HAProxy能够对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡;
缓存分为服务器缓存和应用程序缓存。
关于应用程序内缓存,已经在Jue后台框架里面作了模块处理了。
关于服务器缓存,主要缓存服务器文件,减小服务器和php交互,减小均衡负载服务器和应用程序服务器交互。
缓存里面有一种典型的memcached,如今用的多的是redis轻量级缓存方案。
关于memcached与redis,看这篇 《Memcached vs Redis?》
Redis主要将数据存储在各类格式:列表,数组,集合和排序集,一次能接受多个命令,阻塞读写,等待直到另外一个进程将数据写入高速缓存。
一篇关于Reids缓存方案。《高可用、开源的Redis缓存集群方案》
(第一期不作,后期需求时候考虑)**
Sphinx是俄罗斯人开发的,号称是很吊啦,千万级数据检索,每秒10MB/s,搭过环境。
Sphinx和MySQL是基于数据库的全文引擎,建立索引是B+树和hash key-value的方式。
原理相似于用底层C检索MySQL,而后弄出一个sphinx.conf配置文件,索引与搜索均以这个文件为依据进行,要进行全文检索,首先就要配置好sphinx.conf,告诉sphinx哪些字段须要进行索引,哪些字段须要在where,orderby,groupby中用到。
NoSQL在这里的使用价值是处理一些杂事,好比用户我的网站的一些css值,height,width,color等等的小而繁多的数据,采用NoSQL旨在提高数据库速度,减小对MySQL的SELECT请求。
关于NoSQL的方案不少了,选一个简单的MongDB好了。
(作分布式MySQL还没尝试过,初期也不清楚mysql所须要的压力,因此第一期不打算作分布式MySQL)
综合起来,大体就是以下模型,初探分布式架构,还有不少要修改的,待续,时时更新中。。。