一、分布式概念
1、应用做任务分解,(如电商项目中将应用中的用户模块,订单模块,商品等拆分为独立的应用。)
2、节点通信,(各应用之间需要rpc相互调用或者mq消息通信)
二、分布式与集群概念
1、分布式:一个应用或者业务拆分成多个子系统子模块,都部署在不同的服务器上
2、集群:同一个业务(同一套代码)部署在多个服务器上
三、需要解决的问题
1、访问量(tps,qps)
2、数据量(需要存储和分析的数据量)
四、分布式的演进过程和需要解决的问题
(一)
(二)应用服务器与数据库服务器分离
(三)应用服务器做集群
需要解决的问题:
1、session跨域共享问题?
1)、session sticky
一致性hash 将同一IP的请求都落到同一服务器上,已解决分布式缓存的问题。缺点就是负载不均衡
2)、session replication
当在服务器较少的使用可以使用copy的方式,当服务器的session发生变化的时候同步到集群的其他服务器中。
缺点就是当量比较大的时候,服务器之前同步session 的io消耗大。
3)、session 集中存储
常用的方案有,将session从tomcat服务器级进行缓存到redis、memcache等集群中,大家都从同一个地方拿,就不会有问题
4)、存储在客户端(现在是主流)
2、如何做请求转发?
1)、cdn
2)、前端负载均衡
(四)高性能数据库
需要解决的问题:
1、数据库的读写分离操作
2、数据同步问题
3、数据库路由(mycat)
(四)查询瓶颈,需要引入搜索引擎
需要解决的问题:
搜索引擎的数据同步问题,是增量同步还是定时任务同步。
(六)访问量持续增高的时候,需要引入缓存机制(缓存、限流。降级)
缓存包括服务器端的缓存(集中式缓存和服务缓存),cdn的缓存等
(七)数据库的水平和垂直拆分
(八)分布式架构(微服务架构)
。。。