使用分布式系统主要有两方面原因:
1.增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。
2.加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。
思:为什么要用分布式系统,一方面是现在存在秒杀的场景,传统应用太重,很难支持海量的并发;另一方面是高可用的需求,传统的HA成本高而又不能支持多活,微服务的架构能更好地冗余。
分布式同时带来了很多问题:
• 架构设计变得复杂(尤其是其中的分布式事务)。
• 部署单个服务会比较快,但是如果一次部署需要多个服务,流程会变得复杂。
• 系统的吞吐量会变大,但是响应时间会变长。
• 运维复杂度会因为服务变多而变得很复杂。
• 架构复杂导致学习曲线变大。
• 测试和查错的复杂度增大。
• 技术多元化,这会带来维护和运维的复杂度。
• 管理分布式系统中的服务和调度变得困难和复杂。
思:分布式是一把双刃剑,有利有弊,会造成架构、运维的复杂度指数增长,由量变引发质变,传统的运维和管理模式不再可用,需要服务治理、自动化运维甚至容器和K8S来支持。
也就是说,分布式系统架构的难点在于系统设计,以及管理和运维。所以,分布式架构解决了“单点”和“性能容量”的问题,但却新增了一堆问题。而对于这些新增的问题,还会衍生出更多的子问题,这就需要我们不断地用各式各样的技术和手段来解决这些问题。
微服务的出现使得开发速度变得更快,部署快,隔离性高,系统的扩展度也很好,但是在集成测试、运维和服务管理等方面就比较麻烦了。所以,需要一套比较好的微服务 PaaS 平台。就像 Spring Cloud 一样需要提供各种配置服务、服务发现、智能路由、控制总线……还有像 Kubernetes 提供的各式各样的部署和调度方式。
此文章为10月Day8学习笔记,内容来源于极客时间《左耳听风》,强烈推荐该课程
网友评论