技术栈
- springCloudAlibaba
- RocketMQ
- xxl-job
项目概述
- 基于微服务架构
- 基于Jmeter对限时抢购的熊压测
- 超卖重复下单的问题
- WebSocket通讯工具
- 支付宝的支付
- 分布式事务
- RocketMQ事务必消息
- Seata
- XA
- AT
- TCC模式
- Jenkins持续集成
- MySQL性能优化
单体、分布式、集群
单体
一个系统业务量很小的时候,所有的代码都放在一个项目中就好了。个项目就部署在一台服务器上就好了,整个项目所有的服务都由这台服务器提供,这就是单体结构。
优劣: 单应用开发简单,部署测试简单,但是存在一些问题。比如说单点问题,单接处理能力有限,当你的业务增长到一定程度的时候,单体的硬件资源将无法满足你的业务需求。
分布式
由于整个系统运行需要使用Tomcat和MySQL,单体服务器所处理的能力有限,2G的内存。需要分配给Tomcat和MySQL用,随着业务越来越复杂,需求越来越多。内存越来越不够用了,所以这个时候我们就需要进行分布式的部署。
我们进行一个评论的年请求,这个请求是需要mini分布式在两个。不同的服务器的组件tomcat和MySQL才能完成。所以叫做分布式系统。
集群
在上面的图解中,其实是存在问题的,比如Tomcat存在单点故障问题,一旦Tomcat所在的服务器宕机不可用了,我们就无法提供服务了,所以针对单点故障问题。我们会使用进群来解决,那么什么是集群模式呢?单机处理到达瓶颈的时候。你就把单机复制几份,这样就构成了一个集群。集群中每个每台服务器就叫做这个崛起的一个节点,所有节点构成了一个集群。一个节点都提供相同的服务,那么这个系统的处理能力就相当于提升了好几倍,有几个节点就相当于提升了多少倍。但问题是用户的请求究竟由哪个决定来处理呢?最后能够让40G负载较小的节点来处理。这样变得每个节点的压力都比较平均。要实现这个功能,就需要在所有节点之前增加一个。调度者的角色,用户的所有请求都先交给他。然后他根据当前所有节点的负载情况决定这个请求交给哪个节点处理这个?调度者有个名字就叫做负载均衡服务器。
系统架构演变
系统架构⼤体经历了下⾯⼏个过程: 单体应⽤架构--->垂直应⽤架构--->分布式架构--->SOA架构--->微服务架构
单体应⽤架构
互联⽹早期,⼀般的⽹站应⽤流量较⼩,只需⼀个应⽤,将所有功能代码都部署在⼀起就可以,这样可以减少开发、部署和维护的成本。⽐如说⼀个电商系统,⾥⾯会包含很多⽤户管理,商品管理,订单管理,物流管理等等很多模块,我们会把它们做成⼀个web项⽬,然后部署到⼀台tomcat服务器上。
优点:
项⽬架构简单,⼩型项⽬的话, 开发成本低
项⽬部署在⼀个节点上, 维护⽅便
缺点: 全部功能集成在⼀个⼯程中,对于⼤型项⽬来讲不易开发和维护 项⽬模块之间紧密耦合,单点容错率低 ⽆法针对不同模块进⾏针对性优化和⽔平扩展