当一个系统由上百人使用到百万级别的访问时,单机系统就满足不了用户的要求了,这时业界的普遍做法是使用分布式来构建系统,做到高吞吐、高并发、低延迟和负载均衡,从而满足用户的需求。
解决方案一:分层模型(路由、代理)
1.做法:随机分发请求给不同服务器,缺点:session共享、数据库需要独立运行;
2.做法:三层模型:接入、逻辑、数据层;缺点:数据库的压力大,需要大量的proxy、router进行转发;
3.做法:引入消息队列;
解决方案二:多线程和异步
1.多线程,可以提高系统的并发度,但是共享变量的互斥访问,需要上锁,会出现死锁、线程切换开销过多;
2.异步,但是需要自己处理并发的处理;
解决方案三:缓存技术
1.将热点数据放到缓存中,降低延迟;
问题:缓存数据的一致性,容错性,缓存集群,读写分离、2级缓存、一致性哈希;
解决方案四:存储技术
1.NoSQL,包括MongoDB、Redis等,可以将数据从复杂的关系型数据库中解脱出来;
解决方案五:
1.对异常的机器动态的下线和探测,动态的扩容和缩容
2.日志的收集和处理
解决方案五:zookeeper
1.Zookeeper是一个分布式管理系统,通过对目录的管理,来实现分布式
解决方案六:
1.消息队列:解耦、削峰填谷,用于2个服务之间的通信,保证信息传输的可靠性;
事务系统:
1.涉及到多台机器上的数据的一致性,