解耦是高可用的基础,解耦就是最大限度的降低数据、操作间的依赖,其实组件化就是一种解耦。
数据解耦
将不是强关联的数据分开存储;
将高频次修改的数据和低频次修改的数据分开存储;
将高访问量的数据和低访问量的数据分开存储;
将记录数据和业务数据分开存储;
将历史数据和应用数据分开存储。
数据是任何业务的基础,所有的操作都是围绕着数据来做的,数据如果在设计时耦合度比较高,那么后续再怎么优化,程序运行效率也提升不起来。
业务流程解耦
这个可以理解为接口最小化。服务端不负责业务流程处理,只负责提供具体的一个功能的接口。
比如说登录操作,登录后要获取用户个人信息、未读消息、好友列表等一系列操作,服务端提供的接口应该是:登录接口、获取用户信息接口、获取离线消息接口、获取好友列表接口等。而不是一个登录接口中将一系列数据返回客户端。
组件解耦
将不是强关联的业务分成不同的组件,比如消息发送和用户登录;
要求做到一种业务组件挂掉后不影响其他业务组件的使用,如:
消息发送失败但是不影响用户正常登录;
语音消息发送失败但不影响其他类型的消息发送。
组件-缓存解耦
缓存不依赖于组件,缓存是独立保存的数据,不依赖组件存在,当组件重启时,缓存数据不会丢失;
组件不依赖于缓存,当缓存数据丢失或出现重大异常时,组件能从数据库拿到数据并尝试修复缓存数据。
组件-数据库解耦
组件不依赖于数据库,当数据库连接不上或出现故障时,组件仍能通过缓存的数据完成业务处理。
数据库解耦
不同业务数据分开保存在不同的数据库;
当某个业务的数据库宕机时,其他业务仍能正常使用。如:
好友关系库挂了,不影响群消息收发;
离线消息库挂了,不影响在线消息收发。