什么是异地多活?
为了保证系统能够对机房级别的故障进行容错,不会使系统不可用,这就需要在机房级别对系统进行冗余处理。而这就需要在架构上进行良好的设计。来面对多机房场景下的技术挑战。事实上,异地多活最大的挑战在于机房之间的物理距离更远,数据传输的延迟已经不能忽略。在网络普遍延迟的情况下,如何根据业务特性设计高可用的性能达标的分布式系统,将是最大的挑战。
需要面对怎样的技术挑战?
请求如何路由,如何实现会话保持?
在跨机房部署项目时,第一个面对的问题就是在多个机房之间,请求如何选择一个机房分发,并且当相同用户的第二次请求又如何再次访问相同的会话?
2. 数据存储服务如何同步?
业务方依赖数据存储服务,列如数据库与缓存。在A机房更新的数据,如果其他业务需要,那么在B机房也应该能访问的到。
3. 是否可以跨机房服务调用?延迟提高,占据更多的网络带宽怎么办?
对于多机房部署,应该尽量避免跨机房调用。多机房部署最大的问题应该就是网络延迟,不能忽略的网络延迟。跨地区的异地多活更是如此,一般不低于10ms的延迟。
当某个机房不可用时,需将该机房的流量切入另一个机房,那么每个机房要预留多少存储与计算资源?异地多活是一个分布式系统的高可用解决方案,他的引入就是当发生机房级别故障时不会发生整个系统的瘫痪不可用。允许将不可用的机房流量,切换到其他的可用机房。
4. 一些devops组件如何支持跨机房部署环境?
监控系统,部署系统等如何汇总所有机房的数据,还是将其区分开?
5. 对于强一致性业务如何保证?
列如,交易订单,库余额等业务来说,要求一定的数据实时一致性,当用户在A机房下单,A机房不可用。用户被转入B机房继续业务流程,这是用户订单数据没有同步。系统判断在下一单,用户重新扣款,支付了两次,这时A机房恢复,数据同步会造成数据冲突?这又如何解决呢&#x