当前位置:主页 > 建站知识 > 软件开发 >

Tomcat和数据库的区别

发布时间:2021-03-03 11:24   浏览次数:次   作者:admin
基本概念:
1.什么是分布式的?
系统中的多个模块部署在不同的服务器上,可以称为分布式系统。比如Tomcat和数据库(MySQL,Oracle)部署在不同的服务器上,或者两个功能相同的Tomcat部署在不同的服务器上。
2.什么方法是高度可用的?
当系统中的一些节点发生故障时,其他节点可以代替它继续提供服务,因此系统被认为具有高可用性。
3.什么是集群?
特定领域的软件部署在多台服务器上,作为一个整体提供一类服务,称为集群。
比如Zookeeper中的Master和Slave分别部署在多个服务器上,共同构成一个整体,提供集中的配置服务。
在常见的集群中,客户端可以连接到任意节点获得服务,当集群中的一个节点断开连接时,其他节点可以自动接管它继续提供服务,这表明集群具有高可用性。
4.什么是负载均衡?
当一个请求被发送到系统时,请求以某种方式被均匀地分布到多个节点,这样系统中的每个节点都可以均匀地处理请求负载,那么系统就可以被认为是负载平衡的。
正向代理和反向代理。
当内部系统想要访问外部网络时,请求通过代理服务器转发,这是由外部网络中的代理服务器发起的访问。此时代理服务器实现正向代理;
当外部请求进入系统时,代理服务器将请求转发给系统中的服务器。对于外部请求,只有代理服务器与之交互。此时,代理服务器实现反向代理。
简单来说,正向代理是代理服务器代替内部系统访问外部网络的过程,反向代理是外部访问系统的请求通过代理服务器转发到内部服务器的过程。
纯真年代:单机架构。
以淘宝为例:网站刚开始的时候,应用和用户数量都比较少,所以Tomcat和数据库可以部署在同一个服务器上。当浏览器向www.taobao.com发送请求时,它首先通过DNS服务器(域名系统)将域名转换为实际的IP地址10.102.4.1,然后浏览器改为访问该IP对应的Tomcat。
架构瓶颈:随着用户的增加,Tomcat和数据库争夺资源,单机性能不足以支持业务。
第一个演变:Tomcat是与数据库分开部署的。
Tomcat和database分别垄断服务器资源,显著提高了各自的性能。
架构瓶颈:随着用户的增加,并发读写数据库成为瓶颈。
第二次演进:引入本地缓存和分布式缓存。
在Tomcat的同一个服务器或JVM上添加本地缓存,在外部添加分布式缓存,缓存热门产品的信息或热门产品的html页面。通过缓存可以在读写数据库之前截获大部分请求,大大降低了数据库的压力。
涉及的技术包括:使用memcached作为本地缓存,Redis作为分布式缓存,但也存在缓存一致性、缓存穿透/崩溃、缓存雪崩、热数据集失效等问题。
架构瓶颈:缓存拒绝大多数访问请求。随着用户的增加,并发压力主要落在单机Tomcat上,响应逐渐变慢。
第三次演进:引入反向代理实现负载均衡。
Tomcat部署在多台服务器上,使用反向代理软件(Nginx)将请求平均分配给每台Tomcat。假设Tomcat最多支持100个并发,Nginx最多支持50000个并发,理论上Nginx可以通过向500个Tomcat分发请求来抵抗50000个并发。
涉及的技术有:Nginx和HAProxy,都是工作在网络第七层的反向代理软件,主要支持http协议,也涉及到会话共享和文件上传下载的问题。
架构瓶颈:反向代理大大增加了应用服务器支持的并发性,但并发性的增加也意味着更多的请求穿透数据库,单机数据库最终成为瓶颈。
第四次演变:数据库读写分离。
数据库分为阅读库和写作库。可以有多个阅读库。写库中的数据可以通过同步机制同步到读库中。对于需要查询最新写入数据的场景,可以在缓存中再写入一个副本,通过缓存获取最新数据。
涉及的技术包括:Mycat这种数据库中间件,可以组织数据库和子数据库的分离、读写,客户端可以通过它访问底层数据库,这也涉及到数据同步和数据一致性的问题。
架构瓶颈:服务越来越多,不同服务之间的访问量差距很大。不同的服务直接竞争数据库并影响彼此的性能。
第五个演变:数据库按业务划分。
将不同服务的数据保存在不同的数据库中,以减少服务之间的资源竞争。可以部署更多的服务器来支持访问量大的服务。同时,跨业务表不能直接做相关性分析,需要通过其他方式解决。但这不是本文的重点,有兴趣的可以自行寻找解决方案。
架构瓶颈:随着用户数量的增加,单机编写库会逐渐达到性能瓶颈。
第六个进化:把大桌子拆分成小桌子。
比如评论数据可以根据商品ID进行哈希,路由到对应的表中存储;对于支付记录,可以按小时创建表,每小时可以将表拆分成小表,使用用户ID或记录号进行数据路由。只要实时操作的表数据量足够小,并且请求可以均匀地分布到多台服务器上的小表中,数据库就可以通过水平扩展来提高性能。前面提到的Mycat也支持将大表拆分成小表时的访问控制。
这种方式大大增加了数据库操作和维护的难度,对DBA的要求也更高。当数据库被设计成这种结构的时候,已经可以称之为分布式数据库了,但整体上只是一个逻辑数据库。数据库中不同的组件是通过不同的组件实现的,比如子数据库和子表的管理,请求的分发,这些都是通过Mycat实现的。SQL分析由一个独立的数据库实现,读写分离可能由网关和消息队列实现,查询结果可能由数据库接口层汇总。这个架构其实就是MPP(大规模并行处理)架构。
目前开源和商用的MPP数据库都有很多,其中开源的有Greenplum、TiDB、PostgresqlXC和HAWQ,NTU的GBase,樊蕊科技的雪球DB,华为的LibrA等。不同的MPP数据库有不同的侧重点,比如TiDB更关注分布式OLTP场景。Greenplum更关注分布式OLAP场景。这些MPP数据库基本上提供了像Postgresql、Oracle、MySQL这样的SQL标准支持能力。他们可以将查询解析成分布式执行计划,并将其分发给每台机器进行并行执行。最后,数据库本身汇总数据并返回。它们还提供权限管理、数据库和表分离、事务和数据拷贝等功能。大部分都可以支持100个以上节点的集群,大大降低了数据库运行维护的成本。推荐:大厂使用的子数据库、子表的方案都在这里!
架构瓶颈:数据库和Tomcat都可以横向扩展,支持的并发性大大提高。随着用户数量的增加,单机Nginx最终会成为瓶颈。
第七次演变:使用LVS或F5来平衡多个Nginx负载。
因为瓶颈在Nginx,不可能通过两层Nginx来平衡多个Nginx的负载。图中的LVS和F5是工作在网络第四层的负载均衡解决方案,其中LVS是运行在操作系统内核状态的软件,可以转发TCP请求或更高级别的网络协议,所以支持的协议更丰富,性能比Nginx高很多。可以假设单个LVS可以支持数十万个并发请求转发;F5是一种负载均衡硬件,类似于LVS,性能比LVS高,但是价格昂贵。由于LVS是单机软件,如果LVS所在的服务器宕机,整个后端系统都无法访问,所以需要有一个备用节点。虚拟IP可以通过keepalived软件模拟,然后绑定到多个LVS服务器。当浏览器访问虚拟IP时,它将被路由器重定向到真实的LVS服务器。当主LVS服务器关闭时。.......