大型B/S系统技术总结(不断更新)

看了《淘宝技术这十年》和《大型网站系统与Java中间件实践》这些书,对大型B/S系统的构建越来越感兴趣,于是尝试收集和总结一些常用的技术手段。不过大型网站的架构是根据业务需求不断完善的,需要结合自身特点做特定的设计和考虑。

缓存:

  本地缓存:OSCache

  分布式缓存:Memcached、Redis、Tair(淘系)

数据库:

  读写分离:通过主备功能实现数据同步

  分库分表:TDDL(淘系)

    数据库水平拆分:同一张表拆分,比如usr表,拆分数据量太大的表

    数据库垂直拆分:根据业务,把不同的表放到不同的数据库里

服务器:

  CDN:蓝汛、网宿运营商

  反向代理:Squid,Nginx

  负载均衡:

    硬件解决方案:F5

分布式文件系统:NFS、TFS(淘系)

    软件解决方案(#1):LVS、Nginx、HAProxy

查询:

  关系数据库:效率低,小型系统使用

  NOSQL:高并发、大数据的查询

    键值(Key-Value)存储数据库:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB
    列存储数据库:Cassandra, HBase, Riak
    文档型数据库:CouchDB, MongoDb
    图形(Graph)数据库:Neo4J, InfoGrid, Infinite Graph.

  搜索引擎:lucene

分布式系统:

  应用服务器拆分:应用程序进行业务拆分,每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。

  分布式服务化应用:Dubbo(淘系)、HSF(淘系)

    

260851397174320

图1(#2)

#1:LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx是七层负载均衡和HAProxy支持四层、七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。

#2:图1和本文章部分内容来源于其它博主(http://www.cnblogs.com/leefreeman/p/3993449.html)博客,非本人原创

后记:关于优化

1.避开网络开销,避开海量数据,避开资源争夺 是所有高性能的几个基本要素。(来源:http://www.cnblogs.com/selfteam/p/4036317.html)

原文地址:https://www.cnblogs.com/xujanus/p/4244334.html