分布式系统基础设施

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lt623265189/article/details/82709626

        一个大型、稳健、成熟的分布式系统的背后,往往会涉及众多的支撑系统,我们将这些支撑系统称为分布式 系统的基础设施。包括分布式协作及配置管理系统ZooKeeper、分布式缓存系统、持久化存储、分布式消息系统、搜索引擎、以及CDN系统、负载均衡系统、运维自动化系统等,还有实时计算系统、离线计算系统、分布式文件系统、日志收集系统、监控系统、数据仓库等。

一、分布式缓存

1.memcache

        memcache是一款开源的高性能的分布式内存对象缓存系统,用于在应用中减少对数据库的访问,提高应用的访问速度,并降低数据库的负载。memcache使用key-value形式存储和访问数据,在内存中维护了一张巨大的HashTable,使得对数据的查询的时间复杂度降低到了O(1),保证了对数据的高性能访问。内存总是有限的,当内存中没有更多的空间来存储新的数据时,memcache就会使用LRU算法,将最近不常访问的数据淘汰掉,以腾出空间来存放新的数据。通过对象的序列化机制,转为二进制数据存储到缓存服务器中,前端需要时通过二进制反序列化,将数据还原为原有的对象。

2.分布式缓存session

       memcached-session-manager是一个开源的高可用的Tomcat session解决方案,它支持Sticky模式和Non-Sticky模式。

3.持久化存储

       应对高并发访问并且存储海量数据的场景来说,出于性能的考虑,不得不放弃很多传统关系型数据的功能,如关联查询、事务、数据一致性;并且由于对数据存储进行拆分,如分库分表,以及进行反范式设计,以提高系统的查询性能,使得我们放弃了关系型数据库大部分原本强大的功能,牺牲了系统的易用性,并且使得系统的设计和管理变得更为复杂。

       过去几年流行的新的存储解决方案:NoSQL、HBase和Redis。与传统的关系型数据库相比,HBase有更好的伸缩能力,并发写入性能十分出色。但HBase本身所支持的查询维度有限,难以支持复杂的条件查询,如group by、order by、join等 。对于Redis来说,它拥有更好的读写吞吐能力,能够支撑更高的并发数,而相较于其他的key-value类型的数据库,Redis能够提供更为丰富的数据类型支持,能更灵活地满足业务需求。

4.JMS

     JMS消息类型包括简单稳步、可序列化的对象、键值对、字节流、流,以及无有效负载的消息等。

     JMS支持两种消息发送和接收模型。一种P2P,另一种Pub/Sub,即发布/订阅。

     ActiveMQ是Apache所提供的一个开源的消息系统。

     ActiveMQ集群,目前ActiveMQ所提供的高可用方案主要是基于Master-Slave模式实现的冷备方案,较为常用的包括基于文件系统的Master-Slave架构和基于共享数据库的Master-Slave架构。

5.垂直化搜索引擎

     在分布式系统中,垂直化搜索引擎是一个非常重要的角色,它既能满足用户对于全文检索、模糊匹配的需求,解决数据库like查询效率低下的问题,又能解决分布式环境下,由于采用分库分表或者使用NoSQL数据库,导致无法进行多表关联或者进行复杂查询的问题。

5.1 Lucene

搜索引擎重要概念:倒排索引、分词、停止词、排序。

Lucene概念:文档、域、词、查询、分词器。

Lucene使用,构建索引,索引更新与删除,条件查询,结果排序,高亮,中文分词,索引优化,分布式扩展。

5.2 Solr

      Solr是一个机遇Lucene、功能强大的搜索引擎工具,它对Lucene进行了扩展,提供一系列功能强大的HTTP操作接口,支持通过Data Schema来定义字段、类型和设置文本分析,使得用户可以通过HTTP POST请求,向服务器提交Document,生成索引,以及进行索引的更新和删除操作。对于复杂的查询条件,Solr提供了一整套表达式查询语言,能够更方便地实现包括字段匹配、模糊查询、分组统计等功能;同时Solr还提供了强大的可配置能力,以及功能完善的后台管理系统。

猜你喜欢

转载自blog.csdn.net/lt623265189/article/details/82709626