第六周总结
一、各分布式存储关键技术实现总结
1、分布式数据库cobar。
分布式路由方式:每个表配置xml,配置路由规则。比如根据id hash进行分配。
集群伸缩:配置路由时,比如刚开始只有两台数据库服务器,再配置的时候,假设将来最多扩展到100台。那么先在两台服务器上分别创建50个数据库实例。在路由配置中配置100个数据库地址,将来增加服务器的时候,只需要将其中的ip地址修改。
高可用:用户配置了MySQL心跳的情况下,Cobar可以自动向后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自动切换到备机工作。
2、hbase。
分布式路由方式:客户端访问hmaster,然后hmaster返回给客户端应该访问的regionserver地址。hhmaster中记录了region和regionserver的映射关系。
集群伸缩:hbase的数据保存在hdfs中,增加服务器只需要将部分region和regionserver的关系分配给新的服务器。
高可用:regionserver每隔固定时间给master发送心跳报告工作情况,如果Master长时间收不到心跳请求,认为regionserver发生故障,会从master中标记该服务的状态,并将查询分配到其他regionserver。
3、搜索引擎。
搜索引擎会先收集一些网站的数据,然后去爬取相关数据。然后会记录这些网站中包含的链接,再去进行爬取。(这也是很多网站之间要加友情链接的一个作用吧)
倒排索引:建立文章中关键字和文章的索引,用户查询时根据关键字找到对应的文章。倒排索引中记录了关键字对应的文档列表,同时会记录关键字在文档中出现的位置。这样做搜索时,将用户的搜索词进行分词以后,可以根据关键字的位置,越相近的越优先匹配。
Lucene的数据更新原理:Lucene中引入了段的概念,将一个索引文件拆分为多个子文件,每个子文件叫段。当新增数据的时候原有的文件保持不变,新增一个段来存储新增加的数据。要删除数据时,是增加一个.del的删除文件,搜索时被删除的数据仍然可以被搜索到,在进行文档数据合并时,将标记删除的数据过滤掉。被删除的数据组进行段的合并时才会被真正删除。
4、ElasticSearch。
分布式路由方式:shard = hash(routing) % number_of_primary_shards
routing默认是文档的_id,也可以是自定义的值。hash函数将routing值哈希后生成一个数字,然后这个数字再除以number_of_primary_shards(主分片的数量)得到余数,这个分布在0到number_of_primary_shards减一(计数从0开始,比如5个主分片,那么范围就是0~4)之间的余数,就是文档存放的分片位置。
集群伸缩:在创建索引的时候指定了分片个数,也就指定了集群的上限。比如开始只有一台服务器创建两个分片,那在增加服务器的时候,会将其中一片匀到增加的服务器上。
高可用:每个分片的数据,在集群中其他服务器进行备份。有服务器节点故障的时候,将查询路由到备份节点。
总结:
高可用一种的实现方式slave发心跳给master,由master记录可用的slave。另一种是当请求失败时,由管理服务器进行判断节点是否故障。
分布式路由多采用Hash的方式,将数据路由的不同的服务器。只是为了将来扩容的方便,在最初会虚拟预计数量的服务器节点。
集群伸缩是在增加服务器节点后,将原服务器中数据迁移到新服务器上。
二、时序图学习
时序图的构成:
1对象,时序图中对象使用矩形表示。对象置于时序图的顶部说明在交互开始时对象就已经存在了. 如果对象的位置不在顶部, 表示对象是在交互的过程中被创建的.
2生命线: 生命线是一条垂直的虚线. 表示时序图中的对象在一段生命周期内存在. 每个对象底部中心的位置都带有生命线.
3消息: 两个对象之间的单路通信. 从发送方指向接收方
同步消息=调用消息(Synchronous Message):消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。用实心箭头表示。
异步消息(Asynchronous Message):消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。用实线箭头表示。
返回消息(Return Message):返回消息表示从过程调用返回。虚线加实线箭头表示。
自关联消息: 表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。
4激活钝化:激活表示该对象被占用以完成某个任务. 钝化指对象处于空闲状态, 等待消息. 在 UML 中, 对象激活时将对象的生命线拓宽为矩形来表示的. 矩形称为计划条或控制期.
5对象的创建和销毁: 在时序图中, 对象的默认位置是在图的顶部. 这说明对象在交互开始之前就已经存在了. 如果对象是在交互过程中创建的, 那么就应该将对象放到中间部分. 如果要撤销一个对象, 在其生命线终止点处放置 “ X” 符号.
评论