01-Web技术架构演变
1. Web1.0阶段
单宽不足,项目内容少,用户量少。
单体架构 |
---|
2. Web2.0阶段
带宽提速,用户量增加,门户网站活跃,项目考虑安全性和稳定性。
单体架构搭建集群 |
---|
3. 搭建集群后的问题
Nginx
- 解决用户请求平均分发(并发问题)Redis
- 解决数据共享并实现缓存功能(数据共享问题)ElasticSearch
- 解决搜索数据的功能(搜索问题)
插入中间件 |
---|
4. 垂直架构
项目包含用户模块,商品模块,订单模块… 模块 + 集群。
垂直架构图 |
---|
5. 分布式架构
垂直架构 –> 分布式架构。
分布式架构常用方式:
Dubbo
- RPC(通讯方式)SpringCloud
- HTTP(通讯方式)
分布式架构图 |
---|
6. 服务之间异步通讯
为了实现分布式架构中服务之间的异步通讯,需要使用 RabbitMQ 等消息队列中间件。
分布式架构下,实现异步通讯 |
---|
7. 服务之间地址维护
由于服务越来越多,每个服务的访问地址都是一样的:协议://地址:端口号/路径
需要使用以下技术:
Eureka
- 注册中心帮助管理服务信息Robbin
- 可以帮实现服务之间的负载均衡
Eureka 实现通讯地址维护,Robbin 实现服务之间的负载均衡 |
---|
8. 服务降级
Hystrix
提供了线程池隔离的方式,避免服务器线程池耗尽,在一个服务无法使用时,还提供断路器的方式来处理问题服务,从而执行降级方法,返回托底数据。
Eureka,Robbin,Hystrix 都是 SpringCloud 技术栈中的组件。
使用Hystrix帮提供断路器和隔离,并最终服务降级 |
---|
9. 海量数据
解决海量数据高并发的问题,可以基于 MyCat
实现数据库的分库分表。
基于MyCat实现分库分表 |
---|
10. 微服务架构
在单独模块中再次拆分项目的方式称之为微服务架构,微服务架构也是分布式架构。
比如压力最大的商品模块,拆分为 商品模块 + 查询商品模块
微服务架构,在分布式架构的基础上再次拆分 |
---|
11. 模块过多问题
为了解决模块过多,运维成本增加的问题,采用 Docker
容器化技术来帮助管理各个模块的部署,还可以通过CI、CD持续集成,持续交付,持续部署。
Docker容器化技术 |
---|
12. 分布式事务
最传统的操作事务的方式,是通过 Connection 链接对象的方式操作,Spring 也提供了声明式事务的操作。
为了解决事务的问题,使用 RabbitMQ
或者 LCN
等方式来解决。
13. 分布式锁
传统的锁方式,synchronized | Lock锁,在分布式环境下,传统的锁是没有效果的。
为了解决锁的问题,使用 Redis
或者 Zookeeper
来解决。
14. 分布式任务
在传统的定时任务下,由于分布式环境的问题,可能会造成任务重复执行,一个比较大的任务,需要可以拆分。
为了解决任务问题,使用 Redis + Quartz
或者 Elastic-Job
来解决。