第2章 分布式系统基础设施
1、搭建分布式的基础设施:
1)分布式协作及配置管理系统---zookeeper
2)分布式缓存系统
3)持久化存储
4)分布式消息系统
5)搜索引擎
6)CDN系统
7)负载均衡系统
8)运维自动化系统
9)实时计算机系统
10)离线计算系统
11)分布式文件系统
12)日志收集系统
13)监控系统
14)数据仓库
2、NoSql提供了更高的查询效率及吞吐,能方便扩展,存储海量数据,自动进行数据的复制和备份
2.1 分布式缓存
2.1.1 memcache简介及安装
1、memcache使用key-value形式存储和访问数据,在内存中维护一张巨大的HashTable
2、内存不够时,memcache使用LRU算法,淘汰不常访问的数据,来存储新的数据
3、对象----序列化----二进制数据---缓存服务器中,获取时,进行反序列化。
4、memcache的安装
1)安装libevent
tar -zxvf libevent-2.1.11-stable.tar.gz
./configure
make
sudo make install
2)下载memcache安装
wget https://memcached.org/files/memcached-1.5.22.tar.gz
tar -zxvf memcached-1.5.22.tar.gz
./configure
make
sudo make install
3)启动与关闭memcache
2.1.2 memcache API 与分布式
1、memcache客户端与服务端通过构建在TCP协议之上的memcache协议来进行通信,协议支持两各数据的传递
1)文本行
2)非结构化数据
2、memcache的分布式是由访问它的客户端来实现的,一种比较简单的实现方式是根据缓存的Key来进行Hash-----consistent hash
2.1.3 分布式session
1、在一个分布式集群中,传统网站规避分布式环境的session操作,是将一部分cookie中
2、系统可靠性要求较高的用户,session的存储方法:
1)存储到DB中,但影响吞吐
2)放在缓存集群中,但并发量大
3、将session以sessionid为key,保存到后端的缓存集群中,使得不管请求如何分配,即便是webserver宕机,也不会影响其他webserver通过sessionid从cache server中获得session,这样即实现了集群间的session同步,又提高了webserver的容错性
4、memcached-session-manager是一个开源的高可用的tomcat session共享解决方案,支持sticky模式和Non-sticky模式。
2.2 持久化存储
常见的三种存储方式,包括关系型数据库 Mysql、bigtable概念、Hbase、Key-Value类型的Redis
2.2.1 Mysql扩展
1、业务拆分
2、复制策略:
1)master-slaves复制架构:构建Mysql集群,Slave从master获取binary log进行复制操作,读由Slave分担
2)dual-master架构
3、分表与分库:
1)分表:用户id是最常用的分表字段(用户ID取模),解决单表数据量过大带来的查询效率下降问题
2)分库:同样也是取模的方式,提高并发处理能力
2.2.2 HBase
1、HBase是以Google BigTable为原型,设计实现了高可靠,高可扩展性、实时读写的列存储数据库。
2、HBase集群中通常包含两种角色,HMaster和HRegionServer。
3、HBase的安装
略
2.2.3 Redis
1、Redis安装
略
2.3 消息系统
1、开源的消息系统:ActiveMq、Kafka、RabbitMQ、memcacheQ
2.3.1 ActiveMQ&JMS
1、JMS是一组JAVA应用程序接口,提供消息的创建、发送、接收、读取等一系列服务
2、安装ActiveMQ
略
3、ActiveMQ集群部署
Master-Slave架构
2.4 垂直化搜索引擎
垂直化搜索引擎,主要针对企业内部的自有数据的检索,它既能满足用户对于全文检索、模糊匹配的需求,解决数据Like查询效率低下的问题,又能够解决分布式环境下,由于采用分库表或者使用NoSql数据库,导致无法进行多表关联或者进行复杂查询的问题
2.4.1 Lucene简介
1、Lucene是Apache旗下的一款高性能、可伸缩的开源的信息检索库
2、索引的构建过程:通过指定的数据格式,将Lucene的Document传递给分词器Analyzer进行分词,经过分词器分词之后,通过索引写入工具indexwriter将索引写入到指定的目录
3、索引的查询过程:首先构建查询的Query,通过IndexSearcher进行查询,得到命中的TopDocs,然后通过TopDocs的ScoreDocs方法,拿到ScoreDoc,通过ScoreDoc,得到对应的文档编号,IndexSearcher通过文档编号,使用IndexReader对指定目录下的索引内容进行读取,得到命中的文档后返回
2.4.2 Lucene的使用
1、创建索引
2、索引更新与删除
3、条件查询
4、结果排序
5、高亮
6、中文分词
7、索引优化
8、分布式扩展
2.4.3 Solr
1、Solr是一个基于Lucene、功能强大的搜索引擎工具,它对Lucene进行了扩展,提供一系列功能强大的HTTP操作接口,支持通过Data Schemea来定义字段、类型和设置文本分析,使得用户可以通过HTTP POST请求,向服务器提交Document,生成索引,以及进行索引的更新和删除操作。
1、Solr的配置
2、构建索引
3、条件查询
2.5 其他基础设施
除前面外,包括实时计算、离线计算、分布式文件系统、日志收集系统、监控系统、数据仓库、CDN系统、负载均衡系统、消息推送系统、自动化运维系统