如果服务切换成功,两个服务会同时同步不属于自己的8个桶的数据,这是一次完整的迁移。此时,新服务器会扫描自身存储的数据并删除该数据。它不属于它自己。当然,您也可以在16桶服务同步数据时过滤掉这些数据。该方法适用于Redis、MySQL等所有有状态分片数据服务。
该服务的难点在于请求客户端并不直接请求分片,而只是通过代理服务请求数据服务。只有通过代理服务,调度流量才能动态更新,流量才能平滑无损转发。
最后,如何让您的客户知道请求哪个分片来查找他们的数据?以下是两种常见的方法。
第一种方法是客户端通过算法(例如user hash(uid)%100=bucket ID)找到分片,通过配置中的bucket ID找到对应的分片。
第二种方法是数据服务器接收请求,然后将请求连同数据一起转发到分片。例如,客户端请求分片A,根据数据算法对应的分片配置在分片B上查找数据。然后,分片A 将请求转发给分片B,并将数据返回给客户端。 B处理后(A返回或B返回,取决于客户端跳转或服务器转发)。
一、问题解析
即使有这么多技术来优化我们的架构,我们的服务仍然无法完全承受过多的瞬时流量。
此时,您可以进行服务降级操作、通过队列合并变更、或者进行网关限流等操作。这牺牲了一些实时性能,但实际上很多数字可能并不像我们想象的那么重要。类似于微博之类的统计,如果无法向服务器请求客户端的点赞,数据就会在客户端临时存储一段时间,而用户查看数据时,只能看到短期的历史记录。这是一个数字,而不是实时数字。
100,050个点赞数和100,300个点赞数没有太大区别,而且一旦服务器被释放,结果最终会赶上并变得相同。不过,作为降级解决方案,这也是一个不错的方法,因为它节省了大量的服务器资源。
29.1 可预估用户量的服务:游戏创建房间
根据我多年从初学者到架构师的学习经验,我整理了一份50万字的面试分析文档、简历模板、学习路线图和必读的Java学习书籍。如果您有需要的朋友请发“159”。点击评论部分的“请分享”。
#以上是【Java面试场景题】如何优化系统架构设计,降低流量压力,提高并发性能。相关内容来源网络仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92581.html