近期参与一个互联网项目,按照该项目的需求设计了分层的系统架构,主要目的是高并发高可用,能够根据用户访问量和并发情况进行伸缩。


        第一个部分是由Web服务器和应用服务器构成的负载均衡区。该区域的主要目标是分散用户的访问量,平衡各服务器的压力,提高各服务器的资源利用率,因为大多数网站都是属于IO密集型,因此可以利用线程池增加并发处理能力,采用多核多内存的资源配置模式。可以采用Apache+Tomcat或Nginx+Jboss来实现,其中消息服务器通过异步处理机制可以提高系统响应速度,增加用户体验。


       第二个部分是数据存储区。包括了NoSql数据库和关系型数据库,NoSql数据库主要目的是实现快速缓存,通过主从结构提高处理能力,NoSql数据库可以存储需要经常访问的数据,可以选择redis、Memcache、berkelydb等。关系型数据库主要存储交易和行为数据,通过读写分离和业务拆分提高数据库的负载能力。同时,数据在写入关系型数据库时候同时更新读库和Nosql数据库,以保证数据的一致性。数据一致性符合CAP原理。同时数据库存储的大量交易、行为数据可以通过ETL的形式提供给数据仓库作为数据分析和报表使用。


       第三个部分是数据采集区。包括了多并发多线程的采集服务器集群,以提高数据更新的实时性。数据采集后存入分布式数据库,因存在大量非结构化数据,所以可以采用Monogodb、Hbase等文档或列表型数据库存储海量数据。Monogodb内置Map-reduce处理,Hbase可以结合Hadoop做Map-reduce大数据分析。生成的结果可以同步到数据存储区,以便于用户的查询。


        整个体系结构如下图:


面向海量数据的高并发高可用分层系统架构设计