数据库查询:
数据库查询对并发处理和事务处理都有很大影响;
查询性能越好,随并发量上升导致的性能下降的影响越小;
查询性能越好,受其他事务排他锁的影响越小;
总之,要解决超时、死锁等问题,优化查询性能,缩短事务时间(最好不用事务)是最根本办法
(非原创,引用自网络)用两个例子看清楚分布式和集群的区别:
例子1:
如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行改任务需10小时。 采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型) 而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,10小后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务!
例子2:
一堆机器堆在这儿,具备一定的相同的功能属性,就可以叫集群 分布式的话,应该是具备分布式特性的一类系统
集群的作用:负载均衡,错误恢复
集群式资源整合,分布式是计算能力整合
集群=聚合,分布式=组合
减少线程切换:
几乎所有IO操作(包括磁盘和网络)都产生线程切换 Mutex, AutoResetEvent, Sleep等方法会产生线程切换 在应用服务化的时代,网络服务接口常常被当成本地方法使用,当这样的接口被放入循环,递归中时,线程切换的时间消耗往往会超过要执行的逻辑本身+网络传输的开销 如何避免: 所有的IO操作用异步模式(这个比较难) 对会产生IO的接口使用特别小心 封装IO接口,适当引入缓存 设计时提供批量和单个接口,减少IO次数 …… 降低嵌套循环: 用hash表,字典,分组等手段优化嵌套,把多层循环变成多次循环(复杂度由高次方变成一次方) 防暴力破解: MD5(x+MD5(y));y.length>=8