《分布式java应用》读书笔记--第六章

林昊 电子工业出版社

第六章 构建高可用的系统

这一章作者提供了解决系统构建各个问题可以用到的知识,但作者没有把具体的解决方案提出来,都是点到为止。

1.避免系统中出现单点    如何均衡的访问到提供业务功能的机器

    如何保证机器出现问题时,用户不会访问到这台机器

2.负载均衡的方式    随机选择,这种方法实现很简单,性能高。

    HASH选择

    典型的应用场景是静态图片的加载。对请求的url串做hash,这样保证每次请求的是用一台机器,命中缓存,提升性能。要读取网络协议的第七层信息,要做hash,会消耗一定的cpu。

    地址选择(Round-Robin)

    比随机多了一个同步操作,实际使用较多

    权重

    实际负载量

    按连接数

     1.这种方法避免重启一台机器,增加了连接数对可用地址列表做排序的负担。
     2.按cookie信息绑定访问机器的方式。

3.响应返回方式

    1.通过负载均衡机器返回。
        这种方法通过NAT实现。
    2.直接返回请求方

4.数据库

    1.可以分开部署读写操作
    2.Gossip是一个去中心化传播时间的模型,这就是1传2,2传4,类似的功能,可以很快完成数据同步
    3.Facebook开源的Cassandra 是一个居于Gossip实现的无中心的Nosql,去掉中心点后性能提升很快
    4.还有机房的一些事情,这段时间不关注

5.提高自身可用性

    1.互联网是一个无限放大故障的地方,任何很小,绝对不可能发生的问题,都可能会在互联网上发生,导致故障。
    2.一方面深入理解所使用的java类库和框架,帮助你清楚了解程序运行状况
    3.另一方面是经验,自身学习和经历,学习获得时一定要了解产生原因。否则很难成为自己的经验。
    4.明确使用场景
        设计很多不必要的功能,没必要的系统扩展,系统功能,将系统复杂化,这些都容易出故障,因此,保持系统的简单,对复杂的系统功能,应分解多个阶段来完成,保持每个阶段的简单。

6.设计容错的系统

    1.FailFast原则
        当主流程的任何一部出现问题,应快速结束整个流程,而表示等后续来处理。通常对传入参数判断是否符合要求,不符合直接抛错
    2.强制使用明确对象,(可以去了解Effective java 提到的设计原则,第1,3,15条)

7.设计具有自我保护的系统

    1.最佳设计方法是对所有的第三方依赖的地方持怀疑态度,这些地方要有保护措施
    2.超数量用户连接数据库,直接抛异常,不等待
    3.限制使用资源(文件,线程,网路,内存)

8.日志,及时处理故障。

    1.功能降级,全局资源调整,降低资源使用。

9.访问量不断上涨应对策略。

    1.像ebay,拆分数据库按业务,对数据大的按规则拆分,分离读写操作。

猜你喜欢

转载自wdhdmx.iteye.com/blog/1144574