可伸缩性最佳实战

异步

同步调用使得组件和组件之间紧密耦合起来,这样就使得要想伸缩应用就需要伸缩所有的组件,这不仅带来使得伸缩的成本增加,而且这种高度耦合性使得伸缩变得更加困难。因此我们需要从应用角度划分出,哪些业务操作是紧密关联的,哪些是可以异步 执行的,划分出那些可以异步 执行的操作,然后将其进行异步 化处理(比如通过JMS,事件队列,多播消息等或者线程池等),这样划分的好处就是系统可以应对更大的访问量,消弱访问峰值,比如在同步的时候A调用了B,那么用户能接受响应时间就是A处理时间+B处理的时间,而采用异步 以后,当访问量增大的时候,因为A和B异步,那么A很快返回,用户体会不到延迟,而B的处理时间由原来的2秒处理完毕,变为3秒处理完毕,而B得处理都是在后台进行的,不会影响到客户响应事件,同时异步 也起到了消弱峰值的作用。

其实在社会生活中也存在很多异步 的场景,比如老板和秘书,假如老板没有秘书,那么势必老板在处理完事情A之前没有办法处理新的事务 ,而有了秘书以后,有什么次要的事情让秘书去办,同时老板可以做其它的重要的事情O(∩_∩)。
因此异步 不仅利用底层框架平台的异步 性,更重要的是如何做到应用本身的异步 性,只有做到了这一点才算是真正的异步

泳道设计
通过泳道(非常形象的比喻)将错误进行隔离,使得不同的错误域的错误不会相互干扰,这样也就不会因为系统某一部分的错误影响到系统的其它的部分。

缓存

在系统多个层使用缓存 ,比如在数据库前面的Model缓存,页面,页面片段缓存 等。至于对象缓存 ,jdon已经讨论太对了呵呵。

监控

我们应该站在真正用户的角度去理解系统的性能,包括从外部网络测试用户体验以及内部系统的各个组件调用的次数以及每次调用的时间等等。

复制
数据库读写库分离,这样不仅可以做到一定的容灾,而且可以通过读写分离来减低写数据库的压力。

切分

没有切分就没有伸缩性 ,因此一个具有良好伸缩性 的系统必须进行切分,而切分可以从两个地方入手,首先应用角度来说,可以将系统在垂直方向上面分层(这是一种系统架构级的粗粒度的切分),同时将系统的每个层按照功能或者资源进行水平的切分(这是一种相对细粒度的应用级的切分)。

其次对于数据的切分,比如将用户信息,交易信息,商品信息等独立存储,数据库的切分主要有读写库分离以及Sharding技术。

尽量少用关系数据库特性

系统使用关系数据库的特性越多,那么伸缩性 就会变得越差,这就要求将应用逻辑从数据库真正的移动到应用中来,数据库仅仅是一种存储的技术手段,而不是应用逻辑运算的地方。

我想这一点大家应该比较清楚,如果将业务逻辑用存储过程实现,那么就会造成非常差的伸缩性 ,但是我想说的是及时不用关系数据库的特性,如果我们不能从应用的角度去设计系统,照样会造成很差的伸缩性 。比如目前普遍采用的SSH,其实说白了这还是一种面向过程的开发,每次业务操作都是从Dao获取数据,然后Service改变一些数据,最终调用Dao保存数据,这种方式还是一种没有伸缩性 的方案。

那么什么样的方式比较具有伸缩性 ,我个人认为通过领域建模和分布式缓存 ,通过对象建模形成业务对新,业务对象以聚合的方式存在缓存 中(当然随着KEY-VALUE的不断流行,我们可以直接将聚合跟存放在KEY-VALUE存储系统中),每次业务操作都是存缓存 中取出业务对象,调用业务对象进行业务操作,操作的过程中,业务对象会触发领域事件,然后最终领域事件监听器调用技术组件完成一些附加操作,采用这种方式,我们还可以采用异步 的领域事件,这就使得系统的并发通过JAVA本身的内存锁机制实现,而不是靠原来的数据库的事务 隔离性来保证并发安全性。

压力和性能测试

在系统发布前进行压力和性能测试,尽管不会发现所有隐藏的问题,但是它也是非常值得的。

容量规划以及伸缩性 探讨会

我们要清楚的认识到当前系统能支持的负载,以及系统中可能存在的性能和伸缩性 的瓶颈在哪里,在解决了某一个伸缩性 的瓶颈以后,我们就需要关注下一个随着系统不断增加可能带来伸缩性 瓶颈的问题。

回滚

任何操作都有可能失败,因此我们的系统一定要做好回滚操作,这个回滚操作室广义的回滚,具体可参考“可伸缩性 和可用性反模式”。
根源分析

确保能在发生问题的时候找到问题的根源,做到治标治本。

关注系统质量

应该在系统开始的时候就关注系统质量,而不是在测试阶段出现问题的时候才考虑如何伸缩,那个时候就晚了。

 

原文:http://www.jdon.com/jivejdon/thread/37793#23126151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它具有强大的功能和灵活性,可以帮助开发者更高效地构建和管理复杂的容器化应用。 "Kubernetes 实战"是一本以实践为导向的书籍,为读者提供了全面的指导和示例,帮助他们理解和应用 Kubernetes。这本书的内容涵盖了 Kubernetes 的核心概念、架构和组件,以及如何使用 Kubernetes 部署和管理应用程序。 "Kubernetes 实战"一书深入浅出地讲解了如何在实际项目中使用 Kubernetes 构建可靠和高效的容器化应用。书中介绍了容器化的基础知识,包括 Docker 和容器镜像的使用。它还详细讲解了 Kubernetes 的各种组件,如 Pod、Service、Deployment 等,并提供了实际的示例和操作指南。 这本书还涵盖了 Kubernetes 的高级特性,包括水平自动伸缩、负载均衡和服务发现等。读者可以学习如何优化应用程序的性能和可伸缩性,以及如何实现高可用性和故障恢复。 除了基础知识和实践指南,"Kubernetes 实战"还介绍了DevOps和持续集成/持续部署(CI/CD)的最佳实践。读者可以了解如何使用 Kubernetes 管理来源代码、版本控制和持续集成工具,以及如何自动化构建、测试和部署容器化应用程序。 总而言之,"Kubernetes 实战"是一本帮助读者深入了解和应用 Kubernetes 的实用指南。无论是初学者还是有一定经验的开发者,都可以从这本书中获得宝贵的知识和经验,提升他们在容器化应用开发和管理方面的技能。 ### 回答2: kubernetes 实战 PDF 是一本关于如何在实际场景中运用 kubernetes 技术的电子书。在这本书中,作者结合自己的经验和实践,详细介绍了如何使用 kubernetes 架构来部署、管理和扩展应用程序。 书中首先介绍了 kubernetes 的基本概念和原理,包括集群、节点、Pod、服务等核心概念,帮助读者建立起对 kubernetes 的整体认识。接着,书中详细介绍了如何使用 kubectl 命令行工具来管理 kubernetes 集群,包括如何创建和删除资源、如何扩容和缩容应用程序等操作。 在进一步的章节中,书中介绍了如何使用 kubernetes 集群来部署容器化的应用程序。作者详细解释了如何编写一个应用程序的容器化描述文件(Dockerfile),以及如何使用 kubectl 命令行工具来创建和管理容器。同时,书中介绍了如何使用 kubernetes 的配置管理功能,来动态管理应用程序的配置信息。 此外,书中还涵盖了 kubernetes 的高级特性,包括如何使用 kubernetes 的存储管理功能来管理应用程序的持久化数据、如何使用网络管理功能来配置应用程序之间的通信等。同时,书中还介绍了如何使用 kubernetes 进行应用程序的监控和日志管理,帮助读者更好地了解和分析应用程序的运行状态。 总的来说,kubernetes 实战 PDF 是一本介绍如何使用 kubernetes 技术的实用手册。通过阅读这本书,读者可以深入了解 kubernetes 的核心概念和原理,掌握如何使用 kubernetes 架构来部署、管理和扩展应用程序,提高自己在实际工作中的应用能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值