上篇文章:分布式系统漫谈【壹】_发展历程
上文中我们简单描绘了一个系统从单体应用向分布式集群应用转变的过程,通过转变可以让系统拥有更强大的并发访问支持,但是同时使用分布式部署也会带来一些单体不存在的问题,本文就这些问题整理讨论一下。
负载层
不同运营商网络
系统的访问用户可能来自不同的运营商网络,那么如何保证来自不同网络的请求响应速度?
稳定的负载均衡
当海量的并发请求过来时,如何保证负载均衡可以稳定地工作并转发请求?
服务层
远程调用
因为系统被拆分成了多个子系统分离部署,这样之前在同一个系统内的调用就被改成系统间的远程调用。而远程调用势必要通过网络,在分布式系统中最重要的一个原则就是网络是不可信的。
服务治理
当集群中的节点无法提供服务时,如何快速识别出并做下线处理?当系统中某个服务请求量过高即将到达瓶颈的时候,该如何保证服务的相应?
分布式session
当一个集群对外提供服务的时候,用户的每次访问不一定路由到集群中哪个节点上,这样如何保证用户的session不失效?
数据层
分布式事务一致性
如前文所说,当系统数据量级达到一定程度之后,就要考虑数据分库分表的设计了。这样会带来一个问题,因为我们知道数据库事务在以数据库实例为维度的,当我们操作多个数据库实例的数据的时候,就相当于是多个数据库事务的操作,那么保证多个事务的一致性就是可以需要去解决的问题。
多机sequenceID
当系统是单数据库实例的时候,获取唯一主键就很简单,如从orable序列中获取即可。那么当我们的数据表横向拆分为多表的时候,主键如何保证唯一性就是一个问题。
其他要素
分布式缓存
随着业务量不断攀升,需要缓存的热点数据不断增多,那么如何保证海量的缓存数据稳定?
分布式日志
在分布式系统下,用户完成一次调用的日志将散列在多台机器上,那么日志如何追踪?
以上只是我目前整理出的分布式系统中常见的问题,应该是不完整的,后面有新的内容会再进行补充。
后面的文章将一一针对上面提出的问题进行探讨和解答。