大型分布式系统组成元素

#1,分布式跟踪系统
     监控平台,如淘宝的鹰眼。用于跟踪请求处理调用链关系,并将各环节请求处理时间,处理结果等信息通过日志系统存入数据库。便于排查错误和分析性能瓶颈等作用。分布式跟踪系统要做到低损耗,低侵入性(最好能做到对应用层代码透明)等特性。
       
#2,消息中间件
     作用:异步,解耦,并行,流量削峰(activeMq,rabbiteMq,kafka,zeroMq等),对于秒杀类场景,可以使用mq进行流量削峰,将客户端抢购请求封装成消息,投入mq。由后台系统异步去处理抢购请求,从而可以避免大量请求直接打到应用服务器,数据库服务器,造成系统瘫痪。后台处理系统可以采用按批次处理抢购请求,比如1次处理100个请求。从而可以很好的控制对数据库系统造成的压力。

#3,分布式缓存系统
     作用:缓存热点数据,减轻数据库系统压力,提升服务响应性能(redis,memcached等),要做到缓存系统的高可用,一般采用主从模式,redis自带数据复制功能,但memcached不支持数据复制,必须采用第三方插件repcached,完成主从之间的复制,memcached sdk支持failuremode,当主库宕机后,能够自动将请求转到从库。或者使用keepalived插件实现双机浮动的高可用方案。

#4,分布式文件系统(fastDFS)

#5,分布式日志收集系统
     作用:收集应用系统日志,用于系统分析
     flume(日志采集器) -> kafka(日志缓冲队列) -> storm(实时分析框架) -> mongodb或hdfs或关系型数据库(分析结果入库)

#6,分布式数据库集群
      mysql数据库,当单表数据量达到千万级别时,就要考虑数据的水平切分了,mysql单表数据量一亿时,select count(1) from t_table_a,耗时24秒左右,性能慢的是让人难以忍受的。所以对于数据按时间,Id,hash等规则水平切分到不同分库里(mycat中间件代理),按业务进行垂直拆分,将不同业务表,分到不同的业务库里。以此提升数据库服务器响应性能。
      
#7,集群配置管理系统
     作用:管理应用系统配置及服务降级开关等配置,可以采用netty自己实现配置变更推送功能。
     
#8,SOA服务化治理
     作用:服务动态发现,服务治理,服务监控等功能。例如:阿里的dubbo , 当当网的dubbox。

#9,负载均衡,反向代理
     作用:流量分发,失效转发 failover,反向代理等功能。例如:nginx , haproxy , lvs。
 

相关推荐