网站建设营销模板,网页传奇合击,网站的域名是什么意思,福田区罗湖区盐田区前言#xff1a;如今spring微服务以其灵活开发易于维护已基本占领开发占地#xff0c;项目从一开始并不是这种服务的拆分#xff0c;是一步步演变成现在的架构#xff1b;
项目演化之路#xff1a;
1 单体架构#xff1a;开发和运维都较简单#xff1a;
单体架构如今spring微服务以其灵活开发易于维护已基本占领开发占地项目从一开始并不是这种服务的拆分是一步步演变成现在的架构
项目演化之路
1 单体架构开发和运维都较简单
单体架构一个tomcat作为项目的容器一个sql作为数据存储一个文件服务器所有的代码都在一个包里 运维维护成本很低随着用户量的增加单体架构出现响应慢已经不满足现实业务需要部署多个服务以满足用户量
2 项目集群通过堆叠服务器部署多个应用提高访问并发量 将项目部署到多个Tomcat容器中通过Nginx做负载均衡将请求进行分配通过多个服务来满足用户访问量的需求从最开始我们只有一个mysql 作为数据存储并且提供数据查询随着数据量的增加我们发现即使加了索引和硬件支持mysql因为数据量的问题效率依然很低针对于此可以对mysql 进行读写分离将mysql 拆为两个实例一个实例对外提供增删改另外一个实例对外提供查询两个实例进行数据的同步在业务层面定义路由规则进行读和写不同数据库的访问通过部署多个文件服务器来较少单台服务的压力
随着业务的增多所有的代码业务全都放在一个项目中每次修改就需要进行更新这样耦合程度太高所以需要按照业务进行服务的拆分将一个项目模块拆分成不同的服务 以达到业务的解耦。
3 微服务架构业务进一步细化运维难度也增加
按照业务进行服务的拆分以达到各个服务的解耦通过网关服务统一进行用户鉴权日志记录限流等服务各个服务之间通过feign\dubbo 等中间件完成通信通过中间件完服务发现和配置通过xxljob 完成 任务的调度通过kafkamq等完成消息的投递和消费通过mysql Es redis等进行数据的存储
4 msyql的拆分
后续随着数据量增加即使使用了mysql 的读写分离依然无法满足针对于此就需要进行mysql的拆分
垂直拆分按业务组成不同的数据库实例如订单数据库库存数据库用户数据库水平拆分将表按照某个方面将表进行拆分如按照日期没有查分
在拆分的同时可以将热点数据进行优先缓存以较少数据库的io操作同样可以使用es mongdb 存储非关系型数据在对mysql 进行数据的修改和增加时可以通过消息中间件的形式发送信息进行对es数据的处理