本文已参加「新人创作礼」活动,一起开启掘金创作之路
- 架构演变
-
分布式架构的成本
-
分布式事务:几个操作在多台服务器上执行如何保证要么成功要么不成功
-
不允许服务有状态:处理一次请求的数据要么从数据库取要么从请求中拿,不允许服务器本身存储任何信息
-
服务依赖关系复杂
-
部署运维成本
-
分布式会话,如何保证session一致性
-
分布式job,定时任务在哪一台机器上执行
-
远程调用技术
-
RMI java远程方法调用 简单容易使用 不支持跨语言
-
webService 跨语言sdk支持 实现较重 发布繁琐
-
http 简单轻量跨语言 不支持sdk
-
hession 简单轻量sdk支持 不支持跨语言
- 问题
- 负载均衡 多台机器应该调用哪一个
- 服务发现 发现新的服务地址如何自动处理
- 健康检测 服务宕机或恢复后怎么办
- 容错 调用其中一台出错怎么办重试机制
- 分布式架构的三种解决方案
- 基于反向代理的集中式分布式架构 - 在server1与baseServer1中通过nginx做负载均衡 - 优点 简单快速 - 问题 Nginx中心负载 http传输 json序列化 开发效率 运维效率
- 嵌入应用内部的去中心化架构 - 独立的注册中心 服务启动自动注册到注册中心并定期报心跳 客户端代理发现服务并负载均衡 - 优点 去中心化,客户直连服务端 动态注册并发现服务 高效稳定网络传输,可容错
- 独立代理进程架构 - 独立的注册中心 代理作为独立的进程部署在一个主机上 实现负载均衡和服务发现