课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了分布式架构的一些基础知识等内容,而今天我们就再来聊聊分布式架构的演进发展变化趋势都经过了哪些阶段。
1、单应用架构
2、应用服务器和数据服务器分离
单机负载越来越来,所以要将应用服务器和数据库服务器分离
3、应用服务器做集群
每个系统的处理能力是有限的,为了提高并发访问量,需要对应用服务器做集群
这时会涉及到两个问题:
负载均衡
session共享
负载均衡就是将请求均衡地分配到多个系统上,常见的技术有如下几种
DNS
DNS是简单也是常见的负载均衡方式,一般用来实现地理级别的均衡。例如,北方的用户访问北京的机房,南方的用户访问广州的机房。一般不会使用DNS来做机器级别的负载均衡,因为太耗费IP资源了。例如,百度搜索可能要10000台以上的机器,不可能将这么多机器全部配置公网IP,然后用DNS来做负载均衡。
Nginx&LVS&F5
DNS是用于实现地理级别的负载均衡,而Nginx&LVS&F5用于同一地点内机器级别的负载均衡。其中Nginx是软件的7层负载均衡,LVS是内核的4层负载均衡,F5是硬件做4层负载均衡,性能从低到高位Nginx<LVS<F5
4、数据库读写分离
搭建数据库主从集群,实现数据库读写分离,改善数据库负载压力
数据库读写分离的基本实现如下:
数据库服务器搭建主从集群,一主一从,一主多从都可以
数据库主机负责读写操作,从机只负责读操作
数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据
业务服务器将写操作分给数据库主机,将读操作分给数据库从机
实现方式
读写分离需要将读/写操作区分开来,然后访问不同的数据库服务器;分库分表需要根据不同的数据访问不同的数据库服务器,两者本质上都是一种分配机制,即将不同的SQL语句发送到不同的数据库服务器。
读写分离,包括后面要提到的分库分表的实现方式有两种:
程序代码封装
中间件封装
程序代码封装指在代码中抽象一个数据访问层来实现读写分离,分库分表
中间件封装指的是独立一套系统出来,实现读写分离和分库分表操作,如我们熟悉的MySQLRouter和Mycat等
5、引入搜索引擎来查询
传统的关系型数据库通过索引来达到快速查询的目的,但是在全文搜索的业务场景下,索引也无能为力,主要体现在如下几点:
全文搜索的条件可以随意排列组合,如果通过索引来满足,则索引的数量会非常多
全文搜索的模糊匹配方式,索引无法满足,只能用like查询,而like查询是整表扫描,效率非常低
目前主要有Elasticsearch与Solr。Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。
6、增加缓存
为了应对流量持续增加,必须增加缓存
常见的方式有如下几种:
Redis与Memcached
以我们常见的Mybatis为例,很容易和Redis与Memcached整合起来,缓存已经查询过的SQL,因为Mybatis知道自己不擅长缓存,所以提供了接口让这些缓存工具进行整合
CDN
CDN是为了解决用户网络访问时的“后一公里”效应,本质上是一种“以空间换空间”的加速策略,即将内容缓存在离用户近的地方,用户访问的是缓存的内容,而不是站点实时的内容。
7、分库分表
读写分离分散了数据库读写操作的压力,但没有分散存储压力,当数据量达到千万甚至上亿条的时候,单台服务器的存储能力会成为系统的瓶颈。常见的分散存储的方法有分库和分表两大类
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。