为什么使用分布式?
分布式系统的开发维护成本远远高于单体应用,为什么我们还要使用分布式架构?
单体应用 | 分布式 | |
---|---|---|
开发 | 逻辑简单 | 需要考虑分布式带来的问题 |
性能 | 单机性能有限 | 可无限扩容 |
部署 | 全部编译,耗时较长 | 资源隔离,水平扩展 |
分布式系统带来的问题:分布式事务的实现难度要远高于单机事务;分布式架构提供的高可用需要集群达到一定数量,例如zookeeper的高可用需要集群有三台机器才能容忍一台机器异常;分布式架构的并发问题处理方式更为复杂。
常规方法论
高性能 | 高可用 | |
---|---|---|
网络层 | CDN、资源静态化、NIO、内存映射 | 鉴权网关、风控 |
应用层 | 缓存、异步、集群 | 无状态、负载均衡 |
服务层 | 多线程、资源复用、良好的设计结构 | 分级管理、快速失败、服务降级、幂等 |
数据层 | 硬件优化、缓存、读写分离、分库分表 | 冗余备份、失效转移、离线存储 |
系统的设计实际上是成本和收益之间的博弈,硬件的优化效果远大于软件,硬件的价格也会随着性能提升线性增加。