使用 CDN 和反向代理提高网站性能
假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的。
这是由于四川和北京分别属于电信和联通的不同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。
对于这种情况,常常使用 CDN 解决,CDN 将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的 CDN 运营商有蓝汛、网宿。
而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户。
如果没有缓存数据才会继续访问应用服务器获取,这样做减少了获取数据的成本。反向代理有 Squid、Nginx。
使用分布式文件系统
用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求,这时就需要分布式文件系统的支撑。常用的分布式文件系统有 GFS、HDFS、TFS。
使用 NoSQL 和搜索引擎
对于海量数据的查询和分析,我们使用 NoSQL 数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。
常用的 NoSQL 有 MongoDB、HBase、Redis,搜索引擎有 Lucene、Solr、Elasticsearch。
将应用服务器进行业务拆分
随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。
每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者共享数据库来实现。
搭建分布式服务
这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。
我们将这些服务抽取出来利用分步式服务框架搭建分布式服务。阿里的 Dubbo 是一个不错的选择。
大型电商网站架构案例
采用电商案例的原因
分布式大型网站,目前看主要有几类:
大型门户,比如网易,新浪等。
SNS 网站,比如校内,开心网等。
电商网站,比如阿里巴巴,京东商城,国美在线,汽车之家等。
大型门户一般是新闻类信息,可以使用 CDN,静态化等方式优化,开心网等交互性比较多,可能会引入更多的 NoSQL,分布式缓存,使用高性能的通信框架等。
电商网站具备以上两类的特点,比如产品详情可以采用 CDN,静态化,交互性高的需要采用 NoSQL 等技术。因此,我们采用电商网站作为案例,进行分析。
电商网站需求
客户需求:
建立一个全品类的电子商务网站(B2C),用户可以在线购买商品,可以在线支付,也可以货到付款。
用户购买时可以在线与客服沟通。
用户收到商品后,可以给商品打分,评价。
目前有成熟的进销存系统;需要与网站对接。
希望能够支持 3~5 年,业务的发展。
预计 3~5 年,用户数达到 1000 万。
定期举办双 11、双 12、三八男人节等活动。
其他的功能参考京东或国美在线等网站。
客户就是客户,不会告诉你具体要什么,只会告诉你他想要什么,我们很多时候要引导,挖掘客户的需求。好在提供了明确的参考网站。
因此,下一步要进行大量的分析,结合行业,以及参考网站,给客户提供方案。
需求功能矩阵
这是需求管理传统的做法,会使用用例图或模块图(需求列表)进行需求的描述。
这样做常常忽视掉一个很重要的需求(非功能需求),因此推荐大家使用需求功能矩阵,进行需求描述。
本电商网站的需求矩阵如下: