【http://blog.jobbole.com/77748/】
随着用户量的增加,业务功能的扩展逐渐演变完善。
开发模式、技术架构、设计思想也发生了很大的变化。
成熟的系统架构是随业务扩展而完善出来的。
最初的架构,应用程序、数据库、文件都部署在一台服务器上。
应用、数据、文件分离。
利用缓存改善网站性能。对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。
使用集群改善应用服务器性能。
应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。
数据库读写分离和分库分表。
使用CDN和反向代理提高网站性能。
CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、网宿。
而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。
使用分布式文件系统。
使用NoSql和搜索引擎。
对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。
将应用服务器进行业务拆分。
随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。
搭建分布式服务。
这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择。